图书管理系统C++(顺序表,链表)
⼀个简单的C++应⽤,创建最基础的图书管理系统。(本⼈⼀个⼤⼆菜鸟,写的可能不太好。)参考了严蔚敏⽼师版本的数据结构教材。采⽤了顺序表和链表分别编写,下⾯是源码。
顺序表:
#include<iostream>
#include<string>
using namespace std;
#define ok 1
#define error 0
#define maxsize 100
#define overflow -2
typedef struct
{
string ID;
string name;
float price;
}book;
typedef struct
{
book* elem;
int length;
}sqlist;
int initlist(sqlist &l)//顺序表的初始化
{
l.elem =new book[maxsize];//给顺序表分配地址空间
if(!l.elem)exit(overflow);
l.length =0;
return ok;
}
void menu()//菜单函数
{
cout <<"1.输⼊图书信息"<< endl;
cout <<"2.查询图书信息(所有)"<< endl;
cout <<"3.按价格排序"<< endl;
cout <<"4.根据书名查询图书信息"<< endl;
cout <<"5.根据书名删除图书信息"<< endl;
}
int input(sqlist &l)//输⼊图书信息
{
cout <<"请输⼊图书的个数:"<< endl;
int n;
cin >> n;
for(int i = l.length; i < l.length+n; i++)//便于后续输⼊图书信息
{
cout <<"请输⼊第"<<i+1<<"本图书信息"<< endl;
cout <<"书号为:"<< endl;
cin >> l.elem[i].ID;
cout <<"书名为:"<< endl;
cin >> l.elem[i].name;
cout <<"价格为:"<< endl;
cin >> l.elem[i].price;
}
l.length = l.length + n;
return ok;
}
int sort(sqlist& l)//按价格对图书进⾏排序(利⽤冒泡排序)
{
for(int i =0; i < l.length -1; i++)
{
for(int n =0; n < l.length -1- i; n++)
{
{
book tmp;
tmp = l.elem[n];
l.elem[n]= l.elem[n +1];
l.elem[n +1]= tmp;
}
}
}
cout <<"排序后图书信息为:"<< endl;
for(int i =0; i <l.length; i++)
cout << l.elem[i].ID << l.elem[i].name << l.elem[i].price << endl; return ok;
}
void output(sqlist &l)//输出图书信息函数
{
cout <<"图书信息为:"<< endl;
for(int i =0; i <l.length; i++)
cout << l.elem[i].ID << l.elem[i].name << l.elem[i].price << endl; }
int query(sqlist l)//根据图书名查询图书信息
{
cout <<"请输⼊查询的书名:"<< endl;
string name1;
cin >> name1;
for(int i =0; i < l.length; i++)
if(l.elem[i].name == name1)
{
cout << l.elem[i].ID << l.elem[i].name << l.elem[i].price << endl; break;
}
return ok;
}
int delete_l(sqlist &l)//删除⽤户所给的图书信息
{
cout <<"请输⼊删除的书名:"<< endl;
string name2;
cin >> name2;
for(int i =0; i < l.length; i++)//该书后⾯的书的位置均向前移⼀位if(l.elem[i].name == name2)
{
l.elem[i].ID = l.elem[i +1].ID;
l.elem[i].name = l.elem[i +1].name;
l.elem[i].price = l.elem[i +1].price;
}
l.length--;
return ok;
}
int main()
{
sqlist l;
initlist(l);//初始化
int select =0;
while(ok)
{
menu();
cout <<"请输⼊选择"<< endl;
cin >> select;
switch(select)//根据⽤户选择实现功能
{
case1:
input(l);
break;
case2:
output(l);
case3:
sort(l);
break;
case4:
query(l);
break;
case5:
delete_l(l);
break;
}
}
system("pause");
return0;
}
链表:
#include<iostream>
#include<string>
using namespace std;
#define ok 1
#define error 0
typedef struct
{
string ID;
string name;
float price;
}book;
typedef struct lnode
{
book data;
struct lnode* next;
int length;
}lnode,*linklist;
int initlist(linklist& l)//链表的初始化
{
l =new lnode;
l->next =NULL;
l->length =0;
return ok;
}
void menu()//菜单函数
{
cout <<"1.创建图书信息"<< endl;
cout <<"2.输出图书信息"<< endl;
cout <<"3.按价格排序图书"<< endl;
cout <<"4.删除图书信息"<< endl;代码大全书籍
}
int input(linklist &l)//创建图书信息函数
{
linklist p = l;//p指向头结点
cout <<"请输⼊图书个数:"<< endl;
int n;
cin >> n;
for(int i =1; i <= n; i++)
{
linklist s =new lnode;
cout <<"第"<< i <<"本图书的书号为:"<< endl; cin >> s->data.ID;
cout <<"第"<< i <<"本图书的名字为:"<< endl; cin >> s->data.name;
cout <<"第"<< i <<"本图书的价格为:"<< endl; cin >> s->data.price;
s->next =NULL;
while(p->next)//防⽌在输新⼊图书时,旧的书丢失
p = p->next;//p指向尾结点
}
p->next = s;//将s插⼊到尾结点
p = s;//p重新指向尾结点
l->length++;
}
return ok;
}
int output(linklist &l)//输出图书信息函数
{
linklist p = l;
cout <<"图书个数为"<<l->length<<"本"<< endl;
for(int i =1; i <= l->length; i++)
{
cout <<"第"<< i <<"本图书的书号为:"<< p->next->data.ID << endl;
cout <<"第"<< i <<"本图书的名字为:"<< p->next->data.name << endl; cout <<"第"<< i <<"本图书的价格为:"<< p->next->data.price << endl; p = p->next;
}
return ok;
}
int sort(linklist &l)//按价格对图书进⾏排序(利⽤冒泡排序)
{
for(int i =0; i < l->length -1; i++)
{
linklist p = l->next;//每次排序从⾸元结点开始
for(int n =0; n < l->length -1- i; n++)
{
if(p->data.price > p->next->data.price)
{
book tmp;
tmp = p->data;
p->data = p->next->data;
p->next->data = tmp;
p = p->next;
}
}
}
cout <<"排序后图书信息为:"<< endl;
linklist q = l;
for(int i =1; i <= l->length; i++)
{
cout <<"第"<< i <<"本图书的书号为:"<< q->next->data.ID << endl;
cout <<"第"<< i <<"本图书的名字为:"<< q->next->data.name << endl; cout <<"第"<< i <<"本图书的价格为:"<< q->next->data.price << endl; q = q->next;
}
return ok;
}
int delete_l(linklist& l)//根据⽤户指定书名删除函数
{
linklist p = l;
cout <<"请输⼊删除的书名:"<< endl;
string name0;
cin >> name0;
while(p->next->data.name!=name0)//到书的位置
{
p = p->next;
}
linklist q = p->next;
p->next = q->next;
delete q;
l->length--;
return ok;
int main()
{
linklist l;//创建链表
initlist(l);//初始化
int select =0;
while(true)
{
menu();
cout <<"请输⼊选择"<< endl;
cin >> select;
switch(select)
{
case1:
input(l);
break;
case2:
output(l);
break;
case3:
sort(l);
break;
case4:
delete_l(l);
break;
}
}
system("pause");
return ok;
}
代码之路很⾟苦,但请⾄诚⾄艰,博学笃⾏,⼀起加油!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论