数据结构课程设计图书管理系统_第1页
数据结构课程设计图书管理系统_第2页
数据结构课程设计图书管理系统_第3页
数据结构课程设计图书管理系统_第4页
数据结构课程设计图书管理系统_第5页
免费预览已结束,剩余27页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据结构课程设计图书管理系统一 需求分析该程序是模拟图书馆管理系统,实现图书采编入库、借书、还书、查询等基本业务。此程序规定:(1) 管理员能够向系统中输入每种书的基本信息,包括书号、 书名、 作者、现存量和库存量、借阅记录,并保存记录;(2) 用户(读者)能够按书号、书名、作者查询图书信息;(3) 管理员能够实现图书采编入库 (新购入一本书,经分类和确定书号之后登记到图书账目中去。如果这种书在帐中已有,则只将总库存量增加)、借阅(如果书的现存量大于0, 则借出一本,登记借阅者的图书证号和归还期限)、归还( 删除对借阅者的登记, 改变该书的现存量 )、销毁(将图书从账目中删除 )等操作 。二 概要设计系统用到的抽象数据类型定义:1、adt linearlist数据元素: d=a i|a id 0,i=1,2,n,n 0,d 0 为某一数据对象关系: s=|a i,a i+1 d0,i=1,2,n-1基本操作:(1) initlist(l)(2) destroylist(l)(3) clearlist(l)(4) emptylist(l)精品资料(5) listlength(l)(6) locate(l,e)(7) getdata(l,i)(8) inslist(l,i,e)(9) dellist(l,i,&e)adt linearlist 2、adt string数据对象: d=a i|a icharacterset,i=1,2,n;n 0数据关系: r=|a i-1 ,aid,i=2,n;n 0基本操作:( 1) strasign(s,chars)( 2) strinsert(s,pos,t)( 3) strdelete(s,pos,len)( 4) strcopy(s,t)( 5) strempty(s)( 6) strcompare(s,t)( 7) strlength(s)( 8) strclear(s)( 9) strcat(s,t) (10)substring(sub,s,pos,len)(11)strindex(s,pos,t) (12)strreplace(s,t,v)(13)strdestroy(s)adt string系统中的子程序和功能说明:initbo(book &boo);初始化图书信息initre(lend &lin);初始化借阅者信息binarysearch(book boo,char searchnum);二分法查找比较书号buy(book &boo, char buynum);新 书 采 编 入 库 系 统 delete(book &boo,char deletenum);清除图书信息系统borrow(book &boo,lend &lin,char borrownum,char canum);借阅图书处理系统return(book &boo,lend &lin,char returnnum,char borrowernum);归还图书系统searchbynum(book &boo,char seanum);按书号查找系统searchbyname(book &boo);按书名查找系统searchbyauth(book &boo);按作者查询系统menu(); 主菜单显示系统search(); 查询系统子菜单main(); 主函数系统程序功能结构图基借按按按图图图图本阅书书作书书书书信记号名者采借归销息录查查查编阅还毁询询询入情情情库况况况图书馆管理系统图书信息录入查询图书信息处理图书信息三 详细设计功能实现过程bool binarysearch(book boo,char searchnum) /二分法查找比较书号while(lowmid&total;i-)/*将新采购的书插在适合位置,保持有序 */空出插入位置 ;输入新购书籍的相关信息:书号、书名、作者、出版社;booi.next=null;total+;/* 总量加 1*/void delete(book &boo,char deletenum)/*清除图书信息*/if( 书库中没有此书)输出“无此书”;if (书库中有此书)strcpy( 连续两本书的相关信息);现存量减 1; 库存量减1;else输出“此书已有借阅者,无法删除! ”;void borrow(book &boo,lend &lin,char borrownum,char canum)/*借阅图书信息 */if( 没有找到此书)输出 “ 书库中无此书!”; if( 书库中有此书)借出一本书后, 该书的现存量减 1; 并在借阅记录链表中插入该条记录 ;再对应读者信息记录链表, 如果已有该读者证号信息,直接在该链表中插入此次借阅记录 ;如果无该读者证号信息,申请新单链表存放借阅记录。else输出“ 该书现存量为0” ;void return(book &boo,lend &lin,char returnnum,char borrowernum)/*归还图书信息*/if( 书库中无此书)输出 “无此书记录 ” ; if( 书库中有此书)查找图书文件,修改图书的现存量;查找记录借阅信息的单链表,填入还书日期,删除借阅信息 ;查找记录读者信息的单链表,删除证号信息。void searchbynum(book &boo,char seanum)/*按书号查找 */if( 书库中无此书信息)/* 用二分法查找*/输出“无此书”;else/* 书库中有此书信息*/输出与此书有关的相关信息;void searchbyname(book &boo)/*按书名查找 */输入想要查找书的书名;用顺序查找法查找;if( 查找到需要查找的书)输出与此书相关的信息;建议画出主要模块流程图。四 设计与调试分析1、这个程序设计中要注意定义两个结构体:图书结构体、借阅人结构体。其中定义数组存放图书信息,申请链表存放借阅记录和读者信息记录。2、程序中运用到大多的插入与删除,所以申请链表比较方便插入与删除。但应前期需求分析的准备工作不充分,导致程序运行功能不全,比如查找时关于此书的信息不能全部显示出来,并且添加删除时库存的变化不能直接显示出来。程序的健壮性不能达到预期的结果,这些都是需要改进的。3、在程序中的函数调用是个非常重要的部分,也是经常需要用到的,在编写程序过程中, 因为函数调用不准确,使得循环进不去,后来改变函数的调用关系,才达到了预期结果。 4、程序中还定义了全局变量,之前没定义全局变量,在下面的编写过程,同样性质的地方需要重复定义,比较麻烦,定义全局变量使得程序比较简明一点。五 用户手册【 使用说明】1、进入图书馆管理系统主页面2、若有新书要新编入库,选择1 ,进入新书入库系统,输入入库书的书号,若书库中无该书,则设立新书目,输入新书信息。 若书库中已有该书,则输入新信息覆盖修改原书库中该书号对应书的信息。3、若有书籍信息需要删除,选择2,进入清空库存系统,输入想要删除书的书号,则此书信息就已删除。4、若要借阅图书,选择3 ,进入图书借阅系统,输入需要借阅书的书号以及读者证号,并输入还书日期,则借书成功。5、若要归还图书,选择4 ,进入图书归还系统,输入需要归还图书的书号以及读者证号, 则还书成功。6、若要查找信息,选择5,进入查找信息子系统。若要按书号查找,则选择子系统中的1 , 输入需要查找的书的书号,若按书名查找,则选择子系统中的2 ,输入需要查找的书名,若按作者查找,输入需要查找书的作者进行查找,若查找结束,则按0 退出。7、若系统使用结束,按0 退出。【 程序中的头文件】#include #include #include #define maxsize 100#define list_init_size 100int retotal;/*定义的全局变量*/ int total;六 测试成果1、采编入库2、清空库存3、图书借阅4、图书归还5、图书查找七 附录(源程序清单)#include #include #include #define maxsize 100#define list_init_size 100typedef struct borochar bnum20; char retdate8; struct boro *next;bor;typedef struct linkbookbor *next;char cnum20; int total;lendlist_init_size;typedef struct lnodechar cardnum20; struct lnode *next;linklist;typedef struct bookchar num20; char name20; char auth20; char pub20; int totnum;int nownum;linklist *next;bookmaxsize;int retotal;int total;void initbo(book &boo)for(int i=0;imaxsize;i+)booi.nownum=0; booi.totnum=0; booi.next=null;void initre(lend &lin)for(int i=0;ilist_init_size;i+) lini.next=null;int mid=0;bool binarysearch(book boo,char searchnum)int low=0,high=total; int found=0;while(lowmid&total;i-) booi=booi-1;printf( 该书在书库中不存在,设立新书目 !n);strcpy(booi.num,buynum);printf( 该书购入的数量是:); scanf( %d,&booi.nownum);booi.totnum=booi.nownum; printf( 该书的名字是:); scanf( %s,&);printf( 该书的作者是:); scanf( %s,&booi.auth);printf( 该书的出版社是:); scanf( %s,&booi.pub);booi.next=null; total+;printf( 已增加该书的信息!n);printf( 编号:%s书名:%s ,booi.num,);printf( 作者 :%s出版社 :%s,booi.auth,booi.pub); printf(n);printf( 入库成功 .n);void delete(book &boo,char deletenum)if(binarysearch(boo,deletenum)=false|total=0) printf( 书库中没有该书.n);if(binarysearch(boo,deletenum)if(!boomid.next)int j; for(j=mid;j0)boomid.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-cardnum,canum); n-next=null;int i=0; for(i=0;inext)p=p-next; q=(bor *)malloc(sizeof(boro); p-next=q;strcpy(q-bnum,borrownum); printf( 输入归还日期:); scanf(%s,&q-retdate);q-next=null; printf( 借阅成功 .n); break;if(i=retotal)strcpy(lini.cnum,canum); p=(bor *)malloc(sizeof(boro); lini.next=p;strcpy(p-bnum,borrownum);printf( 输入归还日期:); scanf( %s,&p-retdate); p-next=null;retotal+;printf( 借阅成功 .n);elseprintf( 借阅失败 .该书现在库存为0.n);void return(book &boo,lend &lin,char returnnum,char borrowernum)bor *p,*q; linklist *m,*n; int flag=0;if(!binarysearch(boo,returnnum)|!total)printf( 书库中无此书.n); if(binarysearch(boo,returnnum)m=boomid.next;if(!strcmp(m-cardnum,borrowernum)boomid.nownum+; boomid.next=m-next; free(m);elsewhile(m-next)if(!strcmp(m-next-cardnum,borrowernum)n=m-next;m-next=n-next; free(n); boomid.nownum+; break;m=m-next;for(int i=0;ibnum,returnnum)lini.next=p-next; free(p);printf( 成功归还该书.n); flag=1;break;elsewhile(p-next)if(!strcmp(p-next-bnum,returnnum)q=p-next;p-next=q-next; free(q);printf( 成功归还该书.n);flag=1; break;p=p-next;for(int k=0;kretotal;k+) if(!link.next)int j; for(j=k;jretotal;j+)linj=linj+1; strcpy(linj.cnum, ); retotal-;if(flag=0)printf( 无该证信息 .n);void searchbynum(book &boo,char seanum)linklist *p; p=boomid.next;if(binarysearch(boo,seanum)=true)printf( 书号: %sn,boomid.num);printf( 书 名 : %sn,); printf( 作 者 名 : %sn,boomid.auth); printf( 出 版 社 : %sn,boomid.pub); printf( 现存量: %sn,boomid.nownum); printf( 库存量: %sn,boomid.totnum); printf( n);elseprintf( 对不起,未找到您想查找的书。n);void searchbyname(book &boo)char seaname20;printf( 输入想查找的书的书名:n); scanf( %s,&seaname);printf( 此书存在! n); for(int i=0;itotal;i+)if(strcmp(seaname,)=0)printf( 编号 :%s书名 :%s ,booi.num,);printf( 作者 :%s出版社 :%s,booi.auth,booi.pub);printf( 总库存量 :%s,booi.totnum);printf( 现库存量 :%s,booi.nownum); printf(n);void searchbyauth(book &boo)char seaauth20;printf( 输入想查找的书的作者:n); scanf( %s,&seaauth);printf( 找到符合该作者的书的详细信息如下:n); for(int i=0;itotal;i+)if(strcmp(seaauth,booi.auth)=0)printf( 编号:%s书名 :%s ,booi.num,);printf( 作者 :%s出版社 :%s,booi.auth,booi.pub); printf(n);void menu()printf(图书馆管理系统n); printf(1.采编入库2.清空库存 nn);printf(3.图书借阅4 、图书归还 nn);printf(5.按要求查找0.退出nn); printf( 请选择: );void search()char bnum20;book bo;int k;printf(图书馆查询子系统n);printf(1 、按书号查询 2 、按书名查找 nn); printf(3 、按作者查询 4 、退出子系统 nn); printf( 请选择: );scanf(%d,&k); switch(k)case 1:printf( 请输入书号 :);/ 输入书号查找scanf( %s,&bnum); searchbynum(bo,bnum); break;case 2:sear

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论