用B树做的图书管理系统-共10页.pdf
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图书 管理 系统 10
- 资源描述:
-
#include#include#include#include#include#define N 10000#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE-1#define OVERFLOW-2 typedef int Status;typedef char*string;#define m 3/B-树的阶 /书的结构体 struct Book unsigned int key;char bname20;char writter20;unsigned int left;unsigned int total;bN;/B-树的存储结构 typedef Book KeyType;typedef struct BTNode int keynum;struct BTNode*parent;KeyType keym+1;struct BTNode*ptrm+1;BTNode,*BTree;/查找结果的存储结构体 typedef struct BTNode*pt;int i;int tag;Result;BTree root=NULL;void InBookMess(KeyType&book);void InBookKey(KeyType&book);void ShowBookMess(Book book);void ShowBTNode(BTree p);void display(BTree T);void KeyTypeCopy(KeyType&bak,KeyType k);int Search(BTree p,KeyType K);Result SearchBTree(BTree T,KeyType K);void Insert(BTree&q,int i,KeyType x,BTree ap);void split(BTree&q,int s,BTree&ap);void NewRoot(BTree&T,BTree p,KeyType x,BTree ap);Status InsertBTree(BTree&T,KeyType K);Status BorrowBook(BTree T,KeyType k);Status ReturnBook(BTree T,KeyType k);void save(BTree p);/*/void save(BTree p)/保存文件 FILE*fp;if(fp=fopen(book.txt,wb)=NULL)printf(创建文件失败!nn);getchar();return;for(int i=1;i keynum;i+)fprintf(fp,%d%s%s%d%d n,p-keyi.key,p-keyi.bname,p-keyi.writter,p-keyi.left,p-keyi.total);fclose(fp);/读取文件 void read()FILE*fp,fp1;if(fp=fopen(book.txt,rb)=NULL&(fp=fopen(user.txt,rb)=NULL)printf(读取文件失败!nn);getchar();return;for(int i=1;i+)if(fscanf(fp,%d%s%s%d%d,&bi.key,&bi.bname,&bi.writter,&bi.left,&bi.total)=EOF)break;InsertBTree(root,bi);fclose(fp);/复制结点,将某个结点的值复制到另外一个值上 void KeyTypeCopy(KeyType&bak,KeyType k)bak.key=k.key;strcpy(bak.bname,k.bname);bak.left=k.left;bak.total=k.total;strcpy(bak.writter,k.writter);/在一个结点中查找元素,返回结点的位置 int Search(BTree p,KeyType K)if(!p)return-1;int i=0;for(i=0;i keynum&p-keyi+1.key 0&p-keyi.key=K.key)found=TRUE;else q=p;p=p-ptri;if(found)R.pt=p;R.i=i;R.tag=1;else R.pt=q;R.i=i;R.tag=0;return R;/插入一条记录 void Insert(BTree&q,int i,KeyType x,BTree ap)int n=q-keynum;for(int j=n;j i;j-)KeyTypeCopy(q-keyj+1,q-keyj);q-ptrj+1=q-ptrj;KeyTypeCopy(q-keyi+1,x);q-ptri+1=ap;if(ap)ap-parent=q;q-keynum+;/分离结点 void split(BTree&q,int s,BTree&ap)int i,j,n=q-keynum;ap=(BTree)malloc(sizeof(BTNode);ap-ptr0=q-ptrs;for(i=s+1,j=1;i keyj,q-keyi);ap-ptrj=q-ptri;ap-keynum=n-s;ap-parent=q-parent;for(i=0;i ptri)ap-ptri-parent=ap;q-keynum=s-1;/生成一个新的树结点 void NewRoot(BTree&T,BTree p,KeyType x,BTree ap)T=(BTree)malloc(sizeof(BTNode);T-keynum=1;/设置当前结点的元素个数 T-ptr0=p;/设置左边结点的树根 T-ptr1=ap;/设置右边的树根 KeyTypeCopy(T-key1,x);/将x 元素的结点值复制到T 的第一个元素中 if(p)/当孩子不空的时候就设置当前结点为孩子的双亲 p-parent=T;if(ap)ap-parent=T;T-parent=NULL;/当前结点的双亲为空 void ShowBTNode(BTree p)for(int i=1;i keynum;i+)printf(t);printf(书号为:%d ,p-keyi.key);printf(书名为:%5s ,p-keyi.bname);printf(作者为:%5s ,p-keyi.writter);printf(剩余量为:%5d ,p-keyi.left);printf(总量为:%5d,p-keyi.total);printf(n);Status InsertBTree(BTree&T,KeyType K)/在m阶B树T上结点*q的keyi与keyi+1之间插入关键字K。BTree ap;Result rs;BTree q;int i;char addnum;int finished,needNewRoot,s;KeyType x;if(!T)NewRoot(T,NULL,K,NULL);else rs=SearchBTree(T,K);/查找元素k 在树中的位置 q=rs.pt;i=rs.i;if(rs.tag=1)if(strcmp(q-keyi.bname,K.bname)!=0)printf(nt录入失败,原因:n);printf(.t书号冲突,请重新为该书编号!nn);printf(t已经存在书号为%d 的书为:n,q-keyi.key);ShowBookMess(q-keyi);return FALSE;else printf(nt该书已经存在!nn);printf(t是否增加其总量(y/n):);scanf(%s,&addnum);if(addnum=Y|addnum=y)q-keyi.total+=K.total;q-keyi.left+=K.left;printf(nt增加总量后该书的信息如下n);else printf(nt该书的信息如下:n);ShowBookMess(q-keyi);return FALSE;x=K;ap=NULL;finished=needNewRoot=FALSE;while(!needNewRoot&!finished)Insert(q,i,x,ap);/插入结点 if(q-keynum keys;if(q-parent)/在双亲结点*q中查找x的插入位置 q=q-parent;i=Search(q,x);else needNewRoot=TRUE;if(needNewRoot)NewRoot(T,q,x,ap);/生成新根结点*T,q和ap为子树指针 return OK;/输入书的具体信息 void InBookMess(KeyType&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);book.total=atoi(s);book.left=book.total;/输入书的关键字 void InBookKey(KeyType&book)char s5;printf(t请输入书号:);scanf(%s,s);book.key=atoi(s);/显示书的具体信息 void ShowBookMess(Book book)printf(t书号为:%3dn,book.key);printf(t书名为:%3sn,book.bname);printf(t作者为:%3sn,book.writter);printf(t剩余量为:%3dn,book.left);printf(t总量为:%3dn,book.total);printf(n);/显示整棵树的信息 void display(BTree T)int i=0;if(T)ShowBTNode(T);/显示这个结点的全部值 for(i=0;ikeynum;i+)/使用递归的方法显示每个结点 if(T-ptri)display(T-ptri);/借阅 Status BorrowBook(BTree T,KeyType k)Result rs=SearchBTree(T,k);if(rs.tag=0)printf(t很抱歉!你要借阅的书不存在!n);return FALSE;if(rs.pt-keyrs.i.left keyrs.i.left-;return OK;/还书 Status ReturnBook(BTree T,KeyType k)int number;Result rs=SearchBTree(T,k);if(rs.tag=0)printf(t很抱歉!不存在你要还的书!n);return FALSE;if(rs.pt-keyrs.i.left=rs.pt-keyrs.i.total)printf(t该书无借出n);return FALSE;else rs.pt-keyrs.i.left+;/显示书的信息 void ShowWriterBook(BTree p,char writer)for(int i=1;i keynum;i+)if(strcmp(p-keyi.writter,writer)=0)printf(ttt书号为:%d ,p-keyi.key);printf(书名为:%s ,p-keyi.bname);printf(作者为:%3sn,p-keyi.writter);/菜单 char menu_selete()char ch;system(cls);printf(t*图书管理系统*nn);printf(t1.新书入库.t2.查找书籍.n);printf(t3.显示库存.t4.借阅.n);printf(t5.还书 t6.退出.n);printf(t*nn);printf(t请选择你所需要的操作(16):);do ch=getch();while(ch 7);return ch;void main()KeyType k;Result rs;read();while(1)switch(menu_selete()case 1:system(cls);printf(t-录入书信息-n);InBookMess(k);InsertBTree(root,k);printf(t-录入结束-n);save(root);printf(t当前书库的库存信息如下:n);display(root);printf(t按任意键返回);getch();break;case 2:system(cls);printf(t-查找书信息-n);InBookKey(k);printf(n);rs=SearchBTree(root,k);if(rs.tag=1)ShowBookMess(rs.pt-keyrs.i);else printf(t你要查找的书号%d 不存在!nn,k.key);printf(nt-查找结束-n);printf(t按任意键返回);getch();break;case 3:system(cls);printf(t-全部的书-nn);display(root);printf(t-显示完毕-n);printf(tt按任意键返回);getch();break;case 4:system(cls);printf(t-借阅-n);InBookKey(k);if(BorrowBook(root,k)printf(nt借阅成功!n);else printf(nt借阅失败!n);printf(nt按任意键返回);getch();break;case 5:system(cls);printf(t-还书-nn);InBookKey(k);if(ReturnBook(root,k)printf(nt归还成功!n);else printf(nt归还失败!n);printf(nt按任意键返回);getch();break;case 6:save(root);exit(0);展开阅读全文
咨信网温馨提示:1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。




用B树做的图书管理系统-共10页.pdf



实名认证













自信AI助手
















微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/4834435.html