数据结构实验图书管理系统

合集下载

数据结构课程设计-图书管理系统

数据结构课程设计-图书管理系统

用C++语言实现图书管理系统摘要图书管理系统主要是对图书的录入、读者借阅、读者归还等功能进行实现.本课程设计的系统开发平台为Windows XP,程序设计语言为C++,程序运行平台为Windws98/2000/XP/Seven。

在程序设计中采用了B-树方法提高书籍的查找速度。

关键词程序设计;图书管理系统;C++;数据结构;B-树1 索引1.1课程设计目的设计一个小型的图书管理系统,可以实现新增图书,读者借阅,读者归还等功能。

1。

2。

系统性能要求能较快的查到所要查找的图书;能准确统计当前每种书的库存,以确定此书是否可以外借;并且对外借的图书进行管理,记录借出时间、应还时间等。

1.3。

功能的实现1)新书入库:确定书号后,登记到图书帐目表中,如果表中已有,则只将库存量增加;2) 借阅:如果一种书的现存量大于0,则借出一本,登记借阅者的书证号和归还期限,改变现存量;3)归还:注销对借阅者的登记,改变该书的现存量.2 系统详细设计及实现1.所用的知识体系在整个程序的设计过程当中,用到了C++的一些基础知识,面向对象的思想和结构化的程序设计思想.数据结构的B—树建立索引,用索引提高查找的效率等。

2。

系统功能组成框图3 . 系统功能模块划分4。

流程图 4。

1录入图书信息4.2借阅图书4。

3归还图书输入图书和读者信息处理归还图书功能,清读者的借阅记录,将图书的在库数加一5 功能实现5.1 运行程序的主界面图5—1 操作界面5。

2 新书入库功能的操作界面图5—2新书入库5.3 查询数据的界面图5-3查询书籍5。

4 查询所有书籍的界面图 5—4显示库存5.5 图书借阅的界面图5-5借阅书籍5。

6 还书的界面图5—6还书3 参考文献[1]谭浩强C语言设计(第三版)清华大学出版社[2] 严蔚敏吴伟民数据结构(C语言版)清华大学出版社[3] 谭浩强 C++ 程序设计清华大学出版社[4]参考网址/manual/zh/function。

数据结构课程设计图书管理系统

数据结构课程设计图书管理系统

数据结构课程设计图书管理系统在当今数字化的时代,图书管理系统对于图书馆的高效运作和管理至关重要。

作为数据结构课程设计的一部分,设计一个功能齐全、操作便捷的图书管理系统,不仅能够巩固我们所学的数据结构知识,还能提高我们解决实际问题的能力。

一、需求分析一个完善的图书管理系统应具备以下基本功能:1、图书信息管理:包括图书的书名、作者、出版社、出版年份、ISBN 号、分类号、库存数量等信息的录入、修改、查询和删除。

2、读者信息管理:记录读者的姓名、性别、身份证号、联系电话、借阅证号、借阅记录等,同时支持读者信息的增删改查。

3、借阅管理:实现读者的借书、还书操作,能够记录借阅日期和应还日期,并自动计算逾期天数和罚款金额。

4、图书查询:提供多种查询方式,如按书名、作者、出版社、分类号等进行精确或模糊查询,以便读者快速找到所需图书。

5、统计分析:能够统计图书的借阅次数、热门图书排行、读者借阅情况等,为图书馆的管理决策提供数据支持。

二、数据结构选择为了实现上述功能,我们需要选择合适的数据结构来存储和管理图书和读者的信息。

1、图书信息和读者信息可以使用结构体数组来存储。

结构体可以包含图书或读者的各项属性,数组则方便进行批量操作和遍历。

2、对于图书的分类和索引,可以使用二叉查找树或哈希表。

二叉查找树可以保证有序性,便于中序遍历获取排序后的图书信息;哈希表则能够快速定位特定的图书或读者,提高查询效率。

3、借阅记录可以使用链表来存储,便于动态地添加和删除借阅信息。

三、系统功能模块设计1、登录模块系统管理员和读者分别拥有不同的登录入口和权限。

管理员可以进行所有操作,读者只能进行查询和借阅相关操作。

