数据结构实验图书管理系统
- 格式:doc
- 大小:130.50 KB
- 文档页数:10
数据结构课程设计图书管理系统在当今数字化的时代,图书管理系统对于图书馆的高效运作和管理至关重要。
作为数据结构课程设计的一部分,设计一个功能齐全、操作便捷的图书管理系统,不仅能够巩固我们所学的数据结构知识,还能提高我们解决实际问题的能力。
一、需求分析一个完善的图书管理系统应具备以下基本功能: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[]进行的。
数据结构课程设计课程设计实验报告院(系、部): 信息工程学院 姓 名: 计141范文虎指导教师签名:2016年 6月29日·北京Beijing Institute of PetrochemicalTechnology目录一.设计题目····································二.设计目的····································三.实验分工····································四.算法思想分析································五.算法描述实现································1.数据结构类型定义2.算法流程图3.程序代码六.运行结果····································七.结论········································一.设计题目图书管理基本业务模拟图书管理一般包括图书采编、图书编目、图书查询及图书流通(借、还书)等基本业务。
实验四图书管理系统姓名:任子龙学号:1120140167 班级:05111451一。
需求分析(1)问题描述有一个小型书库保管了大量图书,关于图书有大量信息需要处理,这些信息包括图书的分类、书名、作者名、购买日期、价格等。
现要求编写一个程序以便于对图书的管理。
(2)基本要求:a.建立图书信息.b.提供查找功能,按照多种关键字查找需要的书籍。
例如按书名查找,输入书名后,将显示出该图书的所有信息,或显示指定信息。
c.提供排序功能,按照多种关键字对所有的书籍进行排序,例如按出版日期进行排序。
d.提供维护功能,可以对图书信息进行添加、修改、删除等功能。
(3)数据结构与算法分析将每一本书看作是一个基本单元。
由于涉及添加、修改操作,这里使用了链表作为数据存储结构;同时,考虑到排序功能,尝试使用双向链表。
其中,每本书作为一个结点,数据域包含char 型变量,指针域含有左右指针left和right。
二.概要设计1。
抽象数据类型的定义为实现上述功能,程序中使用了双向链表,只需要定义一种数据类型:typedef struct book{char number[10];char title[20];char author[10];char date[15];char price[10];struct book *right;struct book *left;}BK;注意结点的指针域有left和right两个。
2.本程序包含两个模块(1)主程序模块主函数只包含了Menu_select()函数。
目的是进入主菜单界面,进行功能选择;直到输入操作码0,退出系统;(2)双向链表单元模块——实现书籍信息的链式存储的抽象数据类型.各函数之间的调用关系:三。
详细设计1。
结点类型typedef struct book{char number[10];char title[20];char author[10];char date[15];char price[10];struct book *right;struct book *left;}BK;2.子函数(1)功能菜单调用函数Menu_select()使用户进入主菜单界面,进行功能选择;先进入无限循环,输入操作码进行系统管理工作,直到输入操作码0,退出系统;(2)各种功能函数Initialize()//初始化图书系统信息;Insert()//添加新的图书信息;Sort()//对图书进行排序,本程序可以实现按“图书编号”、“出版日期"、“图书价格”多种关键字进行排序;Search()//实现对图书的查找功能,本程序可以实现按“图书编号"、“出版日期”、“图书价格”多种关键字进行查找;deletebook()//删除无效的图书信息;Print_book()//打印全部图书信息。
一.实验目的巩固和加深对数据结构的理解,通过上机实验、调试程序,加深对课本知识的理解,最终使学生能够熟练应用数据结构的知识写程序。
通过本课程的学习,能熟练掌握几种基本数据结构的基本操作。
针对给定题目,选择相应的数据结构,分析并设计算法,进而给出问题的正确求解过程并编写代码实现。
二.实验内容图书管理系统主要完成以下几方面的功能:输入信息——enter();显示信息———display( );查找以书名作为关键字———search( );删除信息———delete( );存盘———save ( );装入———load( ) ;三.实验步骤(可选)1.数据结构设计:添加,查找,删除图书信息,用链式存储比较方便,由于查找,删除都是以书名或电话号码为关键字进行的,因此要用到双向链表,效率高,以实现各种功能。
由此重点和难点是双向链表的建立,查找,删除等基本操作。
2.算法的设计流程图:3.主要函数代码:dlink *enter(dlink *h);// 输入图书信息函数int menu_select();//菜单选择函数dlink *add(dlink *h);//增加读者信息函数void search(dlink *h) ;//查找图书函数dlink *deletebyB_name(dlink *h);// 以书名为关键字删除dlink *deletebyno(dlink *h) ;//以图书编号为关键字删除void output(dlink *h);// 输出图书信息函数void searchbyB_name(dlink *h) //按书名查找void searchbyno(dlink *h) //按编号查找void save(dlink *h) //保存图书信息到文件struct information{string B_name;string B_author;string B_no;string B_pub;string B_sum;};struct information a[120]; //建立图书信息结构体typedef struct doublelink //定义双向链表{struct information data;struct doublelink *Llink,*Rlink;}dlink;dlink *enter(dlink *h) //输入图书信息函数{ dlink *head,*r,*p,*q;head=h;r=h;q=h->Rlink;system("cls");//新建用户信息p=new dlink;cout<<"\n\t\t**************** 请输入图书信息****************"<<endl;cout<<"请输入书名:"<<endl;cin>>p->data.B_name;cout<<"请输入作者名: "<<endl;cin>>p->data.B_author;cout<<"请输入编号名: "<<endl;cin>>p->data.B_no;cout<<"请输入出版社: "<<endl;cin>>p->data.B_pub;cout<<"请输入馆藏量名: "<<endl;cin >>p->data.B_sum;p->Rlink=NULL;while(q!=NULL){r=q;q=q->Rlink;}p->Llink=r;r->Rlink=p;r=p;num++;char z;cout<<" 是否要继续插入新图书信息? (Y/N):"<<endl;cin>>z;if((z=='y')||(z=='Y'))head=insert(head);return head;}void searchbyB_name(dlink *h) //按书名查找{if(num==0){cout<<"\n\t当前通讯录没有任何联系人信息!!!"<<endl;cout<<"\n\t\t\t*****无法执行查找操作!!!!******"<<endl;cout<<endl;}else{dlink *head,*p,*q;string nam;head=h;p=h->Rlink;int i,j=1,k=1,mark=0;system("cls");cout<<"请输入要查找的图书书名:"<<endl;cin>>nam;for(i=k;i<=num;i++,p=p->Rlink){while(p&&p->data.B_name!=nam){q=p;p=p->Rlink;j++;}if(p){cout<<"您要查找的图书信息为:"<<endl;cout<<"*************************************************************************** ****"<<endl;cout<<"\n\t书名: "<<p->data.B_name<<endl;cout<<"\n\t作者名: "<<p->data.B_author<<endl;cout<<"\n\t编号名: "<<p->data.B_no<<endl;cout<<"\n\t出版社: "<<p->data.B_pub<<endl;cout<<"\n\t馆藏量: "<<p->data.B_sum<<endl;cout<<"*************************************************************************** ****"<<endl;cout<<endl;mark=1;if(p->Rlink==NULL){cout<<"\n\t已无重名信息"<<endl;cout<<"\n\t您是否继续下一个查找???(Y/N)"<<endl;char z;cin>>z;if((z=='y')||(z=='Y'))search(head);else break;}}if(p==NULL){if(mark==1){if(q->data.B_name!=nam){cout<<"\n\t已无重名信息"<<endl;cout<<"\n\t您是否继续下一个查找???(Y/N)"<<endl;char z;cin>>z;if((z=='y')||(z=='Y'))search(head);else break;}}else{cout<<"\n\t\t^^^^^搜索的图书不存在!!!!!^^^^^^"<<endl;cout<<endl;cout<<"\n\t您是否继续下一个查找???(Y/N)"<<endl;char z;cin>>z;if((z=='y')||(z=='Y'))search(head);else break;;}}dlink *deletebyB_name(dlink *h) //按书名删除图书信息{dlink *head,*p,*q;if(num==0){ cout<<"\n\t\t当前通讯录没有任何联系人信息!!!"<<endl;cout<<"\n\t\t\t\t删除操作无法执行!!!!!!!!!"<<endl;}else{string nam;int flag=1,k=1,i,j=1;head=h;p=h->Rlink;system("pause");system("cls");cout<<"请输入要删除的图书书名:"<<endl;cin>>nam;for(i=k;i<=num;i++,p=p->Rlink){while(p&&p->data.B_name!=nam){q=p;p=p->Rlink;j++;} //whileif(p) //waiif{cout<<"您要删除的图书信息为:"<<endl;cout<<"weiyu"<<j+1<<"weizhi"<<endl;cout<<"*************************************************************************** ****"<<endl;cout<<"\n\t书名: "<<p->data.B_name<<endl;cout<<"\n\t作者名: "<<p->data.B_author<<endl;cout<<"\n\t编号名: "<<p->data.B_no<<endl;cout<<"\n\t出版社: "<<p->data.B_pub<<endl;cout<<"\n\t馆藏量: "<<p->data.B_sum<<endl;cout<<"*************************************************************************** ****"<<endl;char z;cout<<"您确定要删除该图书信息吗?(Y/N)"<<endl;cin>>z;if((z=='y')||(z=='Y')){if(num==1){p->Llink->Rlink=NULL;free(p);num--;}elseif(p->Llink==head){ p->Rlink->Llink=head;p->Llink->Rlink=p->Rlink;free(p);num--;}else if(p->Rlink==NULL){p->Llink->Rlink=NULL;free(p);num--;}else{ p->Rlink->Llink=p->Llink;q->Rlink=p->Rlink;free(p);num--;}cout<<"\n\t\t已删除成功!"<<endl;break;/*char s;cout<<"\n您是否继续删除相同书名的图书???(Y/N)"<<endl;cin>>s;if((s=='y')||(s=='Y'))continue;else break; */}else {cout<<"\n\t已放弃删除!!"<<endl;//有问题char d;cout<<"\n您是否继续删除相同书名的图书???(Y/N)"<<endl;cin>>d;if((d=='y')||(d=='Y'))continue;else break;}}//waiifelse {cout<<"没有此图书信息"<<endl;char a;cout<<"\n您是否要继续删除???(Y/N)"<<endl;cin>>a;if((a=='y')||(a=='Y'))head=deletebyB_name(head);elsebreak;}}//for}//elsecout<<endl;return head;}//wai四.实验的结果及分析。
广东某某学院《数据结构课程设计》题目:图书馆管理系统学号:姓名:年级:学院:专业:指导教师:目录一、问题描述与基本要求1.1问题描述1.2基本要求二、数据结构的设计2.1数据结构的选择三、软件模块结构图3.1大体模块关系图3.2各模块具体分析四、程序流程图五、源程序六、调试分析6.1程序错误修改及完善的过程6.2最终程序所有功能运行结果6.3测试数据七、用户使用手册八、心得体会一、问题描述与基本要求1.1问题描述设计一个计算机管理系统完成图书管理基本业务。
1.2基本要求1、每种书的登记内容包括书的编号、书名、著作者、现存量、库存量、书证号和归还日期。
2、建立空链表,以提高查找效率3、系统功能如下:图书入库:新购一种书,确定书号后,登记到图书账目表中,如果表中已有,则只将库存量增加;借阅:如果一种书的现存量大于0,则借出一本,登记借阅者的书证号和归还期限,改变现存量;归还:注销对借阅者的登记,改变该书的现存量。
二、数据结构设计2.1数据结构的选择用单链表的结构,通过编写相应功能函数来实现建立新结点、删除结点、修改结点中数据域的内容、输出结点数据域中的内容等功能。
2.2单链表的定义先定义单链表结点的数据域,数据域包括书的编号、书名、作者、现存量、库存量、书证号和归还日期;链表结点包括结点数据域和结点链域,最后再定义指向链表结点的指针。
以下为单链表的相关定义:typedef struct bookdata//定义结点数据域{int id;//书的编号char title[15];//书名char author[6];//作者int count;//现存量int stock;//库存量char figure[20];//书证号char deadline[10];//归还时期}bookdata;typedef struct node//定义链表结点{bookdata Data;//结点数据域struct node *next;//结点链域}booknode;typedef booknode *booklist;//指向链表结点的指针2.3重要函数的定义及说明1、void initlist(booklist &l)//建立空链表2、void insertlist(booklist &l)//插入链表结点,实现登陆功能(需要输入书的编号,以确定登陆书名)3、void deletelist(linklist &l)//删除链表结点,实现删除功能(需要输入书的编号,以确定删除的书名)4、void find(booklist l)//查找书的编码,实现查找功能(需要输入书的编号,以确定查找的书名)5、void lend(booklist l)//借阅图书,实现借阅功能(需要输入书的编号,以确定借阅的书名)6、void dele(booklist l)//删除录入借书的信息,实现删除录入借书的功能(需要输入书的编号,以确定删除录入的书名)7、void add(booklist l)//查找有没有相同的书籍8、void begin()//开始进入图书管理系统9、void Introduction()//介绍图书管理系统的功能10、void About()//图书管理系统的相关开发内容11、void welcome()//欢迎进入图书管理系统以下为重要函数的定义;void initlist(booknode *&l)//建立空链表{l=new booknode;l->next=NULL;}void insert(booknode *&l)//图书馆添加书籍(定刚开始图书馆零本书){booknode *q;booknode *p=l;int k=1;for(;p->next!=NULL;p->next){}//移动指针找到最后一个节点while(k==1){q=new booknode;cout<<"请输入书的编号(书号为0结束):"<<endl;cin>>q->id;if(p->id!=0){cout<<"请输入书名"<<endl;cin>>q->title;cout<<"请输入作者"<<endl;cin>>q->author;cout<<"请输入图书数量"<<endl;cin>>q->stock;q->next=p->next;p->next=q;}cout<<"请输入是否继续(1.继续/0.退出)"<<endl;cin>>k;}}void find(booknode *&l)//查找书的编码{int x,mark=0;booknode *p=l;cout<<"请输入该书的编号"<<endl;cin>>x;for(;p!=NULL;p=p->next){if(p->id==x){cout<<"查找成功!"<<endl;cout<<"此书的名称为:"<<p->title<<endl;cout<<"此书的作者是:"<<p->author<<endl;cout<<"此书的数量为:"<<p->stock<<endl;mark=1;}}if(mark==0){cout<<"对不起,图书馆没有这本书"<<endl;}}void lend(booknode *&l)//借阅图书{booknode *p=l;booknode *p2;p2=new booknode;int num,mark=0;char bookname[10];cout<<"请输入要查找书的名称"<<endl;cin>>bookname;for(;p!=NULL;p=p->next){if(strcmp(p->title,bookname)==0){cout<<"查找成功"<<endl;cout<<"请输入书证号"<<endl;cin>>p2->figure;cout<<"请输入归还日期"<<endl;cin>>p2->deadline;num=p->count;num=num-1;p->count=num;mark=1;}}if(mark==0){cout<<"对不起,图书馆没有这本书"<<endl;}}void dele(booknode *&l)//删除录入借书的信息{booknode *p=l,*q;char stuname[15];cout<<"请输入书证号"<<endl;cin>>stuname[15];while(p!=NULL){if(strcmp(p->figure,stuname)==0){q->next=p->next;delete p;p=q->next;//p=p->next;}}//q=p->next;//p->next=q->next;cout<<"注销成功"<<endl;}/*void add(booknode *&l)//查找有没有相同的书籍,{int r,mark=0;booknode *p=l;cout<<"请输入该书的编号"<<endl;cin>>r;while(p!=NULL){if(p->id=r)//表示有同种书就只增加库存量{int number=0,o;number=p->stock;cout<<"请输入添加书的数量"<<endl;cin>>o;number=number+o;p->stock=number;cout<<"该书的库存量为:"<<endl;cout<<p->stock;p=p->next;mark=1;}else//表示没有同种书就开辟空间存入信息{booknode *p1;p1=new booknode;cout<<"请输入书的编号"<<endl;cin>>p1->id;cout<<"请输入作者"<<endl;cin>>p1->author;cout<<"请输入书的数量"<<endl;cin>>p1->count;p1->next=p->next;p->next=p1;}}}*/三、软件模块结构图3.2各模块具体分析链表插入模块具体分析如下:链表删除模块具体分析如下:主函数链表插入模块链表删除模块 链表查找、借阅、模块链表显示模块InsertList(L) scanf( )p ->book.nodeP ->P ->book.authorP ->book.stockDeleteList(L)scanf( )s,stuname链表查找、借阅模块链表输出模块具体分析如下:Search(L) scanf( )i,booknodem,nP ->book.stockp -> P ->book.authoP2->figure P2->deadline Booknode(L)scanf( )p ->book.node,P -> P ->book.author,P ->book.count四、程序流程图输入5,谢谢使用输入4,删除借阅图书信息输入3,借阅图书输入2,查找图书信息输入6,退出管理系统输入1,录入图书信息结束D4C3BA 21输入数字,选择功能功能表与编号选择1-6InitList(B)主函数main( )开始1—>A4—>D五源程序#include<iostream>#include<string>#include<string.h>using namespace std;typedef struct node//定义链表节点{int id;//书的编号char title[10];//书名char author[10];//作者int count;//现存量int stock;//库存量char figure[20];//书证号char deadline[10];//归还时期struct node *next;}booknode;//typedef booknode *booklist;void initlist(booknode *&l)//建立空链表{l=new booknode;l->next=NULL;}void insert(booknode *&l)//图书馆添加书籍(定刚开始图书馆零本书){booknode *q;booknode *p=l;int k=1;for(;p->next!=NULL;p->next){}//移动指针找到最后一个节点while(k==1){q=new booknode;cout<<"请输入书的编号(书号为0结束):"<<endl;cin>>q->id;if(p->id!=0){cout<<"请输入书名"<<endl;cin>>q->title;cout<<"请输入作者"<<endl;cin>>q->author;cout<<"请输入图书数量"<<endl;cin>>q->stock;q->next=p->next;p->next=q;}cout<<"请输入是否继续(1.继续/0.退出)"<<endl;cin>>k;}}void find(booknode *&l)//查找书的编码{int x,mark=0;booknode *p=l;cout<<"请输入该书的编号"<<endl;cin>>x;for(;p!=NULL;p=p->next){if(p->id==x){cout<<"查找成功!"<<endl;cout<<"此书的名称为:"<<p->title<<endl;cout<<"此书的作者是:"<<p->author<<endl;cout<<"此书的数量为:"<<p->stock<<endl;mark=1;}}if(mark==0){cout<<"对不起,图书馆没有这本书"<<endl;}}void lend(booknode *&l)//借阅图书{booknode *p=l;booknode *p2;p2=new booknode;int num,mark=0;char bookname[10];cout<<"请输入要查找书的名称"<<endl;cin>>bookname;for(;p!=NULL;p=p->next){if(strcmp(p->title,bookname)==0){cout<<"查找成功"<<endl;cout<<"请输入书证号"<<endl;cin>>p2->figure;cout<<"请输入归还日期"<<endl;cin>>p2->deadline;num=p->count;num=num-1;p->count=num;mark=1;}}if(mark==0){cout<<"对不起,图书馆没有这本书"<<endl;}}void dele(booknode *&l)//删除录入借书的信息{booknode *p=l,*q;char stuname[15];cout<<"请输入书证号"<<endl;cin>>stuname[15];while(p!=NULL){if(strcmp(p->figure,stuname)==0){q->next=p->next;delete p;p=q->next;//p=p->next;}}//q=p->next;//p->next=q->next;cout<<"注销成功"<<endl;}/*void add(booknode *&l)//查找有没有相同的书籍,{int r,mark=0;booknode *p=l;cout<<"请输入该书的编号"<<endl;cin>>r;while(p!=NULL){if(p->id=r)//表示有同种书就只增加库存量{int number=0,o;number=p->stock;cout<<"请输入添加书的数量"<<endl;cin>>o;number=number+o;p->stock=number;cout<<"该书的库存量为:"<<endl;cout<<p->stock;p=p->next;mark=1;}else//表示没有同种书就开辟空间存入信息{booknode *p1;p1=new booknode;cout<<"请输入书的编号"<<endl;cin>>p1->id;cout<<"请输入作者"<<endl;cin>>p1->author;cout<<"请输入书的数量"<<endl;cin>>p1->count;p1->next=p->next;p->next=p1;}}}*/void begin(){booknode *l;initlist(l);int k;do{cout<<"******************************************"<<endl;cout<<" 欢迎您使用图书管理系统"<<endl;cout<<" 请选择"<<endl;cout<<"1. 添加图书信息"<<endl;cout<<"2. 查找图书信息"<<endl;cout<<"3. 借阅图书"<<endl;cout<<"4. 删除借阅图书信息"<<endl;cout<<"5. 增加图书"<<endl;cout<<"6. 退出系统"<<endl;cout<<"请选择"<<endl;cin>>k;switch(k){case 1:insert(l);break;case 2:find(l);break;case 3:lend(l);break;case 4:dele(l);break;case 5://add(l);//break;case 0:cout<<"******谢谢使用,再见******"<<endl;exit(0);default:cout<<"输入有误!!"<<endl;break;}}while(k!=0);}void Introduction(){cout<<" 系统介绍"<<endl;cout<<"****************************"<<endl;cout<<" 本系统主要实现图书信息"<<endl;cout<<" 增加添加查找借阅显示"<<endl;cout<<"****************************"<<endl;}void About(){cout<<" 开发人员"<<endl;cout<<"****************************"<<endl;cout<<"********** 冯翔**********"<<endl;cout<<"********** 李建超**********"<<endl;cout<<"********** 陈宥君**********"<<endl;cout<<"********** 袁美琪**********"<<endl;cout<<"****************************"<<endl;}void welcome(){while(1){int y;cout<<"************************************************"<<endl;cout<<" 欢迎使用图书管理系统"<<endl;cout<<"1. 管理系统"<<endl;cout<<"2. 开发人员"<<endl;cout<<"3. 系统简介"<<endl;cout<<"4. 退出"<<endl;cout<<"************************************************"<<endl;cin>>y;switch(y){case 1:begin();break;case 2:About();break;case 3:Introduction();break;case 4:exit(0);default:cout<<"输入有误"<<endl;system("pause");}}}int main(){welcome();return 0;}6.1程序错误修改及完善的过程我这次的课程设计题目是根据我们小组选择的,当看到这个题目时,我觉得还算比较简单,因为我之前数据结构实验就做过单链表的插入、删除、查找、输出,而这次活期图书管理系统要求的录入、查找、借阅、归还、库存量信息等功能,即可用单链表的相关功能函数来实现,于是我修改了之前写过的单链表的一些函数,以满足这次题目的要求,但在实验过程中仍出现了一些错误。
图书管理信息系统一、课程设计题目:图书管理信息系统二、课程设计内容:实现图书管理信息系统的设计。
这是一个数据结构的综合使用,涉及的知识比较全面,特别是对文件的使用更为全面。
进入系统后,操作员可进行系统维护、读者管理、图书管理、图书流通、退出系统等操作。
系统维护:有“初始化”和“读盘”两个重要操作。
第一次开始运行时,必须选择“初始化”,使有关文件指针、计数器等初始化为0;而在以后的每次操作开始时,选择“读盘”,将保存过的相关图书信息磁盘文件读入,以便进行各类操作。
读者管理:可实现读者信息的追加一项输入。
需要输入读者号、读者名、可借书数。
输入“y”可连续输入信息,若输入“n”则结束输入,退出读者管理。
图书管理:有“图书信息输入”和“图书信息查询”两个重要操作。
若选“图书信息输入”,就进入相关子模块,在输入信息的同时建立相应的索引及索引文件和索引链头文件,输入书号、书名、作者名、出版社、分类号、藏书量等信息,根据提示输入“y”实现连续输入,若输入“n”则结束输入,退出图书管理;有了图书信息数据之后,就可以进行图书信息的查询以及图书借阅等操作了。
若选“图书信息查询”,可根据提示按书号、书名、作者、出版社等进行查询,系统会将查询结果输出。
图书流通:有“借书处理”和“还书处理”两个重要操作。
当选择“借书处理”,系统接受输入信息后,首先查询读者文件。
若没查到,显示“非法读者!”,若查到,则再检查该读者书是否已借满,如果未借满,则继续检查图书文件;否则显示“书已借满!”。
检查图书文件如发现书号不存在或书已借出,都会提示读者“非法书号!”或“书已借出”,否则,进行借出处理,修改借阅文件、读者文件以及图书主文件的相关数据项,并显示“借书成功!”。
当选择“还书处理”,系统在接受输入信息之后,首先用书号查询借还书文件,若找到,则填入还书日期,然后再用书号查询图书主文件,修改借出数,用读者号查找读者文件,修改读者的借书数,而后显示“还书成功!”,否则显示“非法书号!”并返回主控菜单。
数据结构课程设计-图书管理---1. 引言本文档是数据结构课程设计的项目文档,主题为图书管理系统。
该系统旨在通过使用数据结构和算法,实现对图书的管理和查询功能。
本文档将详细说明系统的需求分析、系统设计、开发和测试。
2. 需求分析在这一章节中,我们将对图书管理系统的需求进行详细分析。
2.1 功能需求本系统主要包含以下功能:- 图书录入:管理员可以通过系统添加新的图书信息。
- 图书查询:用户可以根据不同的条件查询图书信息。
- 图书借阅:用户可以借阅图书,并进行相应的借阅和归还操作。
- 图书管理:管理员可以对图书进行管理,如修改图书信息、删除图书等。
- 用户管理:管理员可以管理系统用户的信息,包括添加新用户、删除用户等。
2.2 性能需求系统需要保证以下性能指标:- 响应时间:系统对用户的请求需要在合理的时间范围内进行响应,尽量避免长时间等待。
- 并发能力:系统需要支持多个用户同时使用,同时对于查询和借阅等高频操作需要有良好的并发处理能力。
- 数据存储和管理:系统需要能够高效地存储和管理大量的图书信息和用户信息。
2.3 界面需求系统的用户界面应该简洁、直观,易于使用,并且具有良好的用户体验。
界面设计需要考虑到不同用户的需求,并提供相应的功能入口和导航。
3. 系统设计在这一章节中,我们将对图书管理系统进行整体设计和模块划分。
3.1 总体架构图书管理系统的总体架构包括以下模块:- 用户管理模块:负责用户的注册、登录以及个人信息管理。
- 图书管理模块:负责图书的录入、查询、借阅和管理。
- 数据库管理模块:负责与数据库的交互,包括数据的读取和存储。
3.2 模块设计在本节中,我们将对各个模块进行详细设计。
3.2.1 用户管理模块该模块包括以下功能:- 注册:用户可以通过用户名和密码进行注册。
- 登录:注册成功后,用户可以使用用户名和密码进行登录。
- 个人信息管理:登录后,用户可以修改个人信息,包括用户名、密码、联系方式等。
实验报告题目:图书管理一,需求分析1.每种书的信息包括了书号书名,作者显存量和总库存等。
2.要实现的主要操作有,在B-树上的插入删除操作,并且在这些B-树的操作的基础上的图书馆借阅归还入库清除等操作。
3.每插入或删除一个关键字后就要显示B-树的状态。
也可以显示图书的相关借阅的信息。
4.借阅的信息链接在相应的那种数的记录之后。
2.两种抽象数据类型:Btree和Library。
3. 测试数据入库书号:35,16,18,70,5,50,22,60,13,17,12,45,25,42,15然后清除:45,50,22,42,90二.概要设计ADT BTree{数据对象:D={ai |ai E BTNode,I=2,3,……n,n>=0}数据关系:R1={<ai-1,ai>|ai-1,ai E D, I=2,3……N}基本操作:void InitBTree(BTree &T);int Search(BTree p,int k);Result SearchBTree(BTree T,int k);void split(BTree &q,int s,BTree &ap);void Insert(BTree &q,int i,KeyType x,BTree ap);void NewRoot(BTree &T,BTree q,KeyType x,BTree ap);Status InsertBTree(BTree &T,KeyType k,BTree q,int i);void FindSmallest(BTree p,BTree &q);int Parent(BTree p);void RightBrother(BTree p,BTree &right);void LeftBrother(BTree p,BTree &left);void LeftMove(BTree &p,int loc);Status DeleteBTree(BTree &T,int k);void PrintBTree(BTree T);}ADT Library{数据对象:D={ai |ai E RecordI=2,3,……n,n>=0}数据关系:R1={<ai-1,ai>|ai-1,ai E D, I=2,3……N}基本操作:void GetInformation(Record &book);void PrintBookInfomation(Record *book);void Procurement(BTree &T);void DeleteBook(BTree &T,int k);void Lending(BTree &T,int k,char librarynum[10],char data[10]); void Return(BTree &T,int k,char *librarynum);}3.程序的几个模块1)主程序模块void main(){接受命令初始化处理命令}2)B-树模块-------实现B-树的抽象数据类型3)图书馆模块-------实现图书馆的抽象数据类型调用关系如下:主程序模块图书馆模块-三.详细设计(在源代码上通过注释的方式来说明)1、基本结构typedef struct{int booknum;char name[20];char writer[20];int total;int current;char librarynum[MAX][MAX];char returndate[MAX][MAX];}Record;typedef struct{int k;Record *recptr;}KeyType;typedef struct BTNode{int keynum;struct BTNode *parent;KeyType *key[M+1];struct BTNode *ptr[M+1];}BTNode,*BTree;typedef struct{BTNode *pt;int i;int tag;}Result;2、源代码1)主函数#include "head.h"#include "head.h"void main(){BTree T;int order=0,booknum;char returndate[10],librarynum[10];Result result;InitBTree(T);printf("\n******************************************************************* *****\n");printf("Welcome to the library system!\n");while(order!=6){printf("\n******************************************************************* *****\n");printf("请选择服务: 1.采编入库 2.清除库存 3.借阅 4.归还 5.显示 6.退出.\n");scanf("%d",&order);switch(order){case 1:Procurement(T);PrintBTree(T);break;case 2:printf("请输入要删除的书的编号。
数据结构——图书管理系统图书管理系统是一种用于管理图书馆藏书和读者借阅情况的软件系统。
它通过建立一个数据库来存储图书的相关信息,并提供了一系列的功能来方便图书管理员进行图书管理和读者借阅操作。
一、图书管理功能:1. 图书入库:管理员可以通过系统将新购买的图书录入到系统中,包括图书的书名、作者、出版社、ISBN号、价格等信息。
2. 图书查询:管理员可以根据图书的关键词进行查询,以便快速找到所需图书的详细信息。
3. 图书借还:系统可以记录读者的借书和还书情况,包括借书日期、还书日期等信息。
管理员可以根据读者的借书卡号或者图书的ISBN号进行借还操作,并更新图书的可借数量。
4. 图书续借:读者可以在借书期限到期前申请续借,管理员可以在系统中进行续借操作,并更新借书日期。
5. 图书预约:读者可以通过系统预约已被借出的图书,当图书归还后,系统会自动通知预约者前来借阅。
二、读者管理功能:1. 读者注册:读者可以通过系统进行注册,填写个人信息并获得借书卡号。
2. 读者信息管理:管理员可以对读者的个人信息进行管理,包括修改个人信息和删除读者信息。
3. 读者查询:管理员可以根据读者的借书卡号或者关键词进行查询,以便快速找到读者的详细信息。
4. 读者借阅情况统计:系统可以记录读者的借阅情况,包括借阅次数、借阅图书的种类等信息。
管理员可以通过系统生成借阅报表,用于分析读者的借阅情况。
三、系统管理功能:1. 用户权限管理:系统可以设置不同的用户权限,包括管理员和普通用户。
管理员具有对系统的所有功能进行操作的权限,而普通用户只能进行图书查询和预约操作。
2. 数据备份与恢复:系统可以定期进行数据备份,以防止数据丢失。
同时,系统也提供了数据恢复功能,可以在数据丢失时恢复到最近的备份点。
3. 系统日志记录:系统可以记录管理员和读者的操作日志,包括登录日志、图书借还日志等,以便管理员进行操作审计和故障排查。
以上是一个基本的图书管理系统的功能描述,实际的系统还可以根据实际需求进行扩展和定制。
《数据结构》课程设计报告(图书管理系统)目录一.需求分析 (3)二.概要设计 (3)三.详细设计 (4)四.调试分析 (6)五.用户使用说明 (6)六.测试结果 (7)七.附录:带注释的源代码 (8)一.需求分析大学的图书馆藏书是非常庞大的,原始的人工借书也是非常麻烦的,因此用一种自动系统来管理图书是非常有必要的,所以设计一个图书管理系统,要能够自如管理借书,还书,以及注册,注销书本,这样就能节省很多资源,提高效率。
明确规定:1.每种书的登记内容包括书号、书名、著作者、现存量和库存量;2.对书号建立索引表(线性表)以提高查找效率;3.系统主要功能如下:*采编入库:新购一种书,确定书号后,登记到图书帐目表中,如果表中已有,则只将库存量增加;*借阅:如果一种书的现存量大于0,则借出一本,登记借阅者的书证号和归还期限,改变现存量;*归还:注销对借阅者的登记,改变该书的现存量。
二.概要设计1.本题中用到了以下函数和结构体:本程序首先命名头文件:#include <stdio.h>#include <stdlib.h>#include <conio.h>以实现对各种函数的调用以及可能用到的各种循环。
用“struct BOOK”结构体,用来存放书籍以及借书信息;并用到“void page_title”的页头函数,通过“void book_out”,“void book_in”来实现对书本的借出以及还书,定义“search_book”来实现对书本各种信息的搜索任务,“void book_add”实现对书本的购进时的注册,用“void book_del”实现对书本的注销。
最后通过“goto menu”语句跳出整个循环语句,在各种操作做完后能够返回到主菜单。
用到goto语句原则上一般不符合结构化一些规定,但是此题中大大提高了效率,因此我采用了。
2. 主程序的流程及各程序模块之间的层次:本程序运用到的是用数组作为线性表的一种代替方式,实现各种查询,对各种数据的管理,运用线性表的话可能会更加简便,但是我在用了数组代替后发现其实这样更容易看懂。
图书管理系统 c++ 数据结构实验报告学生姓名:学院: 软件学院专业: 信息管理与信息系统题目: 图书管理系统成绩指导教师2011年1月6日1(设计目的(小标题黑体五号字)《数据结构》课程主要介绍最常用的数据结构,阐明各种数据结构内在的逻辑关系,讨论其在计算机中的存储表示,以及在其上进行各种运算时的实现算法,并对算法的效率进行简单的分析和讨论。
进行数据结构课程设计要达到以下目的:, 了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力; , 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能; , 提高综合运用所学的理论知识和方法独立分析和解决问题的能力; 训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。
2(设计内容和要求1)每种书的登记内容包括书号、书名、著作者、现存量和库存量;2)对书号建立索引表(线性表)以提高查找效率;3)系统主要功能如下:*采编入库:新购一种书,确定书号后,登记到图书帐目表中,如果表中已有,则只将库存量增加;*借阅:如果一种书的现存量大于0,则借出一本,登记借阅者的书证号和归还期限,改变现存量;*归还:注销对借阅者的登记,改变该书的现存量。
3(本设计所采用的数据结构定义图书链表和图书索引结构struct Book{char BookID[10];/*图书编号*/char BookName[512];/*书名*/char Writer[512];/*作者*/int CurrentNumber;/*现存量*/Book *pNext;/*下一个图书信息*/};struct Index{char BookID[10];/*图书编号*/Index *pNext;/*下一个索引指针*/};1/*借阅信息结构*/struct Borrow{char BookID[10];/*借阅图书编号*/char BookName[512]; /*书名*/unsigned long StuID; /*图书证号*/char ReturnTime[512];/*归还日期*/Borrow *pNext; /*下一个借阅信息*/};4(功能模块详细设计4.1 详细设计思想主函数main()主函数通过一个switch语句实现对系统功能的选择。
竭诚为您提供优质文档/双击可除数据结构图书管理系统实验报告篇一:数据结构-图书管理系统实验报告数据结构课程设计报告课程名称_________题目名称学生学院专业班级学号学生姓名指导教师20XX年7月8日一、需求分析1.图书管理系统中图书管理模块包括图书类型定义:书号、现存量、总存量,出版时间为整型,定价为浮点型,书名、著者名为字符型,借阅指针、预约指针为读者类型;读者类型定义:证号为整型、姓名为字符型,另外借阅类型和预约类型组合成其中的共用体类型。
b树(2-3树)类型定义:关键字个数和关键字数组为整型、另外还有指向双亲的指针、指向子树的指针、记录单元指针;b树查找结果类型定义:节点指针、关键字序号和查找标志变量为整型。
2.演示程序以用户和计算机的对话方式进行,在计算机终端上显示“提示信息”之后,由用户在键盘上输入演示程序中规定的运算命令,相应的输入数据和运算结果显示在后面。
该演示系统,没有使用文件,全部数据放在内存存放。
四项基本业务都以书号为关键字进行的,采用了b树(2-3树)对书号建立索引,以提高效率。
3.图书管理系统实现功能:①采编入库:新书购入,将书号、书名、著者、册数、出版时间添加入图书账目中去,如果这种书在帐中已有,则只将总库存量增加,每新增一个书号则以凹入表的形式显示b树现状。
②清除库存:实现某本书的全部信息删除操作,每清除一个书号则已以凹入表的形式显示b树现状。
③图书借阅:如果书的库存量大于零时则执行出借,登记借阅者的图书证号和姓名,系统自动抓取当前借阅时间和计算归还时间。
④图书预约:如果某书库存为零,则记录预约者姓名和证号,系统自动抓取当前预约时间和取书时间。
⑤图书归还:注销借阅者信息,并改变该书的现存量。
⑥作者专区:输入作者名字,系统将查找相应作者全部著作并显示出来。
⑦图书信息:可以根据书号查阅此书基本信息、借阅信息和预约信息,亦可以查找全部图书基本信息。
二、概要设计1.抽象数据类型b树定义:ADTbTree{数据对象:D是具有相同特性的数据元素的集合。
电子科技大学教务处制表实验报告学生姓名:学号:指导教师:陈昆实验地点:计算机学院楼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;}。