图书管理系统说明书.docx
《图书管理系统说明书.docx》由会员分享,可在线阅读,更多相关《图书管理系统说明书.docx(40页珍藏版)》请在冰点文库上搜索。
图书管理系统说明书
*******************
实践教学
*******************
兰州理工大学
计算机与通信学院
2011年秋季学期
面向对象课程设计
题目:
图书管理系统
专业班级:
计算机科学与技术四班
姓名:
智凯
学号:
10240439
指导教师:
朱红蕾
成绩:
_______________
目录
摘要....................................................................2
前言....................................................................3
第一章系统需求分析与总体设计
1.系统需求分析.......................................................4
1.1.1系统设计的目的与意义.........................................4
1.1.2系统功能需求.................................................4
1.1.3系统功能分析.................................................4
2.总体设计...........................................................5
1.2.1系统功能模板划分与设计........................................5
1.2.2系统功能模板图................................................5
第二章详细设计
1.读者类设计..........................................................6
2.读者库类的设计......................................................6
3.图书类的设计........................................................7
4.图书库类的设计......................................................8
第三章核心控制设计
1.主函数中的操作.......................................................8
2.具有的功能...........................................................9
3.算法分析.............................................................9
第四章系统调试
1.在调试过程中的错误..................................................12
主要参考文献.............................................................15
设计总结.................................................................16
致谢.....................................................................17
附录.....................................................................18
1
摘要
主要介绍了图书管理系统的设计与实现,该程序具有图书信息录入功能和图书信息浏览功能;查询和排序功能;图书信息的删除与修改等功能。
在课程设计中,程序设计语言采用VisualC++,程序运行平台为WindowsXP。
程序通过调试运行后基本实现了最初的设计目标,并且经过适当完善后,在实际中可以解决更多的问题。
关键词图书管理;程序设计;C++
2
前言
近年来,在计算机软件业,面向对象程序设计的思想已经被越来越多的软件设计人员所接受。
不仅因为它是一种最先进的,新颖的计算机程序设计思想,最主要的是这种新的思想更接近人的思维活动,人们利用这种思想进行程序设计时,可以很大程度地提高编程能力,减少软件维护的开销。
面向对象程序设计方法是通过增加软件的可扩充性和可重用性来提高程序员的编程能力。
3
随着计算机在我国广泛而深入的应用,在分析和开发计算机系统软件和应用软件的过程中,迫切需要掌握各种数据结构的描述方法以及相应的处理算法。
因此面向对象程序设计知识是计算机相关科学的学生和从事计算机应用的技术人员必备的专业基础知识。
著名的瑞士计算机科学家沃思提出:
对象+消息=程序。
第一章系统需求分析与总体设计
1.系统需求分析
1.1.1系统设计的目的与意义:
二十一世纪是信息的社会,信息作为社会最主要的资源,将成为战略资源引起人们广泛的关注。
如何获取信息?
图书是我们最好的获取信息的方式,但由于图书馆图书收藏量大大增加,使传统的图书管理员的工作日益繁重起来。
迫使人们起用新的管理方法来管理图书,但如何把图书管理员从繁重的工作中解脱出来呢?
科学技术日新月异的进步,让人类生活发生了巨大的变化,计算机技术的飞速发展,使各行各业在计算机技术应用方面得到了广泛的普及和使用。
信息化时代的到来成为不可抗拒的潮流,人类文明正在进入一个崭新的时代。
因此,图书管理系统也以方便、快捷、费用低的优点正慢慢地进入人们的生活,将传统的图书管理方式彻底的解脱出来,提高效率,减轻工人人员以往繁忙的工作,减小出错的概率,使读者可以花更多的时间在选择书和看书上。
从而使人们有更多时间来获取信息、了解信息、掌握信息。
1.1.2系统功能需求:
本系统有四个类,Book类,BDatebase类、Reader类、RDatebase类,存储借阅者的个人信息、借阅信息以及预定信息。
持有借阅卡的借阅者可以借阅书刊、返还书刊、查询书刊信息、预定书刊并取消预定等功能。
1.1.3系统功能分析:
系统通过调用函数来实现删除图书、读者信息,添加图书、读者信息等功能。
delbook()函数用于删除图书信息;addbook()函数用于增加图书信息;borrowbook()函数用于实现借书操作;returnbook()函数用于实现还书操作等等;主函数用于掉用这些函数。
4
2.总体设计
1.2.1系统功能模块划分与设计
本系统定义了Book类、BDatebase类、Reader类、RDatebase类这四个类,定义了addbook()、addreader()、borrowbook()、setname()等函数来实现系统所需功能
1.2.2系统功能模块图:
图2.3
5
第二章详细设计
1.读者类的设计
该类定义了借书操作,还书操作,设置读者姓名等功能。
Reader
inttag;//删除标记1:
已删0:
未删
intno;//读者编号
charname[10];//读者姓名
intborbook[Maxbor];//所借图书
Reader(){}
char*getname()//获取姓名
intgettag()//获取删除标记
intgetno()//获取读者编号
voidsetname(charna[])//设置姓名
voiddelbook()//设置删除标记
voidaddreader(intn,char*na);//增加读者
voidborrowbook(intbookid);//借书操作
intretbook(intbookid);//还书操作
voiddisp();//输出读者信息
图3.1
2.读者库类的设计
该类实现了建立读者的个人资料,删除读者信息,输出读者信息等功能。
6
RDatebase
inttop;//读者记录指针
Readerread[Maxr];//读者记录
RDatabase();//构造函数,将reader.txt读到read[]中
voidclear();//删除所有读者信息
intaddreader(intn,char*na);//增添读者信息
Reader*query(intreaderid);//按编号查找
voiddisp();//输出所有读者信息
intReadernum();//记录读者信息
voidreaderdata();//读者库维护
~RDatabase();//析构函数,将read[]写入reader.txt文件中借书操作
intretbook(intbookid);//还书操作
voiddisp();//输出读者信息
图3.2
3.图书类的设计
图书类,可以实现对图书的描述,图书的编号,书名,借出,还入等操作。
Book
inttag;//删除标记1:
已删0:
未删
intno;//图书编号
charname[20];//书名
intonshelf;//是否在架1:
在架0:
已借
Book(){}
char*getname();//获取姓名
intgetno();//获取图书编号
intgettag();//获取删除标记
voidsetname(charna[]);//设置书名
voiddelbook();//删除图书
voidaddbook(intn,char*na);//增加图书
intborrowbook();//借书操作
voidretbook();//还书操作
voiddisp();//输出图书
图3.3
7
4.图书库类的设计
Xingzhengrenyuan
inttop;//图书记录指针
Bookbook[Maxb];//图书记录
BDatabase();//构造函数,将book.txt读到book[]中
voidclear();//全删
intaddbook(intn,char*na);//增加图书
Book*query(intbookid);//查找图书
voiddisp();//输出所有图书信息
voidbookdata();//图书库维护
~BDatabase();//析构函数,将book[]写入book.txt文件中
图3.4
第三章核心控制设计
1.主函数中的操作:
(1)建立1个Reader读者类、1个RDatabase读者库类、1个Book图书类、1个BDatabase图书库类
(2)建立菜单界面。
完成以下内容:
①进入功能必须打开菜单,然后用户根据菜单选择相应的操作方式,如查看数据、编辑图书数据以及修改图书数据、维护图书的采购信息。
添加、删除、查看读者个人信息,浏览图书信息。
②能够对图书基本信息、图书采购信息、图书的借阅人信息进行统计,统计的结果能够以表格的形式来表示。
(3)将图书基本信息、图书采购信息、图书的借阅人信息存储在相应的文件中。
(4)系统界面友好,易操作。
8
2、本程序应具备的功能:
A.添加、借阅、还书功能:
(1)添加读者和图书信息。
(2)借阅尚在架的图书。
(3)读者归还的图书。
B.查找功能
(1)根据图书的编号查找图书信息。
(2)根据读者的编号查找读者的信息。
C.系统的操作
(1)系统在进入时,要有菜单提示;
(2)系统在用户退出时,有一定的提示。
3、算法分析
1)添加操作:
(读者信息的添加与图书信息的添加类似)
包括两个部分,先通过输入设备输入信息,系统获取;然后添加入读者数据库read.txt文件中。
㈠获取信息
voidReader:
:
addreader(intn,char*na)//增加读者
{
tag=0;
no=n;
strcpy(name,na);
for(inti=0;iborbook[i]=0;
}
9
intRDatabase:
:
addreader(intn,char*na)//增添读者信息
{
der*p=query(n);
if(p==NULL)
{
top++;
read[top].addreader(n,na);
cout<<"读者添加成功"<return1;
}
return0;
}
流程图:
㈡析构函数写入新读者的编号跟姓名
RDatabase:
:
~RDatabase()
{
fstreamfile("reader.txt",ios:
:
out);
for(inti=0;i<=top;i++)
{
if(read[i].gettag()==0)
file.write((char*)&read[i],sizeof(read[i]));
else
file.close();
}
}
10
流程图:
2)借书操作:
利用for语句和if语句,通过判断图书的borbook的编号是否为0,来判断图书是否未被借走或还没有被借完。
voidReader:
:
borrowbook(intbookid)//借书操作
{
for(inti=0;iif(borbook[i]==0)
{
borbook[i]=bookid;
return;
}
}
流程图:
3)还书操作:
利用for语句和if语句,通过判断图书的borbook的编号是否为要还书的编号,来判断是否借出此书。
11
intReader:
:
retbook(intbookid)//还书操作
{
for(inti=0;i{
if(borbook[i]==bookid)
{
borbook[i]=0;
return1;
}
else
continue;
}
流程图:
(4)查找功能:
利用for语句和if语句,寻找与要查询的编号相同的读者编号或图书编号,如果找到,向系统返回相应的编号,输出相应的信息。
(读者的查找与图书查找类似)
Reader*query(intreaderid)//按编号查找
{
for(inti=0;i<=top;i++)
if(read[i].getno()==readerid&&read[i].gettag()==0)
return&read[i];
returnNULL;
}
流程图:
12
第四章系统调试
1、此系统存在的问题
(1)未设登录密码保护系统,是整个图书管理系统失去了一定的安全性;
(2)程序运行界面
图4.1
图4.2
13
图4.3
图4.4
图4.5
此界面运行时选择4有时会出现内存读取错误;
1)当输入错的数据类型时可能导致内存错误;
2)读者、图书信息不完善;
3)命名不是很规范;
4)信息存储有限;
14
图4.6
主要参考文献
[1]陈维兴,林小茶.c++面向对象程序设计教程.北京:
清华大学出版社,1996.2004.
[2]张国峰.C++程序设计实用教程.北京:
清华大学出版社,1996.
[3]张松梅.C++语言教程.电子科技大学出版社,1993.
[4]阎龙.C程序员的C++指南.北京航空航天大学出版社,1992.
[5]谭浩强.C++程序设计.清华大学出版社,1990.
15
设计总结
通过这次课程设计让我逐步学会了如何运用C++面向对象程序设计的设计思想和方法来解决实际问题。
比如这次设计图书管理系统,首先我考虑是在实际应用时用户一般进行什么操作,对哪些对象进行操作。
很显然我需要建立两个类,包括图书类和读者类,同时考虑到图书和读者不止一个,所以还需两个类,图书库类和读者库类,这两个类分别将其信息传递给图书类和读者类。
确定了类之后,则需要对类的内容进行扩充。
由于我需要这个系统完成对图书管理和读者管理的功能,并能对借阅信息进行管理,要求完成一下功能,图书资料管理,可以添加、修改、删除、查询书籍信息,读者资料管理,可以添加、修改、删除、查询读者信息;借书管理,可以进行添加借书信息;还书管理,可以进行还书信息。
所以在对应的类下建立相应功能函数。
建立功能函数后就是构造主函数。
主函数的作用就是通过向对象发送信息、对象接受信息启动相应的方法来实现相应的操作。
当然在这些过程中要保证面向对象程序设计的抽象、封装、多态和继承的特点。
在设计本系统中虽然综合考虑到了图书管理的各个方面,界面设计简洁,数据库设计合理,但依然还有一些不足。
为了能够较好地完成本次课程设计,我详细阅读教材,以及网上搜索,和到图书馆查找相关资料等。
在做课程设计的过程中,我在利用所学的知识同时,又学到了很多实例化的理论知识和软件工程的一些实践,总结了一些经验和方法强化了我的实际动手能力,同时也找到自己的不足,我一定会继续学习增加自己的编程能力和调试能力,在今后的学习中我将会更加的努力,增加自己的知识储备,拓宽自己的知识面,锻炼自己的能力,使我的综合素质得到较大的提高。
在这设计的过程中我也出现过一些比较严重的错误,后来在同学的指点下我改正了自己的错误,并最终成功调试除了程序。
当程序调试出来的那一瞬间,我感觉自己完成了一件非常了不起的事,好有成就感。
在以后的日子,我将会继续我的兴趣继续深入学习程序设计,相信在越来越多的尝试之后,自己会不断进步不断提高的。
16
最后感谢老师的指导与同学的帮助,使我能顺利完成这次程序设计。
致谢
首先感谢我的指导老师朱红蕾,她在我的课程设计过程中提出了指导性的方案和架构,并指引我阅读相关的资料和书籍,使我在不熟悉的领域中仍能迅速掌握新的技术。
在这三周的面向对象课程设计中,对课本中所学的知识进一步理解和掌握,学会了如何把学到的知识用于解决实际问题,锻炼了自己动手的能力。
在这设计的过程中我也出现过一些比较严重的错误,后来在同学的指点下我改正了自己的错误,并最终成功调试除了程序。
当程序调试出来的那一瞬间,我感觉自己完成了一件非常了不起的事,好有成就感。
在以后的日子,我将会继续我的兴趣继续深入学习程序设计,相信在越来越多的尝试之后,自己会不断进步不断提高的。
17
17
感谢老师的指导与同学的帮助,使我能顺利完成这次程序设计。
附录
#include
#include
#include
#include//输入/输出文件流类
usingnamespacestd;
constintMaxr=100;//最多的读者
constintMaxb=100;//最多的图书
constintMaxbor=5;//每位读者最多借五本书
//读者类,实现对读者的信息的描述
classReader
{
private:
inttag;//删除标记1:
已删0:
未删
intno;//读者编号
charname[10];//读者姓名
intborbook[Maxbor];//所借图书
public:
Reader(){}//构造函数
char*getname()
{
returnname;
}//获取姓名
intgettag()
{
returntag;
}//获取删除标记
intgetno()
{
returnno;
}//获取读者编号
voidsetname(charna[])//设置姓名
{
strcpy(name,na);
}
voiddelbook()//设置删除标记
{
tag=1;
}
18
voidaddreader(intn,char*na);//增加读者
voidborrowbook(intbookid);//借书操作
intretbook(intbookid);//还书操作
voiddisp();//输出读者信息
};
voidReader:
:
addreader(intn,char*na)//增加读者
{
tag=0;
no=n;
strcpy(name,na);
for(inti=0;iborbook[i]=0;
}
voidReader:
:
borrowbook(intbookid)//借书操作
{
for(inti=0;i{
if(borbook[i]==0)
{
borbook[i]=bookid;
return;
}
}
}
intReader:
:
retbook(intbookid)//还书操作
{
for(inti=0;i{
if(borbook[i]==bookid)
{
borbook[i]=0;
return1;
}
else
continue;
}
return0;
}
voidReader:
:
disp()//输出读者信息
{
cout<[";
for(inti=0;iif(borbook[i]!
=0)
cout<cout<<"]"<}
//读者类库,实现建立读者的个人资料
classRDatabase
{
private:
inttop;//读者记录指针
Re