2、图书管理模块图书录入:管理员输入图书的详细信息,将其添加到图书信息数组中。

图书修改:根据图书的 ISBN 号或其他唯一标识,修改图书的相关信息。

图书删除:按照指定条件删除图书记录。

图书查询:提供多种查询条件,快速检索图书信息。

数据结构课程设计———图书馆管理系统

数据结构课程设计———图书馆管理系统

数据库原理及应用——图书馆管理系统数据库设计一.需求分析需求分析的任务是调查应用领域,对应用领域中各应用的信息要求和操作要求进行详细分析,形成需求分析说明书。

重点是调查,收集与分析用户在数据管理中的信息要求、处理要求、数据的安全性与完整性要求。

功能模块设计将图书管理系统业务分为四个大的方面:学生数据管理、图书征订管理、藏书管理、图书流通管理。

功能模块图功能模块分析办卡、挂失、注销学生在图书馆中必须持卡办理一切业务,新生必须首先办理借书卡,当借书卡丢失时需办理挂失业务,毕业生或中途退学者必须办理注销卡业务,以防止借书卡的流失。

查询、借书、环书、注销学生在图书馆中持卡可以进行以下业务:查询自己借书状态,借书,还书,当所借书籍丢失时需办理注销业务。

图书查询、缺书登记学生需要查询自己所需书籍时,若馆中有则直接借书;若馆中没有,可以进行缺书登记。

数据流程分析与设计数据流程图数据字典的建立数据字典数据字典是我在数据流程图中选取的一些中层数据流,我把我所抽去的数据列出以下表来。

数据项二.概念结构设计E-R图根据前面的需求分析,可以将图书管理系统数据库实体划分为图书信息实体集、学生信息实体集、馆藏地实体集、借书卡信息实体集、缺书信息实体集,各实体集里还包含不同的实体以下包括所有的实体。

学生:{学号,姓名,性别,年级,学院,专业,班级}图书:{条码号,书名,作者,出版社,定价,馆藏地编号,图书状态,借阅状态}馆藏地:{馆藏地编号,馆藏地名称}借书卡:{卡号,卡状态,学号}缺书:{书名,作者,出版社,定价,搜索频率}学生日常事务信息:{卡号,时间,欠书状态,超时罚款} E-R图三.逻辑结构设计概念模型向关系模型的转变将E-R图转换为关系模型,即将实体、实体的属性和实体之间的联系转化为关系模式,为应用程序建立专门的视图而不必要应用程序直接访问数据表关系模式的设计StudentBookJieyue(应还时间—借书时间)等于一个月PlaceRountin对时间的检查,当借还书中的还书时间小于应还时间时,超时罚款为零;当超过应还时间未还书时,开始计费,超时罚款=(时间-应还时间)*0.01;当借还书中的还书时间确定时,超时罚款=(还书时间-应还时间)*0.01。

数据结构图书管理系统实验报告

数据结构图书管理系统实验报告

竭诚为您提供优质文档/双击可除数据结构图书管理系统实验报告篇一:数据结构-图书管理系统实验报告数据结构课程设计报告课程名称_________题目名称学生学院专业班级学号学生姓名指导教师20XX年7月8日一、需求分析1.图书管理系统中图书管理模块包括图书类型定义:书号、现存量、总存量,出版时间为整型,定价为浮点型,书名、著者名为字符型,借阅指针、预约指针为读者类型;读者类型定义:证号为整型、姓名为字符型,另外借阅类型和预约类型组合成其中的共用体类型。

b树(2-3树)类型定义:关键字个数和关键字数组为整型、另外还有指向双亲的指针、指向子树的指针、记录单元指针;b树查找结果类型定义:节点指针、关键字序号和查找标志变量为整型。

2.演示程序以用户和计算机的对话方式进行,在计算机终端上显示“提示信息”之后,由用户在键盘上输入演示程序中规定的运算命令,相应的输入数据和运算结果显示在后面。

该演示系统,没有使用文件,全部数据放在内存存放。

四项基本业务都以书号为关键字进行的,采用了b树(2-3树)对书号建立索引,以提高效率。

