程序设计报告图书馆管理系统Word文件下载.docx
《程序设计报告图书馆管理系统Word文件下载.docx》由会员分享,可在线阅读,更多相关《程序设计报告图书馆管理系统Word文件下载.docx(45页珍藏版)》请在冰豆网上搜索。
教师签名:
年月日
评分等级
131306
备注
评分等级共五种:
优秀、良好、中等、及格、不及格
题目:
南邮图书管理系统
一、课题内容和要求
该系统要求建立一个南邮图书馆管理系统,并具有排序、查找、计算、显示等功能。
通过此课题,熟练掌握文件、数组、指针的各种操作,以及一些算法思想的应用。
(1)图书的信息应包括:
索引号,名称,馆藏地址(三牌楼、仙林)、类别(人文、科技、外语等),数量,价格,入库日期,归还日期,借阅次数,借阅状态(可借、不可借)。
(2)需要实现的功能
1)对已图书信息进行更新操作,包括添加和删除一种书的信息、修改图书信息(例如图书被借阅,书的数目减1,借阅次数加1,如果数量为0则状态为不可借);
2)通过按图书的名称查询图书信息;
3)显示所有即将到期的图书(归还日期在三天之内);
4)按借阅次数对所有图书进行排序;
5)将图书的所有相关信息内容存为文件。
(3)界面友好,输入信息符合逻辑。
二、需求分析
在整个系统中一共主要有三个部分:
图书借阅、图书管理和图书搜索。
其中图书借阅包含借出时间、归还时间、是否归还
(1)可根据ID账号找到某本书的索引值,从而获取图书信息,进行借阅,系统将自动添加可借阅时间,并将信息记录
(2)可分页显示借书记录,借阅信息
(3)分页显示即将到期的图书
图书管理部分包含图书列表,添加书,删除图书信息
(1)将所有图书进行排序,入库,并记录图书信息
(2)添加一本书,删除图书信息(可删除一本或者删除全部索引值为一个的全部图书信息)
(3)修改图书信息,可根据索引值找到图书并进行修改
(4)分页显示所有图书列表
搜索图书
(1)可用索引值搜索书本信息,以以及图书在数组中的位置
(2)也可根据图书名搜索图书所在数组位置,返回图书信息
三、概要设计
1)主要结构体:
在library这整个类中,由mainscreen()这个函数进入brrowbook()、bookmager()、searchbook()这三个函数分别提供借书、管理图书、搜索图书三种功能
在借书功能包含借书与还书,而管理图书中则包含添加、删除、修改、查看等功能。
而在本程序中每一本书都赋予了对应的ID和索引值,而ID是唯一的,当添加成功时,系统会自动添加入库时间,每个singlebook结构体都用来存储图书的基本信息以及相应的入库时间,而borrowtable则存储图书借阅的信息。
booklist则用来存储所有图书的信息。
而图书的存储信息页按照要求存储在相应的文件dat中。
2)主要函数流程图:
图1
程序流程图
借阅图书
图2
归还图书
图3
添加图书
图4
删除图书
图5
修改图书
图6
四、源程序代码
#include<
iostream>
vector>
ctime>
//(把日期和时间转换成字符串该类的对象表示的时间是基于格林威治标准时间的)
cstdlib>
//(常用的函数库)
fstream>
sstream>
algorithm>
//(演算法,提供了大量基于迭代器的非成员模板函数)
usingnamespacestd;
intmin(inta,intb)
{
if(a<
b){
returna;
}
returnb;
}
structdata_booklist{
intID;
//书本ID
stringSuoyin;
//书本索引(string类是字符串,不可任意改变,需要返回一个新的string类对象)
stringName;
//书本名称
intAddress;
//书本地址
stringBookClass;
//书本类别
intCount;
//数目
intPrice;
//价格
boolBorrowAble;
//是否允许借阅
intBorrowedCount;
//借阅次数
};
intcmpBorrowedCount(data_booklista,data_booklistb);
intcmpID(data_booklista,data_booklistb);
//(给排序函数sort提供比较大小的方法)
classBOOKLIST{
private:
vector<
data_booklist>
data;
intallBooks;
public:
BOOKLIST();
//~BOOKLIST();
intsearchBookPosWithSY(stringsy);
//根据索引查找书在数组中的位置
data_booklistbookInfo(stringsy);
//根据索引查找书本信息
voidaddNewBook(data_booklistt);
//添加新书
voidremoveAllBook(stringsy);
//删除所有索引为sy的书
intsearchBookPosWithName(stringname);
//根据图书名搜索书在数组中的位置
data_booklistsearchBookWithName(stringname);
//根据图书名返回书的信息
voidupdateBookInfo(stringsy,data_booklistt);
//更改索引为sy的图书信息
intborrowBook(stringsy);
//借书时对表的修改,返回0表示借阅成功,1数量不足,2禁止借阅
intgiveBackBook(stringsy);
//还书时对表的修改
voidsortBooks(intoption);
//对图书排序0=按借阅次数1=按ID
voidsave();
//保存
voidremoveOneBook(stringsy);
//删除一本索引为sy的书
voidshowBooks(intpage);
//分页显示书本信息
intcmpBorrowedCount(data_booklista,data_booklistb)
if(a.BorrowedCount>
b.BorrowedCount)
return1;
return0;
intcmpID(data_booklista,data_booklistb)
if(a.ID>
b.ID)
BOOKLIST:
:
BOOKLIST()
ifstreambooklistFile("
booklist.dat"
);
//尝试从文件加载数据
if(booklistFile){
booklistFile>
>
allBooks;
for(inti=0;
i<
allBooks;
++i){
data_booklistp;
p.ID;
p.Suoyin;
p.Name;
p.Address;
p.BookClass;
p.Count;
p.Price;
p.BorrowAble;
p.BorrowedCount;
data.push_back(p);
booklistFile.close();
}else{
allBooks=0;
intBOOKLIST:
searchBookPosWithSY(stringsy)
i<
if(data[i].Suoyin==sy){
returni;
return-1;
data_booklistBOOKLIST:
bookInfo(stringsy)
returndata[searchBookPosWithSY(sy)];
voidBOOKLIST:
addNewBook(data_booklistt)
intpos=searchBookPosWithSY(t.Suoyin);
if(pos==-1){//(-1是没找到,pos是记录的意思)
t.ID=allBooks;
data.push_back(t);
allBooks++;
data[pos].Count+=1;
removeAllBook(stringsy)
intpos=searchBookPosWithSY(sy);
data.erase(data.begin()+pos);
//(erase为删除数据,begin是date的开始)
allBooks--;
searchBookPosWithName(stringname)
if(data[i].Name==name){
searchBookWithName(stringname)
intp=searchBookPosWithName(name);
if(p>
=0){
returndata[p];
data_booklistt;
t.Count=0;
t.Name=name;
returnt;
updateBookInfo(stringsy,data_booklistt)
intp=searchBookPosWithSY(sy);
if(p>
=0)
data[p]=t;
borrowBook(stringsy)
if(p<
0||data[p].Count==0){
if(data[p].BorrowAble){
data[p].Count--;
data[p].BorrowedCount++;
return2;
giveBackBook(stringsy)
=0){
data[p].Count++;
sortBooks(intoption)
if(option==0)
sort(data.begin(),data.begin()+allBooks,cmpBorrowedCount);
//(sort是排序函数)
else
sort(data.begin(),data.begin()+allBooks,cmpID);
save()
ofstreambooklistFile("
//(这是一个booklist的文件所以输出时也要与文件相关用booklistfile)
booklistFile<
<
allBooks<
endl;
data[i].ID<
data[i].Suoyin<
data[i].Name<
data[i].Address<
data[i].BookClass<
data[i].Count<
data[i].Price<
data[i].BorrowAble<
data[i].BorrowedCount<
removeOneBook(stringsy)
if(pos>
-1){//(pos是便是记录的位置-1表示没找到)
if(data[pos].Count>
0){
data[pos].Count--;
showBooks(intpage)
if(page<
0)
return;
intperPage=15;
cout<
"
No.\t索引\t书名\t地址\t类别\t数目\t价格\t可供借阅\t借阅次数"
if(page*perPage-allBooks<
perPage){
for(inti=(page-1)*perPage;
i<
min((page-1)*perPage+perPage,allBooks);
i++){//(page是要显示的数目perpage是每页的显示数目)
\t"
;
//(page*perpage是表示第某页的起始)
if(data[i].Address==0){
三牌楼\t"
仙林\t"
if(data[i].BorrowAble){
Yes"
No"
\t\t"
structdata_singlebook{//(struct是各种数据的结构体)
time_truku;
classSINGLEBOOK{
data_singlebook>
//(vector可以实现变成长的数组)
SINGLEBOOK();
//~SINGLEBOOK();
voidaddBook(intid,stringsy,time_tt);
//添加单本书
voidremoveBook(intid);
//根据ID删除一本书
//根据索引删除所有书
stringgetSuoyin(intid);
//获取指定ID的图书的索引
//分页显示图书
SINGLEBOOK:
SINGLEBOOK(){
ifstreamsinglebookFile("
singlebook.dat"
//尝试从文件加载
if(singlebookFile){
singlebookFile>
for(inti=0;
=allBooks;
i++){
data_singlebookp;
p.ruku;
singlebookFile.close();
voidSINGLEBOOK:
addBook(intid,stringsy,time_tt)
sy<
data_singlebookp;
p.ID=id;
p.Suoyin=sy;
p.ruku=t;
removeBook(intid)
intp;
if(data[i].ID==id){
p=i;
data.erase(data.begin()+p);
break;
data.size();
data.erase(data.begin()+i);
i--;
allBooks=data.size();
ofstreamsinglebookFile("
//(单本书的文件)
singlebookFile<
data[i].ruku<
stringSINGLEBOOK:
getSuoyin(intid)
if(data[i].ID==id){
returndata[i].Suoyin;
return"
NoSuchBook"
system("
cls"
ID\t索引\t入库\n"
tm*t=localtime(&
data[i].ruku);
inty=t->
tm_year-100;
intm=t->
tm_mon+1;
intd=t->
tm_mday;
stringstreamss;
ss<
t->
tm_year-100<
-"
tm_mon+1<
stringsRuku=ss.str();
sRuku<
structdata_borrowtable{
intid;
time_tdate;
//借出时间
time_tguihuan;
//归还时间
boolgiveback;
//是否归还
classBORROWTABLE{
data_borrowtable>
intrecords;
intallowDays;
BORROWTABLE();
voidborrow(intid);
//根据ID借书,系统自动添加时间
voidgiveback(intid);
//还书,系统自动添加时间
voidshowEmergencyBooks(BOOKLIST&
b,SINGLEBOOK&
s);
//显示即将到期的书,从b和s中获取图书信息
voidshowTable(intpage,BOOKLIST&
//分页显示借书记录
stringgetName(intid,BOOKLIST&
//获取指定ID的图书名
stringgetSY(intid,SINGLEBOOK&
//获取指定图书的索引
voidsetAllowDays(intd);
//设置允许借阅天数
intgetAllowDays();
BORROWTABLE:
BORROWTABLE()