ImageVerifierCode 换一换
格式:DOCX , 页数:47 ,大小:45.60KB ,
资源ID:4353020      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4353020.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(图书管理课程设计报告.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

图书管理课程设计报告.docx

1、图书管理课程设计报告 课程设计题目及要求10. 图书管理(难度3)【问题描述】图书管理基本业务活动包括:对一本书的采编入库、清除库存、借阅和归还等等。试设计一个图书管理系统,将上述业务活动借助于计算机系统完成。【基本要求】1每种书的登记内容至少包括书号、书名、著者、现存量和总库存量等五项。2作为演示系统,不必使用文件,全部数据可以都在内存存放。但是由于上述四项基本业务活动都是通过书号(即关键字进行的,所以要用B树24树对书号建立索引,以获得高效率。3系统应实现的操作及其功能定义如下:1 采编入库z新购入一种书,经分类和确定书号之后登记到图书账目中去。如果这种书在账中已有,则只将总库存量增加。

2、清除库存:某种书已无保留价值,将它从图书账目中注销。 借阅:如果一种书的现存量大于零,则借出一本,登记借阅者的图书证号和归还期限。 归还z注销对借阅者的登记,改变该书的现存量。 显示:以凹入表的形式显示B树。这个操作是为了调试和维护的目的而设置的。【测试数据】入库书号:35,16,18,70,5,50,22,60,13,17,12,45,25,42,15,90,30,7然后清除:45,90,50,22,42其余数据自行设计。由空树开始,每插入删除一个关键字后就显示B树的状态。【实现提示】(1)24树的查找算法是基础,入库和清除操作都要调用。难点在于删除关键字的算法,因而只要算法对2-3树适用就

3、可以了,暂时不必追求高阶B树也适用的删除算法。(2)每种书的记录可以用动(或静)态链式结构。借阅登记信息可以链接在相应的那种书的记录之后。【进一步完成内容】 (l)将一次会话过程(即程序一次运行)中的全部人机对话记入一个日志文件log中去。 (2)增加列出某著者全部著作名的操作。思考如何提高这一操作的效率,参阅教科书 (3增加列出某种书状态的操作。状态信息除了包括这种书记录的全部信息外还包括最早到期(包括已逾期)的借阅者证号,日期可用整数实现,以求简化。 (4)增加预约借书功能。完成情况:基本数据结构设计算法设计及流程图输入输出设计代码规范及注释数据测试及调试代码理解与说明评语综合评分第一部分

4、:引言数据结构课程设计的主要目的是培养学生综合运用数据结构程序设计课程所学到的知识,编写C程序解决实际问题的能力,以及严谨的工作态度和良好的程序设计习惯。通过课程设计的训练,学生应该能够了解程序设计的基本开发过程,掌握编写、调试和测试C语言程序的基本技巧,充分理解结构化程序设计的基本方法。数据结构程序设计的主要任务是要求学生遵循软件开发过程的基本规范,运用结构化程序设计的方法,按照课程设计的题目要求,分析、设计、编写、调试和测试数据结构程序及编写设计报告。第二部分:系统功能和原始数据(1) 原始数据入库书号:35,16,18,70,5,50,22,60,13,17,12,45,25,42,15

5、,90,30,7然后清除:45,90,50,22,42(2)系统功能 1.图书信息录入功能;2.图书信息浏览功能;3.按书名查询图书信息;4.图书信息添加、删除功能;备注:图书信息包括:书的编号、书名、作者名、剩余量、总库存量、借书者信息等。第三部分:程序总体设计(1) 数据结构B-树,顺序表。#define m 5 /B-树的阶#define M 20/借相同书的最大人数/*借阅者信息(用单链表方式存储)*/struct data /记录借书和还书日期的结构体类型 int year; /记录年 int month; /记录月 int day; /记录日;typedef struct Re c

6、har number20; /借阅者编号 struct data bro; /记录读者的借书日期 struct data back; /记录读者的还书日期Reader;/*书的结构体*/typedef struct Book unsigned int key; /书的编号 char bname20; /书的名称 char writter20; /作者姓名 unsigned int left; /剩余量 unsigned int total; /总库存量 Reader readerM; /借书者记录Books; /*B-树的存储结构*/typedef struct BTNode int keyn

7、um; /结点关键子的个数 struct BTNode *parent; /指向父结点的指针 Books keym+1; /一个结点中最多存放的书的个数 struct BTNode *ptrm+1; /指向孩子结点的指针BTNode,*BTree;/*查找结果的存储结构体*/typedef struct BTNode *pt; int i; int tag; Result;(2) 模块划分和层次结构(3) 函数原型清单/*欢迎界面*/void print();/界面 char menu();/菜单界面/*输入书的信息*/void InBookMess(Books &book);/输入书号、书名

8、等/*查找关键字在结点的位置*/int Search(BTree p, Books K);/一个结点中查找元素,返回结点的位置 Result SearchBTree(BTree T, Books K);/查找K书在树的位置并返回结果结构体 void ShowBookMess(Books book);/显示一本书的具体信息/*插入关键字*/void NewRoot(BTree &T, BTree p, Books x, BTree ap);/ 生成一个树新的结点void split(BTree &q, int s, BTree &ap);/分离节点void Insert(BTree &q, in

9、t i, Books x, BTree ap);/一个节点上的插入 int InsertBTree(BTree &T, Books K);/将书插到B-树上/*B-树凹入输出*/ void mball(BTree bth,int num);/凹入输出/*删除关键字*/ void MoveLeft(BTree &q,int i);/将一个关键词经结点q移到左兄弟中 ,q为要删关键字结点的双亲结点 void MoveRight(BTree &q,int i);/将一个关键词经结点q移到右兄弟中 ,q为要删关键字结点的双亲结点 void Merge(BTree &q,int i);/合并结点,q为被

10、删关键字结点的双亲结点 void DeleteBTree(BTree &T);/删除一个关键字/*显示书库*/void display(BTree T);/显示一棵树的所有书的书名/*输入书的关键字*/ void InBookKey(Books &book);/输入查找书的关键字 /*借还书*/void borrow(BTree root);/借书 void payback(BTree root);/还书(4) 程序总体框架int main() Result rs; Books k; char t;/输入y或者n while(1) char c; print(); c=menu(); /显示菜

11、单 switch(c) /按菜单函数返回值调用各相应函数 case 1: system(cls); printf(t- 录入书信息-n); InBookMess(k); /输入添加书的内容 InsertBTree(root,k);/将书插入在B-树中 printf(t- 录入结束- n); printf(nThe Btree is:n); mball(root,0);/凹入输出 break; case 2: system(cls); DeleteBTree(root);/删除B-树中的一本书 printf(nThe Btree is:n); mball(root,0); break; case

12、 3: system(cls); printf(t- 全部的书-nn); display(root);/ 显示整棵树的书的信息 printf(t- 显示完毕-n); break; case 4: system(cls); printf(t- 凹入表示法显示-n); printf(nThe Btree is:n); mball(root,0); break; case 5: system(cls); printf(t- 查找书信息-n); InBookKey(k);/输入要查找书的关键字 printf(n); rs = SearchBTree(root,k); if(rs.tag = 1) Sh

13、owBookMess(rs.pt-keyrs.i);/显示一本书的具体信息 else printf(t你要查找的书号%d 不存在!nn,k.key); printf(nt- 查找结束-n); break; case 6: system(cls); printf(t- 借阅-n); borrow(root); break; case 7: system(cls); printf(t- 还书-nn); payback(root); break; case 8: printf(nt你想退出吗?(y/n); t=getch(); if(t=y|t=Y) exit(0); break; default

14、:break; printf(nt 按任意键返回主菜单.); getch(); system(cls); (5)程序组织第四部分:功能模块函数设计和调试/*菜单界面*/void print() printf(n ); printf(n 欢迎进入图书管理系统 ); printf(n );char menu()/显示菜单函数,返回接收的字符 printf(n); printf(n 1.新书入库 n 2.删除旧书 n 3.显示书库 n 4.凹入显示 n 5.查找图书 n 6.读者借书 n 7.读者还书 n 8.退出系统 n); printf( n); printf(n); printf(ttt请选择

15、n); printf(n);printf(n); printf(tt); fflush(stdin); /清除缓存 return getchar(); /接受菜单命令 /*新书入库*/*输入添加书的内容*/void InBookMess(Books &book) char s5; printf(t请输入书号:); scanf(%s,s); book.key = atoi(s); printf(t请输入书名:); scanf(%s,&book.bname); printf(t请输入作者:); scanf(%s,&book.writter); printf(t请输入总量:); scanf(%s,s

16、); book.total = atoi(s);/将字符串转化为整型树 book.left = book.total; for(int i=0;ikeyi.bname,K.bname) != 0) printf(nt录入失败,原因:n); printf(.t书号冲突,请重新为该书编号!nn); printf(t已经存在书号为%d 的书为:n,q-keyi.key); ShowBookMess(q-keyi); return 0; else printf(nt该书已经存在!nn); printf(t是否增加其总量(y/n):); getchar(); scanf(%c,&addnum); if(

17、addnum = Y | addnum = y) q-keyi.total+=K.total; q-keyi.left += K.total; printf(nt增加总量后该书的信息如下n); else printf(nt该书的信息如下:n); ShowBookMess(q-keyi); return 0; x = K; ap = NULL; finished = needNewRoot = 0; while (!needNewRoot & !finished) Insert(q, i, x, ap); /插入结点 if (q-keynum keys; if (q-parent) / 在双亲结

18、点*q中查找x的插入位置 q = q-parent; i = Search(q, x); else needNewRoot = 1; if (needNewRoot) NewRoot(T, q, x, ap); / 生成新根结点*T,q和ap为子树指针 return 1;/*凹入表示法输入*/void mball(BTree bth,int num)/以brh为根节点的凹入输出 BTree p; int i,j; p=bth; /当前指向要输出的结点的指针 if(p) /结点非空 for(j=0;jnum;j+) printf( ); for(i=1;ikeynum;i+) /k=t; pri

19、ntf(%d ,p-keyi.key); /顺序输出该结点的关键字 /t=k; printf( n); for(i=0;ikeynum;i+) mball(p-ptri,num+1); /顺序递归访问该结点的各个子结点 /*删除旧书*/*删除一个关键字*/void DeleteBTree(BTree &T)/在m阶B-树T上删除关键词 Books x;/要删除 Result rs; BTree q,p; int i,j,s=(m+1)/2; char isdel;/输入的是y还是n printf(n); printf(nt 请输入你想要删除的书的关键字(即书号): ); scanf(%d,&x

20、.key);/x为要删的关键字 rs = SearchBTree(T,x);/找到x在B-树中的位置 if(rs.tag=0) printf(nt这本书不存在!n); return; printf(nt 你确定删除这本书吗?(y/n); getchar(); scanf(%c,&isdel); if(isdel = n|isdel = N) return; else if (isdel = y|isdel = Y) while(rs.pt-ptrrs.i)/转化为叶子节点删除 rs.pt-keyrs.i=rs.pt-ptrrs.i-key1; rs.pt=rs.pt-ptrrs.i; rs.i

21、=1; p=rs.pt;/指向要删除关键字的结点 i=rs.i;/删除的关键词p-keyi位置 for(j=i;jkeynum;j+)/删除p-keyi和p-ptri p-keyj=p-keyj+1; p-ptrj=p-ptrj+1; p-keynum-; while(p-keynumparent; i=0; while(p!=q-ptri)/找出p结点为其双亲结点q的第i个孩子; i+; if(i=0)/结点p为最左边的孩子 if(q-ptr1-keynums-1)/右兄弟是否有多余的关键字 MoveLeft(q,1); else Merge(q,1); else if(i=q-keynum

22、)/结点p为最右边的孩子 if(q-ptri-1-keynums-1) MoveRight(q,i); else Merge(q,i); else if(q-ptri-1-keynums-1)/结点p为中间孩子,先检查左兄弟 MoveRight(q,i); else if(q-ptri+1-keynums-1)/再检查右兄弟 MoveLeft(q,i+1); else Merge(q,i); p=q; if(T-keynum=0)/根结点被合并,整个B-树降低一层 q=T; T=T-ptr0; free(q); void MoveLeft(BTree &q,int i)/将一个关键词经结点q移到左兄弟中 ,q为要删关键字结点的双亲结点 int j; BTree r=q-ptri-1;/指向左结点 r-keynum+; r-keyr-keynum=q-keyi;/从双亲结点q移动关键词到左结点中 r-ptrr-keynum=q-ptri-ptr0; r=q-ptri; /指向右子树 q-keyi=r-key1;/将右结点树中第一个关键词移到双亲结点q中 r-ptr0=r-ptr1; r-keynum-; for(j=1;jkeynum;j+)/将右结点中所有关键词左移一位 r-keyj=r-keyj+1; r

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1