2022年程序设计报告_图书馆管理系统 .pdf

上传人:Q****o 文档编号:26490596 上传时间:2022-07-17 格式:PDF 页数:40 大小:1.48MB
返回 下载 相关 举报
2022年程序设计报告_图书馆管理系统 .pdf_第1页
第1页 / 共40页
2022年程序设计报告_图书馆管理系统 .pdf_第2页
第2页 / 共40页
点击查看更多>>
资源描述

《2022年程序设计报告_图书馆管理系统 .pdf》由会员分享,可在线阅读,更多相关《2022年程序设计报告_图书馆管理系统 .pdf(40页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、- 程序设计报告( 2014 / 2015 学年 第 1 学期)题目:南邮图书馆管理系统专业组长 学号姓名组员 学号姓名指导教师指导单位日期名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 40 页 - - - - - - - - - - 成员分工组长()负责图书的所有相关信息内容存为文件部分代码编写。并使界面友好,输入信息符合逻辑。组员()负责显示所有即将到期的图书(归还日期在三天之内) ;按借阅次数对所有图书进行排序部分代码编写组员()负责图书馆管理系统所拥有功能的定义

2、。评分细则评分项优秀良好中等差遵守机房规章制度上机时的表现学习态度程序准备情况程序设计能力团队合作精神课题功能实现情况算法设计合理性用户界面设计报告书写认真程度内容详实程度文字表达熟练程度回答问题准确度简短评语教师签名:年月日分等131306 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 40 页 - - - - - - - - - - 备注评分等级共五种:优秀、良好、中等、及格、不及格题目:南邮图书管理系统一、课题内容和要求该系统要求建立一个南邮图书馆管理系统,并具有

3、排序、查找、计算、显示等功能。通过此课题,熟练掌握文件、数组、指针的各种操作,以及一些算法思想的应用。(1)图书的信息应包括:索引号,名称,馆藏地址(三牌楼、仙林)、类别(人文、科技、外语等) ,数量,价格,入库日期,归还日期,借阅次数,借阅状态(可借、不可借)。(2)需要实现的功能1) 对已图书信息进行更新操作,包括添加和删除一种书的信息、修改图书信息(例如图书被借阅,书的数目减1,借阅次数加 1,如果数量为 0 则状态为不可借);2)通过按图书的名称查询图书信息;3)显示所有即将到期的图书(归还日期在三天之内);4)按借阅次数对所有图书进行排序;5)将图书的所有相关信息内容存为文件。(3)

4、界面友好,输入信息符合逻辑。二、需求分析在整个系统中一共主要有三个部分:图书借阅、图书管理和图书搜索。其中图书借阅包含借出时间、归还时间、是否归还(1)可根据 ID 账号找到某本书的索引值,从而获取图书信息,进行借阅,系统将自动添加可借阅时间,并将信息记录(2)可分页显示借书记录,借阅信息(3)分页显示即将到期的图书图书管理部分包含图书列表,添加书,删除图书信息(1)将所有图书进行排序,入库,并记录图书信息名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 40 页 - -

5、- - - - - - - - (2)添加一本书,删除图书信息(可删除一本或者删除全部索引值为一个的全部图书信息)(3)修改图书信息,可根据索引值找到图书并进行修改(4)分页显示所有图书列表搜索图书(1)可用索引值搜索书本信息,以以及图书在数组中的位置(2)也可根据图书名搜索图书所在数组位置,返回图书信息三、概要设计1)主要结构体:在library 这整个类中,由mainscreen()这个函数进入brrowbook()、bookmager()、searchbook() 这三个函数分别提供借书、管理图书、搜索图书三种功能在借书功能包含借书与还书,而管理图书中则包含添加、删除、修改、查看等功能。

6、而在本程序中每一本书都赋予了对应的ID 和索引值,而 ID 是唯一的,当添加成功时,系统会自动添加入库时间,每个singlebook 结构体都用来存储图书的基本信息以及相应的入库时间,而 borrowtable 则存储图书借阅的信息。 booklist 则用来存储所有图书的信息。而图书的存储信息页按照要求存储在相应的文件dat 中。2)主要函数流程图:主程序图书借阅图书管理搜索图书添加图书修改图书信息删除图书搜 索 图 书 信息查 看 所有图书名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - -

