#include<stdio.h> #include<string.h> #include<conio.h> #include<stdlib.h> #define N sizeof(struct book) #define PT "%-5d %10s %6s %6s %8s %3d ",p->num,p->name,p->where,p->author,p->pub,p->count struct book /*图书信息*/ { int num; /*书号*/ char name[10]; /*书名*/ char where[10]; /*所在书库*/ char author[15]; /*作者*/ char pub[20]; /*出版社*/ int count; /*数量*/ struct book *next; }; typedef struct book *L; void save(L head); /*输出模块*/ void print(struct book *p0) { struct book *p; p=p0->next; printf(" ^^^^^^^^^^^^^^图书信息表^^^^^^^^^^^^^^"); printf(" 图书编号---图书名称---所在书库----作者----出版社---数量 "); while(p) { printf("%-5d %10s %6s %6s %8s %3d ",p->num,p->name,p->where,p->author,p->pub,p->count); p=p->next; } getch(); } /*输入模块*/ struct book *creat() { struct book *head,*p1,*p2; int i=0; head=p2=(struct book *)malloc(N); head->next=NULL; printf(" 录入图书信息"); printf(" ---------------------------------------"); while(1) { p1=(struct book *)malloc(N); printf(" 请输入图书编号(书号为0结束): "); scanf("%d",&p1->num); if(p1->num!=0) { printf(" 书名 所在书库 作者 出版社 图书数量 "); scanf("%s%s%s%s%d",p1->name,p1->where,p1->author,p1->pub,&p1->count); p2->next=p1; p2=p1; i++; } else break; } p2->next=NULL; free(p1); printf(" ----------------------------------------"); printf(" %d 种书录入完毕",i); getch(); return head; } /*查找模块*/ void find(struct book *p0) { char name[10]; int flag=1; struct book *p; p=p0->next; printf("请输入要查找的书名: "); scanf("%s",name); for(p=p0;p;p=p->next) if(strcmp(p->name,name)==0) { printf(" 图书编号---图书名称---所在书库----作者----出版社---数量 "); printf(PT); flag=0; break; } if(flag) printf(" 暂无此图书信息 "); getch(); } /*删除模块*/ void del(struct book *p0) { char name[10]; int flag=1; struct book *p; p=p0; printf("请输入要删除的书名: "); scanf("%s",name); while(p!=NULL) { if(strcmp(p->name,name)==0) { p0->next=p->next; /*后续节点连接到前驱节点之后*/ free(p); printf(" 该书资料已删除."); flag=0; break; } p0=p; p=p->next; } save(p0); if(flag) printf(" 无此图书信息。"); getch(); } /*增加模块*/ void insert(L head) { int k,flag; L p,pre; if(pre == NULL) pre = head; while(1) { flag = 0; printf(" 请输入要增加的图书编号(书号为0 退出): "); scanf("%d",&k); if(k!=0) { pre = head->next; while(pre) //找到重号 { if(k == pre->num){ printf(" 该书已存在"); system("PAUSE"); flag = 1; break; } pre = pre->next; } if(flag) break; p = new book; printf(" 书名 所在书库 作者 出版社 图书数量 "); p->num = k; scanf("%s%s%s%s%d",p->name,p->where,p->author,p->pub,&p->count); p->next = head->next; head->next = p; printf(" 已成功插入."); } else break; } save(head); } /*修改模块*/ void modify(struct book *p0) { char name[10]; int flag=1; int choice; struct book *p; p=p0->next; printf("请输入要修改的书名: "); scanf("%s",name); while(p!=NULL&&flag==1) { if(strcmp(p->name,name)==0) { printf(" 请选择要修改的项:"); printf(" 1.修改图书编号 "); printf(" 2.修改图书所在书库 "); printf(" 3.修改图书作者 "); printf(" 4.修改图书出版社 "); printf(" 5.修改图书库存量 "); scanf("%d",&choice); switch(choice) { case 1: { printf(" 请输入新的图书编号:"); scanf("%d",&p->num); break; } case 2: { printf(" 请输入新的图书书库:"); scanf("%s",p->where); break; } case 3: { printf(" 请输入新的图书作者:"); scanf("%s",p->author); break; } case 4: { printf(" 请输入新的图书出版社:"); scanf("%s",p->pub); break; } case 5: { printf(" 请输入新的图书库存量:"); scanf("%d",&p->count); break; } } printf(" 该项已成功修改。 新的图书信息:"); printf(" 图书编号---图书名称---所在书库----作者----出版社---数量 "); printf(PT); flag=0; save(p0); } p = p->next; } if(flag) printf(" 暂无此图书信息。"); getch(); } /*读文件*/ struct book *read_file() { int i=0; L p,p1,head=NULL; FILE *fp; if((fp=fopen("library.txt","r"))==NULL) { printf(" ********库文件不存在,请创建!**********"); getch(); return NULL; } head=new book; head->next=NULL; printf(" 已有图书信息:"); printf(" 图书编号---图书名称---所在书库----作者----出版社---数量 "); p=new book; /*开辟空间以存放的取得信息*/ p1 = head; while(fscanf(fp,"%d%s%s%s%s%d",&p->num,p->name,p->where,p->author,p->pub,&p->count)!=EOF) { printf("%d %s %s %s %s %d ",p->num,p->name,p->where,p->author,p->pub,p->count); i++; p1->next = p; p1 = p; p=new book; } p1->next = NULL; delete p; fclose(fp); printf(" 共种%d 图书信息",i); printf(" 文件中的信息以正确读出。按任意键进入主菜单。"); getch(); return (head); } /*保存文件*/ void save(L head) { FILE *fp; L p; fp=fopen("library.txt","w"); /*以只写方式打开二进制文件*/ if(fp==NULL) /*打开文件失败*/ { printf(" =====>打开文件失败! "); getch(); return ; } else{ for(p=head->next;p!=NULL;p=p->next) fprintf(fp,"%d %s %s %s %s %d ",p->num,p->name,p->where,p->author,p->pub,p->count); } fclose(fp); } void Begin() { L head=new book, p; int choice=1; head->next = NULL; p=read_file(); if(p) head = p; do { system("cls"); printf(" ----------Welcome--------- "); printf(" 欢迎您,图书管理员. "); printf(" 请选择:"); printf(" 1.查询图书信息 "); printf(" 2.修改图书信息 "); printf(" 3.增加图书信息 "); printf(" 4.删除图书信息 "); printf(" 5.显示所有图书信息 "); printf(" 0.退出系统 "); scanf("%d",&choice); 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(" ^^^^^^^^^^谢谢使用,再见^^^^^^^^^^! "); system("PAUSE"); exit(0); default : printf(" 输入有误!! "); system("PAUSE");system("cls"); break; } }while(choice!=0); save(head); } void About() { system("cls"); printf(" "); printf(" 开发人员 "); printf(" **************************** "); printf(" ***** XXXXXX ***** "); printf(" ***** XXXXXX ***** "); printf(" ***** XXXXXX ***** "); printf(" **************************** "); getch(); } void Introduction() { system("cls"); printf(" "); printf(" 系统介绍 "); printf(" ***************************** "); printf(" 本系统主要实现图书信息 "); printf(" 查找 增加 删除 修改 浏览功能 "); printf(" ***************************** "); getch(); } void Welcome() { while(1) { int input; system("cls"); printf(" 图书馆管理系统 "); printf(" 1.管理系统 "); printf(" 2.开发人员 "); printf(" 3.系统简介 "); printf(" 4.退出 "); printf(" 请输入你的选项:"); scanf("%1d", &input); switch(input){ case 1: system("cls"); Begin(); break; case 2: About(); break; case 3: Introduction(); break; case 4: exit(0); default : printf(" 输入有误!! "); system("PAUSE"); system("cls"); break; } } } int main() { system("mode con cols=70 lines=30"); Welcome(); return 0; }