数据结构课程设计-图书管理系统.doc
《数据结构课程设计-图书管理系统.doc》由会员分享,可在线阅读,更多相关《数据结构课程设计-图书管理系统.doc(29页珍藏版)》请在咨信网上搜索。
1、用C+语言实现图书管理系统摘 要 图书管理系统主要是对图书的录入、读者借阅、读者归还等功能进行实现。本课程设计的系统开发平台为Windows XP,程序设计语言为C+,程序运行平台为Windws98/2000/XP/Seven。在程序设计中采用了B-树方法提高书籍的查找速度。关键词 程序设计;图书管理系统; C+;数据结构;B-树1 索引1.1课程设计目的设计一个小型的图书管理系统,可以实现新增图书,读者借阅,读者归还等功能。1.2.系统性能要求能较快的查到所要查找的图书;能准确统计当前每种书的库存,以确定此书是否可以外借;并且对外借的图书进行管理,记录借出时间、应还时间等。1.3.功能的实现
2、1) 新书入库:确定书号后,登记到图书帐目表中,如果表中已有,则只将库存量增加;2) 借阅:如果一种书的现存量大于0,则借出一本,登记借阅者的书证号和归还期限,改变现存量;3)归还:注销对借阅者的登记,改变该书的现存量。2 系统详细设计及实现1.所用的知识体系在整个程序的设计过程当中,用到了C+的一些基础知识,面向对象的思想和结构化的程序设计思想。数据结构的B-树建立索引,用索引提高查找的效率等。主程序输入显示借阅添加加查找退出图2.1 系统功能组成框图显示库存借出图书新书入库书号查找归还归还图书2.系统功能组成框图排序3. 系统功能模块划分 摸块保称功能说明1系统管理显示库存,借阅,归还2图
3、书管理图书的添加,查询等操作 3借还书管理对每次借书信息的添加,删除等操作4.流程图4.1录入图书信息录入图书信息判断是否已经存在该图书在原有的记录上加上现有的图书数量Y向系统中加入新纪录N4.2借阅图书 输入要借阅的图书信息判断图书是否存在输出提示信息告诉读者图书不存在N处理借阅功能,将该图书数量减一Y判断图书数目是否大于0提示读者该图书都已借出NY4.3归还图书输入图书和读者信息处理归还图书功能,清读者的借阅记录,将图书的在库数加一书号排序书名排序5 功能实现51 运行程序的主界面图51 操作界面5.2 新书入库功能的操作界面图5-2新书入库5.3 查询数据的界面图5-3查询书籍5.4 查
4、询所有书籍的界面图 5-4显示库存5.5 图书借阅的界面图5-5借阅书籍5.6 还书的界面图5-6还书3 参考文献 1谭浩强C语言设计(第三版)清华大学出版社2 严蔚敏 吴伟民 数据结构(C语言版) 清华大学出版社3 谭浩强 C+ 程序设计清华大学出版社4参考网址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 OVERFL
5、OW -2typedef int Status;typedef char *string ;#define m 3 /B-树的阶,设为/ 借阅者的结构体typedef struct Userunsigned int number; /借书证号码int year;int month;int day;/借书时间int dyear;/截至日期的年int dmonth;/截至日期的月int dday;/截至日期的日struct User *next; /下一个借阅者User; /定义用户的的信息/书的结构体 struct Bookunsigned int key; /图书的书号 char bname2
6、0; / 书名 char writter20;/ 著者 unsigned int left; / 现存量 unsigned int total; / 总存量User *user;/借阅该书的人bN;/定义书的信息/B- 树的存储结构typedef Book KeyType;typedef struct BTNodeint keynum; /结点中关键字个数,即结点的大小struct BTNode *parent; /指向双亲结点KeyType keym + 1; /关键字向量,号单元未用struct BTNode *ptrm + 1; /子树指针向量BTNode,*BTree;/查找结果的存储
7、结构体typedef structBTNode *pt; /指向找到的结点 int i; /1m,在结点中的关键字序号int tag; /B- 树的查找结果类型Result;BTree root = NULL; /树根/*函数声明部分/输入书的具体信息void InBookMess(KeyType &book);/输入书的关键字void InBookKey(KeyType &book);/显示书的具体信息,如果书存在就显示void ShowBookMess(Book book);/显示一个结点中所包含的全部信息,显示单个结点void ShowBTNode(BTree p);/显示,以层次的方法
8、显示树的结点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,
9、 KeyType x, BTree ap);/将书的信息插入到B- 树中Status InsertBTree(BTree &T, KeyType K);/删除树结点Status DeleteBT(BTree &T,KeyType k);/与右最左结点交换void exchange(BTree &T,int i);/用户借阅Status BorrowBook(BTree T,KeyType k);/注销对借阅者的登记,改变该书的显存量Status ReturnBook(BTree T,KeyType k);void temp(BTree T);void save(BTree p);/*/void
10、 save(BTree p)/保存模块程序 FILE *fp;/定义文件指针if (fp=fopen(book.txt,wb)=NULL )/判断文件的存在,若非空,将fp指向filename中记载的文件名的文件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 temp(BTre
11、e T)int i;if(T) save(T);/保存这个结点的全部值for(i=0; ikeynum; i+) /使用递归的方法显示每个结点if(T-ptri)temp(T-ptri);/读取文件void read()FILE *fp,fp1;/定义文件指针if (fp=fopen(book.txt,rb)=NULL & (fp=fopen(user.txt,rb)=NULL)/判断文件的存在,若非空,将fp指向filename中记载的文件名的文件printf(创建文件失败!nn);/打印出错提示getchar();return;for(int i=1;i+)/读取文件 if(fscanf(
12、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);bak.user = k.us
13、er;/在一个结点中查找元素,返回结点的位置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; / 返回结果信息: K的位置(或插入位置) r
14、eturn 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-k
15、eynum; 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
16、(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; /当前结点的双亲为空/返回false 表示在原有结点上增加数量,返回true 表示创建了一个新的结点Status InsertBTree(BTree &T, KeyType K)
17、 / 在m阶B树T上结点*q的keyi与keyi+1之间插入关键字K。 / 若引起结点过大,则沿双亲链进行必要的结点分裂调整,使T仍是m阶B树。 BTree ap; Result rs; BTree q; int i; char addnum; int finished, needNewRoot, s; / T是空树(参数q初值为NULL) KeyType x; /如果T 结点为空就生成一个新的结点 if (!T) NewRoot(T, NULL, K, NULL); else /查找元素k 在树中的位置 rs = SearchBTree(T,K);q = rs.pt; /查找到包含元素k 的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 图书 管理 系统
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【a199****6536】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【a199****6536】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。