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

数据结构课程设计图书管理系统在当今数字化的时代,图书管理系统对于图书馆的高效运作和管理至关重要。
作为数据结构课程设计的一部分,设计一个功能齐全、操作便捷的图书管理系统,不仅能够巩固我们所学的数据结构知识,还能提高我们解决实际问题的能力。
一、需求分析一个完善的图书管理系统应具备以下基本功能:1、图书信息管理:包括图书的书名、作者、出版社、出版年份、ISBN 号、分类号、库存数量等信息的录入、修改、查询和删除。
2、读者信息管理:记录读者的姓名、性别、身份证号、联系电话、借阅证号、借阅记录等,同时支持读者信息的增删改查。
3、借阅管理:实现读者的借书、还书操作,能够记录借阅日期和应还日期,并自动计算逾期天数和罚款金额。
4、图书查询:提供多种查询方式,如按书名、作者、出版社、分类号等进行精确或模糊查询,以便读者快速找到所需图书。
5、统计分析:能够统计图书的借阅次数、热门图书排行、读者借阅情况等,为图书馆的管理决策提供数据支持。
二、数据结构选择为了实现上述功能,我们需要选择合适的数据结构来存储和管理图书和读者的信息。
1、图书信息和读者信息可以使用结构体数组来存储。
结构体可以包含图书或读者的各项属性,数组则方便进行批量操作和遍历。
2、对于图书的分类和索引,可以使用二叉查找树或哈希表。
二叉查找树可以保证有序性,便于中序遍历获取排序后的图书信息;哈希表则能够快速定位特定的图书或读者,提高查询效率。
3、借阅记录可以使用链表来存储,便于动态地添加和删除借阅信息。
三、系统功能模块设计1、登录模块系统管理员和读者分别拥有不同的登录入口和权限。
管理员可以进行所有操作,读者只能进行查询和借阅相关操作。
2、图书管理模块图书录入:管理员输入图书的详细信息,将其添加到图书信息数组中。
图书修改:根据图书的 ISBN 号或其他唯一标识,修改图书的相关信息。
图书删除:按照指定条件删除图书记录。
图书查询:提供多种查询条件,快速检索图书信息。
数据结构课程设计———图书馆管理系统

数据库原理及应用——图书馆管理系统数据库设计一.需求分析需求分析的任务是调查应用领域,对应用领域中各应用的信息要求和操作要求进行详细分析,形成需求分析说明书。
重点是调查,收集与分析用户在数据管理中的信息要求、处理要求、数据的安全性与完整性要求。
功能模块设计将图书管理系统业务分为四个大的方面:学生数据管理、图书征订管理、藏书管理、图书流通管理。
功能模块图功能模块分析办卡、挂失、注销学生在图书馆中必须持卡办理一切业务,新生必须首先办理借书卡,当借书卡丢失时需办理挂失业务,毕业生或中途退学者必须办理注销卡业务,以防止借书卡的流失。
查询、借书、环书、注销学生在图书馆中持卡可以进行以下业务:查询自己借书状态,借书,还书,当所借书籍丢失时需办理注销业务。
图书查询、缺书登记学生需要查询自己所需书籍时,若馆中有则直接借书;若馆中没有,可以进行缺书登记。
数据流程分析与设计数据流程图数据字典的建立数据字典数据字典是我在数据流程图中选取的一些中层数据流,我把我所抽去的数据列出以下表来。
数据项二.概念结构设计E-R图根据前面的需求分析,可以将图书管理系统数据库实体划分为图书信息实体集、学生信息实体集、馆藏地实体集、借书卡信息实体集、缺书信息实体集,各实体集里还包含不同的实体以下包括所有的实体。
学生:{学号,姓名,性别,年级,学院,专业,班级}图书:{条码号,书名,作者,出版社,定价,馆藏地编号,图书状态,借阅状态}馆藏地:{馆藏地编号,馆藏地名称}借书卡:{卡号,卡状态,学号}缺书:{书名,作者,出版社,定价,搜索频率}学生日常事务信息:{卡号,时间,欠书状态,超时罚款} E-R图三.逻辑结构设计概念模型向关系模型的转变将E-R图转换为关系模型,即将实体、实体的属性和实体之间的联系转化为关系模式,为应用程序建立专门的视图而不必要应用程序直接访问数据表关系模式的设计StudentBookJieyue(应还时间—借书时间)等于一个月PlaceRountin对时间的检查,当借还书中的还书时间小于应还时间时,超时罚款为零;当超过应还时间未还书时,开始计费,超时罚款=(时间-应还时间)*0.01;当借还书中的还书时间确定时,超时罚款=(还书时间-应还时间)*0.01。
数据结构课程设计图书管理系统

