1课程报告课程名称:程序设计实践专业班级:学生姓名:学号:任课教师:学期:2011-2012学年第二学期2课程报告任务书题目图书信息管理系统主要内容开发一个图书信息管理系统,图书信息包括:图书编号、书名、作者、出版社、类别、出版时间、价格等基本信息(也可以根据自己情况进行扩充,比如是否借出、库存量等)。使之能提供以下基本功能:(1)图书信息录入功能(图书信息用文件保存)--输入(2)图书信息浏览功能--输出(3)查询功能(至少一种查询方式)、排序功能(至少一种排序方式):①按书名查询②按作者名查询③按照价钱排序④按出版时间排序等等(4)图书信息的删除与修改扩展功能:可以按照自己的程度进行扩展。比如(1)简单的权限处理(2)报表打印功能(3)甚至根据自己情况,可以加上学生信息,并扩充为图书借阅系统。(4)模糊查询(5)综合查询(6)统计功能比如统计处某一类别的图书信息或筛选出小于指定数量库存的图书信息等等,总之,可以根据自己需求进行分析功能。任务要求一、提交材料应包括:(1)系统源代码(2)课程报告二、整个设计过程具体要求(1)需求分析要求学生对案例系统进行分析,设计出需要完成的功能,完善各个模块的调用关系;(2)设计过程要求学生进一步明确各模块调用关系,进一步完善模块函数细节(函数名、参数、返回值等)(3)实现过程要求学生养成良好的编码习惯、完成各个模块并进行测试,最终完成系统整体测试;(4)总结阶段按照要求完成系统设计和实现报告,并进行总结、答辩。成绩评定报告撰写情况(30分)系统完成情况(30分)答辩情况(40分)总分内容20分规范程度5分程序测试5分基本功能20分扩展功能10分自述情况10分答辩情况30分成绩评定教师:3图书录入图书浏览图书查询修改删除图书借阅图书归还图书图书信息管理系统借阅查询1需求分析2概要设计可适当参考以下提示:⑴数据结构⑵模块划分⑶程序总体框架分为七个模块!都是通过自定义函数完成!图书删除修改,图书借阅与归还都是通过编号完成,所以图书编号在我的程序里边是唯一的!1图书录入可以录入图书名,作者,出版社,出版日期,价格!录入图书编号时函数就会判断此编号是否存在,若存在不能成功录入!2图书浏览可以浏览全部图书!3图书查询提供按图书编号模糊查询,按图书名关键字查询,按图书编号精确查询,按图书名精确查询!模糊查询和关键字查询事通过比价字符串的相似度而实现的!4修改删除图书可以通过图书查询来查询操作的图书编号,通过编号操作!函数会提示用户是否调用图书查询来找到自己想要操作的图书的编号。如果某一本图书已经被借阅那么用户就不能删除该图书!5借阅图书通过学号和图书编号进行借阅!如果该学号是第一次借阅那么会提示用户输入自己的姓名,并存入student.txt,方便以后借阅与归还!6归还图书先提供学号,然后程序会输出该学号借阅的所有图书,然后再通过编号归还!7借阅查询可查询某个学生已借但未归还的图书!3详细设计分为七个模块!都是通过自定义函数完成!主函数为:main(){if((fp=fopen(c:\\book.txt,rb+))==NULL){printf(在c盘根目录下没有找到储存图书信息的book.txt文件\n请选择1--4手动导入!2--创建此文件\n);scanf(%d,&xuan);switch(xuan){case2:if((fp=fopen(c:\\book.txt,wb+))!=NULL)printf(创建成功\n\n);break;case1:printf(请把名为book.txt的文件复制到c盘根目录下\n\n);}}if((fpj=fopen(c:\\jieyue.txt,rb+))==NULL){printf(在c盘根目录下没有找到储存借阅信息的jieyue.txt文件\n请选择1--手动导入!2--创建此文件\n);scanf(%d,&xuan);switch(xuan){case2:if((fpj=fopen(c:\\jieyue.txt,wb+))!=NULL)printf(创建成功\n\n);break;case1:printf(请把名为jieyue.txt的文件复制到c盘根目录下\n\n);}}if((fps=fopen(c:\\student.txt,rb+))==NULL){printf(在c盘根目录下没有找到储存学生信息的student.txt文件\n请选择1--手动导入!2--创建此文件\n);scanf(%d,&xuan);switch(xuan){case2:if((fps=fopen(c:\\student.txt,wb+))!=NULL)printf(创建成功\n\n);break;case1:printf(请把名为student.txt的文件复制到c盘根目录下\n\n);}5}menu();printf(\n代码:);scanf(%d,&xuan);while(xuan==1||xuan==2||xuan==3||xuan==4||xuan==5||xuan==6||xuan==7){fp=fopen(c:\\book.txt,rb+);fps=fopen(c:\\student.txt,rb+);fpj=fopen(c:\\jieyue.txt,rb+);switch(xuan){case0:break;case1:end();break;case2:print();break;case3:find();break;case4:del();break;case5:lend();break;case6:huan();break;case7:cha();break;}fclose(fp);fclose(fpj);fclose(fps);menu();printf(\n代码:);scanf(%d,&xuan);}}然后通过函数调用实习以下功能1图书录入可以录入图书名,作者,出版社,出版日期,价格!函数名为“voidend()”。2图书浏览可以浏览全部图书!函数名为“voidprint()”。3图书查询提供按图书编号模糊查询,按图书名关键字查询,按图书编号精确查询,按6图书名精确查询!函数名为“voidfind()”。4修改删除图书可以通过图书查询来查询操作的图书编号,通过编号操作!函数名为“vioddel()”。5借阅图书通过学好和图书编号进行借阅!函数名为“voidlend()”。6归还图书先提供学号,然后程序会输出该学号借阅的所有图书,然后再通过书号归还!函数名为“voidhuan()”。7借阅查询可查询某个学生已借但未归还的图书!函数名为“voidcha()”。4调试分析调试程序时主要问题出现在文件指针的移动,我图书和借阅信息的删除!因为我整个程序都是通过图书编号来完成操作,所以我必须保证图书编号不被重复,用户修改图书编号和删除时我都要考虑这本书书是否被借阅!解决第一个问题就是利用fseek(),rewind()这两个函数来控制指针。解决第二个问题利用文件。比如删除图书,我先把不用删除的图书写到另一个文件里,然后再以新建的方式打开原文件,把图书信息又写回来!5测试结果1.我用了三册图书信息(如下)书名编号作者出版日期价格出版社类别原始库存English001Mary2011010118.2SouthpressLanguage1Math002Robert2011010212.3NorthpressNature2Chinese003Hans2011010330.3EastpressLanguage3和两个同学(信息如下)来测试了这个系统姓名学号Wang201101Zhang201102输入程序后通过图书浏览可以看到已经成功输入2.图书查询提供按图书编号模糊查询,按图书名关键字查询,按图书编号精确查询,按图书名精确查询!我这里用演示用图书名关键字查询!7输入“Eng”,程序就找出包含“Eng”的所有图书!3.修改删除图书,我这里演示把编号为002的图书的价格修改为63.34.借阅归还图书都是通过编号完成!我这里演示wang同学借编号为001的图书!6课程心得总结刚开始在做这个程序的时候没有做需求分析,结果盲目的写没有目的,得到了教训!写这个程序熟悉了很多以前学过的知识,文件运用能力有很大提高!明白了以前很多不知道的为什么,比如以前老师不建议用全局变量,但这次我用,遇到了不少麻烦!、很多同学在写程序的时候都不用F10调试程序,我觉得用F10调试程序对我们很有帮助,因为这可以快速帮我们找到程序出现错误的地方!由于我很多模块都是通过编号完成的,所以在修改图书的编号时必然会给借阅造成麻烦,这给我带来不少麻烦,不过我还是解决了!8代码#includestdio.h#includestdlib.h#includestring.hFILE*fp,*fpj,*fps;inti,xuan;typedefstructbook{charname[10];charnum[10];charwriter[10];intdate;charpress[10];floatprice;charleibie[10];intkucun;intjiechu;}bo;typedefstructstudent{charname[10];charnum[10];intjie;}st;typedefstructjieyue{charsnum[10];charbnum[10];}ji;voidmenu()//菜单{printf(\n\n);for(i=0;i80;i++)printf(#);printf(\n\n);printf(\t\t1-----图书录入\t\t\t);printf(2-----图书浏览\n\n);printf(\t\t3-----图书查询\t\t\t);printf(4-----修改删除图书\n\n);printf(\t\t5-----借阅图书\t\t\t);printf(6-----归还图书\n\n);printf(\t\t7-----借阅查询\t\t\t\n);printf(\n\t\t\t\t输入其他任意键退出\n);printf(\n\n);for(i=0;i80;i++)printf(#);9printf(\n\n);}voidend()//录入图书{boboo,booq;printf(请输入图书名(最多十个字符):);scanf(%s,boo.name);do{i=1;printf(请输入图书编号(最多十个字符):);scanf(%s,boo.num);fread(&booq,sizeof(bo),1,fp);while(!feof(fp)){if(strcmp(booq.num,boo.num)==0){printf(\n该编号已存在请重新输入\n\n);i=0;break;}fread(&booq,sizeof(bo),1,fp);}rewind(fp);}while(i==0);printf(请输入图书作者(最多十个字符):);scanf(%s,boo.writer);printf(请输入图书出版日期(例如2001年5月3日出版则输入20010503):);scanf(%d,&boo.date);printf(请输入图书价格:);scanf(%f,&boo.price);printf(请输入图书出版社(最多十个字符):);scanf(%s,boo.press);printf(请输入图书类别(最多十个字符):);scanf(%s,boo.leibie);printf(请输入图书入库数:);scanf(%d,&boo.kucun);boo.jiechu=0;getchar();fseek(fp,0,2);fwrite(&boo,sizeof(bo),1,fp);printf(\n录入成功!回到主菜单);system(pause);}voidprint()//浏览图书{boboo;printf(书名编号作者价格出版社类别原始库存借出\n);10fre