数据结构课程设计图书借阅管理系统.docx
- 文档编号:23627294
- 上传时间:2023-05-19
- 格式:DOCX
- 页数:24
- 大小:320.46KB
数据结构课程设计图书借阅管理系统.docx
《数据结构课程设计图书借阅管理系统.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计图书借阅管理系统.docx(24页珍藏版)》请在冰豆网上搜索。
数据结构课程设计图书借阅管理系统
数据结构课程设计——图书借阅管理系统
图书馆管理系统
一、问题描述:
二、系统需求分析:
1功能要求:
2技术要求:
3方案分析:
三、概要设计:
四、详细设计与程序代码:
五、运行结果与测试:
六、设计体会与总结
三、概要设计
通过需求分析,设计出本程序的总体功能设计框图。
分为七个方面:
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<<"图书编号为: "< cout<<"图书名称为: "< cout<<"图书库存量为: "< cout<<"图书借出量为: "< } } 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(;i 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(i 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<<"会员编号为: "< cout<<"名称为: "< cout<<"已借的图书有: "< for(i=1;i<=bi->l_Codes[0];i++) cout< 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; } mi->nextmember=NULL; fclose(fp); } voidExitSystem(){ charselect; cout<<"警告: 程序结束后未存储的数据将消失."< cout<<"确定要退出吗? (Y/N)"; cin>>select; if(select=='y'||select=='Y')exit(0); if(select=='n'||select=='N')return; } 五、运行结果与测试: 六、设计体会与总结: 这次基础强化训练的课程设计对于我们来说,有一定的难度。 因为他要求我们较完整的去实现一个比较可行的程序。 将其应用到实际的生活中去。 我被分配到的题目是图书借阅系统的实现与设计。 这个题目相对来说贴近生活,比较容易理解。 但是设计一个较为完整的程序却不是这么简单的。 首先我分析了相关的题目内容,并由此而进行了相关资料和书籍的查询工作然后才开始正式进行设计。 一开始不知从何下手但后来分析了一下题目,并结合这学期所学的知识,再加上相关提示我决定用指针、链表和文件的内容来编写程序。 图书管理主要就是有一些操作来完成,这些操作包括: 新进图书基本信息的输入、图书基本信息的查询、对撤消图书信息的删除、为借书人办理注册、办理借书手续(非注册会员不能借书)、办理还书手续等等。 我想这正好用C++的知识来实现函数: 添加图书,图书查询,删除图书,增加会员,会员查询,删除会员,借阅图书,归还图书,借书信息,到期书催还。 最后编写退出系统的函数。 在具体编写程序时考虑到图书的相关操作与会员基本相同,所以实际上只要编写前三个函数,后面的函数把相应变量改变就可以了。 添加图书: 考虑到图书的信息较多,所以用结构体对其定义。 又考虑到图书量大,所以添加后要保存到文件中去。 图书查询: 用所学过的顺序查找法来写。 删除图书: 把保存到文件中的内容写到链表中去,用链表删除结点的方法来删除图书。 我们所学过的指针这时正好用上。 最后把各函数同主函数相连,用主函数调用它们,编写好好看的界面就可以了。 同时通过这几天的程序及报告编写,我也发现了自己的很多不足,自己知识的很多漏洞,看到了自己的实践经验还是比较缺乏,理论联系实际的能力还是比较脆弱。 尤其是编写大型的程序所要拥有的知识和技能比较缺乏。 程序编好了,还要经过调试和修改,这步也很关键,好的程序是经过了无数次的修改和调试才产生的。 我的程序基本上能够满足要求,但还有一些地方需要改进,在今后我应该在多看书的同时还要加强实践的练习。 才能进一步提高自己的编程能力。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 图书 借阅 管理 系统