《图书管理系统说明书(共32页).doc》由会员分享,可在线阅读,更多相关《图书管理系统说明书(共32页).doc(32页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上C语言程序设计课程设计说明书图书借阅管理系统指导教师:张银霞设计者: 翟祥 闫妍 郝显微 岳俊专业班级:化工092设计时间:2010年10月-12月C语言程序设计课程设计任务书专业班级:化工092设计题目:图书管理系统一、已知技术参数或设计前提1、图书馆有各种图书200万册。2、每种图书都有书号、书名、作者(译者)、出版社、定价这些基本信息。3、借书卡记录有借阅者的卡号、姓名、班级。二、设计内容及要求图书借阅管理系统(1)输入:将书的序号,书名,作者,出版日期,单价储存到书文件里。(2)删除:将没有意义或破损的书在文件里删除。(3)修改:可输入书号或书名进行查询,找到
2、以后对图书错误的信息进行修改。(4)查询:若按书号查询,输入书号以后,屏幕上会出现书的详细信息,包括书的序号,书名,作者,出版日期,单价。若按书名查询,输入后,屏幕上的显示结果也是书的详细信息。 (5)办卡:将新卡储存到卡文件里。(6)退卡:将要删除的卡从卡文件里删除。(7)借书时,屏幕上显示请输入你的卡号,请输入你要借阅的书的书号,若该书已被借出,屏幕上显示 对不起,此书有人借出,请借其他书。若该书没有借出,则直接显示借书完毕,按任意键返回, (8)还书时,输入你要还的书的书号,输入后屏幕上显示还书完毕,按任意键返回。三、课程设计工作计划1、确定题目,成立设计小组,做用户需求分析(10月22
3、日)2、查阅资料,进行问题分析,制定方案,确定成员分工(10月22日-25日)3、根据方案编写程序并进行调试(10月26-11月26日)4、撰写设计说明书,完成设计(11月27日-12月5日)5、提交设计内容,答辩()四、相关教材及参考书目1谭浩强.C程序设计.清华大学出版社,2005年2邓文新、张宏烈.C语言程序设计方法.哈尔滨工业大学出版社,2004年3美Brian W.Kernighan,Dennis M.Ritchie .C程序设计语言.机械工业出版社,2003年 4Kenneth A.Reek. C和指针. 人民邮电出版社,1998年5 Perter Van Der LinDen.
4、C专家编程. 人民邮电出版社,2004年 指导教师签字: 系主任 签字: 年 月 日图书借阅管理系统一、需求分析当今社会知识逐渐占据主导地位,人们越来越需要知识,图书馆书店逐渐成为人们了解知识掌握知识的窗口,因此更需要有效的管理图书,以便人们方便查阅。许多的大学图书馆里,图书管里对管理人员来说是非常麻烦的事情,而且有些落后的地区,图书管理还是靠人工管理,针对这些现象,我们设计此系统,希望能够为他们提供一些帮助。二、系统的软硬件环境1、硬件环境 CPU Intel 1.80GHz 内存1G 硬盘80G2、软件环境 Windows XP Microsoft Visual C+6.0三、系统模块功能
5、:1、总体功能实现图书信息的全面管理,主要是对图书书名,书号的管理。通过此程序能够更方便的处理图书信息,如图1所示。图书管理系统输入图书记录删除图书记录修改图书记录查询书记录统计模块读者管理模块图书借阅模块图1 图书借阅管理系统程序功能框架图2、模块功能(1)输入模块该模块是实现对图书按照书号、书名、作者、出版日期、单价的录入并保存到文件中(2)删除模块该模块实现按图书编号对图书信息的删除。(3)修改模块该模块实现按图书号或书名对图书信息的修改。(4)查询模块实现按图书编号和书名查询每种图书的信息(5)统计模块统计图书管现有的图书的数量。(6)读者管理模块该模块实现添加读者卡的信息和删除读者卡
6、的信息。(7)借阅模块实现图书的借阅和归还。四 程序设计分析1、 数据结构程序定义了两个结构体变量emp 100,card 500结构体成员包括图书序号no、书名mz、作者 zuozhe、出版日期nl、单价salar、卡号cardnum、读者姓名readername、班级classnum、借书日期lenddate。struct book char no5;char mz10;char zuozhe10;int nl;int salar; empNUM,newemp;struct card int cardnum; char readername10; int classnum; int boo
7、knum; char lenddate10; card500;2、 模块设计分析(1)主函数 用printf函数输出相关信息,然后用 while(1)语句执行循环体,用scanf函数获取命令,用if判断操作是否正确,用switch语句执行函数的调用。(2)图书信息输入由input()函数实现,用fopen语句打开文件通过if来判断文件是否存在,用for语句执行循环体,用scanf函数获取图书各项信息,定义一个整形变量n,用来记录输入图书的本数,当这些图书信息输入完毕后,接受到命令0跳出循环体。利用fwrite函数将录入的数据逐一写到文件emp.txt中,再用fclose函数关闭文件emp.tx
8、t。(3)删除模块 函数先定义了整形变量x,然后用 while(1)语句执行循环体,用scanf函数获取命令,用if判断操作是否正确,用switch语句执行函数的调用。用fopen函数按照rb的方式打开已经保存好的文件“emp.txt”, 然后用printf语句输出删除前的图书记录,再用for语句和fread函数逐条读出文件中的数据,然后用scanf语句输入要删除的书的书号,并用字符串比较函数strcmp判断是否有此图书信息,若找到此图书信息,删除后,再用fclose函数关闭文件emp.txt再一次打开emp文件用 fwrite函数和for循环将删除后的图书记录empi.no,empi.mz,
9、empi.zuozhe,empi.nl,empi.salar;重新写入文件emp中。然后关闭文件。(4)修改模块函数先定义了整形变量x,然后用 while(1)语句执行循环体,用scanf函数获取命令,用if判断操作是否正确,用switch语句执行函数的调用。在调用modi_num()函数中定义文件指针*fp和整形变量i,然后按照rb+的方式打开已经保存好的文件“emp.txt”, 然后用for语句和fread函数逐条读出文件中的数据,然后用scanf语句输入要修改的图书序号,并用字符串比较函数strcmp判断是否有此图书信息,若找到此商品信息并用scanf函数输入此商品修改后的信息。修改成功
10、后再用fwrite函数将商品信息再次保存到文件“emp.txt”中。最后用fclose函数关闭文件“emp.txt”。(5)查询模块 函数先定义了整形变量x,然后用 while(1)语句执行循环体,用scanf函数获取命令,用if判断操作是否正确,用switch语句执行函数的调用。在调用search_num()函数中定义文件指针*fp和整形变量i,然后按照rb的方式打开已经保存好的文件“emp.txt”,然后用for语句和fread函数逐条读出“emp.txt”文件中的信息,然后用scanf语句输入要查询的书的序号,并用字符串比较函数strcmp判断是否有此图书信息,若找到此商品信息则通过pr
11、intf语句输出图书信息。然后关闭文件。调用search_mz(),原理同上。(6)统计模块用fopen函数按照rb方式打开文件“emp.txt”,然后用fread函数读出文件中的信息,再用for语句输出读出图书各项信息,并用i控制循环,对要统计的图书总数量进行求累计和,再用printf函数输出图书的总数量,fclose函数关闭文件“emp.txt”。(7)读者信息录入由addcard()函数实现,用fopen语句打开文件通过if来判断文件是否存在,用for语句执行循环体,用scanf函数获取学生各项信息,当某种信息输入完毕后,如果要继续录入下一个卡则按y,按n则信息录入已结束接受到命令跳出循
12、环体。利用fwrite函数将录入的数据逐一写到文件card.txt 中,再用fclose函数关闭文件card.txt 。(8)读者信息删除用fopen函数按照rb的方式打开已经保存好的文件“card.txt”, 然后用printf语句输出删除前的卡记录,再用for语句和fread函数逐条读出文件中的数据,然后用scanf语句输入要删除的卡号,并与文件中的卡号比较,判断是否有此卡信息,若找到此卡信息,删除后,再用fclose函数关闭文件card.txt再一次打开card文件用 fwrite函数和for循环将删除后的卡记录cardi.cardnum,cardi.readername, cardi.
13、classnum;重新写入文件card中。然后关闭文件。(9)借阅图书先定义文件指针和整形变量以及时间变量,用while(1)来执行循环体 。然后按照rb+的方式打开已经保存好的文件“card.txt”,然后用for语句和fread函数逐条读出“card.txt”文件中的信息,然后用scanf语句输入要借书者的卡号,并用字符串比较函数strcmp判断是否有此卡号信息,若找到此信息则通过scanf语句得到借书的图书编序号。然后按照rb的方式打开已经保存好的文件“emp.txt”,然后用for语句和fread函数逐条读出“emp.txt”文件中的信息,并用字符串比较函数strcmp判断是否有此图书
14、信息,若找到该图书信息,则借书成功,并且将该书信息写如到lend.txt文件中,用printf函数显示借阅成功和借阅时间,最后关闭文件。(10)归还图书先定义文件指针、整形变量以及时间变量和字符变量,用while(1)来执行循环体。然后按照rb的方式打开已经保存好的文件“lend.txt”,然后用for语句和fread函数逐条读出“lend.txt”文件中的信息,然后用scanf语句输入要归还的图书序号,并用字符串比较函数strcmp判断是否有此图书信息,若找到此信息。则归还成功,用printf函数显示归还成功和归还时间。五、使用说明1、启动系统首先将光盘插入光驱,待光盘转动后打开,可以看到里
15、面包含四部分:图书借阅管理系统.c、emp.txt、card.txt、图书借阅管理系统.exe、图书借阅管理系统说明书。在我的电脑C盘中新建一个文件夹,命名为图书管理系统,将图书管理系统.c、emp.txt、card.txt、图书管理系统.exe。一起复制到其中。在安装有Microsoft Visual C+6.0的环境下,双击打开c盘中名为图书管理系统的文件夹,然后双击图书管理系统.c,点击上方按钮编译程序,接着点击按钮运行程序即可进入系统主界面,如图2所示。图2 图书管理系统运行主菜单使用者可以根据需要选择相应的键进行操作。2、输入功能在图2界面下选择数字1可进入输入功能界面,屏幕显示提示
16、信息,使用者逐渐输入“输入图书数:”“输入格式: 书号 书名 作者 出版日期 单价”后,系统会自动将输入的图书信息保存到文件中,如图3所示。图3 输入图书信息运行界面3、 删除功能在图2界面下选择数字2可进入删除功能界面,这时出现删除子菜单,要求作者输入要删除的书号,输入书号后,程序开始执行删除功能,如图4、5所示。 图4 删除图书信息记录运行界面图5 删除图书信息记录运行界面4、修改功能在图2界面下选择数字3可进入修改功能界面,此程序模块主要于方便使用人员进行录入的图书记录的错误的修改,使用人员选择修改的方式,直接输入图书号,按照提示就可以成功修改图书记录,选择“0”,则程序返回主菜单,如图
17、6、7、8所示。图6 修改图书信息运行界面若选择1图7 修改图书信息运行界面若选择2图8 修改图书信息运行界面5、查询功能在图2界面下选择数字4可进入查询功能界面,此程序模块主要于方便使用人员进行查询图书,使用人员选择查询的方式,直接输入书号或书名,按照提示就可以成功查询图书,选择“0”,则程序返回主菜单,如图9、10、11所示。按书号查询图9 查询图书信息运行界面按书名查询图10 查询图书信息运行界面6、统计功能 在图2界面下选择数字5可进入统计功能界面,该功能方便图书管理者整理图书馆里的藏书,如图7所示。图11 统计图书信息运行界面7、读者管理功能在图2界面下选择数字6可进入读者管理功能界
18、面,使用者按照指示进行读者卡的办理和删除,然后系统将录入的卡记录自动保存到相应的文件中,如图12、13、14所示。图12 读者管理运行界面图13 读者管理运行界面进入读者管理程序的删除读者卡功能后,会显示删除子菜单,如图9所示。图14 读者管理运行界面8、借阅管理功能在图2界面下选择数字7可进入借阅功能界面,使用者按照指示进行借阅图书和归还图书,如图15、16、17、18、19、20所示。图15 图书借阅运行界面图16 图书借阅运行界面输入卡号后,和图书编号后,图17 图书借阅运行界面图18 图书借阅运行界面图19 图书借阅运行界面然后输入归还图书的编号图20 图书借阅运行界面六、结束语通过本
19、次课程设计,我们学到了不少东西,最重要的是:我们真正的体会到c语言在实际生活中的作用,也深刻体会到了它带来的方便快捷。在设计过程中使我们学会了分工和合作。同时也使我们更加懂得了团队协作的重要性!就拿我们来说吧,在设计之前,脑中一片空白,根本不知道从哪里做起,最后经过讨论,还是先查资料充实自己最重要,所以我们四个人都去找资料了,通过不断的看书,和在网上看和我们相似的程序,我们终于明白该从哪里做起了,找到资料后,又一起讨论,分析,选材。经过大家的一起努力,终于将程序设计好了。美中不足的就是,本程序还处于初级阶段的图书借阅管理功能中,只实现了对图书的录入、删除、修改、查询、基本借阅等简单功能,不一定
20、在实际中有大的用途。在此次程序设计中,出现了各种各样的问题,在完成各自模块建立起程序后运行后,出现了很多错误,经过我们长时间的修改,还是不能解决问题,无奈之下去找老师解决问题,老师给我们提供了许多的帮助,经过仔细的检查和调试我们最终把问题都解决了,顺利的完成了程序的运行。查询、借阅模块是我们编写是花费时间最多的一部分,对于查询我们在其中加入了子菜单,想实现分别用学号和姓名查找,所以花费了很多精力,也修改了很多次,但我们最终成功了;然后我们仿照查找模块在修改模块中也加入了子菜单,丰富了我们的函数。而借阅更是困难,因为想实现书和卡的联系,所以花费了我们很长的时间。在各自编写模块的时候,大家每遇到困
21、难时都大家一起讨论一起查找资料,共同解决问题,每当解决了一个问题大家都会更有信心,又向终点迈进了一步;在完成整个程序运行时,我们都捏了一把汗,生怕又有错误,当运行成功出现了那个我们既熟悉又陌生的主目录时,我们悬着的心终于落到了地上,但在执行菜单里的命令时又遇到了些麻烦,有些信息输入后但不能输出出来,在我们经过几次尝试后,最终把输入的形式改了,和定义的类型做了更改,终于出现了我们所预期的效果。通过这次的课程设计,我们才体会到自己学到的还远远不够,而且很不扎实,所以以后有机会我们会更深入的学习C语言。七、参考文献1谭浩强.C程序设计.清华大学出版社,2005年2邓文新、张宏烈.C语言程序设计方法.
22、哈尔滨工业大学出版社,2004年3美Brian W.Kernighan,Dennis M.Ritchie .C程序设计语言.机械工业出版社,2003年 4Kenneth A.Reek. C和指针. 人民邮电出版社,1998年5 Perter Van Der LinDen. C专家编程. 人民邮电出版社,2004年 八、组员分工姓 名主要负责内容翟祥总体设计主菜单程序,删除数据程序的编码与调试郝显微学生数据管理,统计程序的编码与调试闫研借阅,归还,修改程序的编码与调试岳俊负责输入,查询程序的编码与调试九、源程序代码#includetime.h#include#include#include#in
23、clude#include#define NUM 100void input(); /*输入图书记录*/void search(); /*查找图书记录*/void search_num(); /*按图书名查找图书*/void search_mz(); /*按图书号查找图书*/void delete(); /*删除图书记录*/void delete_num(); /*按图书号删除图书记录*/void modi(); /*修改图书记录*/void modi_num(); /*按图书号修改图书记录*/void modi_mz(); /*按图书名修改图书记录*/void stat(); /*统计图书记
24、录*/void addcard(); /*增加卡*/void delcard(); /*删除卡*/void delcard_num();void Mngreader(); /*读者管理函数*/void findbook();void lendbook();void returnbook();void Lendbook();struct reader /*读者类型*/ int cardnum; char readername10;readers1000;struct book /*图书数据结构*/char no5;char mz10;char zuozhe10;int nl;int salar;
25、 empNUM,newemp;struct card /*借书卡*/ int cardnum; char readername10; int classnum; int booknum; char lenddate10; /*借书日期*/ card5000;main()int x;printf( * * * * * * * * * * * * * * * * * * * n);printf( * * n);printf( * C语言程序设计 * n);printf( * 指导教师: 张银霞 * n);printf( * * n);printf( * 设计者: 翟祥(组长) * n);print
26、f( * 闫妍郝显微岳俊 * n);printf( * * n);printf( * * n);printf( * 设计班级: 化工092 * n);printf( * * n);printf( * 设计时间: 2010 11 20 * n);printf( * * n);printf( * * n);printf( * * * * * * * * * * * * * * * * * * n);while(1)printf(=* 主菜单 *=n);printf( 1. 输入图书记录n);printf( 2. 删除图书记录n);printf( 3. 修改图书记录n); printf( 4. 查询
27、图书记录n);printf( 5. 统计图书n);printf( 6. 读者管理程序n);printf( 7. 借阅管理程序n);printf( 0. 退出系统n);printf(n);printf(* 欢迎使用图书管理系统 *n);printf(请选择(0-7):n);scanf(%d,&x);switch (x) case 1: input();break; case 2: delete();break; case 3: modi();break; case 4: search();break; case 5: stat();break; case 6: Mngreader();break
28、; case 7: Lendbook();break; case 0: break; default:printf(n Wrong!); if(x=0)break; /*图书管理程序部分*/*输入模块*/void input() FILE *fp; int n,i; if (fp=fopen(emp,wb)=NULL) printf(不能建立emp文件n); exit(1); printf(输入图书数:); scanf(%d,&n); printf(输入格式: 书号 书名 作者 出版日期 单价n); for(i=0;in;i+) /* 循环获取n个图书记录 */ printf(第%d个图书:,
29、i+1); scanf(%s%s%s%d%d,empi.no,empi.mz,empi.zuozhe, &empi.nl,&empi.salar); for(i=0;in;i+) /*将n个图书记录写入文件*/ fwrite(&empi,sizeof(struct book),1,fp); fclose(fp);/*统计模块*/void stat( ) FILE *fp; int i; if(fp=fopen(emp,rb)=NULL) printf(不能打开emp文件n); exit(0); printf(记录号 书号 书名 作者 出版日期 单价n); for(i=0;fread(&empi
30、,sizeof(struct book),1,fp);i+)printf(%5d%3s%9s%7s%8d%7dn,i+1,empi.no,empi.mz,empi.zuozhe, empi.nl,empi.salar); printf(共有书%d本nn,i); fclose(fp);/*删除模块*/void delete() int x; while(1) printf(nntt删除子菜单n); printf(tt*n); printf(tt 1.按书号删除记录n); printf(tt 0.返回主菜单n); printf(tt*n); printf(t 请选择(0-1):); scanf(%
31、d,&x); switch(x) case 1:delete_num();break; default:printf(nWrong!); if(x=0)break; void delete_num() FILE *fp; int i,j,n; char num5; if(fp=fopen(emp,rb)=NULL) printf(不能打开emp文件n); exit(1); printf(删除前:n); printf(记录号 书号 书名 作者 出版日期 单价n); for(n=0;fread(&empn,sizeof(struct book),1,fp);n+) printf(%6d%6s%9s
32、%4s%5d%6dn,n+1,empn.no,empn.mz,empn.zuozhe, empn.nl,empn.salar); /*n为emp文件中记录数*/ printf(要删除的书号:); scanf(%s,num); for(i=0;(strcmp(empi.no,num)!=0&i=n) printf(t没有%s书号的书n,num); exit(2); fclose(fp); fp=fopen(emp,w+); if(n=1) /*一个记录已经删除了*/ fclose(fp); exit(3); for(j=0;ji;j+) fwrite(&empj,sizeof(struct bo
33、ok),1,fp); for(j=i+1;jn;j+) fwrite(&empj,sizeof(struct book),1,fp); printf(删除后:n); fseek(fp,0,SEEK_SET); printf(记录号 书号 书名 作者 出版日期 单价n); for(i=0;fread(&empi,sizeof(struct book),1,fp);i+) printf(%6d%6s%9s%4s%5d%6dn,i+1,empi.no,empi.mz,empi.zuozhe, empi.nl,empi.salar); fclose(fp);/*修改模块*/void modi() in
34、t x; while(1)printf(nntt修改子菜单n);printf(tt*n);printf(tt1. 按书号修改n);printf(tt2. 按书名修改n); printf(tt0. 返回主菜单n);printf(tt*n);printf(t请选择(0-2):);scanf(%d,&x);switch(x) case 1:modi_num();break; case 2:modi_mz();break; default:printf(n输错误!);if(x=0)break;void modi_num() FILE *fp; int i; char num5; if(fp=fopen
35、(emp,rb+)=NULL) printf(不能 打开emp文件n); exit(1); printf(输入要修改的书号找到原书:); scanf(%s,num); for(i=0;fread(&empi,sizeof(struct book),1,fp);i+) if(!strcmp(empi.no,num)break; if(feof(fp) printf(t没有%s书号的书n,num); exit(2); printf(输入格式: 书号 书名 作者 出版日期 单价n); scanf(%s%s%s%d%d,newemp.no,newemp.mz,newemp.zuozhe,&newemp
36、.nl,&newemp.salar);/*获取新的图书记录*/ fseek(fp,-1L*sizeof(struct book),SEEK_CUR); /*文件指针指向该修改的记录开头*/ fwrite(&newemp,sizeof(struct book),1,fp); /*用newemp覆盖当前记录*/ printf( 修改后:n); fseek(fp,0L,SEEK_SET); /*显示修改后的文件数据*/ printf(记录号 书号 书名 作者 出版日期 单价n); for(i=0;fread(&empi,sizeof(struct book),1,fp)!=0;i+) printf(
37、%5d%3s%9s%7s%8d%7dn,i+1,empi.no,empi.mz,empi.zuozhe,empi.nl,empi.salar); fclose(fp); void modi_mz() FILE *fp; int i; char mz8; if(fp=fopen(emp,rb+)=NULL) printf(不能打开emp文件n); exit(1); printf(输入要修改的书名找到原书:); scanf(%s,mz); for(i=0;fread(&empi,sizeof(struct book),1,fp);i+) if(!strcmp(empi.mz,mz)break; i
38、f(feof(fp) printf(t没有%s书名的书n,mz); exit(2); printf(输入格式: 书号 书名 作者 出版日期 单价n); scanf(%s%s%s%d%d,newemp.no,newemp.mz,newemp.zuozhe,&newemp.nl,&newemp.salar);/*获取新的图书记录*/ fseek(fp,-1L*sizeof(struct book),SEEK_CUR); /*文件指针指向该修改的记录开头*/ fwrite(&newemp,sizeof(struct book),1,fp); /*用newemp覆盖当前记录*/ printf( 修改后:n); fseek(fp,0L,SEEK_SET); /*显示修改后的文件数据*/ printf(记录号 书号 书名 作者 出版日期 单价n); for(i=0;fread(&empi,sizeof(struct book),1,fp)!=0;i+) prin