图书馆管理系统045072班王磊第三部分13题一、题目要求图书馆管理系统包括:图书名称、图书编号、单价、作者、存在状态,借书人姓名、性别、学号等,此外设计的系统须具有如下功能:1.新进图书及基本信息输入2.图书基本信息查询3.对撤销图书信息的删除4.办理借书手续5.办理书手续二、需求分析根据题目要求,需建立图书管理系统结构体,结构体中应包括图书名称,图书编号,单价、作者、存在状态,借书人姓名,性别、学号等。
其中存在状态设定为整形变量,可用不同的数字来表达,在该系统中用〝1〝来表示可借出,〝0〝来表示已借出。
图书信息应存放在文件中,所以提供文件的输入输出等操作;并且程序需具有实现图书信息浏览,查找、修改等功能,并进行借出借入服务;另外还应提供键盘是选择菜单来实现功能选择。
三、总体设计结合上述分析该系统应包括以下模块:信息输入、图书查找、信息删除,图书借出、图书归还。
结构图如下四、详细设计1、主函数主函数要求设计比较简洁,只提供设输入,处理和输出部分的函数调用。
其中各功能模块用菜单方式选择。
[流程图][程序]main(){int n,t;/*变量保存选择菜单数字,判断输入的数字是否在功能人能够菜单所对应的数字范围内*/do{puts("\t\t\t***欢迎使用图书馆管理系统***\n\n\n");puts("\t\t\t*************MENU************\n\n");puts("\t\t\t1. 图书信息输入\n");puts("\t\t\t2. 新图书信息录入\n");puts("\t\t\t3. 图书信息浏览\n");puts("\t\t\t4. 图书信息查找\n");puts("\t\t\t5. 图书信息修改\n");puts("\t\t\t6. 图书信息删除\n");puts("\t\t\t7. 图书借阅\n");puts("\t\t\t8. 图书归还\n");puts("\t\t\t9. 退出系统\n");puts("\t\t\t\n\n\n*****************************\n\n");/*对功能选项的显示*/printf("选择使用功能种类(1--9)[ ]\b\b");scanf("%d",&n);if(n<1||n>9){t=1;getchar();} /*对选择的数字作判断*/ else t=0;}while(t==1);/*实现选择功能*/switch(n){case 1:enter();break; /*输入功能*/case 2:add();break; /*追加功能*/case 3:browse();break; /*浏览功能*/case 4:search();break;/*查找功能*/case 5:modify();break; /*修改功能*/case 6:del();break;/*删除功能*/case 7:TSXX_out();break;/*图书借出*/case 8:TSXX_back();break;/*归还功能*/case 9:exit(0);break;/*退出*/}}/*以上完成了主函数计主菜单的构成*/2输入模块[数据结构]根据题目中对数据结构的要求每一本图书包含的信息利用一个结构体来存放。
其中结构体需包含:字符变量:图书名称、作者、借书人姓名实型变量:图书编号、单价、学号整型变量:存在状态,、性别、库存定义结构体如下struct TSXX{char tsn[30];/*图书名称*/int bh[15];/*图书编号*/float pri;/*单价*/char zzn[10]; /*作者*/int zt; /*存在状态*/int kc /*库存*/char jsn[10];/*借书人姓名*/int sex;/*性别*/int num[15]; /*学号*/} ts[N]; /*ts[N]中每个数组元素对应一本书的全部信息*/ /*以上完成了对于结构体的定义*/[注意]本程序ts[N]中的个数,采取宏定义的方式,可以随时在源程序宏定义中更改,本程序在此宏定义#define N 10000。
[流程图]Y[程序]void enter(){int i;for(i=0;i<N;i++){printf("请输入图书信息\n\n");input(i);} /*调用输入函数*/if(i!=0) save() ; / */printf_back(); /*一个任务结束时让用户选择是浏览还是返回*/3。
追加模块[需求分析]该模块的功能是假如用户需要新加入新的图书信息,通过键盘输入将新信息逐条加在原来输入文件上但不能覆盖原有信息。
[流程图].[程序]void add(){int i,n,m,k;FILE*fpn=()load;printf(〝可添加信息个数(0-%d):[]\b\b〝,N-n-1);scanf(〝%d〝,&m);k=m+n;for(i>n;i<=k;i++)input(i);if(fp=fopen(〝ts.txt〝, 〝a〝)==NULL){printf(〝文件无法打开\n〝); }for(i>n;i<=k;i++)fclose(fp);printf_back();}4.查找模块[需求分析]该模块的功能是根据输入的图书名称查找相应的记录找到以后,可继续进行删除和修改功能[流程图]Y NY{int i,k,n,t1=1,t2,t3,t4;struct TSXX t;n=load();do{do{k=-1;printf(〝\n\n输入你所要查询的图书名称:〝);scanf(〝%s〝,t.tsn);print_show()for(i=0;i<n;i++;)if(strcmp(t.tsn,ts[i].tsn)==0){k=i;printf_one();break;}if(k==-1)printf(〝对不起,您所查找的图书不存在〝);printf(〝继续吗?\n\t 1).继续查找2)不,返回请选择[ ]\b\b〝);scanf(〝%d〝,&t1);}while(k==-1&&wi==1);t4=0;t3=0;if(k!=-1){printf(〝\n\n您的下一步操作?\n\n 1)查找下一个2} 修改图书信息3)删除图书信息4)回到主菜单请选择[ ]\b\b〝);scanf(〝%d〝,&t2);switch(t2){case 2:w3=modify_data(k,n);break;case 3:{print(〝\n\n你确定吗?\n\t 1)确定删除2}不,返回请选择[ ]\b\b〝);scanf(〝%d〝,&t4);if(t4==1)ts[k].num=0;break;}if(t3==1||t4==1){save(n);printf(〝\n\n信息修改成功〝);printf(〝\n\您的下一步操作?\n\t 1)查找下一个2)返回请选择[ ]\b\b〝);scanf(〝%d〝,&t2);}}}while(t3==1);mneu();}5、修改模块[需求分析]该模块用于显示所有图书信息,由于记录较多,故而采取分屏显示。
显示完所有纪录后,用户需输入图书编号进而查找图书信息[流程图]YN[程序]void modify() /*修改模块*/ {sruct TSXX t;FILE*fp;int i ,n,k,t0=1,t1,t2=0;n=load();do{k=-1;/*让用户查看全部记录以便确认要修改的记录*/printf_show();/*调用数据结构显示函数*/for(i=0;i<n;i++){if((i!=0)&&(i%10==0)) /*用于分屏显示*/{printf(“\n\n请记录需要修改的图书编号。
任意键继续……”);getch();puts(“\n\n”);}printf_one(i); /*调用显示一个记录的函数*/}do{printf(“\n\n请输入您需要修改的图书编号。
NO.:”);scanf(“%f”,&t.bh ); /*输入需要修改的图书编号*/for(i=0;i<n;i++) /*查找要修改的记录*/if(strcmp(t.bh,ts.bh)==0){k=i; /*找到许需修改的记录*/t=ts[i]; /*将ts[i]中原有需修改的记录备份给t,以便用户反悔时恢复*/ }if(k==-1) printf(“\n\n信息不存在!再试一次”);}while(k==-1); /*当k=-1时表示没找到*/print_show();/*调用数据结构显示函数*/printf_one(k); /*调用显示一个记录的函数*/t1=modify_data(k,n);/*修改学生记录并且返回保存控制值t1,t1=1则表示用户已确认修改*/if(t1==1) /*t1=1时则表示用户确定此次修改*/{printf(“\n成功修改,是否继续修改?\n\n\t 1). 是2)返回并保存\t[ ]\b\b);scanf(“%d”,&t0);t2=1; /*来控制保存,使w2=1是标记已有过的记录*/}eles{to=0;if(t2==1)ts[k]=s;}/*到此处由于用户没有确认这次修改。
使t0=0,为了终止循环,ts[k]=s; 则把备份的s恢复给ts[k],这样使得在此之前修改过的成功保存而本次不修改*/ if(t0!=1&&t2==1)/*t0不等于1则表示正常返回,t2=1则表示在此之前有过修改,这时就保存用户已确认的修改并返回*/save(n);/*t2不等于1表示在此之前没有修改过,而又反悔这次修改,则不保存返回*/}while(t0==1);menu();}6.删除模块[需求模块]该模块用于显示所有图书信息,由于记录较多,故而采取分屏显示。
显示完所有纪录后,用户需输入图书编号进而查找图书信息,[流程图]N[程序] void del() {sruct TSXX t;FILE*fp;int i ,n,k,t0=1,t1,t2=0;n=load();do{k=-1; /*让用户查看全部记录以便确认要删除的记录*/printf_show();/*调用数据结构显示函数*/for(i=0;i<n;i++){if((i!=0)&&(i%10==0)) /*用于分屏显示*/{printf(“\n\n请记录需要删除的图书编号。