图书管理系统.docx
- 文档编号:10632629
- 上传时间:2023-02-22
- 格式:DOCX
- 页数:35
- 大小:316.03KB
图书管理系统.docx
《图书管理系统.docx》由会员分享,可在线阅读,更多相关《图书管理系统.docx(35页珍藏版)》请在冰豆网上搜索。
图书管理系统
C程序基础实训任务书
题目:
图书管理系统
学生姓名:
学号:
班级:
题目类型:
软件工程(R)指导教师:
龚翔/马生菊
一、设计目的
1.进一步掌握和利用C语言进行程序设计的能力;
2.进一步理解和运用结构化程序设计的思想和方法;
3.初步掌握开发一个小型实用系统的基本方法;
4.学会调试一个较长程序的基本方法;
5.学会利用流程图或N-S图表示算法;
6.掌握书写实训开发文档的能力(书写实训报告)。
二、设计任务及内容
功能描述:
1.图书基本信息的输入;
2.图书基本信息的查询;
3.新进图书基本信息的添加;
4.对撤消图书信息的删除;
5.为借书人办理注册;
6.办理借书手续(非注册会员不能借书);
7.办理还书手续。
8.系统以菜单方式工作
信息描述:
有关该系统基本信息的描述,如:
图书名称、图书编号、单价、作者、存在状态、借书人姓名、性别、学号等。
三、设计要求
1.用C语言实现系统;
2.利用结构体、数组等实现数据结构设计;
3.系统具有增加、查询、插入、排序等基本功能;
4.系统的各个功能模块要求用函数的形式实现;
5.文档:
实训说明书每个学生一份,并装在统一的资料盒中。
6.光盘:
每个学生文档和程序资料分别建在一个以自己学号和姓名命名的文件夹下,并要求每班负责人汇总每个学生的文件放在以班级姓名命名的文件夹下,刻录成一张光盘,放在一个专门的资料袋中。
四、提交的成果
1.设计任务书一份(学校统一格式)
2.设计说明书一份,内容包括:
1)中文摘要100字,关键词3-5个。
2)课程设计题目、内容、要求。
3)总体设计(包含几大功能模块)。
4)详细设计(各功能模块的具体实现算法——流程图)
5)数据结构设计描述,各模块(函数)的功能介绍,参数说明等。
6)调试分析(包含各模块的测试用例,及测试结果。
)
7)总结(实训完成了哪些功能,还有哪些地方需要改进,及通过实训有何收获,调试程序的体会等)
8)参考文献、致谢等。
五、主要参考资料
1.王连相.《C/C++程序设计》武汉大学出版社.2013.7
2.谭浩强《C语言程序设计(第2版)学习指导》清华大学出版社.2012.12
3.杨莉,龚义建《C语言程序设计实训指导教程》华中科技大学出版.2009.6
4.张小东,郑宏珍《C语言程序设计与应用》人民邮电出版社.2009.4
5.郭翠英《C语言课程设计案例精编》中国水利水电出版社2004.03
6.郭有强《C语言程序设计》清华大学出版社2009.02
7.李丹程,刘莹,那俊《C语言程序设计案例实践》清华大学出版社2009.02
8.李丽娟《C语言程序设计教程》人民邮电出版社2013.01
9.武雅丽,王永玲,解亚利《C语言程序设计》清华大学出版社2009.02
六、各阶段时间安排(共1周)
日期
内容
地点
完成情况
教师签字
星期一
教师讲解设计要求,准备参考资料
教室
星期二
分析系统,方案设计
教室
星期三
方案设计,编程
教室
星期四
调试程序,书写实训说明书
教室
星期五
完成实训说明书,答辩
教室
摘要
人类已经跨入了新世纪,正在进入信息化时代。
信息化浪潮、网络革命在给社会带来冲击的同时,也使图书馆业务受到了强烈的冲击,图书馆传统的管理和服务方式已不能适应读者对日益增长的文献信息的需求。
随着馆藏量的不断增加,图书资料的录入和查询的难度也就相应增加,数据处理手工操作,工作量大,出错率高,出错后不易更改的手工方式,已经不能满足要求。
基于此问题,建立一个规范化,系统化,程序化的图书管理系统迫不急待。
为方便对图书馆书籍、读者资料、借还书等进行高效的管理,特编写程序以提高图书馆的管理效率。
使用程序之后,工作人员可以查询某位读者、某种图书的借阅情况,还可以对当前图书借阅情况进行一些统计,以便全面掌握图书的流通情况等等。
关键词:
C语言;图书管理;数据处理;信息技术
附录18
1绪论
1.1选题背景和选题意义
1.1.1选题背景
随着社会的发展及知识经济时代的到来,信息管理系统在各行各业发挥着越来越重要的作用。
而在高校的图书管理中,信息技术避免了因人工操作而带来的一些不必要的麻烦。
1.1.2选题意义
图书馆作为一种信息资源的集散地,图书和用户借阅资料繁多,包含很多的信息数据的管理,现今,有很多的图书馆都是初步开始使用,甚至尚未使用计算机进行信息管理。
根据调查得知,他们以前对信息管理的主要方式是基于文本,表格等纸介质的手工处理,数据处理工作量大,容易出错。
由于数据繁多,因此很容易丢失,并且查找不方便。
总的来说,目前的很多图书馆缺乏系统规范的信息管理手段。
尽管有的图书馆有计算机,但是尚未用于信息管理,没有发挥它的效力,资源闲置比较突出,这就是图书管理系统的开发的基于环境。
1.2图书管理系统需求分析
为满足图书管理现代化的需求,国内软件商已开发出很多商品化图书管理软件,但他们大多是面向大型专业图书馆而开发的,专业性强,操作和使用比较复杂,难以掌握。
而国内很多中小型图书馆由于管理人员不多且大多数不是图书管理业务的专业人员、业务分工也不是很详细、明确,这样的软件对于他们而言太复杂,所以应用效果并不是很好。
目前在大的图书馆己经有一整套比较完善的信息管理系统,而在一般小型图书馆中大部分工作还是进行手工管理,工作效率低,并不能即时了解图书馆各类图书的库存,读者比较需求的图书难以在短时间内找到,图书的入库和更新比较麻烦等等,不便于动态及时调整图书结构。
同时由于不可避免的人为因素,造成数据的遗漏、误报等。
为了更好的适应当前中小型图书馆的读者借阅需求,缓解手工管理存在的各种弊端,因此开发了面向中小型图书馆的图书管理系统,为用户提供全方位的信息服务。
通过对中小型图书馆的调查、分析发现,用户的需求可分为4个方面:
第一是图书馆的工作人员通过计算机来管理各类图书,分类编号、调整图书结构、增加图书库存,适应读者的需求。
第二是读者能通过计算机来查询浏览图书馆中的图书,来确定自己需要的书籍,为借阅做好准备。
第三是工作人员对读者的借书情况能够作好全面掌握,能及时得到每个读者的当前借阅状态和历史借阅记录。
第四也是图书馆的核心工作,对图书的借阅管理。
在软、硬件方面对系统的需求是软件要易学,容易掌握,可以很简单方便地管理各种图书信息。
硬件的配置要求不能太高,这样可以适应中小型图书馆的经济条件。
总之,中小型图书管理信息系统旨在提供一个可以操作的,方便查询的,易于修改的辅助管理系统。
同时提供了系统智能辅助与用户自主选择的两种方式,提高查询效率。
2系统分析
2.1题目描述
本课程设计任务的目的是要求学生按照分析、设计、编码、调试和测试的软件开发过程独立完成管理系统设计,以及C语言算法的掌握,并能最终实现本系统的功能要求,通过这个程序可以学习到以前调试短程序没有的的经验。
要求为各项操作功能设计一个菜单。
应用程序运行后,先显示这个菜单,然后用户通过菜单项选择希望进行的操作项目;要求以上功能分别用函数实现。
2.2题目分析
图书馆管理系统包括:
信息录入(新进图书及基本信息输入)、信息删除(旧图书及基本信息删除)、信息浏览(对所有图书的查看信息)、信息查询(通过标题查询和作者查询获取需要的图书信息)、信息修改(修改已有的图书信息)信息和信息排序(通过编号排序和价格排序来管理信息)。
系统以菜单方式工作,界面友好,易于操作。
系统的程序设计环境:
使用VisualC++作为程序开发工具。
VisualC++是一款快速应用程序开发工具,是当今最强大、最灵活的应用程序开发工具之一。
3总体设计
3.1总体设计思路
总体设计目标:
使用者可以利用本系统进行对图书馆借阅的各项运算操作,如根据用户的需求自动的进行添加图书,删除图书,借书还书。
查找所要的图书,查阅图书的详细资料,查阅读者的详细资料。
最后清晰完整的结果于屏幕中。
大大方便使用者对图书借阅的操作,不仅节省时间,而且提高准确性,可以达到事半功倍的效果。
本系统采用的是自顶向下、层次化的模块结构。
对高层模块,采用以事务为中心的设计策略,把一个大的模块逐步分解成较小的相对简单的模块。
对低层模块,采用以变换为中心的设计策略。
为了提高每个模块的内聚性、降低模块间的耦合性,将每个模块设计成具有单一功能的模块(即功能内聚),使模块间的联系完全是通过主模块的控制和调用来实现(即非直接耦合)。
3.2总体设计模块及框图
结合上述分析该系统应包括以下模块:
信息输入、信息删除,信息查询,信息显示,信息修改,图书借出、图书归还。
程序框图如图3.1所示:
图3.1图书管理系统结构框图
4详细设计
4.1主函数
主函数要求设计比较简洁,只提供设输入,处理和输出部分的函数调用。
其中各功能模块用菜单方式选择。
当第一次使用时,必须先输入图书的信息。
而当再次操作时用户可以输入数字1-7来选择不同的功能,先简略描述一下,详细功能会在接下来说明。
输入“1”时,进入输入图书模块;输入“2”时,进入添加图书模块;输入“3”时,进入查询图书模块;输入“4”时,进入排序模块;输入“5”时,进入修改图书模块;输入“6”时,进入删除模块;输入“7”时,进入借阅模块。
4.2输入模块
该模块的功能是假如用户需要新加入新的图书信息,通过键盘输入将新信息逐条加在原来输入文件上但不能覆盖原有信息。
而如果用户是第一次使用该系统,则会强制要求先输入一批图书信息,否则不会显示其他功能。
流程图如图4.1:
图4.1输入模块流程图
4.3删除模块
该模块用于显示所有图书信息,由于记录较多,故而采取分屏显示。
显示完所有纪录后,用户需输入图书编号进而查找图书信息。
为了防止误操作,在删除信息前,会让用户输入Y/N来选择是否继续执行操作。
流程图如图4.2:
图4.2删除模块流程图
4.4查询模块
该模块功能是为了方便用户更快捷地找出需要的图书,不用在浏览模块中一条一条的寻找。
用户可以使用“按标题查询”、“按作者查询”两种方式来更快地找到目标。
流程图如图4.3:
图4.3查询模块流程图
4.5修改模块
该模块功能是用户可以修改错误的图书信息。
首先用户需要输入图书编号来获取目标,若有记录则修改信息,若无相关信息则提示用户重新输入。
流程图如图4.4:
图4.4修改模块流程图
4.6显示模块
该模块功能为显示全部的图书信息。
根据各模块所需要显示信息的不同,显示模块所执行的操作也会不同。
流程图如图4.5:
图4.5显示模块流程图
4.7借阅模块
该模块功能为用户输入图书序号,若查找到图书则办理借阅服务,图书的状态改为“已借出”,否则报错,提示用户重新输入或者退出。
流程图如图4.6:
图4.6借阅模块流程图
4.8归还模块
该模块功能是接收归还的图书,将图书信息改为“存在”。
流程图如图4.7:
图4.7归还模块流程图
4.9排序模块
该模块功能为根据图书价格或者编号排序,并且打印排序以后的图书信息。
流程图如图4.8:
图4.8排序模块流程图
4.10公共函数
定义了一个book类型的结构体,用来存储图书信息,包括图书编号、作者、书名、ISBN、出版社、出版时间等。
结构体如下:
structbook
{longnum;
charauthor[15];charname[25];
charsort[25];charadd[30];
longtime;floatprice;
intborrowed;structbook*next;};
5调试与测试
第一,用一组简单的数据对程序进行调试,是否各函数有出错现象。
然后用复杂数据对程序进行调试。
直到确定程序对正常数据没有错误为止。
第二,当数据测试时,程序错误,要首先找到出错的函数,对函数中各个变量进行观察,有时变量很多,循环多重不要急,对各个数据的观察,对程序的调试有很大的帮助。
你也可以先对几个变量熟悉后,在多重循环里,确定正确的数据,将其跳过调试,对有疑问的数据循环进行仔细观察。
虽然这是比较省力气的活,但对复杂的数据错误并不是很有效,所以仔细观察每个数据的变化对调试的成功与否有决定性作用。
第三,测试时,根本的错误并不一定在运行错误的函数内,或许在前面的函数内已经奠定了这些错误数据的基础,需要反过头来,对所有的的函数进行一项项的调试!
从程序运行的第一个函数开始调试。
按照程序运行的步骤下去。
一个个的确定函数的正确性,每确定一个函数,在以后的调试中可以减少对该函数的调试次数,或者直接跳到下一个函数。
所谓的各个击破便是如此。
对头文件中的各个函数的返回值和它所要传入的参变量及其功能更是需要注意。
第四,调试时,需要对错误缩小范围,从整个程序到指定函数,再到指定区域,再到指定行,在对程序缩小范围或对编译没通过的程序缩小错误范围时可以用"/**/"来进行调试,确定正常范围,缩小错误范围。
6编码实现
主界面截图:
注册新书界面截图:
浏览界面截图:
查询界面截图:
修改界面截图:
删除界面截图(1号图书已被删除):
结论
经过以上的介绍,已经完成了图书管理系统的开发,图书管理系统是一套实用性非常强的系统,从小学、中学直到大学,很多人一直与图书馆打交道,图书馆的发展从手工管理、手工管理和计算机管理并行,直到现在的完全计算机管理。
图书管理系统不仅需要灵活的交互功能,还需要经常与数据库进行联系,要求具有操作简单和功能强大的数据库访问能力。
界面尽量美观友好、多彩多姿,完全的图形化设计,操作者易于上手,同时多种媒体技术的集成利用,可以方便的完成用户乐于接受的各种界面设计。
本系统虽具备了基本的功能,但由于时间关系,还有很多功能待实现,在此基础上结合实际应用中所出现的问题,要改善图书的入库和删除功能,使工作人员在主界面上就能进行其操作;在过期天数中应该增加罚款的功能;如果作为校园的图书管理系统,应区分出不同身分的人(如教师和学生)的借阅权限等。
通过这次编程我深深的感受到对代码的变量命名,代码内注释格式,甚至嵌套中行缩进的长度和函数间的空行数字都有明确规定,良好的编写习惯,不但有助于代码的移植和纠错,也有助于不同人员之间的协作。
我们还要有模块化思维能力,模块化思维就是编程任何一个功能模块或函数的时候,要多想一些,不要局限在完成当前任务的简单思路上,想想看该模块是否可以脱离这个系统存在,是否可以通过简单的修改参数的方式在其他系统和应用环境下直接引用,这样就能极大避免重复性的开发工作。
善于总结,也是学习能力的一种体现,每次完成一个编程任务,完成一段代码,都应当有目的的跟踪该程序的应用状况,随时总结,找到自己的不足,这样所编写的程序才能逐步提高。
致谢
经过一个星期的忙碌,本次实训已经接近尾声。
作为一个学生,由于经验的匮乏,难免有许多考虑不到的地方,如果没有导师的督促和指导,以及同学和朋友的支持,想要完成这个课程设计是难以想像的。
在设计说明书的写作过程中,得到了老师的亲切关怀和耐心的指导。
老师严谨的治学态度和科学的工作方法给了我极大的帮助和影响。
从课题的选择得到毕业论文设计最终完成,老师都始终给予我细心的指导。
在此谨向致以诚挚的谢意和崇高的敬意。
同时,也要感谢各位老师,同学和朋友们给我极大的支持,对我的论文提出了宝贵的意见及建议。
感谢所有帮助我的老师、同学和朋友们,在此向他们表达我的感激之情。
参考文献
[1]谭浩强.C程序设计.北京:
清华大学出版社,2007
[2]陈刚.C语言程序设计.北京:
清华大学出版社.,2010
[3]李虹主编.C语言程序设计.南京:
南京大学出版社.,2010
[4]高维春主编.C语言程序设计项目教程.北京:
人民邮电出版社,2010
[5]魏海新,李燕主编.C语言程序设计实用教程.北京:
机械工业出版社,2007
[6]李泽中,孙红艳主编.C语言程序设计.北京:
清华大学出版社,2008
[7]路俊维,马雪松主编.C语言程序设计.北京:
中国铁道工业出版社,2009
[8]王敬华等主编.C语言程序设计教程.北京:
清华大学出版社,2005
[9]张明慧.VisualC++开发图书管理系统.北京:
北京师范大学,2005
[10]陈朔鹰等.C语言程序设计基础教程.北京:
兵器工业出版社,1994
[11]谭浩强.C程序设计题解与上机指导.北京:
清华大学出版社,2005
[12]严蔚敏,吴伟民.数据结构(C语言版).北京:
清华大学出版社,2007
[13]C编写组编.常用C语言用法速查手册.北京:
龙门书局,1995
[14]张俐,杨莹 编著.C语言高级程序设计.北京:
清华大学出版社,2006
附录
#include
#include
#include
#definelensizeof(structbook)
structbook
{longnum;
charauthor[15];
charname[25];
charsort[25];
charadd[30];
longtime;
floatprice;
intborrowed;
structbook*next;};
intn;
voidsave(structbook*p)
{FILE*fp;charm;
printf("\tWhethertosavethecurrentinformation?
(Y/N)\n");
scanf("%s",&m);
if(m=='Y'||m=='y')
{if((fp=fopen("book.dat","wb"))==0)
{printf("\tCannotopenfile!
\n");
return;}
while(p!
=0)
{if(fwrite(p,len,1,fp)!
=1)
printf("\tErrorwritingfile!
\n");
p=p->next;}
fclose(fp);}
if(m=='n'||m=='N')
{printf("\tExittheprogram\n");
exit(0);}}
structbook*create()
{structbook*p1,*p2,*d;
n=0;d=0;
p1=p2=(structbook*)malloc(len);
printf("\tEnteraNumberofBook:
");
scanf("%ld",&p1->num);
while(p1->num!
=0)
{printf("\tAuthor:
");
scanf("%s",p1->author);
printf("\tTitle:
");
scanf("%s",p1->name);
printf("\tISBN:
");
scanf("%s",p1->sort);
printf("\tPublishingUnit:
");
scanf("%s",p1->add);
printf("\tPublishedTime:
");
scanf("%ld",&p1->time);
printf("\tPrice:
");
scanf("%f",&p1->price);
n=n+1;
if(n==1)d=p1;
elsep2->next=p1;
p2=p1;
p1=(structbook*)malloc(len);
printf("\tEnteraNumberofBook:
");
scanf("%ld",&p1->num);}
p2->next=0;
return(d);}
structbook*increase(structbook*d)
{structbook*p1,*p2;
p1=d;
p2=(structbook*)malloc(len);
printf("\tEnteraNumberofBook:
");
scanf("%ld",&p2->num);
if(p2->num==0)return;
printf("\tAuthor:
");
scanf("%s",p2->author);
printf("\tTitlt:
");
scanf("%s",p2->name);
printf("\tISBN:
");
scanf("%s",p2->sort);
printf("\tPublishedUnit:
");
scanf("%s",p2->add);
printf("\tPublishedTime:
");
scanf("%ld",&p2->time);
printf("\tPrice:
");
scanf("%f",&p2->price);
while(p1->next!
=0)
{p1=p1->next;}
p1->next=p2;
n=n+1;
p2->next=0;
return(d);}
structbook*del(structbook*d)
{structbook*p1,*p2;
longq;
p1=d;
printf("\tEnterthenumberofBook");
scanf("%ld",&q);
while((p1->num!
=q)&&(p1->next!
=0))
{p2=p1;
p1=p1->next;}
if(p1->num==q)
{if(d==p1)d=p1->next;
elsep2->next=p1->next;
printf("\tDeletedthenumbersuccessfully:
%ld\n",q);
n=n-1;}
else
printf("\tCannotfindNo.:
%ldbook\n",q);
return(d);}
intmodify(structbook*d)
{longq;
charu;
printf("\tEnteraNumberofBook\n");
scanf("%ld",&q);
while((d->num!
=q)&&(d->next!
=0))
{d=d->next;}
if(d->num==q)
{printf("\tPleasere-enterthebookinformation:
\n");
printf("\tNumber:
");
scanf("%ld",&d->num);
printf("\tAuthor:
");
scanf("%s",&d->author);
printf("\tTitle:
");
scanf
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图书 管理 系统