图书借阅管理系统如假包换课程设计都得优秀了.docx
《图书借阅管理系统如假包换课程设计都得优秀了.docx》由会员分享,可在线阅读,更多相关《图书借阅管理系统如假包换课程设计都得优秀了.docx(24页珍藏版)》请在冰豆网上搜索。
图书借阅管理系统如假包换课程设计都得优秀了
图书借阅管理系统设计
一、设计任务书
主要分为两大功能:
1)图书管理(增加图书、查询图书、删除图书、图书借阅、还书);
2)会员管理(增加会员、查询会员、删除会员、借书信息);
二、问题描述
图书借阅管理系统是一个学校不可缺少的部分,它的内容对于学校的管理者和读者来说都至关重要,直接关系到图书的借用率,所以开发图书管理系统能够为管理员和读者提供充足的信息和快捷的查询手段。
编写程序系统主要实现图书馆的增加图书、查询图书、删除图书、借阅图书、还书;增加会员、查询会员、删除会员、借书信息、到期书催还等智能化管理过程。
图书管理者只需略懂电脑知识就可以简易的操作该图书借阅管理系统。
三、实验目的
1.强化和巩固理论基础,掌握编程技巧,为后续的专业课学习打下良好的基础;
2.要求用C/C++语言及相应开发环境,实现一个小型完整程序的设计与开发;
3.巩固深化所学课程的知识,培养学生运用知识,分析和解决实际问题的能力。
四、设计过程
4.1系统需求分析
图书借阅管理系统主要分为两大功能:
(1)图书管理(增加图书、查询图书、删除图书、图书借阅、还书到期书催还);
(2)会员管理(增加会员、查询会员、删除会员、借书信息);
要完成这个题目,主要是建立解决图书和会员的信息的存储,解决的方法是建立两个带头结点的单链表,分别用于存储图书和会员。
解决了这个问题后就是如何建立这两个链表的联系了,解决的方法是在图书结点中设一个借书人编号,在会员结点中设一个数组用于存会员借的书。
解决了这两个问题,剩下的工作就简单了。
只需按链表的操作就可以了。
4.1.1功能要求
在图书借阅管理程序中须实现以下功能:
(1)图书修改功能:
能对图书借阅系统存储的信息进行修改。
提供两种修改方式,如按照图书编号修改、按照书名修改。
图书编号是图书记录的自然顺序编号。
(2)图书删除功能:
能对图书借阅系统的图书信息进行删除。
删除时以记录为单位,能一次删除一条记录。
(3)借书功能:
能对借出的图书作记录信息,能一次借出一本图书。
(4)还书功能:
能将被借出的图书信息还原,能一次借出一本图书。
(5)保存功能:
能将记录保存在任何自定义的文件中,如保存在:
c:
\books、c:
\lenders。
(6)通信录管理结束后,能够正常退出图书借阅管理程序。
4.1.2技术要求
(1)每个借阅者记录至少包括如下信息:
姓名、学号、姓别等。
每本图书记录至少包括如下信息:
编号、书名、作者、价格等。
(2)图书、借阅者信息以磁盘文件的形式存储,存储位置、文件名、文件格式由设计者确定。
(3)对于图书借阅系统功能中数据输入、显示、查询、修改、删除、保存等功能,要求编写功能独立的函数或主控函数予以实现,其所属的各项功能尽量由独立的函数实现。
(4)以菜单方式实现功能选择控制。
(5)本图书借阅管理程序能够实现100条记录的管理。
4.1.3方案分析
此题是设计一个图书借阅管理系统,根据需要应包含图书管理和会员管理。
其中对图书和会员的增加、查询和删除都是基本操作。
在图书管理中对图书的借阅和归还是重点,这两个操作也是整个系统关键。
在会员管理中增加了会员借书信息的查询和对到期书的催还信息。
实现这些操作的关键在于建立的两个带头结点的单链,分别用于存储图书和会员的基本信息。
在这两个链表之间还应建立起相互的联系,便于查询的操作的实现。
另外,在美观方面,需要设计一个操作界面供用户选择使用。
4.2图书借阅管理功能框图设计
4.2.1总体功能实现:
通过需求分析,设计出本程序的总体功能设计框图。
分为七个方面:
1、选择检查类型;2、编辑图书的信息;3、查询图书的信息;4、编辑读者的信息;5、查询读者的信息;6、借阅书刊;7、还书。
连线之间说明了他们之间的相互联系以及设计时的要求。
4.2.2图书管理系统简略功能框图
五、设计步骤与详细程序
#include
#include
#include
#defineNULL0
typedefstructBookInfo{/////图书结构
intb_Code;////图书编号
charb_Name[20];/////名称
intb_Total;/////总数
intb_Out;///借出数
BookInfo*nextbook;//////下一类图书
}BookInfo;
typedefstructMemberInfo{///会员结构
longm_Code;/////会员编号
charm_Name[20];////会员名字
intl_Codes[6];/////以借书的编号,最多5
MemberInfo*nextmember;////下一会员
}MemberInfo;
typedefstructSystem{///管理系统结构
BookInfo*BI;
MemberInfo*MI;
intBookTotal;////图书类库存量
intMemberTota;/////会员数量
}System;
System*InitSystem();/////
voidAddBook(System*);////增加图书
BookInfo*SearchBook(System*,int);////查询图书信息
voidDelBook(System*);/////删除图书
voidBrrowBook(System*);///////借书处理
voidTurnBackBook(System*);////还书处理
voidAddMember(System*);/////添加会员
voidDelMember(System*);////删除会员
MemberInfo*SearchMember(System*,int);/////查询会员信息
voidStoreData(System*);
voidLoadData(System*);
voidExitSystem();
voidmain()
{
System*S=InitSystem();
intsel;
do{
cout<<"\n\t\t\t\t图书管理系统"<cout<<"\t\t\t******************************"<cout<<"\t\t\t******************************"<cout<<"\t\t\t1.增加图书.\t2.查询图书.\n\t\t\t3.删除图书.\t4.借书处理.\n\t\t\t5.还书处理.\n\t\t\t6.添加会员.\t7.删除会员.\n\t\t\t8.查询会员.\t9.载入数据.\n\t\t\t10.保存数据.\t11.退出程序.\n";
cout<<"\t\t\t******************************"<cout<<"\t\t\t******************************"<cout<<"请选择:
";
do{
cin>>sel;
if(sel>=1&&sel<=11)break;
cout<<"选择错误!
\n重新输入:
"<}while
(1);
switch(sel){
case1:
AddBook(S);break;
case2:
SearchBook(S,-1);break;
case3:
DelBook(S);break;
case4:
BrrowBook(S);;break;
case5:
TurnBackBook(S);break;
case6:
AddMember(S);break;
case7:
DelMember(S);break;
case8:
SearchMember(S,-1);break;
case9:
LoadData(S);break;
case10:
StoreData(S);break;
default:
ExitSystem();
}
}while
(1);
}
System*InitSystem()
{
System*S=(System*)malloc(sizeof(System));
S->BI=(BookInfo*)malloc(sizeof(BookInfo));
S->BookTotal=0;
S->BI->nextbook=NULL;
S->MI=(MemberInfo*)malloc(sizeof(MemberInfo));
S->MemberTota=0;
S->MI->nextmember=NULL;
returnS;
}
voidAddBook(System*S)
{
intTempcode;
charsel;
BookInfo*p=S->BI;
BookInfo*t;
BookInfo*m;
intnum;
do{
cout<<"输入图书编号:
";
cin>>Tempcode;
if(m=SearchBook(S,Tempcode)){
cout<<"这类书以有库存.\n输入图书的入库量:
"<cin>>num;
m->b_Total+=num;
}
else{
t=(BookInfo*)malloc(sizeof(BookInfo));
t->b_Code=Tempcode;
cout<<"输入图书的名称:
";
cin>>t->b_Name;
cout<<"输入图书的入库量:
";
cin>>t->b_Total;
t->b_Out=0;
t->nextbook=p->nextbook;
p->nextbook=t;
S->BookTotal++;
}
cout<<"添加完毕!
"<cout<<"还要添加吗?
(Y/N)";
cin>>sel;
if(sel=='n'||sel=='N'){
cout<<"结束添加"<return;
}
}while
(1);
}
BookInfo*SearchBook(System*S,intcode){
BookInfo*bi=S->BI->nextbook;
intbookcode;
if(code==-1){
cout<<"请输入要查询的图书编号:
";
cin>>bookcode;
}
elsebookcode=code;
while(bi&&bi->b_Code!
=bookcode)bi=bi->nextbook;
if(code==-1){
if(!
bi)cout<<"没找到你所要的图书."<else{
cout<<"图书编号为:
"<b_Code<cout<<"图书名称为:
"<b_Name<cout<<"图书库存量为:
"<b_Total<cout<<"图书借出量为:
"<b_Out<}
}
returnbi;
}
voidDelBook(System*S){
BookInfo*bi;
BookInfo*pl=S->BI;
MemberInfo*memi;
charsel;
inttempcode;
inti;
do{
pl=S->BI;
bi=pl->nextbook;
memi=S->MI->nextmember;
cout<<"请输入要删除的图书的编号:
";
cin>>tempcode;
while(bi){
if(bi->b_Code==tempcode)break;
pl=bi;
bi=bi->nextbook;
}
if(bi==0)cout<<"没有找到要删除的图书"<else{
pl->nextbook=bi->nextbook;
S->BookTotal--;
while(memi){
for(i=1;i<=memi->l_Codes[0];i++){
if(memi->l_Codes[i]==tempcode)break;
}
if(i<=memi->l_Codes[0]){
for(;il_Codes[0];i++)memi->l_Codes[i]=memi->l_Codes[i+1];
memi->l_Codes[0]--;
}
memi=memi->nextmember;
}
free(bi);
}
cout<<"还有图书要删除吗?
(Y/N)";
cin>>sel;
if(sel=='N'||sel=='n'){
cout<<"删除图书结束"<return;
}
}while
(1);
}
voidBrrowBook(System*S)
{
BookInfo*bi=S->BI->nextbook;
BookInfo*p;
charsel;
intmemcode;
MemberInfo*mp;
inttempcode;
do{
cout<<"输入要借出的书号:
";
cin>>tempcode;
p=SearchBook(S,tempcode);
if(!
p){
cout<<"没有找到要借出的图书."<}
else{
cout<<"此书的现存量为"<<(p->b_Total-p->b_Out)<if(!
(p->b_Total-p->b_Out))cout<<"没有足够的书了,外借失败."<else{
cout<<"请输入会员编号:
";
cin>>memcode;
mp=SearchMember(S,memcode);
if(!
mp)cout<<"会员编号输入错误,外借失败"<else{
if(mp->l_Codes[0]==5)cout<<"借书量不能超过5本";
else{
p->b_Out++;
mp->l_Codes[++mp->l_Codes[0]]=tempcode;
cout<<"外借成功."<}
}
}
}
cout<<"\n还有图书要借出吗?
(Y/N)";
cin>>sel;
if(sel=='N'||sel=='n'){
cout<<"外借操作结束."<return;
}
}while
(1);
}
voidTurnBackBook(System*S)
{
BookInfo*bi=S->BI->nextbook;
BookInfo*p;
MemberInfo*mp;
intmembercode;
inttempcode;
inti;
charsel;
do{
cout<<"输入归还书号:
";
cin>>tempcode;
p=SearchBook(S,tempcode);
if(!
p){
cout<<"书号输入错误."<}
else{
cout<<"此书的现存量为"<<(p->b_Total-p->b_Out)<cout<<"请输入会员编号:
";
cin>>membercode;
if(!
(mp=SearchMember(S,membercode)))cout<<"会员编号输入错误,归还失败"<else{
p->b_Out--;
for(i=1;i<=mp->l_Codes[0];i++){
if(mp->l_Codes[i]==tempcode)break;
}
while(il_Codes[0]){
mp->l_Codes[i]=mp->l_Codes[i+1];
i++;
}
mp->l_Codes[0]--;
cout<<"归还成功."<}
}
cout<<"还有要归还的图书吗?
(Y/N)";
cin>>sel;
if(sel=='N'||sel=='n'){
cout<<"归还结束."<return;
}
}while
(1);
}
voidAddMember(System*S)
{
intTempcode;
charsel;
MemberInfo*p=S->MI;
MemberInfo*t;
do{
cout<<"输入会员编号:
";
cin>>Tempcode;
t=(MemberInfo*)malloc(sizeof(MemberInfo));
t->m_Code=Tempcode;
cout<<"输入会员姓名:
";
cin>>t->m_Name;
t->l_Codes[0]=0;
t->nextmember=p->nextmember;
p->nextmember=t;
S->MemberTota++;
cout<<"添加完毕!
"<cout<<"还要添加吗?
(Y/N)";
cin>>sel;
if(sel=='n'||sel=='N'){
cout<<"结束添加"<return;
}
}while
(1);
}
MemberInfo*SearchMember(System*S,intcode)
{
MemberInfo*bi=S->MI->nextmember;
intmembercode;
inti;
if(code==-1){
cout<<"请输入要查询的会员编号:
";
cin>>membercode;
}
elsemembercode=code;
while(bi&&bi->m_Code!
=membercode)bi=bi->nextmember;
if(code==-1){
if(!
bi)cout<<"没找到指定会员."<else{
cout<<"会员编号为:
"<m_Code<cout<<"名称为:
"<m_Name<cout<<"已借的图书有:
"<l_Codes[0]<<"本."<for(i=1;i<=bi->l_Codes[0];i++)
cout<l_Codes[i]<<'';
cout<}
}
returnbi;
}
voidDelMember(System*S)
{
MemberInfo*bi;
MemberInfo*pl;
BookInfo*book;
charsel;
inti;
inttempcode;
do{
bi=S->MI->nextmember;
pl=S->MI;
cout<<"请输入要删除的会员的编号:
";
cin>>tempcode;
while(bi){
if(bi->m_Code==tempcode)break;
pl=bi;
bi=bi->nextmember;
}
if(!
bi)cout<<"没有找到要删除的会员编号.";
else{
pl->nextmember=bi->nextmember;
S->MemberTota--;
for(i=1;i<=bi->l_Codes[0];i++){
if(!
(book=SearchBook(S,bi->l_Codes[i]))){
cout<<"删除会员出错!
"<}
else{
book->b_Out--;
book->b_Total--;
}
}
free(bi);
}
cout<<"还有会员要删除吗?
(Y/N)";
cin>>sel;
if(sel=='N'||sel=='n'){
cout<<"删除会员结束"<return;
}
}while
(1);
}
voidStoreData(System*S){
FILE*fp;
BookInfo*bi=S->BI->nextbook;
if(!
(fp=fopen("BookSys","wb"))){
cout<<"打开文件BookSys失败!
"<exit(0);
}
fwrite(&(S->BookTotal),sizeof(int),1,fp);
while(bi){
fwrite(bi,sizeof(BookInfo),1,fp);
bi=bi->nextbook;
}
MemberInfo*mi=S->MI->nextmember;
fwrite(&(S->MemberTota),sizeof(int),1,fp);
while(mi){
fwrite(mi,sizeof(MemberInfo),1,fp);
mi=mi->nextmember;
}
fclose(fp);
}
voidLoadData(System*S){
FILE*fp;
if(!
(fp=fopen("BookSys","rb"))){
cout<<"打开文件BookSys失败"<exit(0);
}
BookInfo*bi=S->BI;
BookInfo*tempbi;
fread(&(S->BookTotal),sizeof(int),1,fp);
for(inti=1;i<=S->BookTotal;i++){
tempbi=(BookInfo*)malloc(sizeof(BookInfo));
fread(tempbi,sizeof(BookInfo),1,fp);
bi->nextbook=tempbi;
bi=tempbi;
}
bi->nextbook=NULL;
MemberInfo*mi=S->MI;
MemberInfo*tempmi;
fread(&(S->MemberTota),sizeof(int),1,fp);
for(i=1;i<=S->MemberTota;i++){
tempmi=(MemberInfo*)malloc(sizeof(MemberInfo));
fread(tempmi,sizeof(MemberInfo),1,fp);
mi->nextmember=tempmi;
mi=tempmi;
}