




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据结构课程设计图书管理系统一需求分析该程序是模拟图书馆管理系统,实现图书采编入库、借书、还书、查询等基本业务。此程序 规定:(1) 管理员能够向系统中输入每种书的基本信息,包括书号、书名-作者、现存量和库存量、 借阅记录,并保存记录;(2) 用户(读者)能够按书号、书名、作者查询图书信息;管理员能够实现图书采编入库(新购入一本书,经分类和确定书号之后登记到图书账目 中去。如果这种书在帐中巳有,则只将总库存量増加)、借阅(如果书的现存量大于0, 则借出一本,登记借阅者的图书证号和归还期限)、归还(删除对借阅者的登记, 改变该书的现存量)、销毁(将图书从账目中删除)等操作。二概要时 系统用到的抽
2、象敷据类型定义:1、ADT LinearListI数据元素:D=a1Do,i=l,2,.,n,nO,Do为某一数据对象关系:S=<ai,ai÷> Iai,ai+ D0,i=l,2,n-l基本操作:(1) InitLiSt(L)(2) DeStrOyLiSt(L)(3) CIearLiSt(L)(4) EmPtyLiSt(L)(5) LiStLength(L)(6) LOCate(L,e)(7) GetData(LJ)(8) InSLiSt(L,i,e)(9) DeILiSt(L,i,&e)ADT LinearLiSt2、ADT String数据对象:D=aJ a1
3、 CharacterSetJ= 12,n;nM0数据关系:R=<ai.bai> I D,i=2,njnO基本操作:(1) StrASign(S ,chars)(2) StrInSert(S,pos,T)(3) StrDeIete(S,pos,Ien)(4) StrCopy(SJ)(5) StrEmPty(S)(6) StrCOmPare(S,T)(7) StrLength(S)(8) StrCIear(S)(9) StrCat(SJ)(10) SUbString(SUb, S ,pos ,len)(11) StrlndeX(S,pos,T)(12) StrRePIaCe(S,T,V
4、)(13) StrDeStrOy(S)(ADT String 系统中的子程序和功能说明:InitBO(BoOk &boo);初始化图书信息InitRe(Iend &Lin);初始化借阅者信息BinarySearCh(BOOk boo,Char SearCIlNUm);二分法查找比较书号BUy(BOOk &boo, Char BUyNUm);新书采编入库系统Delete(BOOk &boo,Char DeIeteNUm);清除图书信息系统BOrrOW(BOOk &boo,lend &Lin,char BOrrOWNUm,char CaNUnl);借
5、阅图书处理 系统RetUrn(BOOk &boo,Iend &Lin,char ReturnNUm,char BorrowerNum(I);归还图 书系统SearChByNUm(BOOk &boo,Char SeaNUn);按书号查找系统SearClIByNanle(BOOk &boo);按书名查找系统SearClIByAUth(BOOk &boo);按作者查询系统Menu();主菜单显示系统SearCho ;査询系统于菜单main();主函数系统程序功能结构图三详细设计 功能实现过租bool BinarySearCh(BOOk boo,char Sea
6、rChNUn) /二分法查找比较书号While(IOW<=Iiigh)计算中间点;以査找到书号相同的)返回值true;H (查找书号不相同)用二分法进一步进行査找;氓库中没有所要查找的书)返回值false;VOid BUy(BOOk &boo, Char BUyNUm)/*采编入库*/if(书库中有此书)总库存加1;现库存加1;氓书库中无此书)for(i=total;i>mid&&total;!-)/*将新采购的书插在适合位直,保持有序*/ 空出插入位置;输入新购书籍的相关信息:书号、书名、作者、出版社;booi.ncxt=NULL;total+;/* 总量
7、加 1*/VOid DeIete(BOOk &boo,Char DeleteNum,)/*清除图书信息*/if(书库中没有此书)输出“无此书”;if (书库中有此书)StrCPy(连续两本书的相关信息);现存量减1;库存量减1;else输出“此书巳有借阅者,无法删除!” ;VOid BOrrOW(BOOk &boo,Iend &Lin,char BOrrOWNUn,char CaNUm)/*借阅图书信息*/if(没有找到此书)输出“书库中无此书! ” ;if(书库中有此书)借出一本书后,该书的现存量减1;并在借阅记录链表中描入该条记录;再对应读者信息 记录链表,如果巳有
8、该读者证号信息,直接在该链表中插入此次借阅记录;如果无该读者 证号信息,申请新单链表存放借阅记录。else 输出“该书现存量为OM ;VOid RetUrn(BOOk &boo,lend &Lin,char ReturnNUm ,clar BOrrOWerNUnl)/*归还 图书信息*/if(书库中无此书)输出“无此书记录”;if(书库中有此书)査找图书文件,修改图书的现存量;查找记录借阅信息的单链表,填入还书日期,删除 借阅信息;查找记录读者信息的单链表,删除证号信息。VOid SearClIByNUm(BOOk &boo,char SeaNUm)/*按书号査找*/i
9、f(书库中无此书信息)/*用二分法查找*/输出“无此书”;else/*书库中有此书信息*/输出与此书有关的相关信息;VOid SearCIIByName(BOOk &boo)/*按书名查找*/输入想要查找书的书名;用顺序查找法查找;氓查找到需要查找的书)输出与此书相关的信息;建议画出主婆模块流程图。四设计与调试分析1、这个程序设计中要注意定义两个结构体:图书结构体、借阅人结构体。其中定义数组存放图书信息,申请链表存放借阅记录和读者信息记录。2、程序中运用到大多的插入与删除,所以申请链表比较方便插入与删除。但应前期需求分 析的准备工作不充分,导致程序运行功能不全,比如査找时关于此书的信息
10、不能全部显示出 来,并且添加删除时库存的变化不能直接显示出来。程序的健壮性不能达到预期的结果,这 些都是需要改进的。3、在程序中的函数调用是个非常重要的部分,也是经常需要用到的,在编写程序过程中, 因为函数调用不准确,使得循环进不去,后来改变函数的调用关系,才达到了预期结果。4、程序中还定义了全局变量,之前没定义全局变量,在下面的编写过程,同样性质的地方 需要重复定义,比较麻烦,定义全局变量使得程序比较简明一点。五用户手册【使用说明】1、进入图书馆管理系统主页面2、若有新书要新编入库,选择1,进入新书入库系统,输入入库书的书号,若书库中无该 书,则设立新书目,输入新书信息。若书库中巳有该书,则
11、输入新信息覆盖修改原书库中该 书号对应书的信息。3、若有书籍信息需要删除,选择2,进入清空库存系统,输入想要删除书的书号,则此书 信息就已删除。4、若要借阅图书,选择3,进入图书借阅系统,输入需要借阅书的书号以及读者证号,并 输入还书日期,则借书成功。5、若要归还图书,选择4,进入图书归还系统,输入需要归还图书的书号以及读者证号, 则还书成功。6、若要查找信息,选择5,进入查找信息子系统。若要按书号査找,则选择于系统中的1, 输入需要查找的书的书号,若按书名查找,则选择子系统中的2,输入需要查找的书名,若 按作者査找,输入需要査找书的作者进行查找,若查找结束,则按O退出。7、若系统使用结束,按
12、O退出。【程序中的头文件#include <stdio.h>#include <string.h>#include <stdlib.h> #define MAXSIZE 100#define LISTJNITeSIZE IOO int Retotal;/*定义的全局变量*/ int total;六测试成果1、采编入库卜-来入一丿圭2 .""zic-*国书借阅r.闺书归d!按亜节査找A.i因岀LLI iJv¾t = HQCEdLeS CM5r5yctouD5ktopCE-T5reJfl0buQD15.-xI的ZE" I-
13、i纱 sl継 X ii艇 XXii 煲i夠軽 131A# mLl*rjfl>rl0、清空库存3. 图书借阅图书归还2淆空库存4.、图书归诬P*-退1出l一心臬书馆脅玉里杀纾 X编入库图书債阅按娈求査找诘痛入想变归还的书的书号M 3i5A图荃渥号mu¾W8. -5. 图书査找十心臬书t官管理茨级g -来编入M2沽空库存3-图书借阅J图书归还按妾衣査找H-退出i青选扌辛 5一技亭询子书"找5 按作者查询心退岀子系统llfe的韦的书名=ChUlJlSte. -空库存3.按作者查询4 J退出子系统请选擇:5-技4询子欲按书名査找乩按要茅查找 «退山处图书归还3图书借
14、阅 择入起任 选输不按我 您- 11七附录(源程序清单)#include <stdio.h>#include <string.h>#inCIUde <stdlib.h>#define MAXSlZE 100#define LISTJNITeSIZE 100 typedef StrUCt BOrOChar BNUm20;Char RetDate;StrUCt BOrO *next;(Bor;typedef StrUCt LinkBOOkBOr *next;Char CNUm20;int Total;lendLISTJNIT_SIZEl;typedef StrU
15、Ct LNOdeChar CardNUm20;StrUCt LNOde *next;LinkList;typedef StrUCt bookChar num20;Char name20;Char auth20;Char pub20;int TotNum;int NowNum;LinkLiSt *next;BookM AXSIZE;int Retotal;int total;VOid In让BO(BOOk &boo)for(int i=O;i<MAXSIZE;i+)boo i .NowNum=O;booi .TotNum=O;booi .next=NULL;VOid InitRe(
16、Iend &Lin)for(int i=O;ivLIST_INIT_SIZE;i+)Lini.next=NULL;int mid=0;bool BinarySearCh(BOOk boo,char SearChNUm)int IOW=O,high=total;int found=O;While(IOW<=1IigrI)mid=(low+ligh)/ 2;if(strcmp(boomid.num,SearchNum)=0)found= 1; return true; if(strcmp(boomid.num,SearchNum)!=0)Iligh=mid-1;elselow=mid
17、+1;if(found=0)return false;VOid BUy(BOOk &boo, Char BUyNUm)int i;if(BinarySearch(boo,BuyNum)boomid.TotNum+;boo mid NOWNUm+;Printf (" 库成功.n");Printf("巳更改书库中该书的信息。n");Printf编号:%S 书名:S l, boo mid .num,boo mid .name);Printf作者:s出版社:%s",boomid.auth,boomid.pub);Printf(H n,t);if
18、 (! Binary S ear ch (boo, Buy Num)for(i=total;i>mid &&total;i)booi=booi-l;Printf("该书在书库中不存在,设立新书g!");StrCPy( boo i num, BUyNUm);Printf("该书购入的数量是:"); scanf(,* %d”,&booi.NowNum); booi .TotNum=booi.NowNum;PrintfC该书的名字是:”);SCanf(, %s役&);Print1("该书的作者是
19、:");SCanf(, %s,&booi.auth);Pnntf('该书的出版社是门;SCanf(, %s,booi.pub);booi .next=NULL;total+;PrintfCI巳增加该书的信息!n1);Printf编号:%S 书名:s lbooi.num,);Prmtf(,作者:s出版社:s” ,booi .auth,booi.pub);Printl (,n);PrintfC 入库成功.n");VOid DeIete(BOOk &boo,Char DeleteNum(J)if(BinarySearch(boo,Dele
20、teNumJ=Ialse total=0)Printf("书库中没有该书.n");if (BinarySearcl(boo,DeleteNum)if(!boomid.next)int j;for(j=mid;j<total;j+)booj=booj+l;StrCPy(booj.num,booj+1 .num);StrCPy(boo j name,boo j+l. name);StrCPy(booj.auth,booj+l.auth);StrCPy (boo j. PUb ,boo j ÷ 1 .pub);booj .TotNum=booj+1.TOtNUn;
21、boo j.NowNum=booj÷l.NowNum;Printf ("B成功删除该书.n");elsePrintf("该书有借阅者,无法删除。n");VOid BOrrOW(BOOk &boo,lend &Lin,char BOrrOWNUm ,char CaNUnl) BOr *p,*q;LiIlkLiSt *mn;if(!BinarySearch(boo,BrrwNum) total=0)Printf("书库里没这书。n");if (BinarySearch(boo,BorrowNum)if(boomi
22、d.NowNum>0)boo mid. NowNum-; if(boomid .next=NULL)m= (LinkList *)malloc(sizeof(LNode); boomid next=m;StrCPy (m->CardNum,CaNum); m->next=NULL;elsem=boomid .next;While(m->next) m=m->next; n=(LinkList *) malloc (SiZeOf(LNode); m->next=n;StrCPy (n-> CardNUnl, CaN Um); n->next=NUL
23、L;int i=0;for(i=0;i<Retotal;i+)if(!strcmp(Lini.CNum,CaNum)P=Lini.next;Whiie(P->next)p=p->next; q=(Bor *)malloc(sizeof(Boro); p->next=q;StrCPy(q->BNum,BorrowNum); Printf("输入归还日期:”); SCanf(,l%SM,&q- > RetDate); q->next=NULL;Printf("借阅成功.n"); break; if(i=Retotal)
24、StrCPy(Lin i .CNum,CaNum);P=(BOr *)malloc(sizeof(Boro); Lini.next=p;StrCPy(P->BNum,BorrowNum); Printf("输入归还日期:”); scanff, %s,sp->RetDate); p->next=NULL;Retotal+;Nintfr借阅成功.n,3;elsePnntf("借阅失败该书现在库存为O.n");VOid RetUrn(BOOk &boo,Iend &Lin,Char RetUrnNUm,char BOrrOWerNUm)
25、 BOr *p,*q;LiIlkLiSt *mn;int ag=O;if(!BinarySearcl(boo,ReturnNum) !total)Printf(”书库中无此书n");if (BinarySearCh(boo, RetUrnNUm)m=boomid.next;if(!strcmp(m->CardNum,BorrowerNum)boo mid. NowNum+;boomid.next=m->next;free(m);elseWhile(m-> next)if(!strcmp(m->next->CardNum,BorrowerNum)n=m-&
26、gt;next;m->next=n->next;free(n);boomid .NowNum+;break;m=m->next;for(int i=0;i<Retotal;i+)if(!strcmp(Lini.CNum,BorrowerNum)P=Lini. next; if (!strcmp(p->BNum,ReturnNum)Lini.next=p->next;free(p);Printf,'成功归还该书n");flag=l;break;elseWhiIe(P->next)if (!strcmp(p->next->BN
27、um,ReturnNum) q=p->next;p->next=q->next;free(q);Printf("成功归还该书.n");flag=l;break;p=p->next;for(int k=0;k<Retotal;k+)if(!Link.next)int j;for(j=k;j<Retotal;j+)Linj=Linj+l;StrCPy(Linj.CNum,);Retotal-;il(flag=O)Printfr无该证信息n");VOid SearChByNUm(BOOk &boo,char SeaNUm)Li
28、nkLiSt *p; p=boo mid, next; if(BinarySearch(boo,SeaNum)=true) Pnntf书号:%snl*,boomid.num);Printf书名:%snf,boomid .name);Pnntf作者名:%snM,boomid.auth);Printfr出版社:%sn,boomid.pub);Printf现存量:%sn,boomid.NOWNUm);Prmtf(,库存量:%snn,boomid.TotNum); Printl(H n");elsePrintf(',对不起,未找到您想查找的书。n”);VOid SearChByNam
29、e(BOOk &boo)Char SeaName20;Printf("输入想査找的书的书名: n");SCanI(H %s,t,&SeaName);Printf("1书存在! n");for(int i=0;i<total;i+)if(strcmp(SeaName,)=0)PTintfr编号:s 书名:s ,booi.num,); Printf (,作者:s 出版社:%sM,booi.autli,booi|.pub); Piintfr 总库存重 z%s'*,booi.TotNum);Pri
30、ntfr 现库存量:s",booi .NowNum);Printf(Hnn);VOiel SearCIIByAUth(BOOk &boo)Char SeaAUth20;Printf("输入想查找的书的作者:n");SCanI(H %sH,&SeaAuth);Printfr找到符合该作者的书的详细信息如下:n");for(int i=0;i<total;i+)il(strcmp(SeaAuth,booi.auth)=0)Printf(,编号:S 书名:s m,booi.num,); Printf(M 作者:s 出版社 r%s,booi.auth,booi.pub); PrintfC,n,);VOid MenUOPrintf(M图书馆管理系统);2.清空库存nn,);4、图书归还nn");0.退出m);Printf(H 1采编入库Printf("3.图书借阅Printf("5.按要求查找 Printfr请选择:,);VOid SearCl1()Char BNUm20;BOOk Bo;int k;Printf("图书馆查询子系统n");Printf("K按书号查询2、按书名査找nn")
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 风力发电机组控制-风力发电机组运行状态监控
- 得物仓库面试题及答案
- 2024花艺师考试实习训练试题及答案
- 解析辅导员考试常见问题试题及答案
- 农作物生长的环境调控措施试题及答案
- 辅导员招聘考试开展有效交流技巧试题及答案
- 中国电网入职试题及答案
- 油田三级教育试题及答案
- 农业财务管理与核算技巧试题及答案
- 农业职业经理人与农业法规试题及答案
- 视频剪辑课件范文
- 健身房健身器材使用手册
- 3.2有约必守 违约有责 课件-高中政治统编版选择性必修二法律与生活
- 承包商入厂安全培训试题附参考答案【完整版】
- 江苏省南京市鼓楼区2023-2024学年八年级下学期期中考试物理试题(解析版)
- 2024年司法考试历年证据法试题
- 深入解析SAS(数据处理、分析优化与商业应用)
- CJJ 122-2017 游泳池给水排水工程技术规程
- 2024年咨询工程师之工程项目组织与管理题库含完整答案(历年真题)
- (正式版)JBT 14682-2024 多关节机器人用伺服电动机技术规范
- 国内外化工发展情况及安全形势
评论
0/150
提交评论