图书管理系统程序设计.docx

上传人:小飞机 文档编号:3377730 上传时间:2023-03-12 格式:DOCX 页数:34 大小:43.91KB
返回 下载 相关 举报
图书管理系统程序设计.docx_第1页
第1页 / 共34页
图书管理系统程序设计.docx_第2页
第2页 / 共34页
图书管理系统程序设计.docx_第3页
第3页 / 共34页
图书管理系统程序设计.docx_第4页
第4页 / 共34页
图书管理系统程序设计.docx_第5页
第5页 / 共34页
亲,该文档总共34页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《图书管理系统程序设计.docx》由会员分享,可在线阅读,更多相关《图书管理系统程序设计.docx(34页珍藏版)》请在三一办公上搜索。

1、图书管理系统程序设计一、问题定义: 要完成的任务如下: 借书、还书和预约 增加或删除图书 查询最近借走某本图书的读者 按书名或作者查询图书 对过期未还图书的读者进行罚款处理 该系统还要求: 一个读者共可从本系统中借5本图书 有过期未还图书的读者不能从本系统借书 每本图书的借阅期限为3个月 二、功能描述: 1、用户需求分析 作为图书管理系统,其主要的需求人员是借阅者,借阅者对其的要求可以大体概括如下: 1) 能按各种方式,比如书名、编号、作者等查询图书馆的藏书情况; 2) 能熟悉使用图书管理系统; 3) 能方便地借阅图书、续借图书、归还图书; 4) 能查询自己的基本资料、借阅图书情况; 5) 能

2、方便图书管理员对图书的录入登记、注销; 6) 能方便对新生的登记或注销已经毕业学生的信息; 7) 能及时发布一些学院学生借阅图书超期情况、馆内藏书情况等。 2、功能说明 1)、读者管理系统 未注册者可以进入注册系统进行注册; 已注册借阅者可按姓名、编号或身份证号登陆进入借阅者检索系统查询借阅者 情况; 已注册借阅者可按书名、出版社或作者对图书信息进行检索查询或提出预约请 求; 2)、图书管理员管理系统 图书管理员通过图书管理员身份认证进入图书管理员管理系统; 读者可借阅在库图书; 在规定期限内借阅者归还借阅图书; 读者在不违规情况下可继续借阅已借阅图书; 读者可以预约图书。 3)、系统管理员管

3、理系统 系统管理员通过系统管理员身份认证进入系统管理员管理系统; 系统管理员可以对图书进行图书管理; 系统管理员可以对借阅者进行学生管理; 4)、罚款管理系统 罚款管理员通过罚款管理员身份认证进入罚款管理系统; 罚款处理可以读取借阅信息表再生成超时罚款信息表,通过超时罚款信息表可 以生成罚款单给罚款管理员; 图书管理员告知罚款系统图书超时未还,经罚款管理员鉴定后,对图书进行注销处理且罚款管理员对借阅者进行罚款处理。 3、DFD顶层流程图 无效借阅者信息图书检索请求管理员身份认证信息图书检索结果注册/登陆申请管理员错误检验图书超时信息图书管理系统注册/登陆结果借阅者信息还书/借阅结果读者4、细化

4、的数据流图 无效读者信息1、读者管理系统图书检索请求信息图书检索结果注册/登陆申请注册/登陆结果注册信息注册结果系统管系统管理员身份认证信息3、系统管理员管理系统读者理错误验证员三、数据定义: 1)ER模型图 预约消息读者信息预约成功信息还书/借阅结果图读图书管理员书者身份认证信息管信2、图书管理理息员管理系统错误检验员图书超时信息5、罚款管理系统罚款管理员罚身份认证信息款错误检验管理员读者编号所借图书的信息借的图书的数目有无被借标记读者姓名读者图书书名图书编号借书日期删除记录标记借书还书图书出库入库删除标记图书管理系统读者信息管理员操作管理员信息图书信息姓名编号2)数据定义: 读者的基本属性

