图书管理系统
#include <iostream>
#include<string.h>
#include<stdio.h>
//有头结点的表
using namespace std;
typedef struct{char name[30];char author[30];float price;}book;
typedef struct LNode{book data;LNode *next;}LNode,*LinkList;
//初始化,插入,单个,遍历,查找,删除,修改,退出
//初始化
void Init_Link(LinkList &L){L=new LNode;
if(!L){printf("分配空间失败。\n");return;}
L->next=NULL;
printf("已成功初始化。\n");}
//插入
void Insert_Link(LinkList &L){LinkList p;p=new LNode;
if(!p){printf("分配空间失败。\n");return;}
printf("请输入需要插入的书籍(书名-作者-价格,用空格隔开):\n");
cin>>p->data.name>>p->data.author>>p->data.price;
p->next=L->next;L->next=p;printf("插入结束。\n");
}
//单个
void Show_One(LinkList p){
printf("书名:%s\t作者:%s\t价格:%f\n",p->data.name,p->data.author,p->data.price);}
//遍历
void Show_Link(LinkList L){
LinkList p;p=L->next;
while(p){
printf("书名:%s\t作者:%s\t价格:%f\n",p->data.name,p->data.author,p->data.price);
p=p->next;}}
//查找
LinkList Find_Link(LinkList L){
int i=9;char n[30]="0";LinkList p=L->next,q;
while(i){
if(L->next==NULL){printf("没有可查找的书籍。\n");return NULL;}
printf("请输入查找操作(序号数字1-3):\n1.书名\t2.作者\t3.退出查找\n");
cin>>i;
if(i==1){
cout<<"输入书名:";cin>>n;
if(!strcmp(L->next->data.name,n)){Show_One(L->next);return L;}
while(1){if(p->next==NULL){printf("ERROR!请重新输入。\n");break;}
else if(!strcmp(p->next->data.name,n)){Show_One(p->next);return p;}
else if(p!=L)p=p->next;
}}
else if(i==2){
cout<<"输入作者:";cin>>n;
if(!strcmp(L->next->data.author,n)){Show_One(L->next);return L;}
while(1){if(p->next==NULL){printf("ERROR!请重新输入。\n");break;}
else if(!strcmp(p->next->data.author,n)){Show_One(p->next);return p;}
else if(p!=L)p=p->next;
}}
else if(i==3){cout<<"退出查找。查找结束。\n";break;}
}return NULL;}
//删除
void Delete_Link(LinkList &L){int i=9;LinkList p,q;
while(i){
printf("欢迎进入删除系统:\n1.进行查找删除\t2.遍历书籍\t3.退出删除\n");
cin>>i;
if(i==1){
p=Find_Link(L);q=p->next;p->next=q->next;
printf("被删除的书籍:\n");Show_One(q);
delete q;}
else if(i==2)Show_Link(L);
else if(i==3){cout<<"退出删除。删除结束。\n";break;}
else printf("ERROR!请重新输入。\n");}}
//修改
void Modify_Link(LinkList &L){
int i=9,j=9;LinkList p=L;char n[30]="0";float t;
while(i){
printf("欢迎进入修改系统:\n1.进行查找修改\t2.遍历书籍\t3.退出修改\n");
cin>>i;
if(i==1){
p=Find_Link(L)->next;
while(p){
printf("请输入需修改的部位(序号数字1-3):\n1.书名\n2.作者\n3.价格\n4.退出修改\n");
cin>>j;
if(j==1){cin>>n;strcpy(p->data.name,n);}
else if(j==2){cin>>n;strcpy(p->data.author,n);}
else if(j==3){cin>>t;p->data.price=t;}
else if(j==4)break;
else cout<<"ERROR!请重新输入。\n";break;
printf("书籍被修改后:\n");Show_One(p);break;}}
else if(i==2)Show_Link(L);
else if(i==3){cout<<"退出修改。修改结束。\n";break;}}}
//主函数
int main() {
int i=9;LinkList L;
printf("欢迎进入图书馆管理菜单!\n");
printf("以下是可选择的选项:\n");
while(1){
printf("1.初始化(必须)\n");
printf("2.插入书籍\n");
printf("3.查找书籍\n");
printf("4.删除书籍\n");
printf("5.修改书籍\n");
printf("6.展示书籍\n");
printf("7.退出系统\n");
printf("请输入操作(序号数字1-7):\n");
cin>>i;//scanf("%d",&i);
if(i==1){Init_Link(L);continue;
}
else if(i==2){Insert_Link(L);continue;
}
else if(i==3){Find_Link(L);continue;
}
else if(i==4){Delete_Link(L);continue;
}
else if(i==5){Modify_Link(L);continue;
}
else if(i==6){
Show_Link(L);continue;}
else if(i==7)break;
cout<<"ERROR!请重新输入。\n";continue;
}
return 0;
}