图书登记管理系统应该具有下列功能:
(1)、 通过键盘输入某本图书的信息;
(2) 、给定图书编号,显示该本图书的信息;
(3) 、给定作者姓名,显示所有该作者编写的图书信息;
(4) 、给定出版社,显示该出版社的所有图书信息;
(5) 、给定图书编号,删除该本图书的信息;
(6) 、提供一些统计各类信息的功能。
程序完整的实现代码如下:
- #include "stdio.h"
- #include "stdlib.h"
- #include "string.h"
- typedef struct book
- {
- int book_id; //图书编号
- char book_name[20]; //图书名字
- char name[20]; //作者姓名
- char press[20]; //出版社
- struct book *next;
- }book;
- book *head=NULL;
- int length; //链表的长度
- void create()
- {
- book *p1,*p2;
- length=0;
- p1=(book *)malloc(sizeof(book));
- p1->book_id=-1;
- if(head==NULL)
- head=p1;
- printf("请输入图书的编号、名字、作者姓名、出版社信息:\n");
- while(1) //图书编号为0的时候退出
- {
- p2=(book *)malloc(sizeof(book));
- scanf("%d %s %s %s",&p2->book_id,p2->book_name,p2->name,p2->press); //输入图书信息
- if(p2->book_id==0)
- {
- printf("图书信息输入完成!\n");
- break;
- }
- length++; //链表的长度
- p1->next=p2;
- p2->next=NULL;
- p1=p1->next;
- }
- return ;
- }
- void display()
- {
- book *p=head->next;
- printf("链表中所有的图书信息如下:\n");
- while(p!=NULL)
- {
- printf("%d %s %s %s\n",p->book_id,p->book_name,p->name,p->press);
- p=p->next;
- }
- return ;
- }
- void search()
- {
- int num,x,flag1=0,flag2=0;
- char name[20],press[20];
- book *p=head->next;
- printf("1、根据图书编号进行查找\n");
- printf("2、根据作者姓名进行查找\n");
- printf("3、根据出版社进行查找\n");
- printf("请选择功能:");
- scanf("%d",&x);
- if(x==1)
- {
- printf("需要查找的图书编号为:");
- scanf("%d",&num);
- while(p!=NULL)
- {
- if(p->book_id==num)
- {
- printf("图书编号为%d的图书的信息如下:\n",num);
- printf("%d %s %s %s\n",p->book_id,p->book_name,p->name,p->press);
- return;
- }
- p=p->next;
- }
- if(p==NULL)
- printf("无此记录!\n");
- }
- else if(x==2)
- {
- printf("需要查找的作者姓名为:");
- scanf("%s",name);
- while(p!=NULL)
- {
- if(strcmp(p->name,name)==0)
- {
- if(flag1==0)
- printf("作者%s编写的图书信息如下:\n",name);
- flag1=1;
- printf("%d %s %s %s\n",p->book_id,p->book_name,p->name,p->press);
- }
- p=p->next;
- }
- if(flag1==0)
- printf("图书馆没有作者%s编写的图书!\n",name);
- }
- else if(x==3)
- {
- printf("需要查找的出版社为:");
- scanf("%s",press);
- while(p!=NULL)
- {
- if(strcmp(p->press,press)==0)
- {
- if(flag2==0)
- printf("出版社为%s编写的图书信息如下:\n",press);
- flag2=1;
- printf("%d %s %s %s\n",p->book_id,p->book_name,p->name,p->press);
- }
- p=p->next;
- }
- if(flag2==0)
- printf("图书馆没有出版社%s编写的图书!\n",press);
- }
- return ;
- }
- void Delete()
- {
- int num;
- book *p,*q;
- q=head,p=head->next;
- printf("请输入要删除的图书编号:\n");
- scanf("%d",&num);
- while(p!=NULL)
- {
- if(p->book_id==num)
- {
- q->next=p->next;
- free(p);
- length--;
- printf("删除成功!\n");
- return ;
- }
- p=p->next;
- q=q->next;
- }
- if(p==NULL)
- {
- printf("找不到要删除的图书编号!\n");
- return ;
- }
- }
- void menu()
- {
- printf("________________________________________________________________\n");
- printf("| 图书登记管理系统 |\n");
- printf("| 0、 退出系统 |\n");
- printf("| 1、 输入图书信息 |\n");
- printf("| 2、 显示图书信息 |\n");
- printf("| 3、 查询图书信息 |\n");
- printf("| 4、 删除图书信息 |\n");
- printf("________________________________________________________________\n");
- return ;
- }
- int main(void)
- {
- int a;
- menu();
- while(1)
- {
- printf("请选择相应的功能:");
- scanf("%d",&a);
- switch(a)
- {
- case 0:
- return 0;
- case 1:
- create();
- menu();
- break;
- case 2:
- if(head)
- {
- display();
- menu();
- }
- else
- {
- printf("图书信息为空,请先输入图书信息!\n");
- menu();
- }
- break;
- case 3:
- if(head)
- {
- search();
- menu();
- }
- else
- {
- printf("图书信息为空,请先输入图书信息!\n");
- menu();
- }
- break;
- case 4:
- if(head)
- {
- Delete();
- menu();
- }
- else
- {
- printf("图书信息为空,请先输入图书信息!\n");
- menu();
- }
- break;
- default:
- break;
- }
- }
- system("pause");
- return 0;
- }