3.图书管理系统实现功能:①采编入库:新书购入,将书号、书名、著者、册数、出版时间添加入图书账目中去,如果这种书在帐中已有,则只将总库存量增加,每新增一个书号则以凹入表的形式显示b树现状。

②清除库存:实现某本书的全部信息删除操作,每清除一个书号则已以凹入表的形式显示b树现状。

③图书借阅:如果书的库存量大于零时则执行出借,登记借阅者的图书证号和姓名,系统自动抓取当前借阅时间和计算归还时间。

④图书预约:如果某书库存为零,则记录预约者姓名和证号,系统自动抓取当前预约时间和取书时间。

⑤图书归还:注销借阅者信息,并改变该书的现存量。

⑥作者专区:输入作者名字,系统将查找相应作者全部著作并显示出来。

⑦图书信息:可以根据书号查阅此书基本信息、借阅信息和预约信息,亦可以查找全部图书基本信息。

二、概要设计1.抽象数据类型b树定义:ADTbTree{数据对象:D是具有相同特性的数据元素的集合。

数据结构上机实验之(图书管理)

数据结构上机实验之(图书管理)

数据结构实验报告实验题目:简单个人图书管理系统一.问题描述学生在自己的学习和生活中会有很多书籍(包括电子出版物),对所购买的书籍进行分类和统计是一种良好的习惯。

如果以文件来存储相关书籍的各种信息,包括分类、书名、作者、购买日期、价格、简介等,辅之以程序来使用这些文件,并加以维护,从而使图书管理工作变得轻松而有趣。

1.基本要求(1)能够以文件存储书籍的各种相关信息。

(2)提供查询工作:可按照一种或多种关键字查找需要的书籍;(3)提供排序功能:可按照一种或多种关键字对所有书籍进行排序,比如按价格进行排序,并输出排序结果。

(4)提供图书信息维护:初始化、增加、删除、修改、打印输出。

(5)提供登录认证工作:具有户头、密码认证。

(6)使用界面要适当美观、便捷。

二.算法分析1.整体设计图书管理系统的基本功能是借书与还书,并且包含图书与读者两个类及其数据库。

图书类的功能在于存放及维护图书的基本信息,包括图书编号,书名,在架情况等等。

图书数据库的功能在于实现对图书的相关操作,例如,增加图书,删除图书,更改图书,查找图书,显示图书等功能。

读者类的功能在于存放及维护读者的基本信息,例如读者编号,读者姓名,读者密码等等。

读者数据库的功能在于实现对读者的相关操作,包括增加读者,更改读者,删除读者,查找读者,显示读者信息等功能。

就此,主界面设计为(1)借书.(2)还书(3)图书信息管理(4)读者信息管理2.(1)系统层次结构图:(2)借书流程图:借书失败借书失败的情况为: 1. 读者编号不存在时; 2. 密码错误时; 3.图书不存在时;4. 图书已被借出时其余正常情况均为借书成功(3)还书流程图 还书失败还书失败的情况为:1.读者编号不存在时.。

2.图书不存在时.3.该图书已还回时其余正常情况均能还书成功.3.详细设计(部分).图书类Book{①私有成员:inttag;//是否存在判断:0:存在,1:已删int no;//图书编号char name[20];//书名intonshelf;//是否在架判断:0:已被借,1:在架②公有成员:void setname(char na[]);//设置书名;void delbook();//删除图书;void addbook(intn,char *na);//增加图书;intborrowbook();//借书;void retbook();//还书;void disp();//显示;}图书库类BDatabase{①私有成员:int top; //图书记录指针Book book[Maxb]; //图书记录②公有成员:BDatabase();//构造函数;~BDatabase();//析构函数;intaddbook(intn,char *na) //增加图书;Book *query(intbookid) // 排序;void disp() //显示;void bookdata();//图书信息管理的实现}读者类Reader{②私有成员:int tag; //是否存在判断:0:存在,1:已删int key;//读者密码;int no; //读者编号;char name[10]; //读者姓名;intborbook[Maxbor];读者记录;③公有成员:void setname(char na[]);//设置读者姓名void delreader();//删除读者void addreader(intn,char *na,int Key);//增加读者void borrowbook(intbookid);//读者借书intretbook(intbookid);//读者还书void disp();//显示读者}读者库类RDatabase:{①私有成员:int top; //读者记录指针;Reader read[Maxr];读者记录;②公有成员:RDatabase();//构造函数;~RDatabase();//析构函数;intaddreader(intn,char *na,int Key); //添加读者;Reader *query(intreaderid) ; //读者排序void disp(); //显示读者;readerdata();//读者信息管理的实现}三.主要实验结果:主页面图书信息维护:选择3进入图书信息管理主页面选择1 新增图书选择5 显示图书选择2 更改图书信息选择5,显示更改后的结果图书排序输出在依次输入编号为789,456的两本书后,选择7图书信息管理其他功能不赘言.读者信息管理:主页面选择4,进入读者信息管理主页面选择1,新增读者选择5,显示读者因为还未借书,所以借书编号为空选择4,查找读者选择3,删除读者删除后的信息显示:图书馆基本功能的实现1.借书:如果密码正确密码错误书已被借出时此时图书信息为读者信息为2.还书还书成功还书后图书信息为还书后再还相同的书如果读者编号不存在退出系统四.设计总结在选择这个实验题目后,我们小组经过多次对实验需求的讨论,并且到图书馆及网上查阅相关资料后,终于确定下来程序的主要结构。

数据结构课程设计图书管理系统

数据结构课程设计图书管理系统

数据结构课程设计图书管理系统Revised on November 25, 2020数据结构课程设计图书管理系统一需求分析该程序是模拟图书馆管理系统,实现图书采编入库、借书、还书、查询等基本业务。

此程序规定:(1) 管理员能够向系统中输入每种书的基本信息,包括书号、书名、作者、现存量和库存量、借阅记录,并保存记录;(2) 用户(读者)能够按书号、书名、作者查询图书信息;(3) 管理员能够实现图书采编入库(新购入一本书,经分类和确定书号之后登记到图书账目中去。

如果这种书在帐中已有,则只将总库存量增加)、借阅(如果书的现存量大于0,则借出一本,登记借阅者的图书证号和归还期限)、归还(删除对借阅者的登记,改变该书的现存量)、销毁(将图书从账目中删除)等操作。

二概要设计系统用到的抽象数据类型定义:1、ADT LinearList{数据元素:D={a i|a i∈D0,i=1,2,…,n,n≥0,D0为某一数据对象}关系:S={<a i,a i+1>|a i,a i+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) }ADT LinearList2、ADT String{数据对象:D={ai |ai∈CharacterSet,i=1,2,…,n;n≧0}数据关系:R={<ai-1,ai>|ai-1,ai∈D,i=2,…,n;n≧0}基本操作:(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)}ADT String系统中的子程序和功能说明:InitBo(Book &boo);初始化图书信息InitRe(lend &Lin);初始化借阅者信息BinarySearch(Book boo,char SearchNum[]);二分法查找比较书号Buy(Book &boo, char BuyNum[]);新书采编入库系统Delete(Book &boo,char DeleteNum[]);清除图书信息系统Borrow(Book &boo,lend &Lin,char BorrowNum[],char CaNum[]);借阅图书处理系统Return(Book &boo,lend &Lin,char ReturnNum[],char BorrowerNum[]);归还图书系统SearchByNum(Book &boo,char SeaNum[]);按书号查找系统SearchByName(Book &boo);按书名查找系统SearchByAuth(Book &boo);按作者查询系统Menu();主菜单显示系统Search();查询系统子菜单main();主函数●系统程序功能结构图三详细设计●功能实现过程bool BinarySearch(Book boo,char SearchNum[]) ext=NULL;total++;/*总量加1*/}}void Delete(Book &boo,char DeleteNum[])/*清除图书信息*/{if(书库中没有此书)输出“无此书”;if(书库中有此书){strcpy(连续两本书的相关信息);现存量减1;库存量减1;}else 输出“此书已有借阅者,无法删除!”;}void Borrow(Book &boo,lend &Lin,char BorrowNum[],char CaNum[])/*借阅图书信息*/{if(没有找到此书) 输出“书库中无此书!”;if(书库中有此书){借出一本书后,该书的现存量减1;并在借阅记录链表中插入该条记录;再对应读者信息记录链表,如果已有该读者证号信息,直接在该链表中插入此次借阅记录;如果无该读者证号信息,申请新单链表存放借阅记录。

数据结构课程设计图书管理系统实验报告

数据结构课程设计图书管理系统实验报告

Beijing Institute of PetrochemicalTechnology数据结构课程设计课程设计实验报告院(系、部): 信息工程学院姓名:计141范文虎指导教师签名:2016年6月29日·北京目录一.设计题目····································二.设计目的····································三.实验分工····································四.算法思想分析································五.算法描述实现································1。

数据结构——图书管理系统

数据结构——图书管理系统

石河子大学信息科学与技术学院计算机科学与技术专业课程设计报告二、结构图1.功能结构图2.主流程图图书管理系统新增图书信息的输入查询在架的图书信息恢复被删除图书信息为读者办理借书注册办理借书手续办理还书手续退出系统三、程序设计的想法和具体思路图书管理系统分为图书管理和会员管理两大部分。

设计一个图书类Book ,包括一本图书的基本管理功能,具有以下私有数据:int tag;//删除标记 1:已删 0:未删int no;//图书编号 char name[20];//书名int onshelf;//是否再架 1:再架 2:已借设计一个图书库类BDatabase ,具有以下私有数据:让用户选择要实行的操作.设置选择变量choiceStart输出提示借书 功能 Choice=1 还书 功能 Choice=2 图书 维护 Choice=3 读者 维护 Choice=4 退出 系统 Choice=0StopChoice =‘其它数值’提示输入错误int top; //图书记录指针Book book[Maxb]; //图书记录在其构造函数中,将bo ok.txt文件的所有录入读到book[]中。

处理完毕,在析构函数中将book[]中的所有未删除记录笑道book.txt文件中,中间的处理是对book[]进行的。

设计一个读者类Reader,包括一个读者的基本管理功能,具有以下私有数据:int tag; //删除标记 1:已删 0:未删int no; //读者编号char name[10]; //读者姓名int borbook[Maxbor];//所借图书设计一个读者库类RDatabase,具有以下私有数据:int top; //读者记录指针Reader read[Maxr];//读者记录在其构造函数中,将reader.txt文件的所有记录读到read[]中。

处理完毕,在析构函数中将read[]中的所有未删除记录写到reader.txt文件中,中间的处理都是对reader[]进行的。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

电子科技大学教务处制表实验报告学生姓名:学号:指导教师:陈昆实验地点:计算机学院楼307实验时间:2010年6月9日一、实验室名称:计算机学院楼307二、实验项目名称:三、实验学时:4学时四、实验原理:五、实验目的:六、实验内容:创建一个图书管理系统(包括每本书的编号、书名、作者、分类信息),程序采用交互式工作方式,流程如下:书籍管理:完成增加新书籍和删除功能,并在完成操作之后按关键字(编号、书名、作者、种类)进行排序(插入、冒泡、快速、堆排序、归并排序等任选一种);现有如下书籍需要管理编号书名作者分类001 Gao Deng Shu Xue Zhang San S01002 Li Lun Li Xue Li Si L01003 Gao Deng Shu Xue Wang Wu S01004 Xian Xing Dai Shu Zhao Liu S02005 Shu Ju Jie Gou Zhou Qi J01006 Shu Ju Ku Zhou Qi J02007 Shu Ju Jie Gou Sun Ba J01008 Shu Ju Jie Gou Zhang Jiu J01书籍查找:用二分法实现下述功能①按编号查找②按书名查找③按作者查找④按分类查找七、实验器材(设备、元器件):pc硬件要求:CPU PII 以上,64M 内存,1OOM 硬盘空间即可。

软件要求:DOS3.0以上/Windows98/Me/XP/NT/2000。

八、实验步骤:九、实验数据及结果分析:十、实验结论:十一、总结及心得体会:十二、对本实验过程及方法、手段的改进建议:报告评分:指导教师签字:实验源代码如下:#include<stdio.h>#include<string.h>int BOOKNUM; //将书的数目定为全局变量,便于增加和删除时更改const int MAXNUM=500; //最大容纳书的数目typedef struct BookInfo{ //定义书的结构体char num[4];char name[50];char author[50];char sort[4];}BookInfo;void InitBookList(BookInfo BookList[]) //初始化,本书,乱序{BOOKNUM=8;strcpy(BookList[3].num,"001");strcpy(BookList[3].name,"Gao Deng Shu Xue");strcpy(BookList[3].author,"Zhang San");strcpy(BookList[3].sort,"S01");strcpy(BookList[1].num,"002");strcpy(BookList[1].name,"Li Lun Li Xue");strcpy(BookList[1].author,"Li Si");strcpy(BookList[1].sort,"L01");strcpy(BookList[5].num,"003");strcpy(BookList[5].name,"Gao Deng Shu Xue");strcpy(BookList[5].author,"Wang Wu");strcpy(BookList[5].sort,"S01");strcpy(BookList[4].num,"004");strcpy(BookList[4].name,"Xian Xing Dai Shu");strcpy(BookList[4].author,"Zhao Liu");strcpy(BookList[4].sort,"S02");strcpy(BookList[7].num,"005");strcpy(BookList[7].name,"Shu Ju Jie Gou");strcpy(BookList[7].author,"Zhou Qi");strcpy(BookList[7].sort,"J01");strcpy(BookList[2].num,"006");strcpy(BookList[2].name,"Shu Ju Ku");strcpy(BookList[2].author,"Zhou Qi");strcpy(BookList[2].sort,"J02");strcpy(BookList[6].num,"007");strcpy(BookList[6].name,"Shu Ju Jie Gou");strcpy(BookList[6].author,"Sun Ba");strcpy(BookList[6].sort,"J01");strcpy(BookList[0].num,"008");strcpy(BookList[0].name,"Shu Ju Jie Gou");strcpy(BookList[0].author,"Zhang Jiu");strcpy(BookList[0].sort,"J01");}void ShowBookInfo(BookInfo book) //显示一本书的信息{printf("编号:%s\n",book.num);printf("书名:%s\n",);printf("作者:%s\n",book.author);printf("分类:%s\n",book.sort);}void SortOnNum(BookInfo BookList[]) //按编号排序{int i,j;BookInfo temp;for (i=1;i<BOOKNUM;i++){temp=BookList[i];for(j=i-1;j>=0;j--){if(strcmp(temp.num,BookList[j].num)<0) BookList[j+1]=BookList[j];else break;}BookList[j+1]=temp;}}int FindOnNum(BookInfo BookList[],char key[]) //以编号为关键字进行二分查找{int low=0,high=BOOKNUM-1,mid;while (low<=high){mid=(low+high)/2;if(strcmp(key,BookList[mid].num)==0)return mid;else if(strcmp(key,BookList[mid].num)<0)high=mid-1;else low=low+1;}return -1;}void FindOnName(BookInfo BookList[],char key[]) //以书名为关键字查找{int i,j=0;for (i=0;i<BOOKNUM;i++){if(strcmp(BookList[i].name,key)==0){j++;printf("满足该关键字的第%d本图书的详细信息如下:\n",j);ShowBookInfo(BookList[i]);}if(i==BOOKNUM-1&&j==0){printf("抱歉,暂无此图书\n");break;}}}void FindOnAuthor(BookInfo BookList[],char key[]) //以作者为关键字查找{int i,j=0;for (i=0;i<BOOKNUM;i++){if(strcmp(BookList[i].author,key)==0){j++;printf("满足该关键字的第%d本图书的详细信息如下:\n",j);ShowBookInfo(BookList[i]);}if(i==BOOKNUM-1&&j==0){printf("抱歉,暂无此图书\n");break;}}}void FindOnSort(BookInfo BookList[],char key[]) //以分类为关键字查找{int i,j=0;for (i=0;i<BOOKNUM;i++){if(strcmp(BookList[i].sort,key)==0){j++;printf("满足该关键字的第%d本图书的详细信息如下:\n",j);ShowBookInfo(BookList[i]);}if(i==BOOKNUM-1&&j==0){printf("抱歉,暂无此图书\n");break;}}}void InsertBook(BookInfo BookList[],BookInfo NewBook) //增加书目{int i=0,j;if(BOOKNUM>MAXNUM) printf("ERROR!");while(strcmp(NewBook.num,BookList[i].num)>0&&i<BOOKNUM) i++;for(j=BOOKNUM-1;j>=i;j--) BookList[j+1]=BookList[j];BookList[i]=NewBook;BOOKNUM++;}BookInfo DeleteBook(BookInfo BookList[],char num[]) //删除书目{int i=0,j;BookInfo db;strcpy(db.num,"000");if (BOOKNUM<=0) return db;while ((strcmp(BookList[i].num,num)!=0)&&(i<BOOKNUM)) i++;if(i==BOOKNUM) return db;db=BookList[i];//用db存储待删除元素以便返回,可避免被后续操作覆盖掉而返回错误结果for (j=i;j<BOOKNUM;j++) BookList[j]=BookList[j+1];BOOKNUM--;return db;}void ShowBookListInfo(BookInfo BookList[]) //显示现有图书清单{int i;printf(" Information of the books\n");printf("*********************************************************\n");printf("%-10s","编号");printf("%-30s","书名");printf("%-30s","作者");printf("分类");printf("\n");for (i=0;i<BOOKNUM;i++){printf("%-10s",BookList[i].num);printf("%-30s",BookList[i].name);printf("%-30s",BookList[i].author);printf("%s\n",BookList[i].sort);}}int main(void) //主函数{int n;BookInfo BookList[MAXNUM];InitBookList(BookList); //初始化top: ;//跳转开关do{ //交互式菜单定义printf("请选择您要执行的功能:\n");printf("1.显示现有书目信息\n");printf("2.将书目按编号排序\n");printf("3.增加书目\n");printf("4.删除书目\n");printf("5.查找书目\n");printf("6.退出本系统\n");scanf("%d",&n);switch (n){case 1:{//1.显示现有书目信息ShowBookListInfo(BookList);break;}case 2:{//2.将书目按编号排序SortOnNum(BookList);printf("排序后书目信息如下:\n");ShowBookListInfo(BookList);break;}case 3:{//3.增加书目BookInfo NewBook;printf("请输入新增书目信息:\n");fflush(stdin);printf("编号:"); gets(NewBook.num);printf("书名:"); gets();printf("作者:"); gets(NewBook.author);printf("分类:"); gets(NewBook.sort);InsertBook(BookList,NewBook);printf("新增后书目信息如下:\n");ShowBookListInfo(BookList);break;}case 4:{//4.删除书目char num[4];BookInfo db;printf("请输入您要删除书目的编号:"); scanf("%s",num);db=DeleteBook(BookList,num);if(strcmp(db.num,"000")!=0){printf("您要删除的书目信息为:\n");ShowBookInfo(db);printf("删除后书目信息如下:\n");ShowBookListInfo(BookList);}elseprintf("输入错误,没有此图书!\n");break;}case 5:{//5.查找书目repeat: ;printf("请输入您要查找的关键字类型:\n");printf("1.编号\n");printf("2.书名\n");printf("3.作者\n");printf("4.分类\n");int m,i;scanf("%d",&m);if(m>4||m<1){printf("您的输入有误,请核实后重新输入:\n");goto repeat;}switch(m){case 1:{//1.按编号查找char num[4];fflush(stdin);printf("请输入要查询的书目编号(xxx):");gets(num);i=FindOnNum(BookList,num);if(i<0){printf("抱歉,暂无此图书\n");break;}else{printf("该图书的详细信息如下:\n");ShowBookInfo(BookList[i]);}break;}case 2:{//2.按书名查找char name[100];fflush(stdin);printf("请输入要查询的书目名称:");gets(name);FindOnName(BookList,name);}case 3:{ //3.按作者查找char author[50];fflush(stdin);printf("请输入要查询的书目作者:");gets(author);FindOnAuthor(BookList,author);}case 4:{ //4.按分类查找char sort[4];fflush(stdin);printf("请输入要查询的书目分类(xxx):");gets(sort);FindOnSort(BookList,sort);}}}case 6: break; //6.退出本系统default:{printf("\n对不起,请输入有效的排序选项(从-6选择)!!\n");goto top;}}}while(n!=6);return 0;}。

相关文档
最新文档