7、- 第 4 页,共 40 页 - - - - - - - - - - 图书借阅选择用户进入选择借书输入图书 ID 图书名称是否借阅是 否 可 借阅是否余量不足禁止借阅余量不足结束借阅完成图 1 程序流程图借阅图书借阅归还名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 40 页 - - - - - - - - - - 图 2 归还图书图 3 归还图书输入 ID giveBackResult=booklist.giveBackBook(singlebook.getSuoyin

8、(id) giveBackResult!=0? Borrowtable.giveback(id) 还 书 时 出现错误还 书 成功结束名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 40 页 - - - - - - - - - - 添加图书添 加 图 书输 入 索 引SY和 ID searchBookPosWithSY=-1 t.ID=allBooks; data.push_back(t); allBooks+; 数 目Count+=1 结束书名=booklist.boo

9、kinfo(sy).name 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 40 页 - - - - - - - - - - 图 4 删除图书图 5 删 除 图 书单本 OR多本输入 ID 得到图书索引删除图书信息输入索引值删 除 所 有 索 引值为 SY的图书结束名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 40 页 - - - - - - -

10、 - - - 修改图书名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 40 页 - - - - - - - - - - 图 6 修 改 图 书输 入 书 的索引 SY Booklist.searchBookPosWithSY(sy)!=-1 显示索引值为SY 的图书信息修改?修改图书信息没有此书结 束名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共

11、40 页 - - - - - - - - - - 四、源程序代码#include #include #include / (把日期和时间转换成字符串该类的对象表示的时间是基于格林威治标准时间的)#include / (常用的函数库)#include #include #include / (演算法,提供了大量基于迭代器的非成员模板函数)using namespace std; int min(int a,int b) if (ab) return a; return b; struct data_booklist int ID; /书本 ID string Suoyin; /书本索引(stri

12、ng 类是字符串,不可任意改变,需要返回一个新的string类对象)string Name; /书本名称int Address; /书本地址string BookClass; /书本类别int Count; /数目int Price; /价格bool BorrowAble; /是否允许借阅int BorrowedCount;/ 借阅次数; int cmpBorrowedCount(data_booklist a,data_booklist b); int cmpID(data_booklist a,data_booklist b);/(给排序函数sort 提供比较大小的方法)class BOO

13、KLIST private: vector data; int allBooks; public: BOOKLIST(); /BOOKLIST(); int searchBookPosWithSY(string sy);/ 根据索引查找书在数组中的位置data_booklist bookInfo(string sy);/ 根据索引查找书本信息名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 40 页 - - - - - - - - - - void addNewBook(

14、data_booklist t); / 添加新书void removeAllBook(string sy);/删除所有索引为sy 的书int searchBookPosWithName(string name);/ 根据图书名搜索书在数组中的位置data_booklist searchBookWithName(string name);/ 根据图书名返回书的信息void updateBookInfo(string sy,data_booklist t);/更改索引为sy 的图书信息int borrowBook(string sy);/ 借书时对表的修改,返回0 表示借阅成功,1 数量不足, 2

15、 禁止借阅int giveBackBook(string sy);/ 还书时对表的修改void sortBooks(int option);/ 对图书排序0=按借阅次数1=按 ID void save();/ 保存void removeOneBook(string sy);/ 删除一本索引为sy 的书void showBooks(int page);/ 分页显示书本信息; int cmpBorrowedCount(data_booklist a,data_booklist b) if (a.BorrowedCountb.BorrowedCount) return 1; return 0; in

