1、 if(n9) t=1;getchar(); /*对选择的数字作判断*/ else t=0; while(t=1);/*实现选择功能*/ switch(n) case 1:enter();break; /*输入功能*/ case 2:add(); /*追加功能*/case 3:browse(); /*浏览功能*/ case 4:search(); /*查找功能*/ case 5:modify(); /*修改功能*/ case 6:del(); /*删除功能*/case 7:TSXX_out(); /*图书借出*/case 8:TSXX_back(); /*归还功能*/case 9:exit(0
2、); /*退出*/ /*以上完成了主函数计主菜单的构成*/2输入模块 数据结构 根据题目中对数据结构的要求每一本图书包含的信息 利用一个结构体来存放。其中结构体需包含 :字符变量:图书名称、作者、借书人姓名实型变量:图书编号、单价、学号整型变量:存在状态,、性别、库存定义结构体如下struct TSXXchar tsn30; /*图书名称*/ int bh15; /*图书编号*/ float pri; /*单价*/char zzn10; /*作者*/ int zt; /*存在状态*/int kc /*库存*/char jsn10; /*借书人姓名*/int sex; /*性别*/int num
3、15; /*学号*/ tsN; /*tsN中每个数组元素对应一本书的全部信息*/*以上完成了对于结构体的定义*/注意 本程序tsN中的个数,采取宏定义的方式,可以随时在源程序宏定义中更改,本程序在此宏定义#define N 10000。流程图 Yvoid enter()int i;for(i=0;in;=k; input(i); if(fp=fopen(, a)=NULL)printf(文件无法打开n);for(ii+) fclose(fp);4.查找模块需求分析该模块的功能是根据输入的图书名称查找相应的记录找到以后,可继续进行删除和修改功能 Y N N Search()int i,k,n,t
4、1=1,t2,t3,t4;struct TSXX t;n=load(); do k=-1;printf(nn输入你所要查询的图书名称: );scanf(%s,;print_show()i+;) if(strcmp,tsi.tsn)=0) k=i; printf_one(); if(k=-1) printf(对不起,您所查找的图书不存在 ); printf(继续吗?nt 1).继续查找 2)不,返回 请选择 bb);t1);while(k=-1&wi=1);t4=0;t3=0;if(k!=-1)printf(nn您的下一步操作?nn 1)查找下一个 2 修改图书信息 3) 删除图书信息 4)回到
5、主菜单 请选择 bb); scanf(%d ,&t2);switch(t2)case 2:w3=modify_data(k,n);print(nn你确定吗?nt 1)确定删除 2不,返回 请选择 bb);t4);if(t4=1) tsk.num=0;if(t3=1|t4=1)save(n);printf(nn信息修改成功);printf(n您的下一步操作?nt 1)查找下一个 2)返回 请选择 bb);scanf(%d,& while(t3=1);mneu();5、修改模块 该模块用于显示所有图书信息,由于记录较多,故而采取分屏显示。显示完所有纪录后,用户需输入图书编号进而查找图书信息 Y N
6、 void modify() /*修改模块*/sruct TSXX t;FILE*fp;int i ,n,k,t0=1,t1,t2=0;/*让用户查看全部记录以便确认要修改的记录*/printf_show();/*调用数据结构显示函数*/if(i!=0)&(i%10=0) /*用于分屏显示*/ printf(“nn请记录需要修改的图书编号。任意键继续”); getch(); puts(“nn”);printf_one(i); /*调用显示一个记录的函数*/printf(“nn请输入您需要修改的图书编号 。 NO.:”);scanf(“%f”,& ); /*输入需要修改的图书编号*/i+) /*
7、查找要修改的记录*/ if(strcmp,=0) /*找到许需修改的记录*/ t=tsi; /*将tsi中原有需修改的记录备份给t,以便用户反悔时恢复*/if(k=-1) printf(“nn信息不存在!再试一次”);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成功修改,是否继续修改?nnt 1). 是2)返回并保存t bb);scanf(“
8、%d”,&t0);t2=1; /*来控制保存,使w2=1是标记已有过的记录*/elesto=0;if(t2=1) tsk=s; /*到此处由于用户没有确认这次修改。使t0=0,为了终止循环,tsk=s; 则把备份的s恢复给tsk,这样使得在此之前修改过的成功保存而本次不修改*/if(t0!=1&t2=1) /*t0不等于1则表示正常返回,t2=1则表示在此之前有过修改,这时就保存用户已确认的修改并返回*/save(n); /*t2不等于1表示在此之前没有修改过,而又反悔这次修改,则不保存返回*/while(t0=1);menu();6 删除模块需求模块显示完所有纪录后,用户需输入图书编号进而查
9、找图书信息,、Y void del() /*删除模块*/*让用户查看全部记录以便确认要删除的记录*/ printf(“nn请记录需要删除的图书编号。printf(“nn请输入您需要删除的图书编号 。 /*输入需要删除的图书编号*/i+) /*查找要删除的记录*/ /*找到许需删除的记录*/ /*将tsi中原有需删除的记录备份给t,以便用户反悔时恢复*/ /*调用数据结构显示函数*/t1=del_data(k,n);/*删除学生记录并且返回保存控制值t1,t1=1则表示用户已确认删除*/if(t1=1) /*t1=1时则表示用户确定此次删除*/ printf(“n成功删除,是否继续删除?/*到此
10、处由于用户没有确认这次删除。 则把备份的s恢复给tsk,这样使得在此之前删除过的成功保存而本次不删除*/*t0不等于1则表示正常返回,t2=1则表示在此之前有过删除,这时就保存用户已确认的删除并返回*/ /*t2不等于1表示在此之前没有删除过,而又反悔这次删除,则不保存返回*/7、借出模块 该模块功能应体现为void book_out(void) int n,s,i,d;if(n=search_TSXX()!=-1&tsn.kc0) printf(请输入学号:s); printf(请输入可借天数:d); for(i=0;10; if(tsn.numi=0) tsn.numi=s; tsn.da
11、ysi=d; break; tsn.kc-; if(n!tsn.kc=0) printf(此书已经全部借出.n return_confirm();/*上面是借书的函数,首先调用找书函数*/8、归还模块void TSXX_back(void) int n,s,i; page_titie(归还图书 if(n=search_TSXX()!tsn.kctsn.totai)借阅者图书证列表:n if (tsn.numi!=0) %d - %d天n,tsn.numi,tsn.daysi);请输入借书证序号: if(tsn.numi=s) tsn.numi=0; tsn.daysi=0; break; ts
12、n.kc+;tsn.kc=tsn.totai) 全部入藏.n9.公共函数1)保存函数save(int n)说明 /* 形参n控制保存的个数。当tsk.bh=0表示删除,不保存该记录。*/void save(int n)FILE*fp;int i;if(fp=fopen(“”,“wb”)=NULL)printf(“n不能打开文件n”);return NULL; if(tsi.bh!=0) if(fwrite(&tsi,sizeof(struct TSXX),1,fp)!=1) printf(“文件无法写n”);fclose(fp);2)加载函数 程序 /*该函数用于加载所有记录,并且可以返回所有
13、记录的个数。 void load()int I;if(fp=fopen(“”,“r”)=NULL) printf(“文件无法打开”);!feof(fp); fread(&tsi,sizeof(struct TSXX),1,fp);return(i-1);3).输入函数a.*输入整个记录的输入函数* void input(int i)printf(“图书名称:”);scanf(“%s”,tsi.tsn);printf(“图书编号:no_input1(i,i);printf(“图书单价:scanf(“%f”&tsi.pri);printf(“作者:scanf(“%s”,tsi.zzn);print
14、f(“库存:tsi.kc)state();printf(“借书人姓名:scanf(“%s”,tsi.jsn);printf(“性别(1代表男,2代表女):tsi.sex);printf(“学号:no_input2(i,i);b./*号码输入函数no_input1()*/void no_input(int i,int n) int i,j,t1; do t1=0;scanf(“%d”, tsi.bh);for(j=0;tsi.bhj!=0;j+;if(tsi.bhj9)puts(“输入错误!只接受数字输入,请重新输入”);t1=1;if(t1! for(k=0;kk+) if(k!=i&strc
15、mp(tsk.bh, tsi.bh)=0) puts(“记录已存在,请重新输入”); t1=1;while(t1=1);c./*号码输入函数no_input2()*/void no_input2(int t,int p)int i,j,k,t1,n;, tsi.num); for(j=0;tsi.numj!=0j+) if(tsi.bhj9输入错误!只接受数字输入,请重新输入 if(t1!strcmp(tsk.num, tsi.num)=0)记录已存在,请重新输入 t1=1; while(t1=1);4./*状态函数*/void state(int i)if(tsi.kc!1else prin
16、tf(0/*显示一个记录函数*/void printf_one(int i)书名:%sn,tsi.tsn);作者:,tsi.zzn);存数:%d of ,tsi.kc);存在状态:%dn,tsi.zt);/*修改整条记录的函数*/modify_data(int i,int n)int c,t1;puts(nmodify by=nn 1).编号. 2). 图书名称 3). 单价 4).作者 5).状态 6).库存. 7).全部信息 8).返回请选择?: bbc); if(c7|c8|c1); switch(c)no_input1(i,n);图书名称scanf(%s case 3:单价%f作者状态
17、tsi.zt);库存tsi.kc); case 7:;2&c7) printf_one(i);n确定修改嘛?nnt1).确定 2).不,重新修改 3).返回并保存 bb while(t1=2); return(t1);源代码:#include struct BOOK int id,usr10,total,store,days10,zt; char name31,author21; books100;void page_title(char *menu_item) printf(*欢迎使用08WL型图书馆管理系统*nn- %s -nn,menu_item);void return_confirm(void)n按任意键返回nvoid state(int n)if(booksn.total! if(booksn.total=0)int search_book(void) int n,i;请输入图书序号:i); for(n=0;n100;n+) if(booksn.id=i),booksn.name)
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1