5、: class Student private: int tag; int number; char name10; int borbookBor; public: . 图书的基本属性: class Book private: int tag; int number; char name20; int onshelf; public: 四、总结结构和模块接口 图书管理系统图书管理信息读者管理员身份认证读者信息读者信息身份认证图书管理读者管理读者操作界面借阅还书预约信息信息信息表表表图书信息表图书信息表书图目书信信息息表读者信息表读者信息表读者借阅者阅读分类信息表借书信息表图书查看图书修改图书删

6、除借阅者查看借阅者修改借阅者删除图书馆借书图书馆还书预约图书五、程序流程图 开始N管理员登陆用户登陆N登陆成功登陆成功Y结束NN还书Y还书成功NN图书存在Y预约成功N预约图书管理读者管理借书Y低于五本YY输入要查询的书籍编号或者作者名Y查看图书?N查询读者NY借书成功Y增加图书?输入读者编号增加读者操作错误图书存在增加图书NYYN删除读者读者存在Y删除图书Y返回图书信息NY输入要删除的图书返回读者信息YN读者存在增加读者操作错误超时图书存在NYN删除图书结束Y开罚单NN删除读者操作错误六、测试和结果 1)单元测试 :采用白盒测试法 针对用户还书、预约、借书、查询等功能模块进行测试 对于还书功能

7、模块,模块的程序流程图如下: 用户登陆输入要还书的编号retno0retno存在1borday90 预期输出:接受违约惩罚 3、测试路径:0-1-2-3 输入条件:retno存在,borday=90 预期输出:成功还书 对于预约功能模块,模块的程序流程图如下: 登陆TBorday90 预期输出:接受违约处罚 2、测试路径:0-1-2-7 输入条件:borday=90,borno不存在 预期输出:不存在该图书 3、测试路径:0-1-2-3-8 输入条件:borday=90,borno存在,onself不存在 预期输出:图书已借出 4、测试路径:0-1-2-3-4-5 输入条件:borday=90

8、,borno存在,onself存在 预期输出:预约成功 对于借书功能模块,模块的程序流程图如下: 登陆Borday=900YBorno90 预期输出:接受违约惩罚 2、测试路径:0-1-8 输入条件:borday5 预期输出:超出所借数目的最大 3、测试路径:0-1-2-3-9 输入条件:borday5,bookno不存在 预期输出:所借图书编号不存在 4、测试路径:0-1-2-3-4-10 输入条件:borday5,bookno存在,onshelf不存在 预期输出:书不在架 5、测试路径:0-1-2-3-4-5-6 输入条件:borday5,bookno存在,onshelf存在 预期输出:借

9、书成功 对于查询功能模块,模块的程序流程图如下: 登陆输入要检索的图书编号bookno01bookno存在?YN2输出图书的信息46YOnshelf?N3结束5流程图中判定节点为2,环形复杂度为:2+1=3 采用路径覆盖测试法,测试用例如下: 1、测试路径:0-1-6 输入条件:bookno不存在 预期输出:要查找的图书不存在 2、测试路径:0-1-2-3 输入条件:bookno存在,onself=1 预期输出:要查找的图书已被借走 3、测试路径:0-1-2-4-5 输入条件:bookno存在,onself=0 预期输出:返回查找图书信息 2.)确认测试:采用黑盒测试法测试 确认测试,主要是为

10、了检测接口功能应对的各种非预期性输入时系统的可靠性和容错性等性能。本小型图书管理系统将对用户和管理员与图书管理系统之间的交互接口进行测试,所以测试的主要内容有2个:图书管理系统和管理员接口,图书管理系统和读者接口。 读者与图书管理系统之间的接口 读者登陆图书管理系统,应受到系统如下的约束:用户名需要以字母开头,后面是数字和字母组合,不能超过最大长度为10,密码长度不超过6 划分了等价类,情况如下所示: 输入条件 用户名开头 余下字符 字符数 有效等价类 字母 小于10 编号 1 3 无效等价类 非字母 非数字和字母 大于10 编号 4 5 6 数字和字母组合 2 有效等价类的测试用例: 测试编