16、t cmpID(data_booklist a,data_booklist b) if (a.IDb.ID) return 0; return 1; BOOKLIST:BOOKLIST() ifstream booklistFile(booklist.dat);/尝试从文件加载数据if (booklistFile) booklistFileallBooks; for (int i = 0; i p.ID; booklistFilep.Suoyin; booklistFilep.Name; booklistFilep.Address; booklistFilep.BookClass; bookl

17、istFilep.Count; booklistFilep.Price; booklistFilep.BorrowAble; booklistFilep.BorrowedCount; data.push_back(p); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 40 页 - - - - - - - - - - booklistFile.close(); else allBooks = 0; int BOOKLIST:searchBookPosWithSY(str

18、ing sy) for (int i = 0;i allBooks; +i) if (datai.Suoyin=sy) return i; return -1; data_booklist BOOKLIST:bookInfo(string sy) return datasearchBookPosWithSY(sy); void BOOKLIST:addNewBook(data_booklist t) int pos = searchBookPosWithSY(t.Suoyin); if (pos=-1)/ (-1 是没找到, pos 是记录的意思)t.ID=allBooks; data.pus

19、h_back(t); allBooks+; else datapos.Count += 1; void BOOKLIST:removeAllBook(string sy) int pos = searchBookPosWithSY(sy); data.erase(data.begin()+pos);/(erase为删除数据, begin 是 date的开始 ) allBooks-; int BOOKLIST:searchBookPosWithName(string name) for (int i = 0; i = 0) return datap; else data_booklist t;

20、t.Count = 0; t.Name = name; return t; void BOOKLIST:updateBookInfo(string sy,data_booklist t) int p = searchBookPosWithSY(sy); if (p=0) datap = t; int BOOKLIST:borrowBook(string sy) int p = searchBookPosWithSY(sy); if (p=0) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - -

21、- 第 14 页,共 40 页 - - - - - - - - - - datap.Count+; return 0; return 1; void BOOKLIST:sortBooks(int option) if (option=0) sort(data.begin(),data.begin()+allBooks,cmpBorrowedCount);/(sort是排序函数 ) else sort(data.begin(),data.begin()+allBooks,cmpID); void BOOKLIST:save() ofstream booklistFile(booklist.dat

22、);/(这是一个booklist的文件所以输出时也要与文件相关用booklistfile )booklistFileallBooksendl; for (int i = 0; i allBooks; +i) booklistFiledatai.IDendl; booklistFiledatai.Suoyinendl; booklistFiledatai.Nameendl; booklistFiledatai.Addressendl; booklistFiledatai.BookClassendl; booklistFiledatai.Countendl; booklistFiledatai.P

23、riceendl; booklistFiledatai.BorrowAbleendl; booklistFiledatai.BorrowedCount-1)/(pos 是便是记录的位置-1 表示没找到 ) if (datapos.Count0) datapos.Count-; void BOOKLIST:showBooks(int page) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 40 页 - - - - - - - - - - if (page0) retu

24、rn ; int perPage = 15; coutNo.t 索引 t 书名 t 地址 t 类别 t 数目 t 价格 t 可供借阅 t 借阅次数 endl; if (page*perPage-allBooksperPage) for (int i=(page-1)*perPage;imin(page-1)*perPage+perPage,allBooks);i+)/(page 是要显示的数目 perpage是每页的显示数目)coutdatai.IDtdatai.Suoyintdatai.Namet;/(page*perpage 是表示第某页的起始)if (datai.Address=0) c

25、out 三牌楼 t; else cout 仙林 t; coutdatai.BookClasstdatai.Counttdatai.Pricet; if (datai.BorrowAble) coutYes; else coutNo; coutttdatai.BorrowedCountendl; struct data_singlebook/ (struct 是各种数据的结构体)int ID; string Suoyin; time_t ruku; ; class SINGLEBOOK private: vector data;/ (vector 可以实现变成长的数组)int allBooks;

26、 public: SINGLEBOOK(); /SINGLEBOOK(); void addBook(int id,string sy,time_t t);/添加单本书void removeBook(int id);/ 根据 ID 删除一本书void removeAllBook(string sy);/根据索引删除所有书void save();/ 保存string getSuoyin(int id);/ 获取指定ID 的图书的索引void showBooks(int page);/ 分页显示图书; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - -

