图书管理系统.docx
《图书管理系统.docx》由会员分享,可在线阅读,更多相关《图书管理系统.docx(29页珍藏版)》请在冰豆网上搜索。
图书管理系统
学生实习报告
课程名称___程序设计综合实践___
题目名称_______________
学生学院_____
专业班级__
学号_______________
学生姓名________________
指导教师____________
2011年8月14日
目录
摘要1
1.设计的目的与要求1
1.1.目的:
1
1.2.要求:
1
2.总体设计2
2.1.系统构成框图2
2.2.系统结构框图3
3.详细设计4
3.1.借阅图书4
3.2.采编入库4
3.3.查阅功能5
3.4.归还图书5
4.数据结构设计6
4.1.头函数6
4.2.采编入库7
4.3.图书借阅8
4.4.查询功能8
4.5.归还图书10
4.6.清除库存10
5.调试分析12
5.1.主页面12
5.2.采编模块13
5.3.查询模块14
5.4.归还模块14
5.5.清除模块15
5.6.借阅模块15
6.总结16
7.参考文献17
8.答辩记录17
9.教师意见18
10.另附源代码:
18
摘要
图书馆作为一种信息资源的集散地,图书和用户借阅资料繁多,包含很多的信息数据的管理,有很多的图书馆以前对信息管理的主要方式是基于文本、表格等纸介质的手工处理,对于图书借阅情况(如借书天数、超过限定借书时间的天数)的统计和核实等往往采用对借书卡的人工检查进行,对借阅者的借阅权限、以及借阅天数等用人工计算、手抄进行。
数据信息处理工作量大,容易出错;由于数据繁多,容易丢失,且不易查找。
总的来说,缺乏系统,规范的信息管理手段。
图书管理系统,使图书管理工作规范化,系统化,程序化,避免图书管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改图书情况
图书管理系统是一个以菜单方式工作的信息管理系统,该系统用来反映登陆号、书名、作者名、出版单位、价格、库存量等信息,并实现采编入库、借阅、归还、清除库存以及查询等功能。
1.设计的目的与要求
1.1.目的:
建立一个图书管理系统,使图书管理工作规范化,系统化,程序化,避免图书管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改图书情况。
1.2.要求:
(1)采编入库:
新购入一本书,经分类和确定书号后登记到图书账目中去,若该书已存在,这库存量增加
(2)借阅:
若一种书的现存量大于0,则借出一本,登记借阅者的图书证号和归还期限
(3)归还:
注销借阅者的登记,改变该书的现存量(过期罚款-选作)
(4)清除库存:
某书已无保留价值,将它从图书账目中注销
(5)查询功能:
按书名查询、按作者名查询
2.总体设计
2.1.系统构成框图
2.2.系统结构框图
3.详细设计
3.1.借阅图书
3.2.采编入库
3.3.查阅功能
3.4.归还图书
4.数据结构设计
4.1.头函数
#include
#include
#include
#include
structBOOK
{
intid,usr[100],total,store,days[100];
charname[100],author[100];
}books[100];
/*上面是结构体的定义,用于存放书籍及借书的信息。
*/
voidpage_title(char*menu_item)/*打印页眉的函数,同时通过参数menu_item,可以显示当前的状态。
*/
{
printf(">>>欢迎进入图书管理系统<<<\n\n-设计者-\n\n",menu_item);
printf(">>>赵云鹏31001410<<<\n\n-%s-\n\n",menu_item);
}
intmain()
{
menu:
page_title("操作选单");
printf("请用数字键选择操作\n\n");
printf("\t\t1采编入库\t2借阅图书\n");
printf("\t\t3归还图书\t4清除库存\n");
printf("\t\t5查询功能\n");
printf("\t\t0退出\n");
switch(getch())
{
case'1':
book_add();break;
case'2':
book_out();break;
case'3':
book_in();break;
case'4':
book_del();break;
case'5':
book_search();break;
case'0':
exit(0);
}
gotomenu;
}
4.2.采编入库
voidbook_add()
{
intn,f;
page_title("采编入库");
printf("序号:
");
scanf("%d",&f);
for(n=0;n<100;n++)
if(books[n].id==0||books[n].id==f)break;
books[n].id=f;
printf("书名:
");
scanf("%s",&books[n].name);
printf("作者:
");
scanf("%s",&books[n].author);
printf("数量:
");
scanf("%d",&f);
books[n].total+=f;
books[n].store=books[n].total;
return_confirm();
}
4.3.图书借阅
voidbook_out()/*借阅图书*/
{
intn,s,l,d;
page_title("借阅图书");
if((n=book_search())!
=-1&&books[n].store>0)
{
printf("请输入借书证序号:
");
scanf("%d",&s);
printf("可借10天,超过天数按每天0.5元罚款:
");
1for(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();
}
4.4.查询功能
charbook_search()
{
intf,n,i;
charstr[100];
printf("请选择>>1按书名查询\n>>2按作者查询\n>>3按书序号查询");
scanf("%d",&i);
if(i==1){
getchar();
scanf("%s",str);
for(n=0;n<100;n++)
{
if(strcmp(books[n].name,str)==0)
{
printf("书名:
%s\n",books[n].name);
printf("作者:
%s\n",books[n].author);
printf("存数:
%d\n",books[n].total);
returnn;/*在数组中找到图书号匹配的记录,显示其信息并返回数组下标*/
}
}
printf("\n输入错误或无效图书序号.\n");
return-1;/*如果找不到相应记录则提示错误并返回-1*/
}
elseif(i==2){
getchar();
scanf("%s",str);
for(n=0;n<100;n++)
{
if(strcmp(books[n].author,str)==0)
{
printf("书名:
%s\n",books[n].name);
printf("作者:
%s\n",books[n].author);
printf("存数:
%dof",books[n].store);
printf("%d\n",books[n].total);
returnn;/*在数组中找到图书号匹配的记录,显示其信息并返回数组下标*/
}
}
printf("\n输入错误或无效图书序号.\n");
return-1;/*如果找不到相应记录则提示错误并返回-1*/
}
if(i==3){
scanf("%d",&f);
for(n=0;n<100;n++)
{
if(books[n].id==f)
{
printf("书名:
%s\n",books[n].name);
printf("作者:
%s\n",books[n].author);
printf("存数:
%dof",books[n].store);
printf("%d\n",books[n].total);
returnn;/*在数组中找到图书号匹配的记录,显示其信息并返回数组下标*/
}
}
printf("\n输入错误或无效图书序号.\n");
return-1;/*如果找不到相应记录则提示错误并返回-1*/
}
}
4.5.归还图书
voidbook_in()/*归还图书*/
{
intn,s,l;
page_title("归还图书");
if((n=book_search())!
=-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();
}
4.6.清除库存
voidbook_del()
{
intn;
page_title("清除库存");
if((n=book_search())!
=-1){
books[n].id=0;
books[n].total=0;
}
printf("该书已注销.\n");
return_confirm();
}
1.
getch与getchar基本功能相同,差别是getch直接从键盘获取键值,不等待用户按回车,只要用户按一个键,getch就立刻返回,getch返回值是用户输入的ASCII码,出错返回-1.输入的字符不会回显在屏幕上.getch函数常用于程序调试中,在调试时,在关键位置显示有关的结果以待查看,然后用getch函数暂停程序运行,当按任意键后程序继续运行.
2
getch():
所在头文件:
conio.h。
函数用途:
从控制台读取一个字符,但不显示在屏幕上
函数原型:
intgetch(void)
返回值:
读取的字符
例如:
charch;或intch;
getch();或ch=getch();
用getch();会等待你按下任意键,再继续执行下面的语句;
用ch=getch();会等待你按下任意键之后,把该键字符所对应的ASCII码赋给ch,再执行下面的语句。
易错点:
1.所在头文件是conio.h。
而不是stdio.h.
2.在使用之前要调用initscr(),结束时要调用endwin()。
否则会出现不输入字符这个函数
也会返回的情况。
3.在不同平台,输入回车,getch()将返回不同数值,而getchar()统一返回10(即\n)
1)windows平台下ENTER键会产生两个转义字符\r\n,因此getch返回13(\r)。
2)unix、linux系统中ENTER键只产生\n,因此getch返回10(\n)。
3)MACOS中ENTER键将产生\r,因此getch返回13(\r)。
getch();并非标准C中的函数,不存在C语言中。
所以在使用的时候要注意程序的可移植性。
国内C语言新手常常使用getch();来暂停程序且不知道此函数来源,
3.
getchar():
从键盘上输入一个字符+回车才把该字符输进去
getch():
只要输入一个字符不需要输入回车就把该字符输进去了
此外getch()需要有头文件conio.h
5.调试分析
5.1.主页面
5.2.采编模块
5.3.查询模块
5.4.归还模块
5.5.清除模块
5.6.借阅模块
6.总结
经过一个星期的上机实践学习,使我对C语言有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,通过实践,我也发现我的好多不足之处。
本次实践设计对我来说是一次挑战,在这期间我遇到了很多困难。
通过上网查找资料、查看书籍、询问同学、请教老师等方法我终于完成了这次大作业。
通过实践的学习,我认到学好计算机要重视实践操作,不仅仅是学习C语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己便好地学好程序设计。
学到的新东西:
1.
getch与getchar基本功能相同,差别是getch直接从键盘获取键值,不等待用户按回车,只要用户按一个键,getch就立刻返回,getch返回值是用户输入的ASCII码,出错返回-1.输入的字符不会回显在屏幕上.getch函数常用于程序调试中,在调试时,在关键位置显示有关的结果以待查看,然后用getch函数暂停程序运行,当按任意键后程序继续运行.
2
getch():
所在头文件:
conio.h。
函数用途:
从控制台读取一个字符,但不显示在屏幕上
函数原型:
intgetch(void)
返回值:
读取的字符
例如:
charch;或intch;
getch();或ch=getch();
用getch();会等待你按下任意键,再继续执行下面的语句;
用ch=getch();会等待你按下任意键之后,把该键字符所对应的ASCII码赋给ch,再执行下面的语句。
易错点:
1.所在头文件是conio.h。
而不是stdio.h.
2.在使用之前要调用initscr(),结束时要调用endwin()。
否则会出现不输入字符这个函数
也会返回的情况。
3.在不同平台,输入回车,getch()将返回不同数值,而getchar()统一返回10(即\n)
1)windows平台下ENTER键会产生两个转义字符\r\n,因此getch返回13(\r)。
2)unix、linux系统中ENTER键只产生\n,因此getch返回10(\n)。
3)MACOS中ENTER键将产生\r,因此getch返回13(\r)。
getch();并非标准C中的函数,不存在C语言中。
所以在使用的时候要注意程序的可移植性。
国内C语言新手常常使用getch();来暂停程序且不知道此函数来源,
3.
getchar():
从键盘上输入一个字符+回车才把该字符输进去
getch():
只要输入一个字符不需要输入回车就把该字符输进去了
此外getch()需要有头文件conio.h
7.参考文献
1.谭浩强《c程序设计》清华大学出版社
2.颜晖《c语言程序设计》,高等教育出版社,2008
8.答辩记录
9.教师意见
10.另附源代码:
#include
#include
#include
#include
structBOOK
{
intid,usr[100],total,store,days[100];
charname[100],author[100];
}books[100];
/*上面是结构体的定义,用于存放书籍及借书的信息。
*/
voidpage_title(char*menu_item)/*打印页眉的函数,同时通过参数menu_item,可以显示当前的状态。
*/
{
printf(">>>欢迎进入图书管理系统<<<\n\n-设计者-\n\n",menu_item);
printf(">>>赵云鹏31001410<<<\n\n-%s-\n\n",menu_item);
}
voidreturn_confirm()/*返回前请求确认的函数,以便在返回前观察结果*/
{
printf("\n按任意键返回……\n");
getch();
}
charbook_search()/*图书查阅*/
{
intf,n,i;/*f借书证号*/
charstr[100];
printf("请选择>>1按书名查询\n>>2按作者查询\n>>3按书序号查询");
scanf("%d",&i);
if(i==1){
getchar();
scanf("%s",str);
for(n=0;n<100;n++)
{
if(strcmp(books[n].name,str)==0)
{
printf("书名:
%s\n",books[n].name);
printf("作者:
%s\n",books[n].author);
printf("存数:
%d\n",books[n].total);
returnn;/*在数组中找到图书号匹配的记录,显示其信息并返回数组下标*/
}
}
printf("\n输入错误或无效图书序号.\n");
return-1;/*如果找不到相应记录则提示错误并返回-1*/
}
elseif(i==2){
getchar();
scanf("%s",str);
for(n=0;n<100;n++)
{
if(strcmp(books[n].author,str)==0)
{
printf("书名:
%s\n",books[n].name);
printf("作者:
%s\n",books[n].author);
printf("存数:
%dof",books[n].store);
printf("%d\n",books[n].total);
returnn;/*在数组中找到图书号匹配的记录,显示其信息并返回数组下标*/
}
}
printf("\n输入错误或无效图书序号.\n");
return-1;/*如果找不到相应记录则提示错误并返回-1*/
}
if(i==3){
scanf("%d",&f);
for(n=0;n<100;n++)
{
if(books[n].id==f)
{
printf("书名:
%s\n",books[n].name);
printf("作者:
%s\n",books[n].author);
printf("存数:
%dof",books[n].store);
printf("%d\n",books[n].total);
returnn;/*在数组中找到图书号匹配的记录,显示其信息并返回数组下标*/
}
}
printf("\n输入错误或无效图书序号.\n");
return-1;/*如果找不到相应记录则提示错误并返回-1*/
}
}
voidbook_out()/*借阅图书*/
{
intn,s,l,d;
page_title("借阅图书");
if((n=book_search())!
=-1&&books[n].store>0)
{
printf("请输入借书证序号:
");
scanf("%d",&s);
printf("可借10天,超过天数按每天0.5元罚款:
");
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()/*归还图书*/
{
intn,s,l;/*s是借书证号,l是天数*/
page_title("归还图书");
if((n=book_search())!
=-1&&books[n].store{
printf("借阅者图书证列表:
\n");
for(l=0;l<10;l++)
if(books[n].usr[l]!
=0)
printf("[%d]-10天之内\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()/*采编入库*/
{
intn,f;
page_title("采编入库");
printf("序号:
");
scanf("%d",&f);
for(n=0;n<100;n++)
if(books[n].id==0||books[n].id==f)break;
books[n].id=f;
printf("书名:
");
sca