图书信息管理系统.docx
《图书信息管理系统.docx》由会员分享,可在线阅读,更多相关《图书信息管理系统.docx(21页珍藏版)》请在冰豆网上搜索。
![图书信息管理系统.docx](https://file1.bdocx.com/fileroot1/2023-2/21/93477dff-4c62-4065-9126-c54288371151/93477dff-4c62-4065-9126-c542883711511.gif)
图书信息管理系统
*******************
实践教学
*******************
兰州理工大学
计算机与通信学院
2012年春季学期
C程序设计课程设计
题目:
图书信息管理系统
专业班级:
姓名:
人才v
学号:
指导教师:
成绩:
_______________
摘要
人类已经跨入了新世纪,正在进入信息时代。
随着馆藏量的不断增加,图书资料的录入和查询的难度也就相应增加,数据处理手工操作,工作量大,出错率高,出错后不易更改的手工方式,已经不能满足要求。
基于这此问题,建立一个规范化,系统化,程序化的图书管理系统迫不急待。
为方便对图书馆书籍、读者资料、借还书等进行高效的管理,特编写该程序以提高图书馆的管理效率。
使用该程序之后,工作人员可以查询某位读者、某种图书的借阅情况,还可以对当前图书借阅情况进行一些统计,以便全面掌握图书的流通情况。
关键词:
图书管理系统;信息技术;数据处理;高效管理
目录
一、需求分析1
二、总体设计2
三、详细设计3
3.1主函数3
3.2模块函数4
3.2.1输入模块4
3.2.2删除模块5
3.2.3借出模块6
3.2.4归还模块6
3.3公共函数8
四、编码8
五、测试9
设计总结11
参考文献13
致谢14
附录(源代码)15
一、需求分析
图书管理系统是图书馆的重要组成部分,图书是我们最好的获取信息的方式,但由于图书馆图书收藏量大大增加,使传统的图书管理员的工作日益繁重起来,迫使人们起用新的管理方法来管理图书。
该系统可以运用于高校的图书管理,由图书编目,图书流通,标准管理,资料管理,系统维护等多个子系统组成,实现了图书资料的计算机网络管理。
我们需要让其更方便简洁,此外,随着工Internet应用的发展,一个完善的系统还应提供无缝接入Internet的功能,通过IE浏览器让读者使用借阅资料查询、更换密码、预约、资料检索等功能。
二、总体设计
总体设计目标:
使用者可以利用本系统进行对图书馆借阅的各项运算操作,如根据用户的需求自动的进行添加图书,删除图书,借书还书。
查找所要的图书,查阅图书的详细资料,查阅读者的详细资料。
最后清晰完整的结果于屏幕中。
大大方便使用者对图书借阅的操作,不仅节省时间,而且提高准确性,可以达到事半功倍的效果。
总体设计策略:
本系统采用的是自顶向下、层次化的模块结构。
对高层模块,采用以事务为中心的设计策略,把一个大的模块逐步分解成较小的相对简单的模块。
对低层模块,采用以变换为中心的设计策略。
为了提高每个模块的内聚性、降低模块间的耦合性,将每个模块设计成具有单一功能的模块(即功能内聚),使模块间的联系完全是通过主模块的控制和调用来实现(即非直接耦合)。
结合上述分析该系统应包括以下模块:
信息输入、图书查找、信息删除,图书借出、图书归还。
结构图1如下;
图1工资管理系统功能模块图
三、详细设计
3.1主函数
主函数要求设计比较简洁,只提供设输入,处理和输出部分的函数调用。
其中各功能模块用菜单方式选择,如图2所示;
N
Y
图2菜单方式选择
程序:
voidmain(void)
{menu:
page_title("操作选单");
printf("请用数字键选择操作\n\n");
printf("\t\t\t1借阅图书\t\t\t2归还图书\n");
printf("\t\t\t3注册新书\t\t\t4注销旧书\n\n");
printf("\n\t\t\t\t\t0退出\n");
switch(getch())
{case'1':
book_out();break;
case'2':
book_in();break;
case'3':
book_add();break;
case'4':
book_del();break;
case'0':
exit(0);}gotomenu;}
3.2模块函数
3.2.1输入模块
分析:
该模块的功能是假如用户需要新加入新的图书信息,通过键盘输入将新信息逐条加在原来输入文件上但不能覆盖原有信息。
输入模块如图3所示;
i从0到N-1调用输入函数input(i)
Y
N
图3输入模块流程图
程序:
voidbook_add(void)
{intn;page_title("注册新书");
for(n=0;n<100;n++)
if(books[n].id==0)break;
printf("序号:
");
scanf("%d",&books[n].id);
printf("书名:
");
scanf("%s",&books[n].name);
printf("作者:
");scanf("%s",&books[n].author);
printf("数量:
");scanf("%d",&books[n].total);
printf("存在状态:
");
state(n);books[n].store=books[n].total;return_confirm();}
3.2.2删除模块
分析:
该模块用于显示所有图书信息,由于记录较多,故而采取分屏显示。
显示完所有纪录后,用户需输入图书编号进而查找图书信息。
删除模块如图4所示;
YN
N
Y
N
图4删除模块流程图
程序:
voidbook_del(void)
{intn;
page_title("注销旧书");
if((n=search_book())!
=-1)books[n].id=0;
printf("该书已注销.\n");
return_confirm();}
3.2.3借出模块
分析:
该模块功能应体现为用户输入图书序号,若有书则要求输入账号,借出模块如图5所示;
输入借阅图书序号
YN
提示没找到
显示记录
返回菜单
让用户输入信息:
借出
图5借出模块流程图
程序:
voidbook_out(void)
{intn,s,l,d;
page_title("借阅图书");
if((n=search_book())!
=-1&&books[n].store>0)
{printf("请输入借书证序号:
");
scanf("%d",&s);
printf("请输入可借天数:
");
scanf("%d",&d);
for(l=0;l<10;l++)
{if(books[n].usr[l]==0)
{books[n].usr[l]=s;
books[n].days[l]=d;
break;}}
books[n].store--;}
if(n!
=-1&&books[n].store==0)printf("此书已经全部借出.\n");
return_confirm();}
3.2.4归还模块
分析:
该模块功能应体现为方便用户归还图书,归还模块如图6所示;
输入归还图书序号
YN
显示记录
提示没找到
返回菜单
让用户输入信息:
入库
图6归还模块流程图
程序:
voidbook_in(void)
{intn,s,l;
page_title("归还图书");
if((n=search_book())!
=-1&&books[n].store{printf("借阅者图书证列表:
\n");
for(l=0;l<10;l++)
if(books[n].usr[l]!
=0)
printf("[%d]-%d天\n",books[n].usr[l],books[n].days[l]);
printf("请输入借书证序号:
");
scanf("%d",&s);
for(l=0;l<10;l++)
{if(books[n].usr[l]==s)
{books[n].usr[l]=0;
books[n].days[l]=0;
break;
}
}
books[n].store++;
}
if(n!
=-1&&books[n].store==books[n].total)
printf("全部入藏.\n");
return_confirm();}
3.3公共函数
定义结构体:
structBOOK
{intid,usr[10],total,store,days[10],zt;
charname[31],author[21];
}books[100];
voidpage_title(char*menu_item)
{
printf("\t\t\t************欢迎使用图书馆管理系统**********\n\n-%s-\n\n",menu_item);}
voidreturn_confirm(void)
{
printf("\n按任意键返回……\n");
getch();
}
voidstate(intn)
{
if(books[n].total!
=0)
printf("1");if(books[n].total==0)
printf("0");
}
四、编码
1.定义4个结构体,分别用来定义学生类型,用于存放借阅书籍;职工类型,记录借阅者信息;定义书的类型;借卡的数据类型。
2.还书函数。
3.借阅系统。
4.学生卡管理系统。
5.图书查询系统.
五、测试
●主界面截图,如图7所示:
图7主界面
新书注册截面图,如图8所示:
图8新书注册
借阅界面截图,如图9所示:
图9图书借阅
归还界面截图,如图10所示:
图10图书归还
注销界面截图,如图11所示:
图11图书注销
状态界面截图,如图12所示:
图12图书状态
设计总结
本次课设是我们大学以来第一次,面对如此大的编程量,开始时我不知所措,坦白说,刚开始我也曾打过退堂鼓,应为在能力方面我还有很多不足,首先遇到的困难是做出一个像样的管理菜单并且能自由的进入各个页面,后来通过查阅书籍,在网上查找资料,解决了此问题。
接下来就是编译的程序,困难就是在储存信息和信息的提取和修改。
最后通过建立文本替换的方法得以解决。
通过这次课设让我明白到,如今我们所学的程序知识九牛一毛,我们必须能够编译大量数据的程序,图书管理系统也只是让我们小试牛刀罢了。
这让我明白大学里练习编译10万编码的重要性,也让我对C语言有了更深的了解,对它的掌握也有所提高,在接下来的学习中我要刻苦钻研,不能把目光只停留在书本中。
同时也激起了对C语言更深层次的学习欲望。
参考文献
1C/C++程序设计,王连相等,中国科学技术出版社,2004
2C语言程序设计,谭浩强,清华大学出版社,1999
3C程序设计题解与上机指导,谭浩强,清华大学出版社,1999
4C语言实用程序荟萃,西安电子科技大学出版社,1993
5C语言函数手册,机械工业出版社,1999
6C语言的实际应用,安徽科学技术出版社,2000
致谢
感谢张老师在课设期间对我们的指导,并不厌其烦地多次帮我们纠正错误,没有他的帮助,我们将会错误百出;感谢小组的同学全力帮助,我一个人不可能完成;感谢兰州理工大学给我们这次机会,并给以大力支持。
附录(源代码)
#include
#include
#include
structBOOK
{intid,usr[10],total,store,days[10],zt;
charname[31],author[21];
}books[100];
voidpage_title(char*menu_item)
{printf("\t\t\t************欢迎使用图书馆管理系统**********\n\n-%s-\n\n",menu_item);}
voidreturn_confirm(void)
{printf("\n按任意键返回……\n");
getch();}
voidstate(intn)
{if(books[n].total!
=0)
printf("1");if(books[n].total==0)
printf("0");}
intsearch_book(void)
{intn,i;printf("请输入图书序号:
");
scanf("%d",&i);
for(n=0;n<100;n++)
{if(books[n].id==i)
{printf("书名:
%s\n",books[n].name);
printf("作者:
%s\n",books[n].author);
printf("存数:
%dof%d\n",books[n].store,books[n].total);
printf("总数:
%d\n",books[n].total);
printf("存在状态:
%d\n",books[n].zt);
returnn;}}
printf("\n输入错误或无效图书序号.\n");
return-1;}
voidbook_out(void)
{intn,s,l,d;
page_title("借阅图书");
if((n=search_book())!
=-1&&books[n].store>0)
{printf("请输入借书证序号:
");
scanf("%d",&s);
printf("请输入可借天数:
");
scanf("%d",&d);
for(l=0;l<10;l++)
{if(books[n].usr[l]==0)
{books[n].usr[l]=s;
books[n].days[l]=d;
break;}}
books[n].store--;}
if(n!
=-1&&books[n].store==0)printf("此书已经全部借出.\n");
return_confirm();}
voidbook_in(void){intn,s,l;
page_title("归还图书");
if((n=search_book())!
=-1&&books[n].store{printf("借阅者图书证列表:
\n");
for(l=0;l<10;l++)
if(books[n].usr[l]!
=0)
printf("[%d]-%d天\n",books[n].usr[l],books[n].days[l]);
printf("请输入借书证序号:
");
scanf("%d",&s);
for(l=0;l<10;l++)
{if(books[n].usr[l]==s)
{books[n].usr[l]=0;
books[n].days[l]=0;break;}}
books[n].store++;}
if(n!
=-1&&books[n].store==books[n].total)
printf("全部入藏.\n");
return_confirm();}voidbook_add(void)
{intn;page_title("注册新书");
for(n=0;n<100;n++)
if(books[n].id==0)break;
printf("序号:
");
scanf("%d",&books[n].id);
printf("书名:
");
scanf("%s",&books[n].name);
printf("作者:
");
scanf("%s",&books[n].author);
printf("数量:
");
scanf("%d",&books[n].total);
printf("存在状态:
");
state(n);
books[n].store=books[n].total;
return_confirm();}
voidbook_del(void)
{intn;
page_title("注销旧书");
if((n=search_book())!
=-1)books[n].id=0;
printf("该书已注销.\n");
return_confirm();}
voidmain(void)
{menu:
page_title("操作选单");
printf("请用数字键选择操作\n\n");
printf("\t\t\t1借阅图书\t\t\t2归还图书\n");
printf("\t\t\t3注册新书\t\t\t4注销旧书\n\n");
printf("\n\t\t\t\t\t0退出\n");
switch(getch())
{case'1':
book_out();break;
case'2':
book_in();break;
case'3':
book_add();break;
case'4':
book_del();break;
case'0':
exit(0);
}gotomenu;}