27、 - - - - 名师精心整理 - - - - - - - 第 16 页,共 40 页 - - - - - - - - - - SINGLEBOOK:SINGLEBOOK() ifstream singlebookFile(singlebook.dat);/尝试从文件加载if (singlebookFile) singlebookFileallBooks; for (int i=0;ip.ID; singlebookFilep.Suoyin; singlebookFilep.ruku; data.push_back(p); singlebookFile.close(); else allBoo

28、ks = 0; void SINGLEBOOK:addBook(int id,string sy,time_t t) coutsyendl; data_singlebook p; p.ID = id; p.Suoyin = sy; p.ruku = t; data.push_back(p); allBooks+; void SINGLEBOOK:removeBook(int id) int p; for (int i=0;iallBooks;i+) if (datai.ID=id) p = i; data.erase(data.begin()+p); break; allBooks-; voi

29、d SINGLEBOOK:removeAllBook(string sy) int p; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 40 页 - - - - - - - - - - for (int i=0;idata.size();i+) if (datai.Suoyin=sy) data.erase(data.begin()+i); i-; allBooks = data.size(); void SINGLEBOOK:save() ofstream sing

30、lebookFile(singlebook.dat);/(单本书的文件)singlebookFileallBooksendl; for (int i=0;iallBooks;i+) singlebookFiledatai.IDendl; singlebookFiledatai.Suoyinendl; singlebookFiledatai.rukuendl; singlebookFile.close(); string SINGLEBOOK:getSuoyin(int id) for (int i = 0; i allBooks; +i) if(datai.ID=id) return data

31、i.Suoyin; return No Such Book; void SINGLEBOOK:showBooks(int page) system(cls); coutIDt 索引 t 入库 n; int perPage = 15; for (int i=(page-1)*perPage;imin(page-1)*perPage+perPage,allBooks);i+) coutdatai.IDtdatai.Suoyintm_year-100; int m = t-tm_mon+1; int d = t-tm_mday; stringstream ss; sstm_year-100-tm_m

