C语言图书馆管理系统课程设计.doc

上传人:土8路 文档编号:10320880 上传时间:2021-05-08 格式:DOC 页数:19 大小:80KB
返回 下载 相关 举报
C语言图书馆管理系统课程设计.doc_第1页
第1页 / 共19页
C语言图书馆管理系统课程设计.doc_第2页
第2页 / 共19页
C语言图书馆管理系统课程设计.doc_第3页
第3页 / 共19页
C语言图书馆管理系统课程设计.doc_第4页
第4页 / 共19页
C语言图书馆管理系统课程设计.doc_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《C语言图书馆管理系统课程设计.doc》由会员分享,可在线阅读,更多相关《C语言图书馆管理系统课程设计.doc(19页珍藏版)》请在三一文库上搜索。

1、目录一、需求分析2二、概要设计2三、详细设计4四、调试分析6五、用户手册6六、测试数据6七、附录8一、需求分析1. 程序以菜单的方式工作,具备图书的添加、删除、修改、查询、统计操作,数据存储采用文件形式。2.定义结构体数组struct library bookinf30,用以存储ISBN、书名、作者名、图书类别、出版单位、出版时间、价钱、数量信息。利用文件开辟并将信息保存在“bookinf.txt”中。3.用户从键盘输入需要的操作,其中“ISBN、书名、作者名、图书类别、出版单位”需使用字符输入,“出版时间、价格、数量”采用数字输入。4.测试数据:(1)查找:若找到了所要查找的书本,则打印出书

2、本信息;若没有找到,则打印“没有找到您要找的书本”(2)删除:若找到了所要查找的书本,按下y确认删除后,打印出“该书已删除”;若没有找到要删除的书本,则打印“没有找到该书,退出操作”(3)修改:若找到了要修改的书本,打印“请输入你要修改的信息”并开始修改;若没有找到要修改的书本,则打印“没有找到要修改的书本”5.程序执行命令为:(1)创建“bookinf.txt”文件(2)将图书信息用添加操作加进“bookinf.txt”文件中(3)用户选择所需操作(4)搜索结果二、概要设计1.定义结构体数组struct library bookinf50。bookinfi.ISBN / ISBN booki

3、nfi.name /书名bookinfi.author / 作者名bookinfi.vari / 图书类别bookinfi.pubplace /出版单位bookinfi.pubtime / 出版时间bookinfi.price /价格bookinfi.num / 数量/* 用以下程序开辟存储文件bookinf.txt */FILE *fp; if(fp=fopen(bookinf.txt,r+)=NULL) printf(无法打开文件!n); return; 2.程序构造add ()通过此函数将输入的书本信息添加存储进bookinf.txt文件中,用于下一次的查询或删、改、统操作的调用。del

4、()通过此函数完成对bookinf.txt文件中书本信息的删除,“printf(确定要删除该书吗?(y/n) n);”键盘输入y/n确定书本信息的删除,删除后将不再有该书记录modify()通过此函数完成对书本信息的修改,修改内容包括:ISBN、书名、作者名、图书类别、出版单位、出版时间、价格、数量。search()此函数为查询书本信息操作,可查询bookinf.txt文件中存储的书本信息。count()此操作为统计操作,用于统计bookinf.txt文件中存储书本的总数量及金额数。main()通过对上述函数的调用,将所得信息打印出来3.主程序流程主函数 增加模块删除模块修改模块查询模块统计模

