基于C语言的图书管理系统的设计与实现Word文档格式.docx
《基于C语言的图书管理系统的设计与实现Word文档格式.docx》由会员分享,可在线阅读,更多相关《基于C语言的图书管理系统的设计与实现Word文档格式.docx(32页珍藏版)》请在冰豆网上搜索。
1.1.1选题背景
随着社会的发展及知识经济时代的到来,信息管理系统在各行各业发挥着越来越重要的作用。
而在高校的图书管理中,避免了手工操作而带来的一些不必要的问题。
1.1.2选题意义
图书馆作为一种信息资源的集散地,图书和用户借阅资料繁多,包含很多的信息数据的管理,现今,有很多的图书馆都是初步开始使用,甚至尚未使用计算机进行信息管理。
根据调查得知,他们以前对信息管理的主要方式是基于文本,表格等纸介质的手工处理,数据处理工作量大,容易出错。
由于数据繁多,容易丢失,且不易查找。
总的来说,缺乏系统规范的信息管理手段。
尽管有的图书馆有计算机,但是尚未用于信息管理,没有发挥它的效力,资源闲置比较突出,这就是管理信息系统的开发的基于环境。
1.2图书管理系统简介
图书管理系统是图书馆的重要组成部分,图书是我们最好的获取信息的方式,但由于图书馆图书收藏量大大增加,使传统的图书管理员的工作日益繁重起来,迫使人们起用新的管理方法来管理图书。
本文通过设计和开发图书馆管理系统的实践,阐述了图书管理软件中所应具有的功能、设计、实现。
介绍了图书管理系统的设计和系统功能的实现过程。
该系统可以运用于高校的图书管理,由图书借阅,图书归还,图书查询,图书信息修改,等多个模块组成,实现了图书资料的计算机网络管理。
一般通用的图书馆管理系统通常包括系统管理、读者管理、编目、图书流通、统计、查询等功能。
比较先进的系统能够在一个界面下实现图书、音像、期刊的管理,设置假期、设置暂离锁、暂停某些读者的借阅权、导入导出读者资料、交换MARC(MachineReadableCatalogue)数据、升级辅助编目库、征订图书等。
此外,随着工Internet使用的发展,一个完善的系统还应提供无缝接入Internet的功能,通过IE浏览器让读者使用借阅资料查询、更换密码、预约、资料检索等功能。
有些系统还能提供读者自助服务,可以开放一些客户机让读者自行管理密码、查询自己的借阅史、预约资料、检索资料等。
1.3图书管理系统需求分析
为满足图书管理现代化的需求,国内软件商已开发出很多商品化图书管理软件,但他们大多是面向大型专业图书馆而开发的,专业性强,操作和使用比较复杂,难以掌握。
而国内很多中小型图书馆由于管理人员不多且大多数不是图书管理业务的专业人员、业务分工也不是很详细、明确,这样的软件对于他们而言太复杂,所以使用效果并不是很好。
目前在大的图书馆己经有一整套比较完善的信息管理系统,而在一般小型图书馆中大部分工作还是进行手工管理,工作效率低,并不能即时了解图书馆各类图书的库存,读者比较需求的图书难以在短时间内找到,图书的入库和更新比较麻烦等等,不便于动态及时调整图书结构。
同时由于不可避免的人为因素,造成数据的遗漏、误报等。
为了更好的适应当前中小型图书馆的读者借阅需求,缓解手工管理存在的各种弊端,因此开发了面向中小型图书馆的图书管理系统,为用户提供全方位的信息服务。
通过对中小型图书馆的调查、分析发现,用户的需求可分为4个方面:
第一是图书馆的工作人员通过计算机来管理各类图书,分类编号、调整图书结构、增加图书库存,适应读者的需求。
第二是读者能通过计算机来查询浏览图书馆中的图书,来确定自己需要的书籍,为借阅做好准备。
第三是工作人员对读者的借书情况能够作好全面掌握,能及时得到每个读者的当前借阅状态和历史借阅记录。
第四也是图书馆的核心工作,对图书的借阅管理。
在软、硬件方面对系统的需求是软件要易学,容易掌握,可以很简单方便地管理各种图书信息。
硬件的配置要求不能太高,这样可以适应中小型图书馆的经济条件。
总之,中小型图书馆管理信息系统旨在提供一个可以操作的,方便查询的,易于修改的辅助管理系统。
同时提供了系统智能辅助和用户自主选择的两种方式,提高查询效率。
2系统分析
2.1题目分析
本课程设计任务的目的是要求学生按照分析、设计、编码、调试和测试的软件开发过程独立完成管理系统设计,以及C语言算法的掌握,并能最终实现本系统的功能要求,通过这个程序可以学习到以前调试短程序没有的的经验。
要求为各项操作功能设计一个菜单。
使用程序运行后,先显示这个菜单,然后用户通过菜单项选择希望进行的操作项目;
要求以上功能分别用函数实现。
2.2系统分析
图书馆管理系统包括:
●录入:
新进图书及基本信息输入
●删除:
旧图书及基本信息删除
●查询:
查询要借阅的图书信息
●修改:
修改已有的图书信息
●借书:
实现用户办理借书手续
●还书:
实现用户.办理还书手续
系统以菜单方式工作,界面友好,易于操作。
系统的程序设计环境;
:
本系统使用VisualC++作为程序开发工具。
VisualC++是基于对象的快速使用程序开发工具,是当今最强大、最灵活的使用程序开发工具之一,具有良好的可视化使用程序开发环境和强大的可扩展数据库功能。
利用VisualC++提供的可视化组件库进行编程,可以快速、高效地开发出基于Windows环境的各类使用程序。
VisualC++语言的特点是面向对象设计的程序语言,VisualC++的基础编程语言是具有面向对象特性的语言,具有代码稳定、可读性好、编译速度快等优点,并将面向对象的概念移植到了C语言中,使这种基础语言有了新的发展空间。
和其它编程软件相比,特别是在数据库和网络使用方面,VisualC++具有简便易用、灵活高效的特点。
开发软件通常要经过修改源代码、编译、测试、再修改、再编译、再测试等操作,这些操作形成了一个开发循环,所以快速的编译器可以大大地降低开发周期。
VisualC++正是建立在这种高效编译器的基础之上,是针对Windows的最快的高级语言代码编译器,因此生成的代码十分精练高效,使VisualC++程序的运行速度更快。
这也是本人使用VisualC++作为程序设计开发语言的重要原因。
3管理系统的总体设计和详细设计
3.1总体设计
总体设计目标:
使用者可以利用本系统进行对图书馆借阅的各项运算操作,如根据用户的需求自动的进行添加图书,删除图书,借书还书。
查找所要的图书,查阅图书的详细资料,查阅读者的详细资料。
最后清晰完整的结果于屏幕中。
大大方便使用者对图书借阅的操作,不仅节省时间,而且提高准确性,可以达到事半功倍的效果。
总体设计策略:
本系统采用的是自顶向下、层次化的模块结构。
对高层模块,采用以事务为中心的设计策略,把一个大的模块逐步分解成较小的相对简单的模块。
对低层模块,采用以变换为中心的设计策略。
为了提高每个模块的内聚性、降低模块间的耦合性,将每个模块设计成具有单一功能的模块(即功能内聚),使模块间的联系完全是通过主模块的控制和调用来实现(即非直接耦合)。
结合上述分析该系统应包括以下模块:
信息输入、信息删除,信息查询,信息显示,信息修改,图书借出、图书归还。
结构图如图1:
图1结构框图
图书数据:
序号、书名、作者、出版社、存数、总数。
3.2详细设计
●主函数
主函数要求设计比较简洁,只提供设输入,处理和输出部分的函数调用。
其中各功能模块用菜单方式选择。
流程图如下图2:
图2主函数流程图
程序:
voidmain(void)
{
menu:
page_title("
操作选单"
);
printf("
请用数字键选择操作\n\n"
\t\t\t1注册新书\t\t\t2借阅图书\n"
\t\t\t3查询图书信息\t\t\t4修改图书信息\n"
\t\t\t5归还图书\t\t\t6删除图书\n"
\t\t\t7显示图书\t\t\t8退出系统\n"
请按数字键:
\n"
switch(getch())
{case'
1'
:
book_add();
break;
case'
2'
book_out();
3'
book_search();
4'
book_change();
case'
5'
book_in();
6'
book_del();
7'
book_show();
8'
exit(0);
}gotomenu;
}
●输入模块
分析:
该模块的功能是假如用户需要新加入新的图书信息,通过键盘输入将新信息逐条加在原来输入文件上但不能覆盖原有信息。
流程图如下图3:
图3输入模块流程图
voidbook_add(void)
{intn;
system("
cls"
page_title("
注册新书"
for(n=0;
n<
100;
n++)
if(books[n].id==0)break;
序号:
"
scanf("
%d"
&
books[n].id);
书名:
scanf("
%s"
books[n].name);
作者:
books[n].author);
出版社:
books[n].publish);
数量:
books[n].total);
books[n].store=books[n].total;
return_confirm();
}
●删除模块
该模块用于显示所有图书信息,由于记录较多,故而采取分屏显示。
显示完所有纪录后,用户需输入图书编号进而查找图书信息。
流程图如下图4:
图4删除模块流程图
intbook_del(void)
{
intn,num,i;
system("
删除图书"
请输入所要删除的书的编号:
num);
for(n=0;
n++)
{
if(books[n].id==num)
for(i=n;
i<
i++)
{books[i].id=books[i+1].id;
strcpy(books[i].name,books[i+1].name);
strcpy(books[i].publish,books[i+1].publish);
printf("
该书已删除.\n"
returnn;
没有找到相关记录\n"
return-1;
●查询模块
改模块功能应体现为用户输入图书书名,若有书则查询出来。
流程图如下图5:
图5查询模块流程图
intbook_search(void)
{intn,i=1;
charnam[30];
请输入书名:
nam);
{if((strcmp(books[n].name,nam)==0))
{printf("
%d\t"
books[n].id);
%s\t"
books[n].name);
books[n].author);
books[n].publish);
存数:
books[n].store);
总数:
%d\n"
books[n].total);
i=0;
}}
if(i==1)
\n没有找到相关记录.\n"
●修改模块
该模块功能应体现为用户修改图书信息,若有记录则修改信息。
流程图如下图6:
图6修改模块流程图
intbook_change(void)
{
intn,i;
修改图书信息"
请输入要修改的图书编号:
i);
{if(books[n].id==i)
修改书名:
修改作者:
scanf("
修改出版社名:
修改总数:
修改图书信息成功.\n"
books[n].store=books[n].total;
}}
}
●显示模块
该模块功能应体现为显示全部的图书信息。
流程图如下图7:
intbook_show(void)
{intn,i=1;
if(strlen(books[n].name)!
=0)
i=0;
}
}if(i==1)
●借出模块
该模块功能应体现为用户输入图书序号,若有书则要求输入账号。
流程图如下图8:
图8借书模块流程图
voidbook_out(void)
{intn,s,l,d;
借阅图书"
if((n=search_book())!
=-1&
&
books[n].store>
0)
{printf("
请输入借书证序号:
s);
请输入可借天数:
d);
for(l=0;
l<
10;
l++)
{if(books[n].usr[l]==0)
{books[n].usr[l]=s;
books[n].days[l]=d;
books[n].store--;
if(n!
books[n].store==0)printf("
此书已经全部借出.\n"
●归还模块
该模块功能应体现为方便用户归还图书
流程图如下图9:
图9归还图书模块
voidbook_in(void)
{intn,s,l;
归还图书"
books[n].store<
books[n].total)
借阅者图书证列表:
l++)
if(books[n].usr[l]!
=0)
[%d]-%d天\n"
books[n].usr[l],books[n].days[l]);
{if(books[n].usr[l]==s)
{books[n].usr[l]=0;
books[n].days[l]=0;
}}
books[n].store++;
books[n].store==books[n].total)
全部入藏.\n"
●公共函数
定义结构体:
structBOOK
{intid,usr[10],total,store,days[10],zt;
charname[31],author[21];
}books[100];
voidpage_title(char*menu_item)
\t\t\t************欢迎使用图书馆管理系统**********\n\n-%s-\n\n"
menu_item);
voidreturn_confirm(void)
\n按任意键返回……\n"
getch();
4调试和测试
第一,用一组简单的数据对程序进行调试,是否各函数有出错现象。
然后用复杂数据对程序进行调试。
直到确定程序对正常数据没有错误为止。
第二,当数据测试时,程序错误,要首先找到出错的函数,对函数中各个变量进行观察,有时变量很多,循环多重不要急,对各个数据的观察,对程序的调试有很大的帮助。
你也可以先对几个变量熟悉后,在多重循环里,确定正确的数据,将其跳过调试,对有疑问的数据循环进行仔细观察。
虽然这是比较省力气的活,但对复杂的数据错误并不是很有效,所以仔细观察每个数据的变化对调试的成功和否有决定性作用。
第三,测试时,根本的错误并不一定在运行错误的函数内,或许在前面的函数内已经奠定了这些错误数据的基础,需要反过头来,对所有的的函数进行一项项的调试!
从程序运行的第一个函数开始调试。
按照程序运行的步骤下去。
一个个的确定函数的正确性,每确定一个函数,在以后的调试中可以减少对该函数的调试次数,或者直接跳到下一个函数。
所谓的各个击破便是如此。
对头文件中的各个函数的返回值和它所要传入的参变量及其功能更是需要注意。
第四,调试时,需要对错误缩小范围,从整个程序到指定函数,再到指定区域,再到指定行,在对程序缩小范围或对编译没通过的程序缩小错误范围时可以用"
/**/"
来进行调试,确定正常范围,缩小错误范围。
5编码实现
●主界面截图
图10主界面
●注册新书界面截图
图11新书注册
●借阅界面截图
图12图书借阅
●归还界面截图
图13图书归还
●查询界面截图
图14图书查询
●修