32、on+1-tm_mday; string sRuku = ss.str(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 18 页,共 40 页 - - - - - - - - - - coutsRukuendl; struct data_borrowtable int id; time_t date;/借出时间time_t guihuan;/ 归还时间bool giveback;/ 是否归还; class BORROWTABLE private: vector data; in

33、t records; int allowDays; public: BORROWTABLE(); void save();/ 保存void borrow(int id);/ 根据 ID 借书,系统自动添加时间void giveback(int id);/ 还书,系统自动添加时间void showEmergencyBooks(BOOKLIST &b,SINGLEBOOK &s);/ 显示即将到期的书,从b 和 s 中获取图书信息void showTable(int page,BOOKLIST &b,SINGLEBOOK &s);/分页显示借书记录string getName(int id,BOO

34、KLIST &b,SINGLEBOOK &s);/获取指定 ID 的图书名string getSY(int id,SINGLEBOOK &s);/获取指定图书的索引void setAllowDays(int d);/设置允许借阅天数int getAllowDays(); ; BORROWTABLE:BORROWTABLE() ifstream borrowTableFile(borrowTable.dat);/尝试从文件加载数据if (borrowTableFile) borrowTableFilerecords; borrowTableFileallowDays; for (int i=0;

35、ip.id; borrowTableFilep.date; borrowTableFilep.giveback; borrowTableFilep.guihuan; data.push_back(p); borrowTableFile.close(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 19 页,共 40 页 - - - - - - - - - - else records = 0; allowDays = 30; void BORROWTABLE:save() ofs

36、tream borrowTableFile(borrowTable.dat); if (borrowTableFile) borrowTableFilerecordsendl; borrowTableFileallowDaysendl; for (int i=0;irecords;i+) borrowTableFiledatai.idendl; borrowTableFiledatai.dateendl; borrowTableFiledatai.givebackendl; borrowTableFiledatai.guihuanendl; borrowTableFile.close(); v

37、oid BORROWTABLE:borrow(int id) data_borrowtable p; p.giveback = false; p.id = id; p.date = time(NULL); data.push_back(p); records+; void BORROWTABLE:giveback(int id) for (int i=0;irecords;i+) if (datai.id=id & datai.giveback=false) datai.giveback = true; datai.guihuan = time(NULL); return ; void BOR

38、ROWTABLE:showEmergencyBooks(BOOKLIST &b,SINGLEBOOK &s) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 20 页,共 40 页 - - - - - - - - - - system(cls); time_t now = time(NULL); cout即将到期图书:endl; coutIDt 书名 t 日期 tendl; for (int i=0;i3600*24*(allowDays -3) tm* t = localtime(

39、&datai.date); int y = t-tm_year-100; int m = t-tm_mon+1; int d = t-tm_mday; string givedBack; if (datai.giveback) givedBack = Yes; else givedBack = No; coutdatai.idtb.bookInfo(s.getSuoyin(datai.id).Namety-m-dtgivedBackendl; void BORROWTABLE:showTable(int page,BOOKLIST &b,SINGLEBOOK &s) system(cls);

40、coutIDt 书名 t 日期 t 归还 tendl; int perPage = 15; if (page*perPage - recordsperPage) for (int i=(page-1)*perPage;itm_year-100; int m = t-tm_mon+1; int d = t-tm_mday; string givedBack; if (datai.giveback) tm* q = localtime(&datai.guihuan); stringstream ss; sstm_year-100-tm_mon+1-tm_mday; givedBack = ss.s

41、tr(); else givedBack = No; coutdatai.idtb.bookInfo(s.getSuoyin(datai.id).Namety-m-dtgive名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 21 页,共 40 页 - - - - - - - - - - dBackendl; string BORROWTABLE:getName(int id,BOOKLIST &b,SINGLEBOOK &s) for (int i=0;irecords;i+) if

42、 (datai.id=id) data_booklist t = b.bookInfo(s.getSuoyin(datai.id); return t.Name; return Not Found; string BORROWTABLE:getSY(int id,SINGLEBOOK &s) return s.getSuoyin(id); void BORROWTABLE:setAllowDays(int d) allowDays = d; int BORROWTABLE:getAllowDays() return allowDays; class LIBRARY private: BOOKL

43、IST booklist;/ 总图书列表SINGLEBOOK singlebook;/单独的图书信息BORROWTABLE borrowtable;/图书借阅记录public: void mainscreen();/ 功能选择void borrowbook();/ 借书void bookmanaage();/ 图书管理void searchbook();/ 图书搜索; void LIBRARY:mainscreen() 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 22 页,共 4

44、0 页 - - - - - - - - - - int option; do system(cls); cout 1.管理借阅endl; cout 2.管理书endl; cout 3.搜索书endl; cout 4.退出endl; cout endl; cout endl; cout endl; cout 请选择endl; cout endl; cout endl; cout option; switch(option) case 1:borrowbook();break; case 2:bookmanaage();break; case 3:searchbook();break; case

45、4:break; default:cout 请在 1-3 间选择 endl; while (option!=4); void LIBRARY:borrowbook() int option; int page = 1; do system(cls); cout 允许借阅天数 :borrowtable.getAllowDays()tt0:修改 n; borrowtable.showTable(page,booklist,singlebook); cout1: 下一页2:上一页3:借 4:还 5:即将到期6.退出 option; switch(option) case 0: int allowDa

46、ys; cout3):; do cinallowDays; while(allowDays=3); borrowtable.setAllowDays(allowDays); cout 修改完成 n; system(PAUSE); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 23 页,共 40 页 - - - - - - - - - - break; case 1: page += 1; borrowtable.showTable(page,booklist,singlebook)

47、; cout1: 下一页2:上一页3:借 4:还 5:即将到期6.退出 1) page += 1; borrowtable.showTable(page,booklist,singlebook); cout1: 下一页2:上一页3:借 4:还 5:即将到期6.退出 endl; else cout不合法的输入 n; break; case 3: system(cls); coutid; string sy = singlebook.getSuoyin(id); if (sy=No Such Book) cout没有此书 !n; system(PAUSE); break; int confirm;

48、 coutbooklist.bookInfo(singlebook.getSuoyin(id).Nameendl; coutconfirm; if (confirm!=1) break; int borrowState = booklist.borrowBook(sy); if (borrowState!=0) switch(borrowState) case 2:cout禁止借阅 !n;break; case 1:cout没有此书 !n;break; break; borrowtable.borrow(id); cout 借书成功 !n; 名师资料总结 - - -精品资料欢迎下载 - - -

49、 - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 24 页,共 40 页 - - - - - - - - - - break; case 4: coutid; int giveBackResult = booklist.giveBackBook(singlebook.getSuoyin(id); if (giveBackResult!=0) cout还书时出现错误!n; break; borrowtable.giveback(id); cout 还书成功 !n; break; case 5: borrowtable.showEmerge

50、ncyBooks(booklist,singlebook); break; default: break; system(pause); while(option6); borrowtable.save(); void LIBRARY:bookmanaage() int option; do system(cls); cout 1.添加书endl; cout 2.删除书endl; cout 3.修改书的信息endl; cout 4.查看书的信息endl; cout 5.查看每本书的信息endl; cout 6.退出endl; cout 请选择option; switch(option) cas

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 技术总结

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