数据结构课程设计图书管理系统.docx
- 文档编号:3045565
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:23
- 大小:162.79KB
数据结构课程设计图书管理系统.docx
《数据结构课程设计图书管理系统.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计图书管理系统.docx(23页珍藏版)》请在冰豆网上搜索。
数据结构课程设计图书管理系统
数据结构课程设计图书管理系统
一 需求分析
该程序是模拟图书馆管理系统,实现图书采编入库、借书、还书、查询等基本业务。
此程序规定:
(1)管理员能够向系统中输入每种书的基本信息,包括书号、书名、作者、现存量和库存量、借阅记录,并保存记录;
(2)用户(读者)能够按书号、书名、作者查询图书信息;
(3)管理员能够实现图书采编入库(新购入一本书,经分类和确定书号之后登记到图书账目中去。
如果这种书在帐中已有,则只将总库存量增加)、借阅(如果书的现存量大于0,则借出一本,登记借阅者的图书证号和归还期限)、归还(删除对借阅者的登记,改变该书的现存量)、销毁(将图书从账目中删除)等操作。
二概要设计
●系统用到的抽象数据类型定义:
1、ADTLinearList{
数据元素:
D={ai|ai∈D0,i=1,2,…,n,n≥0,D0为某一数据对象}
关系:
S={<ai,ai+1〉|ai,ai+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)
}ADTLinearList
2、ADTString{
数据对象:
D={ai|ai∈CharacterSet,i=1,2,…,n;n≧0}
数据关系:
R={ 基本操作: (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) }ADTString ●系统中的子程序和功能说明: InitBo(Book&boo);初始化图书信息 InitRe(lend &Lin);初始化借阅者信息 BinarySearch(Bookboo,char SearchNum[]);二分法查找比较书号 Buy(Book&boo,charBuyNum[]);新书采编入库系统 Delete(Book&boo,charDeleteNum[]);清除图书信息系统 Borrow(Book&boo,lend&Lin,charBorrowNum[],charCaNum[]);借阅图书处理系统 Return(Book&boo,lend&Lin,charReturnNum[],charBorrowerNum[]);归还图书系统 SearchByNum(Book &boo,charSeaNum[]);按书号查找系统 SearchByName(Book&boo);按书名查找系统 SearchByAuth(Book&boo);按作者查询系统 Menu();主菜单显示系统 Search();查询系统子菜单 main();主函数 ●系统程序功能结构图 三详细设计 ●功能实现过程 bool BinarySearch(Bookboo,char SearchNum[])//二分法查找比较书号 { while(low<=high) { ﻩ计算中间点; ﻩﻩif(查找到书号相同的) { ﻩﻩ返回值true; ﻩﻩ} ﻩif(查找书号不相同) ﻩ用二分法进一步进行查找; ﻩ} if(库中没有所要查找的书) ﻩ 返回值false; } void Buy(Book&boo,char BuyNum[])/*采编入库*/ { if(书库中有此书) { 总库存加1; 现库存加1; } if(书库中无此书) { for(i=total;i〉mid&&total;i——)/*将新采购的书插在适合位置,保持有序*/ 空出插入位置; 输入新购书籍的相关信息: 书号、书名、作者、出版社; boo[i].next=NULL; total++;/*总量加1*/ } } voidDelete(Book&boo,charDeleteNum[])/*清除图书信息*/ { if(书库中没有此书) 输出“无此书”; if(书库中有此书) { strcpy(连续两本书的相关信息); 现存量减1;库存量减1; } else输出“此书已有借阅者,无法删除! ”; } voidBorrow(Book &boo,lend&Lin,charBorrowNum[],char CaNum[])/*借阅图书信息*/ { if(没有找到此书)输出“书库中无此书! ”; if(书库中有此书) { 借出一本书后,该书的现存量减1;并在借阅记录链表中插入该条记录;再对应读者信息记录链表,如果已有该读者证号信息,直接在该链表中插入此次借阅记录;如果无该读者证号信息,申请新单链表存放借阅记录. } else 输出“该书现存量为0”; } voidReturn(Book &boo,lend&Lin,char ReturnNum[],charBorrowerNum[])/*归还图书信息*/ { if(书库中无此书) 输出“无此书记录”; if(书库中有此书) { 查找图书文件,修改图书的现存量;查找记录借阅信息的单链表,填入还书日期,删除借阅信息;查找记录读者信息的单链表,删除证号信息。 } } voidSearchByNum(Book&boo,charSeaNum[])/*按书号查找*/ { if(书库中无此书信息)/*用二分法查找*/ 输出“无此书”; else/*书库中有此书信息*/ 输出与此书有关的相关信息; } voidSearchByName(Book&boo)/*按书名查找*/ { 输入想要查找书的书名; 用顺序查找法查找; if(查找到需要查找的书) 输出与此书相关的信息; } 建议画出主要模块流程图。 四 设计与调试分析 1、这个程序设计中要注意定义两个结构体: 图书结构体、借阅人结构体。 其中定义数组存放图书信息,申请链表存放借阅记录和读者信息记录。 2、程序中运用到大多的插入与删除,所以申请链表比较方便插入与删除。 但应前期需求分析的准备工作不充分,导致程序运行功能不全,比如查找时关于此书的信息不能全部显示出来,并且添加删除时库存的变化不能直接显示出来。 程序的健壮性不能达到预期的结果,这些都是需要改进的. 3、在程序中的函数调用是个非常重要的部分,也是经常需要用到的,在编写程序过程中,因为函数调用不准确,使得循环进不去,后来改变函数的调用关系,才达到了预期结果。 4、程序中还定义了全局变量,之前没定义全局变量,在下面的编写过程,同样性质的地方需要重复定义,比较麻烦,定义全局变量使得程序比较简明一点。 五用户手册 【使用说明】 1、进入图书馆管理系统主页面 2、若有新书要新编入库,选择1,进入新书入库系统,输入入库书的书号,若书库中无该书,则设立新书目,输入新书信息。 若书库中已有该书,则输入新信息覆盖修改原书库中该书号对应书的信息。 3、若有书籍信息需要删除,选择2,进入清空库存系统,输入想要删除书的书号,则此书信息就已删除. 4、若要借阅图书,选择3,进入图书借阅系统,输入需要借阅书的书号以及读者证号,并输入还书日期,则借书成功。 5、若要归还图书,选择4,进入图书归还系统,输入需要归还图书的书号以及读者证号,则还书成功。 6、若要查找信息,选择5,进入查找信息子系统。 若要按书号查找,则选择子系统中的1,输入需要查找的书的书号,若按书名查找,则选择子系统中的2,输入需要查找的书名,若按作者查找,输入需要查找书的作者进行查找,若查找结束,则按0退出. 7、若系统使用结束,按0退出. 【 程序中的头文件 】 #include〈stdio.h〉 #include #include <stdlib.h> #defineMAXSIZE100 #defineLIST_INIT_SIZE 100 intRetotal;/*定义的全局变量*/ inttotal; 六 测试成果 1、采编入库 2、清空库存 3、图书借阅 4、图书归还 5、图书查找 七附录(源程序清单) #include h〉 #include h〉 #include h〉 #defineMAXSIZE 100 #defineLIST_INIT_SIZE 100 typedefstructBoro { char BNum[20]; charRetDate[8]; struct Boro *next; }Bor; typedefstructLinkBook { Bor *next; charCNum[20]; intTotal; }lend[LIST_INIT_SIZE]; typedef struct LNode { ﻩcharCardNum[20]; ﻩstruct LNode *next; }LinkList; typedefstructbook { charnum[20]; charname[20]; charauth[20]; ﻩcharpub[20]; ﻩintTotNum; ﻩintNowNum; LinkList*next; }Book[MAXSIZE]; intRetotal; inttotal; voidInitBo(Book&boo) { for(int i=0;i<MAXSIZE;i++) ﻩ{ ﻩboo[i].NowNum=0; ﻩboo[i].TotNum=0; ﻩboo[i].next=NULL; ﻩ} } void InitRe(lend&Lin) { ﻩfor(inti=0;i ﻩLin[i]。 next=NULL; } int mid=0; boolBinarySearch(Bookboo,charSearchNum[]) { ﻩintlow=0,high=total; ﻩintfound=0; ﻩwhile(low〈=high) { mid=(low+high)/2; ﻩﻩif(strcmp(boo[mid].num,SearchNum)==0) ﻩ{ ﻩfound=1; ﻩreturn true; } ﻩif(strcmp(boo[mid]。 num,SearchNum)! =0) ﻩﻩhigh=mid—1; ﻩﻩelse ﻩlow=mid+1; ﻩ} if(found==0) returnfalse; } void Buy(B
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 图书 管理 系统