5、块三、详细设计1.图书馆管理的数据类型struct librarychar ISBN20; /ISBNchar name30; /书名char author30; /作者名char vari10; /图书类别char pubplace50; /出版单位int pubtime; /出版时间int price; /价格int num; /数量;/-基本操作的算法描述-1.文件部分FILE *fp; if(fp=fopen(bookinf.txt,r+)=NULL) /检查打开的操作是否出错printf(无法打开文件!n); /若出错则打印该行文字return; 2.查询操作部分printf(n请输

6、入您要查找的书名n);scanf(%s,bookname); /输入想查询的书名 while(!feof(fp) /循环 直到文件尾部,函数值为真 fread(&bookinf,sizeof(struct library),1,fp); /从fp中读入1个长度为sizeof(struct library)的数据,存到bookinf 中if(strcmp(bookinf.name,bookname)=0) /比较输入的书名和文件中保存的书名,若相同printf(ISBN 书名 作者名 图书类别 出版单位 出版时间 价格 数量n);printf(%s %s %s %s %s %d %d %d n,

7、bookinf.ISBN,bookinf.name,bookinf.author,bookinf.vari,bookinf.pubplace,bookinf.pubtime,bookinf.price,bookinf.num);/若相同,则打印出书本的信息i=1;break; if(i!=1) /若没有找到该书printf(没有找到您要找的书本n);3.删除部分strcpy(bookinfflag.ISBN,bookinfflag+1.ISBN);/将后一本书的ISBN复制给前一本书的ISBN strcpy(bookinfflag.name,bookinfflag+1.name); /将后一本

8、书的书名复制给前一本书的书名strcpy(bookinfflag.author,bookinfflag+1.author); /将后一本书的作者名复制给前一本书的作者名strcpy(bookinfflag.vari,bookinfflag+1.vari); /将后一本书的图书种类复制给前一本书的图书类别strcpy(bookinfflag.pubplace,bookinfflag+1.pubplace); /将后一本书的出版单位复制给前一本书的出版单位bookinfflag.pubtime=bookinfflag+1.pubtime; /将后一本书的出版时间复制给前一本书的出版时间bookin

9、fflag.price=bookinfflag+1.price; /将后一本书的价格复制给前一本书的价格bookinfflag.num=bookinfflag+1.num; /将后一本书的数量复制给前一本书的数量4修改部分if(strcmp(bookinfi.ISBN,nbook)=0) /如果输入的书本nbook与文件中存储的ISBN相同,则开始修改5.统计部分int tn,total=0,alprice=0;/初始化总数和总价格的值为0for(i=0;i=tn;i+)total=total+bookinfi.num;/运用递归,新的总数和为上一次的总数值加上这一次的值alprice=alp

10、rice+(bookinfi.num)*(bookinfi.price); /运用递归,新的总价钱和为上一次的总价钱值加上这一次的价钱 printf(图书总册书为%d 总金额数为%dn,total,alprice);/打印出图书总册书和总金额数6.菜单部分printf( 欢迎登录图书管系统 n);printf(*n);printf(* 1.添加图书 2.删除图书 *n);printf(* 3.修改图书 4.查询图书 *n);printf(* 5.统计图书 0.退出系统 *n);printf(*n);7选择部分switch(b) case 1:add();break; /选择1时,执行添加操作

11、case 2:del();break; /选择2时,执行删除操作 case 3:modify();break; /选择3时,执行修改操作 case 4:search();break; /选择4时,执行查询操作 case 5:count();break; /选择5时,执行统计操作 case 0:flag=1;break; /选择0时,执行退出操作 default:printf(您输入的选择错误!n); /否则,打印输入错误四调试部分1.开始写程序时,没有运用文件保存函数,导致输入的书本信息不能被查看2程序删除函数部分产生左值方面的错误,后运用strcmp( )解决3. 程序删除函数部分,开始不论

12、找到还是没找到要删除的书本,都会打印循环外的该书已删除!,后运用i=n,解决了这个问题。五用户手册1.本程序执行文件为“bookinf.txt”.2. 进入菜单部分,会出现一下选择菜单 1.添加图书 2.删除图书 3.修改图书 4.查询图书 5.统计图书 0.退出系统 并提示请输入你的选择!,用户仅需选择05运行该程序3.添加、修改图书部分,其中ISBN、name、author、vari、pubplace、需输入字符(即字母或数字),pubtime、price、num需输入数字。4. 添加、修改图书部分,输入的信息不可超标,需遵循ISBN为20字节,name、author为30字节,vari为

13、10字节,pubplace为50字节。六、测试部分 欢迎登录图书管系统 * 1.添加图书 2.删除图书 * 3.修改图书 4.查询图书 * 5.统计图书 0.退出系统 *请输入你的选择! 1 请输入需要添加的书本书以及您要添加的书本数信息 1 ISBN:1 书名:1 作者:1 图书类别:1 出版单位:1 出版时间:1 价钱:1 数量:1 欢迎登录图书管系统 * 1.添加图书 2.删除图书 * 3.修改图书 4.查询图书 * 5.统计图书 0.退出系统 *请输入你的选择! 3 请输入您要修改的书号 2 没有找到要修改的书本欢迎登录图书管系统 * 1.添加图书 2.删除图书 * 3.修改图书 4.

14、查询图书 * 5.统计图书 0.退出系统 * 请输入你的选择! 3 请输入您要修改的书号 1 ISBN:2 书名:2 作者:2 图书类别:2 出版单位:2 出版时间:2 价钱:2 数量:2 修改成功!欢迎登录图书管系统 * 1.添加图书 2.删除图书 * 3.修改图书 4.查询图书 * 5.统计图书 0.退出系统 * 请输入您的选择! 4 请输入您要查找的书名 2 ISBN书名 作者名 图书类别 出版单位 出版时间 价格 数量 2 2 2 2 2 2 2 2欢迎登录图书管系统 * 1.添加图书 2.删除图书 * 3.修改图书 4.查询图书 * 5.统计图书 0.退出系统 * 请输入您的选择!

15、2 请输入您要删除的书本名 2 2 2 2 2 2 2 2 2 确定要删除该书吗?(y/n) y 该书已删除!欢迎登录图书管系统 * 1.添加图书 2.删除图书 * 3.修改图书 4.查询图书 * 5.统计图书 0.退出系统 * 请输入您的选择! 0 press any key to continue!七、附录#includestdio.h#includestring.h#includestruct.h#includeconio.hstruct library bookinf30;int n;struct librarychar ISBN20;char name30;char author30

16、;char vari10;char pubplace50;int pubtime;int price;int num;/结构体部分void main()/主函数部分 int b,flag=0;while(1)/菜单部分printf( 欢迎登录图书管系统 n);printf(*n);printf(* 1.添加图书 2.删除图书 *n);printf(* 3.修改图书 4.查询图书 *n);printf(* 5.统计图书 0.退出系统 *n);printf(*n);printf(请输入你的选择!n);scanf(%d,&b);switch(b) case 1:add();break;/选择1,执行

17、添加操作 case 2:del();break; /选择2,执行删除操作 case 3:modify();break; /选择3,执行修改操作 case 4:search();break; /选择4,执行查询操作 case 5:count();break; /选择5,执行统计操作 case 0:flag=1;break; /选择0,退出程序操作 default:printf(您输入的选择错误!n);/否则,打印该句void add() /*添加函数*/int i;char x;printf(n请输入需要添加的书本书以及您要添加的书本数信息n);scanf(%d,&n);/输入要添加的书本数fo

18、r(i=0;in;i+)/用循环添加书本信息printf(ISBN:);scanf(%s,bookinfi.ISBN);printf(书名:);scanf(%s,bookinfi.name);printf(作者:);scanf(%s,bookinfi.author);printf(图书类别:);scanf(%s,bookinfi.vari);printf(出版单位:);scanf(%s,bookinfi.pubplace);printf(出版时间:);scanf(%d,&bookinfi.pubtime);printf(价钱:);scanf(%d,&bookinfi.price);printf

19、(数量:);scanf(%d,&bookinfi.num);x=getch();/按任意键返回菜单save(); /*调用保存函数*/void del()/删除函数int i=0,flag,t=0,tn=0;/tn为保存文件内的书本数char a,bookname20;FILE *fp;if(fp=fopen(bookinf.txt,r)=NULL) /如果无法打开文件 printf(无法打开文件!n); return; printf(n请输入您要删除的书本名n);scanf(%s,bookname);rewind(fp); while(!feof(fp)/*没有结束时进行循环*/ fread

20、(&bookinftn,sizeof(struct library),1,fp);tn+; fclose(fp); for(i=0;itn;i+) if(strcmp(bookinfi.name,bookname)=0)/如果输入的书名与文件内保存的书名相同printf(%s %s %s %s %s %d %d %dn,bookinfi.ISBN,bookinfi.name,bookinfi.author,bookinfi.vari,bookinfi.pubplace,bookinfi.pubtime,bookinfi.price,bookinfi.num); getch(); flag=i;

21、t=1; printf(确定要删除该书吗?(y/n) n); scanf(%s,&a);if(a = y) for(flag;flagtn;flag+) strcpy(bookinfflag.ISBN,bookinfflag+1.ISBN); /将后一本书的ISBN复制给前一本书的ISBN strcpy(bookinfflag.name,bookinfflag+1.name); /将后一本书的书名复制给前一本书的书名strcpy(bookinfflag.author,bookinfflag+1.author); /将后一本书的作者名复制给前一本书的作者名strcpy(bookinfflag.v

22、ari,bookinfflag+1.vari); /将后一本书的图书类别复制给前一本书的图书类别 strcpy(bookinfflag.pubplace,bookinfflag+1.pubplace); /将后一本书的出版单位复制给前一本书的出版单位bookinfflag.pubtime=bookinfflag+1.pubtime; /将后一本书的出版时间复制给前一本书的出版时间bookinfflag.price=bookinfflag+1.price; /将后一本书的价格复制给前一本书的价格bookinfflag.num=bookinfflag+1.num; /将后一本书的数量复制给前一本书

23、的数量tn-;/删除后书的数量减一 printf(n该书已删除!n);break;getch();if(t!=1)/如果没有找到要删除的书printf(n没有找到该书,退出操作n); save();void search()/查询函数int i=0;FILE *fp;/文件打开struct library bookinf;char bookname20;if(fp=fopen(bookinf.txt,r)=NULL) printf(无法打开文件!n); return; printf(n请输入您要查找的书名n);scanf(%s,bookname); while(!feof(fp) /循环 直到

24、文件尾部,函数值为真 fread(&bookinf,sizeof(struct library),1,fp); /从fp中读入1个长度为sizeof(struct library)的数据,存到bookinf 中if(strcmp(bookinf.name,bookname)=0) /*比较输入的书名和文件中保存的书名*/printf(ISBN 书名 作者名 图书类别 出版单位 出版时间 价格 数量n);printf(%s %s %s %s %s %d %d %d n,bookinf.ISBN,bookinf.name,bookinf.author,bookinf.vari,bookinf.pu

25、bplace,bookinf.pubtime,bookinf.price,bookinf.num);i=1;break; if(i!=1)/如果没有找到要查询的书printf(没有找到您要找的书本n);printf(n按任意键返回菜单n); getch();void modify()/修改函数int i=0,n=0;char nbook20;FILE *fp;/文件打开 char bookname20;printf(n请输入您要修改的书号n);.scanf(%s,nbook);if(fp=fopen(bookinf.txt,r+)=NULL) printf(无法打开文件!n); return;

26、 while(!feof(fp) /*没有结束时进行循环*/ fread(&bookinfn,sizeof(struct library),1,fp);n+; for(i=0;in;i+) if(strcmp(bookinfi.ISBN,nbook)=0)/如果输入的nbook与文件内保存的ISBN相同printf(请输入你要修改的信息n); printf(ISBN:); scanf(%s,bookinfi.ISBN); printf(书名:); scanf(%s,bookinfi.name); printf(作者:); scanf(%s,bookinfi.author); printf(图书

27、类别:); scanf(%s,bookinfi.vari); printf(出版单位:); scanf(%s,bookinfi.pubplace); printf(出版时间:); scanf(%d,&bookinfi.pubtime); printf(价钱:); scanf(%d,&bookinfi.price); printf(数量:); scanf(%d,&bookinfi.num);printf(n修改成功!n);break;if(i=n)/如果没找到要修改的书本printf(没有找到要修改的书本n”);getch(); save();void count()/统计函数int total

28、=0,alprice=0,i,tn=0;/先定义总数量 总价钱为0FILE *fp;/文件打开if(fp=fopen(bookinf.txt,r)=NULL) printf(无法打开文件!n); return; while(!feof(fp) fread(&bookinftn,sizeof(struct library),1,fp);tn+; fclose(fp);for(i=0;i=tn;i+)total=total+bookinfi.num;/ 运用递归,新的总数和为上一次的总数值加上这一次的值alprice=alprice+(bookinfi.num)*(bookinfi.price);

29、 /运用递归,新的总价钱为上一次的总价钱加上这一次的价钱 printf(图书总册书为%d 总金额数为%dn,total,alprice);printf(按任意键返回菜单n); getch();void save() /保存函数FILE *fp; /文件打开 int i;if(fp=fopen(bookinf.txt,r+)=NULL) /打开一个二进制文本文件printf(无法打开文件!n); return; for(i=0;in;i+) if(fwrite(&bookinfi,sizeof(struct library),1,fp)!=1)printf(文件写入错误n);fclose(fp)

30、; getch();主函数流程图b=0,flag=1,breakb=1,add()开始int b , flag=0menu()scanf(“%d”,&b)b=2,del()b=3,modify()b=4,search()b=5,count()end添加函数流程图开始extern int n,int i=0,char xprint请输入您要添加的书本数和书本信息scanf ninScanf(ISBN,书名,作者,图书类别,出版单位,出版时间,价格,数量)i+end删除函数流程图开始exrern int n,i=0,flag,tn=0,t=0char a,bookname20文件打开print 输入您要删除的书名scanf bookname!feof(fp)fread(),tn+itnbookinfi.name=booknamescanf aa=y删除操作没有找到该书i+end修改函数流程图开始extern int n,int i=0,char nbook20,bookname文件打开print(输入要修改的书名)scanf(nbook)inbookinfi.ISBN=nbookscanf(ISBN,书名,作者,图书类别,出版单位,出版时间,价格,数量)i+end

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1