图书馆管理系统-c语言_第1页
图书馆管理系统-c语言_第2页
图书馆管理系统-c语言_第3页
图书馆管理系统-c语言_第4页
图书馆管理系统-c语言_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

图书馆管理系统045072班王磊第三局部13题题目要求图书馆管理系统包括:图书名称、图书编号、单价、作者、存在状态,借书人姓名、性别、学号等,此外设计的系统须具有如下功能:新进图书及根本信息输入图书根本信息查询对撤销图书信息的删除办理借书手续办理书手续需求分析根据题目要求,需建立图书管理系统结构体,结构体中应包括图书名称,图书编号,单价、作者、存在状态,借书人姓名,性别、学号等。其中存在状态设定为整形变量,可用不同的数字来表达,在该系统中用〝1〝来表示可借出,〝0〝来表示已借出。图书信息应存放在文件中,所以提供文件的输入输出等操作;并且程序需具有实现图书信息浏览,查找、修改等功能,并进行借出借入效劳;另外还应提供键盘是选择菜单来实现功能选择。总体设计结合上述分析该系统应包括以下模块:信息输入、图书查找、信息删除,图书借出、图书归还。结构图如下图书馆管理系统图书馆管理系统信息输入图书查找信息删除图书借出图书归还详细设计主函数主函数要求设计比拟简洁,只提供设输入,处理和输出局部的函数调用。其中各功能模块用菜单方式选择。[流程图]显示一系列功能选项显示一系列功能选项输入n,判断n是否1—9根据的值调用个功能模块的函数[程序]main(){intn,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();}/*对选择的数字作判断*/elset=0;}while(t==1);/*实现选择功能*/switch(n){case1:enter();break;/*输入功能*/case2:add();break;/*追加功能*/case3:browse();break;/*浏览功能*/case4:search();break;/*查找功能*/case5:modify();break;/*修改功能*/case6:del();break;/*删除功能*/case7:TSXX_out();break;/*图书借出*/case8:TSXX_back();break;/*归还功能*/case9:exit(0);break;/*退出*/}}/*以上完成了主函数计主菜单的构成*/2输入模块[数据结构]根据题目中对数据结构的要求每一本图书包含的信息利用一个结构体来存放。其中结构体需包含:字符变量:图书名称、作者、借书人姓名实型变量:图书编号、单价、学号整型变量:存在状态,、性别、库存定义结构体如下structTSXX{chartsn[30];/*图书名称*/intbh[15];/*图书编号*/floatpri;/*单价*/charzzn[10];/*作者*/intzt;/*存在状态*/intkc/*库存*/charjsn[10];/*借书人姓名*/intsex;/*性别*/intnum[15];/*学号*/}ts[N];/*ts[N]中每个数组元素对应一本书的全部信息*//*以上完成了对于结构体的定义*/[注意]本程序ts[N]中的个数,采取宏定义的方式,可以随时在源程序宏定义中更改,本程序在此宏定义#defineN10000。[流程图]显示图书信息输入操作提示显示图书信息输入操作提示i从0到N-1调用输入函数input〔i〕i从0到N-1调用输入函数input〔i〕i!=0i!=0Y保存调用函数save(n)保存调用函数save(n)[程序]voidenter(){inti;for(i=0;i<N;i++){printf("请输入图书信息\n\n");input(i);}/*调用输入函数*/if(i!=0)save();/*/printf_back();/*一个任务结束时让用户选择是浏览还是返回*/3。追加模块[需求分析]该模块的功能是假设用户需要新参加新的图书信息,通过键盘输入将新信息逐条加在原来输入文件上但不能覆盖原有信息。[流程图]通过调用加载函数n=load();并计算可以记录个数通过调用加载函数n=load();并计算可以记录个数输入用户所需追加学生记录个数m输入用户所需追加学生记录个数mKK=m+ni从n到k调用输入函数input〔i〕i从n到k调用输入函数input〔i〕保存追加记录保存追加记录[程序]voidadd(){inti,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.查找模块[需求分析]该模块的功能是根据输入的图书名称查找相应的记录找到以后,可继续进行删除和修改功能[流程图]输入查询图书名称输入查询图书名称是否有该图书记录是否有该图书记录YN显示找到的记录显示找到的记录提示没有找到提示没有找到询问用户是否继续查找询问用户是否继续查找NY返回主菜单让用户选择1〕查找另一个2〕修改3〕删除4〕返回主菜单返回主菜单让用户选择1〕查找另一个2〕修改3〕删除4〕返回主菜单[程序]Search(){inti,k,n,t1=1,t2,t3,t4;structTSXXt;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\t1).继续查找2)不,返回请选择[]\b\b〝);scanf(〝%d〝,&t1);}while(k==-1&&wi==1);t4=0;t3=0;if(k!=-1){printf(〝\n\n您的下一步操作?\n\n1)查找下一个2}修改图书信息3〕删除图书信息4〕回到主菜单请选择[]\b\b〝〕;scanf〔〝%d〝,&t2〕;switch(t2){case2:w3=modify_data(k,n);break;case3:{print(〝\n\n你确定吗?\n\t1)确定删除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\t1)查找下一个2〕返回请选择[]\b\b〝〕;scanf(〝%d〝,&t2);}}}while(t3==1);mneu();}5、修改模块[需求分析]该模块用于显示所有图书信息,由于记录较多,故而采取分屏显示。显示完所有纪录后,用户需输入图书编号进而查找图书信息[流程图]显示所有记录,确定哪个需要修改显示所有记录,确定哪个需要修改输入粗修改图书的编号输入粗修改图书的编号是否找到该图书记录是否找到该图书记录YN显示查找到的记录调用修改函数提示没有找到显示查找到的记录调用修改函数显示查找到的记录调用修改函数提示没有找到显示查找到的记录调用修改函数询问是否继续修改询问是否继续修改返回主菜单返回主菜单YN[程序]voidmodify()/*修改模块*/{sructTSXXt;FILE*fp;inti,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\t1).是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();}删除模块[需求模块]该模块用于显示所有图书信息,由于记录较多,故而采取分屏显示。显示完所有纪录后,用户需输入图书编号进而查找图书信息,[流程图]显示所有记录,确定哪个需要删除显示所有记录,确定哪个需要删除输入删除图书的编号输入删除图书的编号、、、是否有该图书记录是否有该图书记录显示查找到的记录调用修改函数显示查找到的记录调用修改函数返回主菜单显示查找到的记录调用修改函数显示查找到的记录调用修改函数返回主菜单YN提示没有找到显示找到的记录调用删除函数提示没有找到显示找到的记录调用删除函数显示查找到的记录调用修改函数是否有该图书记录显示查找到的记录调用修改函数是否有该图书记录询问是否继续修改询问是否继续修改N返回主菜单Y返回主菜单[程序]voiddel()/*删除模块*/{sructTSXXt;FILE*fp;inti,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=del_data(k,n);/*删除学生记录并且返回保存控制值t1,t1=1那么表示用户已确认删除*/if(t1==1)/*t1=1时那么表示用户确定此次删除*/{printf(“\n成功删除,是否继续删除?\n\n\t1).是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();}7、借出模块[需求分析]该模块功能应表达为voidbook_out(void){intn,s,i,d;if((n=search_TSXX())!=-1&&ts[n].kc>0){printf("请输入学号:");scanf("%d",&s);printf("请输入可借天数:");scanf("%d",&d);for(i=0;i<10;i++){if(ts[n].num[i]==0){ts[n].num[i]=s;ts[n].days[i]=d;break;}}ts[n].kc--;}if(n!=-1&&ts[n].kc==0)printf("此书已经全部借出.\n");return_confirm();}/*上面是借书的函数,首先调用找书函数*/8、归还模块voidTSXX_back(void){intn,s,i;page_titie("归还图书");if((n=search_TSXX())!=-1&&ts[n].kc<ts[n].totai){printf("借阅者图书证列表:\n");for(i=0;i<10;i++)if(ts[n].num[i]!=0)printf("[%d]-%d天\n",ts[n].num[i],ts[n].days[i]);printf("请输入借书证序号:");scanf("%d",&s);for(i=0;i<10;i++){if(ts[n].num[i]==s){ts[n].num[i]=0;ts[n].days[i]=0;break;}}ts[n].kc++;}if(n!=-1&&ts[n].kc==ts[n].totai)printf("全部入藏.\n");return_confirm();}9.公共函数1〕保存函数save(intn)[说明]/*形参n控制保存的个数。当ts[k].bh=0表示删除,不保存该记录。*/[程序]voidsave〔intn〕{FILE*fp;inti;if((fp=fopen(“tsxx.txt〞,“wb〞))==NULL){printf(“\n不能翻开文件\n〞);returnNULL;}for(i=0;i<n;i++)if(ts[i].bh!=0)if(fwrite(&ts[i],sizeof(structTSXX),1,fp)!=1)printf(“文件无法写\n〞);fclose(fp);}2)加载函数[说明][程序]/*该函数用于加载所有记录,并且可以返回所有记录的个数。*/voidload(){FILE*fp;intI;if((fp=fopen(“tsxx.txt〞,“r〞))==NULL){printf(“文件无法翻开〞);returnNULL;}for(i=0;!feof(fp);i++)fread(&ts[i],sizeof(structTSXX)),1,fp);fclose(fp);return(i-1);}3).输入函数a.\*输入整个记录的输入函数*\voidinput(inti){printf(“图书名称:〞);scanf(“%s〞,ts[i].tsn);printf(“图书编号:〞);no_input1(i,i);printf(“图书单价:〞);scanf(“%f〞&ts[i].pri);printf(“作者:〞);scanf(“%s〞,ts[i].zzn);;printf(“库存:〞);scanf(“%d〞,&ts[i].kc)state();printf(“借书人姓名:〞);scanf(“%s〞,ts[i].jsn);printf(“性别(1代表男,2代表女):〞);scanf(“%d〞,&ts[i].sex);printf(“学号:〞);no_input2(i,i);}b./*号码输入函数no_input1()*/voidno_input(inti,intn){inti,j,t1;do{t1=0;scanf(“%d〞,ts[i].bh);for(j=0;ts[i].bh[j]!=’\0’if(ts[i].bh[j]<’0’||ts[i].bh[j]>’9{puts(“输入错误!只接受数字输入,请重新输入〞);t1=1;break;}if(t1!=1)for(k=0;k<n;k++)if(k!=i&&strcmp(ts[k].bh,ts[i].bh)==0){puts(“记录已存在,请重新输入〞);t1=1;break;}}while(t1==1);}c./*号码输入函数no_input2()*/voidno_input2(intt,intp){inti,j,k,t1,n;do{t1=0;scanf("%d",ts[i].num);for(j=0;ts[i].num[j]!='\0';j++)if(ts[i].bh[j]<'0'||ts[i].bh[j]>'9') {puts("输入错误!只接受数字输入,请重新输入");t1=1;break; }if(t1!=1)for(k=0;k<n;k++)if(k!=i&&strcmp(ts[k].num,ts[i].num)==0){puts("记录已存在,请重新输入");t1=1;break;}}while(t1==1);}4./*状态函数*/voidstate(inti){if(ts[i].kc!=0)printf("1");elseprintf("0");}/*显示一个记录函数*/voidprintf_one(inti){printf("书名:%s\n",ts[i].tsn);printf("作者:%s\n",ts[i].zzn);printf("存数:%dof",ts[i].kc);printf("存在状态:%d\n",ts[i].zt);}/*修改整条记录的函数*/modify_data(inti,intn){intc,t1;do{puts("\nmodifyby=>\n\n1).编号.2).图书名称3).单价4).作者5).状态6).库存.7).全部信息8).返回");printf("请选择?:[]\b\b");scanf("%d",&c);if(c>7||c<1){puts("\n输入错误,请重新选择");getchar();}}while(c>8||c<1);do{switch(c){case1:no_input1(i,n);break;case2:printf("图书名称");scanf("%s",ts[i].tsn);break;case3:printf("单价");scanf("%f",&ts[i].pri);break; case4:printf("作者");scanf("%s",ts[i].zzn);break; case5:printf("状态");scanf("%d",&ts[i].zt);break; case6:printf("库存");scanf("%d",&ts[i].kc);break; case7:input(i);break;}; if(c>2&&c<7)printf_one(i);printf("\n确定修改嘛?\n\n\t1).确定2).不,重新修改3).返回并保存[]\b\b"); scanf("%d",&t1); }while(t1==2);return(t1);}源代码:#include<stdio.h>#include<stdlib.h>#include<conio.h>structBOOK{intid,usr[10],total,store,days[10],zt;charname[31],author[21];}books[100];voidpage_title(char*menu_item){printf("************欢送使用08WL型图书馆管理系统************\n\n-%s-\n\n",menu_item);}voidreturn_confirm(void){printf("\n按任意键返回……\n");getch();}voidstate(intn){if(books[n].total!=0)printf("1");if(books[n].total==0)printf("0");}intsearch_book(void){intn,i;printf("请输入图书序号:");scanf("%d",&i);for(n=0;n<100;n++){if(books[n].id==i){printf("书名:%s\n",books[n].name);printf("作者:%s\n",books[n].author);printf("存数:%dof",books[n].store);printf("存在状态:%d\n",books[n].zt);printf("%d\n",books[n].total);returnn;}}printf("\n输入错误或无效图书序号.\n");return-1;}voidbook_out(void){intn,s,l,d;page_title("借阅图书");if((n=search_book())!=-1&&books[n].store>0){printf("请输入借书证序号:");scanf("%d",&s);printf("请输入可借天数:");scanf("%d",&d);for(l=0;l<10;l++){if(books[n].usr[l]==0){books[n].usr[l]=s;books[n].days[l]=d;break;}}books[n].store--;}if(n!=-1&&books[n].store==0)printf("此书已经全部借出.\n");return_confirm();}/*上面是借书的函数,首先调用找书函数*/voidbook_in(void){intn,s,l;page_title("归还图书");if((n=search_book())!=-1&&books

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论