11、号 T1 输入条件 开头 a 余下字符 dd32323 个数 8 预期输出 add32323 覆盖等价类 1、2、3 无效等价类的测试用例: 测试编号 T1 T2 T3 输入条件 开头 2 a a 余下字符 dd32323 *? 1234567899 个数 8 5 11 预期输出 输入错误 输入错误 输入错误 覆盖等价类 2、3、4 1、3、5 1、2、6 管理员与图书管理系统之间的接口 管理员与图书管理系统之间的接口和用户相同,所以对其测试仍然和用户与图书管理系统的测试一样的等价类和测试用例,不再详细介绍。 七、总结与展望 在此次小型图书管理系统的开发试验中,我获益匪浅。自从上大学学习计算机

12、来,我对编程也相对比较熟悉和了解,但是,每天编写的程序是毫无头绪和没有什么计划。学习软件工程以来,对于软件项目的建立和开发有了一个系统的认识,软件开发分为七个方面:问题定义,可行性分析、需求分析、总体设计、详细设计、编码、软件测试和维护。在每一个阶段都有明确的目标和开发的过程。 本文档主要介绍了图书信息管理系统,根据学校图书馆的实际情况进行了需求分析,并对数据的结构设计进行了分析,初步设计出了系统的总体结构,此后对整个系统的功能和设计实现作出了详细的介绍。 由于设计时间仓促,对各个方面考虑的还不够全面,系统设计难免存在欠缺,有很多模块操作还不够人性化,对很多错误的信息处理还不够全面,包括数据的

13、格式错误,数据的录入是否合乎实际要求等等。对于一个完整的图书信息管理系统的功能实现还不够完整,很多功能还没有考虑到,还需要添加个别的功能模块,以达到系统的完整性。由于设计时间的短暂,对于该系统的开发已经基本达到了最初的设计要求,能够基本满足用户的需求。 在以后的系统完善中还需对系统应用中遇到的错误进行处理,并检验数据的合法性,并做出相应的处理。而且还要考虑到数据的完整性和安全性。根据学校图书馆的实际需求再添加相应的功能模块,完成一个完整的实用的图书信息管理系统。 #include #include #include #include using namespace std; const int

14、 Reader=100; const int Maxb=100; const int Bor=5; class Student private: int tag; int number; char name10; int borbookBor; public: Student char *getname return name; int gettag return tag; int getnumber return number; void setname(char *na) strcpy(name,na); void delbook tag=1; void addStudent(int n,

15、char *na) tag=0; number=n; strcpy(name,na); for(int i=0;iBor;i+) borbooki=0; void borrowbook(int bookid)/借书操作 for(int i=0;iBor;i+) if (borbooki=0) borbooki=bookid; return; int retbook(int bookid)/还书操作 for(int i=0;iBor;i+) if(borbooki=bookid) borbooki=0; return 1; return 0; void output/读出读者信息 cout se

16、tw(5) number setw(10) name借书编号:; for(int i=0;iBor;i+) if(borbooki!=0) cout borbooki |; cout endl; ; class RData private: int top; /读者记录指针 Student readReader; public: RData /构造函数,将Student.txt读到read中 Student s; top=-1; fstream file(Student.txt,ios:in);/打开一个输入文件 while (1) file.read(char *)&s,sizeof(s);

17、 if (!file)break; top+; readtop=s; file.close; void clear top=-1; int addStudent(int n,char *na)/查找是否存在 Student *p=equal(n); if (p=NULL) top+; readtop.addStudent(n,na); return 1; return 0; Student *equal(int Studentid)/按编号查找 for (int i=0;i=top;i+) if (readi.getnumber=Studentid & readi.gettag=0) retu

18、rn &readi; return NULL; void output for (int i=0;i=top;i+) readi.output; void Studentdata;/读者库维护 RData /析构函数,将read写到Student.txt文件中 fstream file(Student.txt,ios:out); for (int i=0;i=top;i+) if (readi.gettag=0) file.write(char *)&readi,sizeof(readi); file.close; ; void RData:Studentdata char choice; c

19、har rname20; int Studentid; Student *r; while (choice!=0) cout n; cout 读 者 维 护 n; cout n; cout 1.新 增 n; cout n; cout 2.更 改 n; cout n; cout 3.删 除 n; cout n; cout 4.查 找 n; cout n; cout 5.显 示 n; cout n; cout 6.全 删 n; cout n; cout 0.退出 n; cout n; /cout choice; switch (choice) case 1: cout Studentid; cou

