C++大作业图书馆管理系统.docx
《C++大作业图书馆管理系统.docx》由会员分享,可在线阅读,更多相关《C++大作业图书馆管理系统.docx(13页珍藏版)》请在冰豆网上搜索。
C++大作业图书馆管理系统
《图书馆管理系统》
大作业说明书
学生姓名董勋凯
学号2412332
所属学院电信工程学院
专业电气工程及其自动化
班级电气123班
组长董勋凯
电信工程学院制
摘要
随着计算机技术的不断应用和提高,计算机已经深入到社会生活的各个角落。
而中小型租、借书机构仍采用手工管理图书的方法,不仅效率低、易出错、手续繁琐,而且耗费大量的人力。
为了满足其管理人员对图书馆书籍,读者资料,借还书等进行高效的管理,在工作人员具备一定的计算机操作能力的前提下,此图书管理系统软件力求提高其管理效率。
本程序的编写是为了完善图书管理系统软件的开发途径和应用方法。
以求在最短的时间高效的开发图书管理系统。
程序实现了对图书的添加、删除、修改、查询等功能,对学生的添加、删除、修改、查询等功能,以及学生对图书的借阅、还书和所借图书的查看等功能。
关键词:
计算机技术,图书馆,图书管理,程序
1.图书管理系统概述
1.1图书管理系统总体设计思想概述
该程序提供为读者提供借书、还书和查询所需图书及图书、读者卡的管理等功能。
该程序的功能模块有:
(1)登录界面只有管理员才能使用全部功能,更好的保护图书馆内的一些信息不被破坏。
(2)读者资料能实现对读者的显示、读者信息增加、读者查询、读者信息修改和读者信息删除功能。
(3)图书资料能实现对图书显示、图书信息增加、图书查询、图书信息修改和图书信息删除功能。
(4)借书管理可与数据库中的图书信息表连接实现借书的功能。
(5)还书管理可与数据库中的图书信息表连接实现还书的功能
(6)退出退出程序,结束运行。
1.2总体设计流程图
2.图书管理系统详细设计
2.1C++中应用程序编程
2.1.1结构体,存放书籍及借书信息
#include
structBOOK
{
intid,usr[10],total,store,days[10];
charname[30],author[20];
}books[100];
2.1.2页头函数,可以通过参数menu_item,显示当前状态
voidpage_title(char*menu_item)
printf(">>>以下是图书管理系统--请按要求操作<<<\n\n-%s-\n\n",menu_item);
}
初始界面,如图1:
图1
2.1.1主要功能函数源代码
返回前请求确认函数,方便返回前观察结果
voidreturn_confirm(void)
printf("\n任意键返回……\n");
getch();
数组中找到图书号匹配的记录
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("存数:
%d\n",books[n].store);
printf("总数:
%d\n",books[n].total);
returnn;
printf("\n输入有错或图书序号不存在.\n");
return-1;
此过程是在数组中找到图书号匹配的记录,显示其信息并返
回数组下标,如果找不到相应记录则提示错误并返回-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();
此过程是借书的函数,首先调用找书函数。
如图2:
图2
图书资料中的还书函数
voidbook_in(void)
intn,s,l;
page_title(""还书");
=-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图书资料中的注册书函数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);books[n].store=books[n].total;return_confirm();}此过程是注册书的函数,读者资料中的函数与图书资料中的函数基本一致。如图4:图4图书资料中的注销书的函数voidbook_del(void){intn;page_title("注销书");if((n=search_book())!=-1)books[n].id=0;printf("该书已注销.\n");return_confirm();}此过程是注销书的函数,读者资料中的函数与图书资料中的函数基本一致。如图5:图5返回主界面函数voidmain(void){menu:page_title("操作选择单子");printf("请按以上要求选择操作\n\n");printf("1借书\n2还书\n\n");printf("3注册书\n4注销书\n\n");printf("\n0退出\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;}此过程是控制退出界面选择的函数,与初始界面基本一致。如图6:图6 2.2算法调试、测试过程中出现的问题及解决方案2.2.1本系统调试过程中遇到问题:程序在储存图书信息时只能一次存入,并读取。再次添加新的程序时将会把原来添加的图书信息覆盖。运行完程序一次有错误提醒。程序运行到添加新图书时自动提示错误需要调试。借书管理模块中,当正确输入存在的读者编号和所借的书的编号,系统进行判断时,提示不存在此读者。2.2.2本系统调试过程中遇到问题的原因:存储函数只能只写2进制文件,不能追加填写2进制文件。初次运行程序后没有关闭操作界面,当点击编译时会有一个错误提示,将上次运行时的界面关闭即可。指针指向的位置出现错误导致程序传参数错乱无法运行,可使程序进入调试状态在传参出现错误的位置一句一句查找传递的参数是否是你所希望的,如若不就加以修正。2.2.3本系统调试过程中遇到问题的解决办法及步骤:一个一个输出所有的读者的编号,检查文件中是否有此读者。如果发现有此读者,那么,检查循环判断函数是否有此读者的语句,检查其是否存在错误。输出用于循环检查语句中的读者信息时,仔细检查该语句是否存在乱码。若有乱码,仔细分析乱码的原因;若无乱码,再检查调用函数变量的类型是否有错误,若有,加以改正。 课程设计总结和体会在此次图书管理课程设计过程中,有很多东西值得我们思考并总结。设计过程大体可分为以下几个步骤: (1)思考总体设计方案:总体结构和模块外部设计,功能分配。思考要实现整个程序大体需要的几个模块和其中用到的VisualC++语言基本操作符、语句等。 (2)画出总体设计方案流程图:用流程图的形式展现你的基本编程思想。 (3)流程图具体化:即将流程图中的几大模块的具体实现思考清楚,可以用流程图的形式展现.并想好实现的关键代码。 (4)编辑程序代码:这是一个至关重要复杂而且需要反复修改的环节,在此环节中你将发现总体设计和模块思想会存在很多问题,需不断改进.如何实现各函数功能,达到预期效果也将是一项繁复的工作。 (5)代码的调试:在VisualC++6.0环境下输入代码并进行调试和正确运行。在调试过程中会遇到很多需要精化的地方,需要十足的耐心与细心,不断改进完善程序。通过对图书馆系统利用,我们对数据库和MFC编程有了更深刻的认识,深刻认识到需求分析的重要性,更加了解了一个系统各部门的工作流程细节。对概念设计的步骤掌握的更加清晰,促进了对分析过程中的原则要求及所得到的数据结果的原因认识。逻辑设计阶段中,由于整个系统数据复杂性和实际应用的交叉性,发现我们在理论和实际的操作中无论是关系模型设计还是vc++中功能的实现都有很多不足。针对此次大作业,我总结了一点点的经验,如下:(1)要对系统的功能和要求做出详细的分析,并合理分解任务。(2)把分解出来的子任务,并给其系统性的做一个相对独立的模块。(3)在设计一个模块之前,要简单构想一下总界面的显示情况。(4)针对构想出来的界面进行程序的编写。总之,通过此次课程设计,让我更加明白了主动学习是最好的方法。主动动手去做,广泛查阅资料,多次进行修改和完善,只有这样,才能有好的设计呈现出来。 主要参考资料[1]BeckZaratian.MicrosoftVisualVisualC++6.0程序员指南.希望设备创作室译.北京:北京希望电脑公司出品,1998[2]RichardC.Leinecker,TomArcher.VisualC++6宝典.张艳,张谦译.北京:电子工业出版社,1999[3]李强,贾云霞.VisualC++项目开发实践.北京:中国铁道出版社,2004[4]郑莉,董渊,张瑞丰.C++语言程序设计.2003.[5]李闽溟等.VisualC++6.0数据库系统开发实例导航[M].北京:人民邮电出版社[6]闪四清.《数据库系统原理与应用教程[M].清华大学出版社
printf("借阅者图书证列表:
\n");
if(books[n].usr[l]!
=0)
printf("[%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++;
=-1&&books[n].store==books[n].total)
printf("全部入藏.\n");
此过程是还书的函数,首先调用找书函数。
如图3:
图3
图书资料中的注册书函数
voidbook_add(void)
intn;
page_title("注册书");
if(books[n].id==0)break;
printf("序号:
scanf("%d",&books[n].id);
scanf("%s",&books[n].name);
scanf("%s",&books[n].author);
printf("数量:
scanf("%d",&books[n].total);
books[n].store=books[n].total;
此过程是注册书的函数,读者资料中的函数与图书资料中的函数基本一致。
如图4:
图4
图书资料中的注销书的函数
voidbook_del(void)
page_title("注销书");
=-1)books[n].id=0;
printf("该书已注销.\n");
此过程是注销书的函数,读者资料中的函数与图书资料中的函数基本一致。
如图5:
图5
返回主界面函数
voidmain(void)
menu:
page_title("操作选择单子");
printf("请按以上要求选择操作\n\n");
printf("1借书\n2还书\n\n");
printf("3注册书\n4注销书\n\n");
printf("\n0退出\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;
此过程是控制退出界面选择的函数,与初始界面基本一致。
如图6:
图6
2.2算法调试、测试过程中出现的问题及解决方案
2.2.1本系统调试过程中遇到问题:
程序在储存图书信息时只能一次存入,并读取。
再次添加新的程序时将会把原来添加的图书信息覆盖。
运行完程序一次有错误提醒。
程序运行到添加新图书时自动提示错误需要调试。
借书管理模块中,当正确输入存在的读者编号和所借的书的编号,系统进行判断时,提示不存在此读者。
2.2.2本系统调试过程中遇到问题的原因:
存储函数只能只写2进制文件,不能追加填写2进制文件。
初次运行程序后没有关闭操作界面,当点击编译时会有一个错误提示,将上次运行时的界面关闭即可。
指针指向的位置出现错误导致程序传参数错乱无法运行,可使程序进入调试状态在传参出现错误的位置一句一句查找传递的参数是否是你所希望的,如若不就加以修正。
2.2.3本系统调试过程中遇到问题的解决办法及步骤:
一个一个输出所有的读者的编号,检查文件中是否有此读者。
如果发现有此读者,那么,检查循环判断函数是否有此读者的语句,检查其是否存在错误。
输出用于循环检查语句中的读者信息时,仔细检查该语句是否存在乱码。
若有乱码,仔细分析乱码的原因;若无乱码,再检查调用函数变量的类型是否有错误,若有,加以改正。
课程设计总结和体会
在此次图书管理课程设计过程中,有很多东西值得我们思考并总结。
设计过程大体可分为以下几个步骤:
(1)思考总体设计方案:
总体结构和模块外部设计,功能分配。
思考要实现整个程序大体需要的几个模块和其中用到的VisualC++语言基本操作符、语句等。
(2)画出总体设计方案流程图:
用流程图的形式展现你的基本编程思想。
(3)流程图具体化:
即将流程图中的几大模块的具体实现思考清楚,可以用流程图的形式展现.并想好实现的关键代码。
(4)编辑程序代码:
这是一个至关重要复杂而且需要反复修改的环节,在此环节中你将发现总体设计和模块思想会存在很多问题,需不断改进.如何实现各函数功能,达到预期效果也将是一项繁复的工作。
(5)代码的调试:
在VisualC++6.0环境下输入代码并进行调试和正确运行。
在调试过程中会遇到很多需要精化的地方,需要十足的耐心与细心,不断改进完善程序。
通过对图书馆系统利用,我们对数据库和MFC编程有了更深刻的认识,深刻认识到需求分析的重要性,更加了解了一个系统各部门的工作流程细节。
对概念设计的步骤掌握的更加清晰,促进了对分析过程中的原则要求及所得到的数据结果的原因认识。
逻辑设计阶段中,由于整个系统数据复杂性和实际应用的交叉性,发现我们在理论和实际的操作中无论是关系模型设计还是vc++中功能的实现都有很多不足。
针对此次大作业,我总结了一点点的经验,如下:
(1)要对系统的功能和要求做出详细的分析,并合理分解任务。
(2)把分解出来的子任务,并给其系统性的做一个相对独立的模块。
(3)在设计一个模块之前,要简单构想一下总界面的显示情况。
(4)针对构想出来的界面进行程序的编写。
总之,通过此次课程设计,让我更加明白了主动学习是最好的方法。
主动动手去做,广泛查阅资料,多次进行修改和完善,只有这样,才能有好的设计呈现出来。
主要参考资料
[1]BeckZaratian.MicrosoftVisualVisualC++6.0程序员指南.希望设备创作室译.北京:
北京希望电脑公司出品,1998
[2]RichardC.Leinecker,TomArcher.VisualC++6宝典.张艳,张谦译.北京:
电子工业出版社,1999
[3]李强,贾云霞.VisualC++项目开发实践.北京:
中国铁道出版社,2004
[4]郑莉,董渊,张瑞丰.C++语言程序设计.2003.
[5]李闽溟等.VisualC++6.0数据库系统开发实例导航[M].北京:
人民邮电出版社
[6]闪四清.《数据库系统原理与应用教程[M].清华大学出版社
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1