数据结构课程设计图书管理系统设计图书管理系统一、引言图书管理系统是为了方便图书馆进行图书的管理、借阅和归还而开发的软件系统。
本文将详细介绍设计一个图书管理系统所需的标准格式文本。
二、系统概述本图书管理系统旨在提供一个高效、便捷的图书管理平台,帮助图书馆实现图书的分类、借阅、归还、查询等功能。
系统主要包括以下模块:图书管理模块、借阅管理模块、读者管理模块、系统管理模块。
三、图书管理模块1. 图书录入功能a. 系统管理员可以录入新书籍的相关信息,包括书名、作者、出版社、ISBN 号、价格等。
b. 系统应提供图书信息的校验功能,确保录入的图书信息准确无误。
c. 系统应提供图书封面图片上传功能,以便读者更直观地了解图书。
2. 图书查询功能a. 读者和管理员可以根据关键字、作者、出版社等条件进行图书查询。
b. 系统应提供模糊查询和精确查询两种方式,以满足不同用户的需求。
3. 图书借阅功能a. 读者可以通过系统查询图书的借阅情况,并选择借阅。
b. 系统应记录借阅信息,包括借阅时间、归还时间等。
4. 图书归还功能a. 读者在归还图书时,系统应自动计算借阅天数,并生成相应的借阅费用。
b. 系统应提供归还图书的操作记录,以便管理员查看。
四、借阅管理模块1. 借阅记录查询功能a. 管理员可以查询所有借阅记录,并根据条件进行筛选。
b. 系统应提供按照借阅时间、归还时间等进行排序的功能,方便管理员进行统计分析。
2. 借阅统计功能a. 系统应提供借阅数量、借阅率等统计功能,方便管理员对图书馆的借阅情况进行分析。
五、读者管理模块1. 读者注册功能a. 读者可以通过系统进行注册,并填写个人信息。
b. 系统应提供校验功能,确保读者信息的准确性。
2. 读者信息修改功能a. 读者可以通过系统修改个人信息,如联系方式、密码等。
3. 读者信息查询功能a. 读者可以查询自己的借阅记录、借阅情况等。
六、系统管理模块1. 管理员管理功能a. 系统管理员可以管理其他管理员的账号和权限。
数据结构上机实验之(图书管理)

数据结构实验报告实验题目:简单个人图书管理系统一.问题描述学生在自己的学习和生活中会有很多书籍(包括电子出版物),对所购买的书籍进行分类和统计是一种良好的习惯。
如果以文件来存储相关书籍的各种信息,包括分类、书名、作者、购买日期、价格、简介等,辅之以程序来使用这些文件,并加以维护,从而使图书管理工作变得轻松而有趣。
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;并在借阅记录链表中插入该条记录;再对应读者信息记录链表,如果已有该读者证号信息,直接在该链表中插入此次借阅记录;如果无该读者证号信息,申请新单链表存放借阅记录。
数据结构课程设计——图书管理信息系统

图书管理信息系统一、课程设计题目:图书管理信息系统二、课程设计内容:实现图书管理信息系统的设计。
这是一个数据结构的综合使用,涉及的知识比较全面,特别是对文件的使用更为全面。
进入系统后,操作员可进行系统维护、读者管理、图书管理、图书流通、退出系统等操作。
系统维护:有“初始化”和“读盘”两个重要操作。
第一次开始运行时,必须选择“初始化”,使有关文件指针、计数器等初始化为0;而在以后的每次操作开始时,选择“读盘”,将保存过的相关图书信息磁盘文件读入,以便进行各类操作。
读者管理:可实现读者信息的追加一项输入。
需要输入读者号、读者名、可借书数。
输入“y”可连续输入信息,若输入“n”则结束输入,退出读者管理。
图书管理:有“图书信息输入”和“图书信息查询”两个重要操作。
若选“图书信息输入”,就进入相关子模块,在输入信息的同时建立相应的索引及索引文件和索引链头文件,输入书号、书名、作者名、出版社、分类号、藏书量等信息,根据提示输入“y”实现连续输入,若输入“n”则结束输入,退出图书管理;有了图书信息数据之后,就可以进行图书信息的查询以及图书借阅等操作了。
若选“图书信息查询”,可根据提示按书号、书名、作者、出版社等进行查询,系统会将查询结果输出。
图书流通:有“借书处理”和“还书处理”两个重要操作。
当选择“借书处理”,系统接受输入信息后,首先查询读者文件。
若没查到,显示“非法读者!”,若查到,则再检查该读者书是否已借满,如果未借满,则继续检查图书文件;否则显示“书已借满!”。
检查图书文件如发现书号不存在或书已借出,都会提示读者“非法书号!”或“书已借出”,否则,进行借出处理,修改借阅文件、读者文件以及图书主文件的相关数据项,并显示“借书成功!”。
当选择“还书处理”,系统在接受输入信息之后,首先用书号查询借还书文件,若找到,则填入还书日期,然后再用书号查询图书主文件,修改借出数,用读者号查找读者文件,修改读者的借书数,而后显示“还书成功!”,否则显示“非法书号!”并返回主控菜单。
数据结构课程设计图书管理系统实验报告

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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
电子科技大学教务处制表实验报告学生姓名:学号:指导教师:陈昆实验地点:计算机学院楼307实验时间:2010年6月9日一、实验室名称:计算机学院楼307二、实验项目名称:三、实验学时:4学时四、实验原理:五、实验目的:六、实验内容:创建一个图书管理系统(包括每本书的编号、书名、作者、分类信息),程序采用交互式工作方式,流程如下:书籍管理:完成增加新书籍和删除功能,并在完成操作之后按关键字(编号、书名、作者、种类)进行排序(插入、冒泡、快速、堆排序、归并排序等任选一种);现有如下书籍需要管理①按编号查找②按书名查找③按作者查找④按分类查找七、实验器材(设备、元器件):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;}。