图书馆管理系统.docx
- 文档编号:29337000
- 上传时间:2023-07-22
- 格式:DOCX
- 页数:33
- 大小:174.77KB
图书馆管理系统.docx
《图书馆管理系统.docx》由会员分享,可在线阅读,更多相关《图书馆管理系统.docx(33页珍藏版)》请在冰豆网上搜索。
图书馆管理系统
第一章课程设计目的和要求
1.1课程设计教学环节的主要目的
学生已学完《C++语言程序设计》课程,并进行了第一次课程设计,学习了如何将有关处理文件的数据结构和操作进行封装,从而掌握了C++语言程序设计中的一些基本知识与方法,且对抽象、封装、继承与多态有了一定的了解。
为巩固C++有关知识,加强面向对象编程的方法训练,增加学生软件设计能力和动手能力,学习使用现有工具,特设计了这个利用MFC类开发一个小型完整应用程序的题目。
主要要求如下:
1、学会在自己的软件工程中利用MFC提供的成熟数据类型(class),这里主要要用的类有,CString,CFile,CArchive,CObject以及CObArray等一些通用类;
2、掌握冒泡法。
掌握数据类型大小(operator<或operator>)的重载,进而利用冒泡法对数据进行排序。
3、学习MFC中数据序列化(Serialize)的方法,掌握如何利用MFC提供的数据类型进行数据序列化。
1.2课程设计的目标
1.练习用所学的C语言和C++的相关知识;
2.掌握C语言和C++函数应用,学会用C语言和C++来编写程序。
3.掌握C语言和C++编程和程序调试的基本技能;
4.掌握利用C语言和C++进行软件设计的方法;
5.提高书写程序设计说明的能力;
6.提高运用C语言和C++解决实际问题的能力.
1.3课程设计要求
1.了解软件开发的相关背景和内容;
2.参考书籍学习相关课程设计的知识,增加所需知识;
3.清楚开发软件的各个相关功能,以便顺利开发软件,应用软件。
第二章课程设计任务背景与内容
2.1任务背景介绍
当今时代是飞速发展的信息时代。
在各行各业中离不开信息处理,这正是计算机被广泛应用于信息管理系统的环境。
计算机的最大好处在于利用它能够进行信息管理。
使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性。
尤其对于复杂的信息管理,计算机能够充分发挥它的优越性。
计算机进行信息管理与信息管理系统的开发密切相关,系统的开发是系统管理的前提。
本系统就是为了管理好图书馆信息而设计的。
图书馆作为一种信息资源的集散地,图书和用户借阅资料繁多,包含很多的信息数据的管理,现今,有很多的图书馆都是初步开始使用,甚至尚未使用计算机进行信息管理。
根据调查得知,他们以前对信息管理的主要方式是基于文本、表格等纸介质的手工处理,对于图书借阅情况(如借书天数、超过限定借书时间的天数)的统计和核实等往往采用对借书卡的人工检查进行,对借阅者的借阅权限、以及借阅天数等用人工计算、手抄进行。
数据信息处理工作量大,容易出错;由于数据繁多,容易丢失,且不易查找。
总的来说,缺乏系统,规范的信息管理手段。
尽管有的图书馆有计算机,但是尚未用于信息管理,没有发挥它的效力,资源闲置比较突出,这就是管理信息系统的开发的基本环境。
随着图书馆规模的不断扩大,图书数量也相应的增加,有关图书的各种信息量也成倍增加,面对着庞大的信息量,传统的人工方式管理会导致图书馆管理上的混乱,人力与物力过多浪费,图书馆管理费用的增加,从而使图书馆的负担过重,影响整个图书馆的运作和控制管理,因此,必须制定一套合理、有效,规范和实用的图书管理系统,对图书资料进行集中统一的管理。
另一方面,IT产业和Internet获得了飞速发展,计算机应用已渗透到了各个领域,引起信息管理的革命,实现了信息的自动化处理,提高了处理的及时性和正确性。
提高图书管理工作效率,作到信息的规范管理,科学统计和快速查询,让图书馆更好的为学校,社会服务。
数据处理手工操作,工作量大,出错率高,出错后不易更改。
图书馆采取手工方式对图书借阅情况进行人工管理,由于信息比较多,图书借阅信息的管理工作混乱而又复杂;一般借阅情况是记录在借书证上,图书的数目和内容记录在文件中,图书馆的工作人员和管理员也只是当时对它比较清楚,时间一长,如再要进行查询,就得在众多的资料中翻阅、查找了,造成查询费时、费力。
如要对很长时间以前的图书进行更改就更加困难了。
基于这此问题,我认为有必要建立一个图书管理系统,使图书管理工作规范化,系统化,程序化,避免图书管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改图书情况。
而图书管理系统是一些单位不可缺少的部分,书籍是人类不可缺少的精神食粮,尤其对一些学校来说,尤其重要。
所以图书管理系统应该能够为用户提供充足的信息和快捷的查询手段。
但传统人工管理方式存在着许多缺点,如:
效率低、保密性差,另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。
针对目前中小图书管理实际,从系统的开发背景、需求分析、设计原则开发过程等方面进行了全面的阐述,采用VisualFrxpro6.0和ACCESS2000等软件为开发工具。
2.2任务内容
下面是本程序的具体操作内容:
1.采编入库:
新购入一种书,如果该书在图书账目中已经存在,则将其库存量增加(包括总库存量和现库存量)。
如果该书不存在,则在图书账目中增加一种书,总库存量和现库存量均为输入的数字。
2.清空库存:
某一种书已无保留价值,将它从图书账目中注销。
3.借阅:
如果一种书的现库存量大于零,则借出一本书,将现库存量减1,并登记借阅者的图书证号和归还期限。
4.归还:
注销对借阅者的登记,改变该书的现存量。
5.按书号查找。
6.按书名查找。
7.按作者查找。
8.查看某图书证号的借阅者借阅的全部图书。
9.查看全部超期未还的图书。
0.退出图书管理系统。
2.3系统需求分析
2.3.1系统需求说明
1.满足图书借阅管理的基本要求。
2.满足图书书库管理的基本要求。
3.满足图书借阅人员的基本要求。
4.对操作人员的技能要求比较底,操作方便。
5.能够实现方便的扩展,满足图书馆发展的需要。
2.3.2功能需求说明
基于系统需求分析,该系统需要实现以下基本功能:
1.用户管理:
管理系统操作人员,设置操作人员口令和权限。
在满足不同系统用户的操作需求的基础上,提高系统的安全性。
2.基础数据管理:
维护图书管理相关类别信息,并设定各种类别图书能借出的天数。
图书类别设置:
设置管理图书的类别信息,并设定各种类别图书能借出的天数。
读者类型设置:
设置图书读者的类别信息,并设定各种类别读者能同时借阅图书的册数。
3.借阅管理:
完成图书的借出登记,归还登记信息,以及借书信息和还书信息的查询浏览等借阅相关的管理功能。
4.书库管理:
维护书库中的图书信息,能够完成新书的入库登记,图书信息的查询以及图书丢失处理等功能。
5.读者管理:
读者的相关信息,能够完成新读者信息的登记,读者信息的查询以及注销等功能。
第三章详细设计说明
3.1程序的流程包括采编入库,清除入库等操作
图3-1程序总体结构图
3.2系统流程图
图3-2流程图
图3-3整体步骤图
3.3函数说明
1.采编入库:
查找书籍。
图3-4采编入库流程图
2.借阅:
从图书馆借阅书籍。
图3-5借阅图
第四章软件说明
1.采编入库
执行voiduy()//采编入库函数
图4-1采编入库调试图
2.清空入库
voidelete()//清空入库函数
图4-2清空入库调试图
3.借阅
voidorrow()//借阅函数
图4-3借阅调试图
4.归还
voidturn()//归还函数
图4-4归还调试图
5.按书号查找
voidSearchByNum()//按书号查找函数
图4-5按书号查找调试图
6.按书名查找
voidSearchByName()//按书名查找函数
图4-6按书名查找
7.按作者查找
voidSearchByAuth()//按作者查找函数
图4-7按作者查找调试图
8.查看某图书证号的借阅者借阅的全部图书
voidViewCard()//查看某图书证号的借阅者借阅的全部图书
图4-8查看某图书证号的借阅者借阅的全部图书
9.查看全部超期未还的图书
voidViewBook()//查看全部超期未还的图书
图4-9查看全部超期未还的图书
第五章课程设计心得与体会
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新月异,计算机软件技术在这样一个时代中已空前活跃,在生活中可以说得是无处不在。
因此作为二十一世纪的大学来说掌握一门软件技术的系统开发是十分重要的。
回顾此次课程设计过程,我感慨颇多。
的确,从选题到定稿,从理论到实践,在整整三个星期的日子里,可以说得上是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题时,可以说得上是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说对各种语句的用法不够熟练,没有彻底熟悉一些重要的操作。
经过这次课程设计之后,一定把以前所学过的知识重新温故。
而且这次课程设计让我了解了许多以前没有学到的知识,VisualC++6.0程序是我自己看的,但是指导老师提供的资料。
从这本书中我学习了许多知识。
它让我从中发现自己有太多的不足,知道书本应该与实际操作联合在一起,有些东西必须自己实际操作才可以懂得。
这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在老师的辛勤指导下,终于迎刃而解。
同时,在老师的身上我学得到很多实用的知识,在次我表示感谢!
同时,对给过我帮助的所有同学和各位指导老师再次表示衷心的感谢。
附录一参考文献
【1】黄明梁旭周绍斌:
VisualC++信息系统设计与开发实力,机械工业出版社,2005年3月第一版
【2】章五一:
VisualC++项目开发实例导航,上海科学普及出版社,2004年11月第一版
【3】谭浩强:
C++程序设计,清华大学出版社,2004年6月第一版
【4】严蔚敏吴伟民:
数据结构(C语言版),清华大学出版社,1997年4月第一版
【5】张尧学:
计算机操作系统教程(第2版),清华大学出版社,2009年1月第一版
【6】殷人昆:
数据结构(用面向对象方法与C++描述),清华大学出版社,1999年7月第一版
附录二清单程序
#include
#include
#include
#defineLIST_INIT_SIZE100//图书证使用者最大值定义为100
//借书人的结构体
typedefstructBoro//借书行为
{
charBNum[20];//借书的书号
charRetDate[8];//归还日期
structBoro*next;
}Bor;
typedefstructLinkBook
{
Bor*next;//该图书证的借书行为
charCNum[20];//证号
intTotal;//借书的数量
}lend[LIST_INIT_SIZE];//借书人数组
//图书的结构体信息
typedefstructLNode
{
charCardNum[20];//图书证号
structLNode*next;
}LinkList;//借书人
typedefstructbook
{//每种图书需要登记的内容包括书号ISBN、书名、作者、出版社、总库存量和现库存量。
charnum[20];//书号
charname[20];//书名
charauth[20];//作者
charpub[20];//出版社
intTotNum;//总库存
intNowNum;//现库存
LinkList*next;//借了该书的人
}ook[MAXSIZE];//
intRetotal;//读者数量
inttotal;//定义外部变量.书的种类数
//
//结构体初始化
voidInitBo(ook&boo)//初始化图书信息
{
for(inti=0;i { boo[i].NowNum=0; boo[i].TotNum=0; boo[i].next=NULL; } } voidInitRe(lend&Lin)//初始化借阅者信息 { for(inti=0;i Lin[i].next=NULL; }// intmid=0;//外部函数mid,用来返回查找到的位置 boolBinarySearch(ookboo,charSearchNum[])//二分法查找比较书号 {//用bool函数,但由于函数不能有两个返回值,所以设置一个外部变量mid,用来返回查找到的位置 intlow=0,high=total-1; intfound=0; while(low<=high) { mid=(low+high)/2;//中间点 if(strcmp(boo[mid].num,SearchNum)==0)//书号相同 { found=1; returntrue; }//查找成功 if(strcmp(boo[mid].num,SearchNum)! =0)//书号不同 high=mid-1; elselow=mid+1; } if(found==0) returnfalse;//查找失败 } voidBuy(ook&boo,charBuyNum[]) {//1、采编入库: 新购入一种书,如果该书在图书账目中已经存在,则将其库存量增加(包 //括总库存量和现库存量),如果该书不存在,则在图书账目中增加一种书,总库存量和现库存量均为1。 if(BinarySearch(boo,BuyNum))//如果书库中有此书 { boo[mid].TotNum++;//总库存加1 boo[mid].NowNum++;//现库存加1 printf("入库成功.\n"); printf("已更改书库中该书的信息。 编号%s的书%s作者是%s,出版社是%s,目前的总库存是%d,现库存是%d。 \n",boo[mid].num,boo[mid].name,boo[mid].auth,boo[mid].pub,boo[mid].TotNum,boo[mid].NowNum); } if(! BinarySearch(boo,BuyNum)) { inti; for(i=total;i>mid&&total;i--)//插在适合位置保持有序 boo[i]=boo[i-1];//空出插入位置 printf("该书在书库中不存在。 设立新书目,请补全书的详细信息。 \n"); strcpy(boo[i].num,BuyNum); printf("该书购入的数量是: "); scanf("%d",&boo[i].NowNum); boo[i].TotNum=boo[i].NowNum; printf("该书的名字是: "); scanf("%s",&boo[i].name); printf("该书的作者是: "); scanf("%s",&boo[i].auth); printf("该书的出版社是: "); scanf("%s",&boo[i].pub);//补全信息 boo[i].next=NULL; total++;//总量+1 printf("已增加该书的信息。 编号%s的书%s作者是%s,出版社是%s,目前的总库存是%d,现库存是%d。 \n",boo[i].num,boo[i].name,boo[i].auth,boo[i].pub,boo[i].TotNum,boo[i].NowNum); printf("入库成功.\n"); } } voidDelete(ook&boo,charDeleteNum[]) {//2、清空库存: 某一种书已无保留价值,将它从图书账目中注销。 if(BinarySearch(boo,DeleteNum)==false||total==0)//如果无此书 printf("书库中没有该书.\n"); if(BinarySearch(boo,DeleteNum))//若有 { if(! boo[mid].next) { intj; for(j=mid;j boo[j]=boo[j+1]; strcpy(boo[j].num,boo[j+1].num); strcpy(boo[j].name,boo[j+1].name); strcpy(boo[j].auth,boo[j+1].auth); strcpy(boo[j].pub,boo[j+1].pub); boo[j].TotNum=boo[j+1].TotNum; boo[j].NowNum=boo[j+1].NowNum; printf("已成功删除该书.\n"); } elseprintf("该书有借阅者,无法删除。 \n"); } } voidBorrow(ook&boo,lend&Lin,charBorrowNum[],charCaNum[]) {//3、借阅: 如果一种书的现库存量大于零,则借出一本书,将现库存量减1, //并登记借阅者的图书证号和归还期限。 Bor*p,*q; LinkList*m,*n; if(! BinarySearch(boo,BorrowNum)||total==0)//如果没有找到此书 printf("书库里没这书。 \n");//如果有这书 if(BinarySearch(boo,BorrowNum))//书库里有 { if(boo[mid].NowNum>0)//看现库存是否大于0 { boo[mid].NowNum--;//借出一本,少1 if(boo[mid].next==NULL)//若该书信息下显示该种书还没被人借过 { m=(LinkList*)malloc(sizeof(LNode));//分配 boo[mid].next=m;//该图书信息中的链表的第一个结点 strcpy(m->CardNum,CaNum); m->next=NULL;//后一个结点为空 } else//如果已经有人在借这书了 { m=boo[mid].next; while(m->next)//遍历到最后一个结点 m=m->next; n=(LinkList*)malloc(sizeof(LNode));//分配空间,增加1个结点 m->next=n; strcpy(n->CardNum,CaNum);//记录证号 n->next=NULL; } inti=0; for(i=0;i { if(! strcmp(Lin[i].CNum,CaNum))//如果已经有该图书证的信息 { p=Lin[i].next; while(p->next)p=p->next;//遍历到最后一个结点 q=(Bor*)malloc(sizeof(Boro));//分配空间 p->next=q; strcpy(q->BNum,BorrowNum);//记录书号 printf("输入归还日期: "); scanf("%s",&q->RetDate); q->next=NULL; printf("借阅成功.\n"); break;//找到证了就跳出循环 } } if(i==Retotal)//如果没有这张证的信息 { strcpy(Lin[i].CNum,CaNum);//记录证号 p=(Bor*)malloc(sizeof(Boro));//分配空间 Lin[i].next=p; strcpy(p->BNum,BorrowNum); printf("输入归还日期: "); scanf("%s",&p->RetDate); p->next=NULL; Retotal++;//借阅证号信息总数加1 printf("借阅成功.\n"); } } elseprintf("借阅失败.该书现在库存为0.\n"); } } voidReturn(ook&boo,lend&Lin,charReturnNum[],charBorrowerNum[]) {//4、归还: 注销对借阅者的登记,改变该书的现存量。 Bor*p,*q; LinkList*m,*n; intflag=0;//设置一个参数 if(! BinarySearch(boo,ReturnNum)||! total)//没书 printf("书库中无此书.\n"); if(BinarySearch(boo,ReturnNum))//有书 { m=boo[mid].next; if(! strcmp(m->CardNum,BorrowerNum))//如果是第一个借的人还的 { boo[mid].NowNum++;//现库存加1 boo[mid].next=m->next;//删除结点 free(m);//释放该结点的空间空间 } else { while(m->next)//查找归还者的借阅者结点 { if(! strcmp(m->next->CardNum,BorrowerNum))//如果找到 { n=m->next;//n为归还者的借阅结点 m->next=n->next;//m指向归还者的借阅结点的下一结点 free(n);//释放空间 boo[mid].NowNum++;//现库存加1 break; } m=m->next; } } } //在借阅者表里查找借阅者信息 for(inti=0;i { if(! strcmp(Lin[i].CNum,BorrowerNum))//如果找到借阅者 { p=Lin[i].next; if(! strcmp(p->BNum,ReturnNum))//如果是归还的是借的第一本书 { Lin[i].next=p->next;//指向下一借书结点 free(p);//释放结点空间 printf("成功归还该书.\n"); flag=1; break; } else//找不到 { while(p->next)//找到归还书的借书结点 { if(! strcmp(p->next->BNum,ReturnNum))//如果找到 { q=p->next;//q为归还书的借书结点 p->next=q->next;//p指向下一借书结点 free(q);//释放空间 printf("成
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图书馆 管理 系统
![提示](https://static.bdocx.com/images/bang_tan.gif)