20、t rname; addStudent (Studentid,rname); break; case 2: cout Studentid; r=equal(Studentid); if (r=NULL) cout 该读者不存在 endl; break; cout rname; r-setname(rname); break; case 3: cout Studentid; r=equal(Studentid); if (r=NULL) cout 该读者不存在 delbook; break; case 4: cout Studentid; r=equal(Studentid); if (r=NU

21、LL) cout 该读者不存在output; break; case 5: output; break; case 6: clear; break; default:cout退出:n;system(cls);break; class Book private: int tag; int number; char name20; int onshelf; public: Book char *getname return name; int getnumber return number; int gettag return tag; void setname(char na) strcpy(n

22、ame,na); void delbook tag=1; void addbook(int n,char *na) tag=0; number=n; strcpy(name,na); onshelf=1; int borrowbook/借书操作 if (onshelf=1) onshelf=0; return 1; return 0; void retbook/还书操作 onshelf=1; void output/输出图书 cout setw(6) number setw(18) name setw(10) (onshelf=1? 在架:已借) endl; ; class BDatabase

23、 private: int top; Book bookMaxb; /图书记录 public: BDatabase/构造函数,将book.txt读到book中 Book b; top=-1; fstream file(book.txt,ios:in); while (1) file.read(char *)&b,sizeof(b); if (!file) break; top+; booktop=b; file.close; void clear top=-1; int addbook(int n,char *na) Book *p=equal(n); if (NULL=p) top+; bo

24、oktop.addbook(n,na); return 1; return 0; Book *equal(int bookid) for (int i=0;i=top;i+) if (booki.getnumber=bookid &booki.gettag=0) return &booki; return NULL; void bookdata; void output for (int i=0;i=top;i+) if (booki.gettag=0) booki.output; BDatabase/析构函数,将book写到book.txt文件中 fstream file(book.txt,

25、ios:out); for (int i=0;i=top;i+) if (booki.gettag=0) file.write(char *)&booki,sizeof(booki); file.close; ; void BDatabase:bookdata char choice; char bname40; int bookid; Book *b; while (choice!=0) cout n; cout 图书 维 护 n; cout n; cout 1.新 增 n; cout n; cout 2.更 改 n; cout n; cout 3.删 除 n; cout n; cout 4

26、.查 找 n; cout n; cout 5.显 示 n; cout n; cout 6.全 删 n; cout n; cout 0.退出 n; cout choice; switch (choice) case 1: cout 输入图书编号: bookid; cout 输入图书书名: bname; addbook(bookid,bname); break; case 2: cout 输入图书编号: bookid; b=equal(bookid); if (b=NULL) cout 该图书不存在 endl; break; cout 输入新的书名: bname; b-setname(bname)

27、; break; case 3: cout 读入图书编号: bookid; b=equal(bookid); if (b=NULL) cout 该图书不存在 delbook; break; case 4: cout 读入图书编号: bookid; b=equal(bookid); if (b=NULL) cout 该图书不存在output; break; case 5: output; break; case 6: clear; break; default:cout退出n; system(cls); break; void main char choice; int bookid,Stude

28、ntid; RData StudentDB; Student *r; BDatabase BookDB; Book *b; while(choice!=0) cout n; cout 图 书 管 理 系 统 n; cout n; cout 1.借书 n; cout n; cout 2.还书 n; cout n; cout 3.图书维护 n; cout n; cout 4.读者维护 n; cout n; cout 0.退出 n; cout choice; switch (choice) case 1: system(cls); cout Studentid; cout bookid; r=Stu

29、dentDB.equal(Studentid);/按编号查找 if (NULL=r) cout 不存在该读者,不能借书 endl; break; b=BookDB.equal(bookid); if (b=NULL) cout 不存在该图书,不能借书borrowbook=0) cout 该图书已借出,不能借书borrowbook(b-getnumber);system(cls); break; case 2: system(cls); coutStudentid; cout bookid; r=StudentDB.equal(Studentid); if (r=NULL) cout 不存在该读者,不能还书 endl; break; b=BookDB.equal(bookid); if (b=NULL) cout 不存在该图书,不能还书 retbook; r-retbook(b-getnumber); break; ca

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号