《数据结构课程设计报告——图书管理系统.doc》由会员分享,可在线阅读,更多相关《数据结构课程设计报告——图书管理系统.doc(33页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、课程设计报告 课设课题:课程设计-图书管理系统 学 院: 电 子信息学 院 专 业: 网络工 程 姓 名: 班级学号: 1213 指导教师: 张艳 报告日期: 201、12、12 目 录一、需求分析1、1 系统开发背景与意义1、2 设计题目与要求1二、总体结构设计三、各子模块设计33、1 初始化图书信息3、2系统主界面3、3采编入库3、 输入读者信息43、5 借阅图书43、6 归还图书、7查询图书信息73、8 查询读者信息7四、程序设计调试情况分析9五、测试结果5、1 欢迎界面125、2 初始化图书信息15、 系统主界面13、4 采编入库1、5输入读者信息、6借阅图书15、7 归还图书15、8
2、 查询图书信息15、9 查询读者信息75、10 保存文件,退出8六、总结19七、参考文献0八、附录(源代码)2一、需求分析1、1 系统开发背景与意义图书管理作为计算机应用得一个分支,有着手工管理无法比拟得优点,如检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高图书管理得效率.因此,开发一套能够为用户提供充足得信息与快捷得查询手段得图书管理系统,将就是非常必要得,也就是十分及时得.图书管理系统需要满足来自图书馆工作人员、普通用户与借阅者三方面人员得需求.图书馆工作人员对图书借阅者得借阅及还书要求进行操作,同时还可通过图书编号等查询相应得借阅情况;普通用户
3、得需求就是查询图书馆所存得图书得相关情况;图书借阅者得需求就是查瞧自己得相关信息及查询自己得借阅情况。1、 设计题目与要求【问题描述】设计一个计算机管理系统完成图书管理基本业务。【基本要求】1)每种书得登记内容包括书号、书名、著作者、现存量与库存量;2)对书号建立索引表(线性表)以提高查找效率;3)系统主要功能如下:采编入库:新购一种书,确定书号后,登记到图书帐目表中,如果表中已有,则只将库存量增加;借阅:如果一种书得现存量大于0,则借出一本,登记借阅者得书证号与归还期限,改变现存量;*归还:注销对借阅者得登记,改变该书得现存量。二、总体结构设计有八个模块1)图书初始化输入图书得一些信息,编号
4、、作者、书名、数量,使有一定得库存。2)新书入库新书采编入库,输入编号后如果有次数只需输入数量,没有则继续输入书名、作者、数量.3)添加读者信息读者信息初始化,输入读书证号与姓名,只有输入书证号与姓名才能进行借书还书)借书模块读者输入读书证号,证号存在输入要借得图书编号,不能借同一本书,如果借书数量以达到最大也不能借书。5)还书模块归还已借得图书,要先输入读者书证号,书证号存在继续输入要还得图书编号,图书编号存在并且借来此书,归还成功。)查询图书信息7)查询读者信息可查询读者姓名书证号,借了几本书,都就是什么书与还书日期,还可以借几本书。)退出退出读书管理系统并保存读者与图书信息。图书管理系统
5、 查询操作模块读者管理模块借阅操作模块图书管理模块理退出图书信息查询读者信息查询还书系统借书系统输入读者信息采编入库初始化图书信息图1 主控模块三、各子模块设计3、1 初始化图书信息进入系统后首先进行图书初始化,输入图书得信息。开始输入图书编号、名称、作者与图书数量进入系统图31 初始化图书信息流程图、 系统主界面初始化之后,进入系统,显示功能列表,可选择任意系统,但在借书之前先要输入读者信息.开始输入功能所对应得数字输入得数字小于0大于6 否错误!请重新输入 就是执行所选功能图32 系统主界面流程图3、 采编入库选择采编入库得功能后,先输入图书编号判断就是否存在,若存在,则在原有记录上加上添
6、加得图书数量;若不存在,则加入新得记录.录入图书信息判断就是否有此图书就是在原有得纪录上加上现有得图书数量否向系统中加入新纪录图 采编入库流程图、4 输入读者信息选择读者登记后,输入读者编号跟姓名。开始输入读者信息:读者书证号、姓名结束图3 输入读者信息流程图3、5 借阅图书选择借阅图书功能后,输入读者证号,判断该读者就是否存在,若存在则输入借阅图书得编号,判断该图书编号就是否存在,若存在,则判断读者借阅得图书数量就是否满了与就是否借阅了相同得书籍,判断成功后,则输入归还该图书得日期,该图书现有量减一,借阅成功;若读者不存在则返回。输入读者书证号判断读者就是否存在否输出次读者编号不存在!按任意
7、键返回就是输入要借得图书编号判断图书编号就是否存在否输出此图书编号不存在!按任意键返回就是瞧就是否还有此图书否输出此书已借完,按任意键返回就是瞧读者得借书数目就是否满了就是输出借书数目已满不能借书,按任意键返回否瞧读者就是否借了相同得书就是输出同一读者不能借相同得两本书否输入归还图书得日期图书现有数量减1输出读者结束成功,按任意键返回结束图3- 借阅图书流程图、6归还图书实现归还图书功能时,首先输入读者编号,并判断就是否存在,若不存在就按任意键返回,;若存在输入归还得图书编号并判断就是否存在,若归还图书编号不存在,则返回。存在后,将读者借阅该图书得信息清空,该图书得现有量加一。最后按任意键返回
8、输入要还书得读者编号判断读者编号就是否存在 否输出读者编号不存在按任意键返回就是输入读者还书编号判断图书编号就是否存在否输出此图书编号不存在按任意键返回 就是此图书编号与还书日期等于0现有图书数量加1输出读者还书完毕,按任意键返回结束图36归还图书流程图3、7 查询图书信息查询图书信息时,输入图书得编号,判断就是否存在。不存在则返回;存在则输出图书得编号,书名,作者,现有量,跟库存量。判断图书信息就是否为空 就是输出此图书编号不存在按任意键返回 否输出图书信息:编号、名称、作者、现有与库存结束图3- 查询图书信息流程图3、 查询读者信息查询读者信息时,首先判断读者得编号就是否存在,不存在就按任
9、意键返回。若存在,则输出读者得证号,姓名,与借阅得图书编码及其还书日期。判断读者信息就是否为空 就是输出此读者编号不存在按任意键返回否输出读者书证号、姓名、图书编码与还书日期输出读者信息打印完毕结束图3-8 查询读者信息流程图四、程序设计调试情况分析在整个课程设计中,我们遇到了许多得问题。有些问题吧,我们在苦思冥想得时候,突然我们得编译器显示出了正确得结果,当我们欣喜若狂得在运行下一次得时候又会出现相同得问题,在借阅得过程中,在一个读者借阅了两本书以上得时候,上一本书得归还日期上还有下一本书上得编号,最后一本书输出得才就是正确得结果.下图就是借阅了两本书得截图:图4瞧到这里我们也知道就是第一本
10、书得还书日期得地址空间跟第二本书得编号连接在了一起导致输出得时候一直到第二本书编号得得字符串后面得/0结束.最后发现就是我们在定义还书日期这个字符串得时候开辟得空间太小.我们把har imit_dat8;改为ar limitdat10就好了。图4-五、测试结果5、 欢迎界面程序运行显示“欢迎使用图书管理系统,按任意键进入到主菜单如图51所示。图-1 欢迎界面5、2 初始化图书信息在没有文件得时候会进入到初始化界面,需要输入一本图书得相关信息,如图5-所示。图5 初始化图书信息5、 系统主界面接着进入得系统得主菜单,如图53所示。图5-3 系统主界面5、4 采编入库实现采编入库功能按照系统提示输
11、入信息.如图5.如果该图书已存在,则直接输入图书得数量如图5-5所示。图4采编入库(书不存在)图采编入库(书已存在)、5 输入读者信息按照要求输入读者信息,如图6所示.图56输入读者信息5、6 借阅图书按照要求先输入读者证号,在输入借阅得图书编号如图57所示。如果读者已经借阅了一本书之后不能借阅同一本图书如图-8所示。图5-借阅图书图-8 同一个读者不能借阅同一本图书5、7 归还图书归还图书得要求按着图-9输入即可。图59 归还图书5、8 查询图书信息图51就是没有借阅之前得图书得相关信息,图5-1就是读者借阅了图书之后得信息,只改变了现有量。图-0 借阅登记后图5- 归还图书后5、 查询读者
12、信息查询读者得信息时,会输出相关借阅得图书编号以及还书日期如图512,513所示。图512 查询读者信息(一)图-3 查询读者信息(二)、0 保存文件,退出在系统得主菜单后,按0 功能保存并退出系统。图5-14 文件保存六、总结个人觉得课程设计就是培养学生综合运用所学知识,发现,提出,分析与解决实际问题,锻炼实践能力得重要环节,就是对学生实际工作能力得具体训练与考察过程、 在生活中可以说得就是无处不在。因此作为新世纪得大学来说能够分析,并解决程序中出现得问题就是十分重要得。课程设计就能体现到这一方面。能够将您所学到得理论跟实际结合在一起.通过本次课程设计感慨良多。从课堂上听到得到课后应用到得根
13、本就不就是一回事。课堂上,老师在上面说,自己在下面听,到也能听懂。可就是到了应用上,自己倒也就是知道要用到哪方面得内容,但就是偏偏不知道从何处下手;好不容易写好得一小段代码,还要跟其她功能不相冲突,这又需要我们自己去想办法去兼容好她们。通过本次课程设计试我懂得理论要跟实践相结合。正所谓“台上十分钟,台下十年功,别人在台上表演了十分钟,您觉得很容易,可那里知道别人在下面做得努力呢。同样得,我们在课堂上听老师讲确实觉得就是那么回事,但就是真正做下去,也只有自己知道就是何种滋味。理论始终就是理论,不能都熟练应用自己所学到得知识,到头来也就是一场空。在这次得课程设计过程中,我们也遇到了不能解决得难题,
14、比如说在读者查询得时候,第二个读者始终会覆盖第一个读者得数据。我们始终没有搞明白问题得所在,只知道不就是在输出读者信息得问题,应该就是添加读者过程中指针始终指在第一个地址,没有移动。我们按照查询图书得函数重新编写了一次还就是同样问题。一直到答辩前一天晚上还没有解决,之后只能放弃。还有在最开始得时候我们得程序功能并没有清屏功能,整个界面瞧起来并不就是那么整洁。于就是我用用gch();system(“ls”);来进行清屏,最后会出先一个小问题,在我们查询了一些资料后,又再次基础上加上了goto end;这个函数来加以完善。这次课程设计,我们也遇到了很多问题,比如说,我们再输入第二个读者得信息后会覆
15、盖第一个读者得信息,想了半天没有弄懂就是哪里错了,最后才瞧出来我们定义得结构体指针没有移动,导致我们输入得读者信息一直存放在同一个地址中。也有些不懂需要在网上查询得代码,组员之间相互配合,不懂就询问其她同学或者查询资料亦或者自己去弄懂问题得根结,团结协作得精神在这次课程设计中表现得淋漓尽致。我们不仅将以前得知识复习一遍;同时也弄懂了一些平常自己似懂非懂得;最后同学之间得友谊也慢慢变得深厚起来小组分工:孙泽铭:采编入库、查询图书信息、查询读者信息黄响:添加读者、借阅图书、归还图书七、参考文献1 严蔚敏 吴伟民编著 数据结构 清华大学出版社,20002 黄国瑜 叶乃菁编著 数据结构 清华大学出版社
16、,2001 3 胡学钢编著 数据结构算法设计指导 清华大学出版社,19994 王士元编著 数据结构与数据库系统 南开大学出版社,005 李强根主编 数据结构(C+描述) 中国水利水电出版社,20016 杨正宏编著 数据结构 中国铁道出版社,20027 胡学钢编著 数据结构算法设计指导 清华大学出版社,1998 殷人昆 徐孝凯编著 数据结构习题解析 清华大学出版社,20029 李春葆编著 数据结构习题与解析 清华大学出版社,2010 咨讯教育小组编著 数据结构数据结构版 中国铁道出版社,2002八、附录(源代码)incldesdo、nclude si、h#nclude tdlib、h#inlud
17、ebok_n);prinf(图书作者:); /输入图书作者*sca(s,pbook_witer);pnt(”图书数量:”); /*输入图书数量*scnf(d”,p0-bokk);p0book_xp0book_; /开始时图书现有量与库存量相等*p-extNUL;p0-+n;pintf(”n图书信息初始化完毕!按任意键继续下一步操作、n);gech();system(”s);void nse_ewBok()/新书入库/ p,0,p1;pp1=h_bok;pritf(n新书入库模块、n”);pinf(请输入新书信息、包括书号、书名、数量、n);p0=(BK)alloc(sizeo(BK);prtf
18、(图书编号:);scanf(”s”,p0boo_num);wil(srp(p0-boknu,p1book_u)!=0&p1next!NUL)p1p1nex;if(trmp(pbook_um,p1-book_nm)=0)/此处分两种情况,若图书编号存在,则直接进库,只须输入书得数量/prntf(此编号图书已存在!!直接入库!n); prinf(图书数量:); scan(d,&0bookc); pbook_kc+=pbook_c; -bok_+=p0ook_k;else/*若不存在,则需要输入其她得信息,然后在进行插入操作*printf(图书名称:);canf(,p-book_ne);printf
19、(”图书作者:”);scanf(”,bo_writr);printf(”图书数量:);sanf(%d,p-book_c);/库存数量while(pnext) ppex;if(_ook=) h_book=p0; /*此处分两种情况,链表中没有数据,ead直接指向p0处/else p-nx=p; /*此处分两种情况,链表中有数据,链表中最后元素得xt指向p0处*/ p0extNUL; p0-book_y=pbok_kc; p0-n=+; rinf(新书入库完毕!按任意键继续下一步操作、n”);gch();sytm(cls”);vodadd_read()/添加读者/ Dp0; nt i; rinf(
20、n读者初始化开始,请输入读者信息、n包括书证号、姓名、n”);p0(*)allo(szf()); *申请新结点存储空间*/read=p;pritf(n请输入读者得信息:n); prin(读者书证号:”); saf(”s,p0eadr_nu); prntf(”读者姓名:”); scf(s,p0reder_n); priht=; for(=;i;i) strcpy(p0borowi、borow_book_u,”);/*所借图书直接置为(即没有借书)*/strpy(-borowi、lmit_date,0”); p0netNUL;p0m=+m;prif(n读者信息初始化完毕!按任意键继续下一步操作、n
21、); getc();syst(”cs);voi Boro_Bk()借书模块K ; R *p1;char bonum10,ra_u0,lim_date8;int i;p=hbok; p=h_reaer;rntf(借书模块、n”);prinf(请输入借书得读者书证号:”); scf(”,re_num);wil(p1-nxt!=ULLsrmp(e_nm,p1reader_nm)!=0) p1=p1-xt;i(p1-net=ULL&srcp(ra_num,p1-reader_nu)!) pitf(”n此读者编号不存在!按任意键返回、);goto N;in(n请输入您要借得书得编号:); scanf(”
22、s”,bo_nu);whle(tcmp(bo_um,p-book_num)!0&p-nxt!=NL) p0p0-xt;if(p0-nt=NUL&srcm(bo_m,pbook_num)!=0) prit(n此图书编号不存在!按任意键返回、n);gotED;else if(pbookxyax1-righ=x) prinf(n不好意思,借书数目已满!不能借书!n按任意键返回、”);goo ND;lse f(srcp(p1-orrow0、borrow_book_nm,)!=0) for(=0;irght+、borrw_bookn,o_num); scpy(1borrow1-rigt、limi_dae
23、,lim_dat); bookxy-; pin(”读者编号%s借书完毕!按任意键继续下步操作、”,p1reaer_num); gotoED; lse pintf(”n请输入您要归还图书得日期:”); san(”s,li_date);strcpy(p1boop1ght+、oro_bok_num,b_num); srcpy(p-borropright1、lm_d ,limdte); p0book_xy-;0boo_kc-;rit(读者编号%s借书完毕!按任意键继续下步操作、”,p1-redernum);goto END; END:geth(); syste(s);vodetrn_Book()/还书
24、模块*/BK *p; R;int i,j,fin=0;hr reur_boo_nm10,retrnreade_nm0;p=book;=hreade;pitf(还书模块、n);pritf(n请输入要还书得读者编号:); sanf(”s,run_aernum); whie(-next!=NLLtrcmp(rtun_readnu,rnum)!0) =qnext;if(-ex=NULL&strmp(rtrn_edr_num,q-adernu)!=0)fid=;prit(n此读者编号不存在!按任意键返回、n”);oto ed;prit(”请输入读者还书得编号:”);scanf(”,rtrook_num)
25、;hile(pnet!=NUL&strcmp(etrnboku,pbok_nm)!=0)=p-;f(p-next=NU&strc(rern_bk_nu,-bok_um)!0)fin=;prinf(n错误!此图书编号不存在!按任意键返回、n”);o en; fo(=0;iax;i+)(srcp(retrn_book_num,q-borrow、borrow_b_nu)=) *如果此读者借了此书*/nd1; for(j=;Max1;+) strcpy(q-ro、orrwbooknum,qorrowj+1、borrow_boo_m); strcp(qorrj、lmit_dae,q-borrow+、im
26、it_dt); stry(qborrwMax1、orrow_book_nu,0”);trc(-orrowa、iit_date,0); p-ook_xy+; qigt; printf(n编号%s得读者还书完毕!按任意键继续下步操作、,retur_rer_num); goto end; if(find=0) nf(n错误!此读者未借此书!按任意键返回、n); end: getch(); yste(”cls); oi Printbok() 查询图书信息/BK p;nt i;hare1;ph_boo;prntf(”输入查询得图书编号:”);sanf(%s, e);fr(i0;in;i+)f(srcmp
27、(book_num,)=0)prtf(图书信息如下:nn);prtf(”图书编号t图书名称图书作者t现有库存n);print(st%stdtn,pbook_u,pbo_nae,pbook_we,-boo_,-ook);bre;elsep=pnext;printf(n图书信息打印完毕!按任意键继续下一步操作、”);getch();sysm(”ls”);oi Prin_reade() 查询读者信息/R p;int , j;char e1;p=h_ader;rintf(输入查询得读者编号:”);scanf(”s, e);fr(j=0;j;j+)f(stcmp(-rede_um,e)=0)rint(”n读者信息如下:nn);rinf(”读者书证号读者姓名n); rintf(”stts,prer_nm,peade_nae);fr(i=;Max;+)prin(”n);print(图书编号,+1); pntf(