数据结构课程设计图书借阅管理系统Word文档格式.docx
《数据结构课程设计图书借阅管理系统Word文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计图书借阅管理系统Word文档格式.docx(24页珍藏版)》请在冰点文库上搜索。
(6)通信录管理结束后,能够正常退出图书借阅管理程序。
2技术要求
(1)每个借阅者记录至少包括如下信息:
姓名、学号、姓别等。
每本图书记录至少包括如下信息:
编号、书名、作者、价格等。
(2)图书、借阅者信息以磁盘文件的形式存储,存储位置、文件名、文件格式由设计者确定。
(3)对于图书借阅系统功能中数据输入、显示、查询、修改、删除、保存等功能,要求编写功能独立的函数或主控函数予以实现,其所属的各项功能尽量由独立的函数实现。
(4)以菜单式实现功能选择控制。
(5)本图书借阅管理程序能够实现100条记录的管理。
3案分析
此题是设计一个图书借阅管理系统,根据需要应包含图书管理和会员管理。
其中对图书和会员的增加、查询和删除都是基本操作。
在图书管理中对图书的借阅和归还是重点,这两个操作也是整个系统关键。
在会员管理中增加了会员借书信息的查询和对到期书的催还信息。
实现这些操作的关键在于建立的两个带头结点的单链,分别用于存储图书和会员的基本信息。
在这两个链表之间还应建立起相互的联系,便于查询的操作的实现。
另外,在美观面,需要设计一个操作界面供用户选择使用。
三、概要设计
通过需求分析,设计出本程序的总体功能设计框图。
分为七个面:
1、选择检查类型;
2、编辑图书的信息;
3、查询图书的信息;
4、编辑读者的信息;
5、查询读者的信息;
6、借阅书刊;
7、还书。
连线之间说明了他们之间的相互联系以及设计时的要求。
4.2.2图书管理系统简略功能框图
五、详细设计与程序代码:
#include<
stdlib.h>
stdio.h>
iostream.h>
#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图书管理系统"
endl;
\t\t\t******************************"
\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"
;
请选择:
cin>
>
sel;
if(sel>
=1&
&
sel<
=11)break;
选择错误!
\n重新输入:
}while
(1);
switch(sel){
case1:
AddBook(S);
break;
case2:
SearchBook(S,-1);
case3:
DelBook(S);
case4:
BrrowBook(S);
case5:
TurnBackBook(S);
case6:
AddMember(S);
case7:
DelMember(S);
case8:
SearchMember(S,-1);
case9:
LoadData(S);
case10:
StoreData(S);
default:
ExitSystem();
}
}
System*InitSystem()
System*S=(System*)malloc(sizeof(System));
S->
BI=(BookInfo*)malloc(sizeof(BookInfo));
BookTotal=0;
BI->
nextbook=NULL;
MI=(MemberInfo*)malloc(sizeof(MemberInfo));
MemberTota=0;
MI->
nextmember=NULL;
returnS;
voidAddBook(System*S)
intTempcode;
charsel;
BookInfo*p=S->
BI;
BookInfo*t;
BookInfo*m;
intnum;
输入图书编号:
Tempcode;
if(m=SearchBook(S,Tempcode)){
这类书以有库存.\n输入图书的入库量:
num;
m->
b_Total+=num;
else{
t=(BookInfo*)malloc(sizeof(BookInfo));
t->
b_Code=Tempcode;
输入图书的名称:
t->
b_Name;
输入图书的入库量:
b_Total;
b_Out=0;
nextbook=p->
nextbook;
p->
nextbook=t;
BookTotal++;
添加完毕!
还要添加吗?
(Y/N)"
if(sel=='
n'
||sel=='
N'
){
结束添加"
return;
BookInfo*SearchBook(System*S,intcode){
BookInfo*bi=S->
intbookcode;
if(code==-1){
请输入要查询的图书编号:
bookcode;
elsebookcode=code;
while(bi&
bi->
b_Code!
=bookcode)bi=bi->
if(!
bi)cout<
没找到你所要的图书."
else{
图书编号为:
b_Code<
图书名称为:
b_Name<
图书库存量为:
b_Total<
图书借出量为:
b_Out<
returnbi;
voidDelBook(System*S){
BookInfo*bi;
BookInfo*pl=S->
MemberInfo*memi;
inttempcode;
inti;
pl=S->
bi=pl->
memi=S->
nextmember;
请输入要删除的图书的编号:
tempcode;
while(bi){
if(bi->
b_Code==tempcode)break;
pl=bi;
bi=bi->
if(bi==0)cout<
没有找到要删除的图书"
pl->
nextbook=bi->
BookTotal--;
while(memi){
for(i=1;
i<
=memi->
l_Codes[0];
i++){
if(memi->
l_Codes[i]==tempcode)break;
if(i<
l_Codes[0]){
for(;
memi->
i++)memi->
l_Codes[i]=memi->
l_Codes[i+1];
memi->
l_Codes[0]--;
memi=memi->
free(bi);
还有图书要删除吗?
删除图书结束"
voidBrrowBook(System*S)
BookInfo*p;
intmemcode;
MemberInfo*mp;
输入要借出的书号:
p=SearchBook(S,tempcode);
p){
没有找到要借出的图书."
此书的现存量为"
(p->
b_Total-p->
b_Out)<
b_Out))cout<
没有足够的书了,外借失败."
请输入会员编号:
memcode;
mp=SearchMember(S,memcode);
mp)cout<
会员编号输入错误,外借失败"
if(mp->
l_Codes[0]==5)cout<
借书量不能超过5本"
b_Out++;
mp->
l_Codes[++mp->
l_Codes[0]]=tempcode;
外借成功."
\n还有图书要借出吗?
外借操作结束."
voidTurnBackBook(System*S)
intmembercode;
输入归还书号:
书号输入错误."
membercode;
(mp=SearchMember(S,membercode)))cout<
会员编号输入错误,归还失败"
b_Out--;
=mp->
while(i<
mp->
l_Codes[i]=mp->
i++;
归还成功."
还有要归还的图书吗?
归还结束."
voidAddMember(System*S)
MemberInfo*p=S->
MI;
MemberInfo*t;
输入会员编号:
t=(MemberInfo*)malloc(sizeof(MemberInfo));
m_Code=Tempcode;
输入会员姓名:
m_Name;
l_Codes[0]=0;
nextmember=p->
nextmember=t;
MemberTota++;
MemberInfo*SearchMember(System*S,intcode)
MemberInfo*bi=S->
请输入要查询的会员编号:
elsemembercode=code;
m_Code!
=membercode)bi=bi->
没找到指定会员."
会员编号为:
m_Code<
名称为:
m_Name<
已借的图书有:
l_Codes[0]<
本."
=bi->
i++)
l_Codes[i]<
'
'
voidDelMember(System*S)
MemberInfo*bi;
MemberInfo*pl;
BookInfo*book;
bi=S->
请输入要删除的会员的编号:
m_Code==tempcode)break;
没有找到要删除的会员编号."
nextmember=bi->
MemberTota--;
(book=SearchBook(S,bi->
l_Codes[i]))){
删除会员出错!
book->
b_Total--;
还有会员要删除吗?
删除会员结束"
voidStoreData(System*S){
FILE*fp;
(fp=fopen("
BookSys"
"
wb"
))){
打开文件BookSys失败!
exit(0);
fwrite(&
(S->
BookTotal),sizeof(int),1,fp);
fwrite(bi,sizeof(BookInfo),1,fp);
MemberInfo*mi=S->
MemberTota),sizeof(int),1,fp);
while(mi){
fwrite(mi,sizeof(MemberInfo),1,fp);
mi=mi->
fclose(fp);
voidLoadData(System*S){
rb"
打开文件BookSys失败"
BookInfo*tempbi;
fread(&
for(inti=1;
=S->
BookTotal;
tempbi=(BookInfo*)malloc(sizeof(BookInfo));
fread(tempbi,sizeof(BookInfo),1,fp);
bi->
nextbook=tempbi;
bi=tempbi;
MemberInfo*tempmi;
MemberTota;
tempmi=(MemberInfo*)malloc(sizeof(MemberInfo));
fread(tempmi,sizeof(MemberInfo),1,fp);
mi->
nextmember=tempmi;
mi=tempmi;
voidExitSystem(){
charselect;
警告:
程序结束后未存储的数据将消失."
确定要退出吗?
select;
if(select=='
y'
||select=