




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
#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 -2typedef int Status;typedef char *string ;#define m 3 /B-树的阶/书的结构体 struct Bookunsigned int key; char bname20; char writter20; unsigned int left; unsigned int total; bN;/B- 树的存储结构typedef Book KeyType;typedef struct BTNodeint keynum; struct BTNode *parent; KeyType keym + 1; struct BTNode *ptrm + 1; BTNode,*BTree;/查找结果的存储结构体typedef structBTNode *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);elseprintf(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):);doch = 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按任意键返回); get
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 城市轨道交通总包合同
- 农民合作农业生产责任书
- 2025年高中技术会考考试试题及答案
- 2025年高危产妇试题及答案
- 恐吓游戏650字(11篇)
- 2025年感染性疾病科食源性疾病知识培训考核试题(+答案)
- 各类管道安装劳务合同
- 2025年甘肃省庆阳市事业单位工勤技能考试题库(含答案)
- 物流仓储库存管理模板及系统设计
- 科技展会合作协议
- 2025-2026学年人教精通版四年级英语上册(全册)教学设计(附目录)
- 钢结构长廊施工方案
- 临床检验专业医疗质量控制指标(2015版)
- 信保业务自查问题统计表
- 2023年大学试题(大学选修课)-创业:道与术考试历年真摘选题含答案
- 心理健康评定量表
- 河道修防工高级工试题
- 女性生殖脏器
- 保障农民工工资支付协调机制和工资预防机制
- 流体力学的课件
- GB/T 9258.1-2000涂附磨具用磨料粒度分析第1部分:粒度组成
评论
0/150
提交评论