1、struct book /*图书信息*/int num; /*书号*/char name10; /*书名*/char where10; /*所在书库 */char author15; /*作者*/char pub20; /*出版社*/int count; /*数量*/struct book *next;/*输出模块 */void print(struct book *p0)struct book *p;p=p0-next;printf(“nntt图书信息表“);printf(“nn 图书编号 -图书名称-所在书库-作者-出版社-数量n“);while(p!=NULL)printf(PT);p=
2、p-next;getch();/*输入模块 */struct book *creat() struct book *head,*p1,*p2;int i=0;head=p2=(struct book *)malloc(N);head-next=NULL;printf(“nntt 录入图书信息“);printf(“nt-“);while(1) p1=(struct book *)malloc(N);printf(“n 请输入图书编号 (书号为 0 结束): “);scanf(“%d“,if(p1-num!=0)printf(“nn 书名 所在书库 作者 出版社 图书数量n“);scanf(“%s
3、%s%s%s%d“,p1-name,p1-where,p1-author,p1-pub,p2-next=p1;p2=p1;i+;else break;p2-next=NULL;free(p1);printf(“ntt-“);printf(“ntt %d 种书录入完毕“,i);getch();return head;/*查找模块 */void find(struct book *p0)char name10;int flag=1;struct book *p;p=p0-next;printf(“请输入要查找的书名: n“);scanf(“%s“,name);for(p=p0;p;p=p-next
4、)if(strcmp(p-name,name)=0) printf(“nn 图书编号 -图书名称-所在书库-作者-出版社-数量n“);printf(PT);flag=0;break;if(flag) printf(“n 暂无此图书信息 n“);getch();/*删除模块 */void del(struct book *p0)char name10;int flag=1;struct book *p;p=p0;printf(“请输入要删除的书名: n“);scanf(“%s“,name);while(p!=NULL)if(strcmp(p-name,name)=0)p0-next=p-next
5、; /*后续节点连接到前驱节点之后*/free(p);printf(“t 该书资料已删除.“);flag=0;break;p0=p;p=p-next;if(flag) printf(“nt 无此图书信息。 “);getch();/*增加模块 */void insert(struct book *p0)struct book *p;p=(struct book *)malloc(N);while(1)printf(“n 请输入要增加的图书编号 (书号为 0 退出): “);scanf(“%d“,if(p-num!=0)if(p0-next!=NULLfree(p);printf(“t 该书已存在
6、 “);else printf(“nn 书名 所在书库 作者 出版社 图书数量n“);scanf(“%s%s%s%s%d“,p-name,p-where,p-author,p-pub,p-next=p0-next;p0-next=p;printf(“t 已成功插入 .“);else break;getch();/*修改模块 */void modify(struct book *p0)char name10;int flag=1;int choice;struct book *p;p=p0-next;printf(“请输入要修改的书名: n“);scanf(“%s“,name);while(p!
7、=NULLprintf(“nt 1.修改图书编号 n“);printf(“nt 2.修改图书所在书库 n“);printf(“nt 3.修改图书作者 n“);printf(“nt 4.修改图书出版社 n“);printf(“nt 5.修改图书库存量 n“);scanf(“%d“,switch(choice)case 1: printf(“n 请输入新的图书编号:“);scanf(“%d“,p-num); break;case 2: printf(“n 请输入新的图书书库:“);scanf(“%s“,p-where); break;case 3: printf(“n 请输入新的图书作者:“);s
8、canf(“%s“,p-author); break;case 4: printf(“n 请输入新的图书出版社 :“);scanf(“%s“,p-pub); break;case 5: printf(“n 请输入新的图书库存量 :“);scanf(“%d“,p-count); break;printf(“nt 该项已成功修改。 nt 新的图书信息:“);printf(“nn 图书编号 -图书名称-所在书库-作者-出版社-数量n“);printf(PT);flag=0; p0=p;p=p0-next;if(flag) printf(“nt 暂无此图书信息。 “);getch();/*读文件 */
9、struct book *read_file() int i=0;struct book *p,*p1,*head=NULL;FILE *fp;if(fp=fopen(“library.txt“,“rb“)=NULL)printf(“nnnnn t*库文件不存在,请创建!*“);getch();return NULL;head=(struct book *)malloc(N);p1=head;head-next=NULL;printf(“n 已有图书信息: “);printf(“nn 图书编号 -图书名称-所在书库-作者-出版社-数量n“);while(!feof(fp)p=(struct b
10、ook *)malloc(N); /*开辟空间以存放的取得信息*/while(fscanf(fp,“%d%s%s%s%s%d“,i+;p1-next=p;p1=p;p1-next=NULL;fclose(fp);printf(“n 共种%d 图书信息“,i);printf(“nnn 文件中的信息以正确读出。按任意键进入主菜单。“);getch();return (head); /*保存文件 */void save(struct book *head) FILE *fp;struct book *p;fp=fopen(“library.txt“,“wb“); /*以只写方式打开二进制文件*/if
11、(fp=NULL) /*打开文件失败 */printf(“n=打开文件失败!n“);getch();return ;elsefor(p=head-next;p!=NULL;p=p-next)fprintf(fp,“%d %s %s %s %s %dn“,p-num,p-name,p-where,p-author,p-pub,p-count);fclose(fp);printf(“nt 保存文件成功!n“);void main()struct book *head=NULL;int choice=1;head=read_file();if(head=NULL)printf(“ntt*“);get
12、ch();head=creat();dosystem(“cls“);printf(“tt-Welcome-n“);printf(“nnt 欢迎您,图书管理员.n“);printf(“nnnnn“);printf(“nt 请选择:“);printf(“nt 1.查询图书信息 n“);printf(“nt 2.修改图书信息 n“);printf(“nt 3.增加图书信息 n“);printf(“nt 4.删除图书信息 n“);printf(“nt 5.显示所有图书信息 n“);printf(“nt 0.退出系统n“);scanf(“%d“,switch(choice)case 1: find(head); break;case 2: modify(head); break;case 3: insert(head); break;case 4: del(head); break;case 5: print(head); break;case 0: system(“cls“);printf(“nnnnnt谢谢使用,再见!nn“);break;while(choice!=0);save(head);