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

合集下载

数据库课程设计——图书管理系统

数据库课程设计——图书管理系统

借阅管理模块
实现图书的借阅、归还和 续借功能,记录借阅历史 和当前借阅状态。
系统管理模块
实现用户管理、权限管理 、日志管理等功能,保障 系统的安全性和稳定性。
04
系统实现
开发环境搭建
开发工具
Visual Studio Code、MySQL Workbench
运行环境
Windows 10、MySQL 5.7
息。
借阅数据
包括借阅编号、读者 编号、图书编号、借 阅日期、归还日期等
信息。
系统用户数据
包括用户编号、用户 名、密码、角色和权
限等信息。
性能需求
响应时间
01
系统响应时间应小于2秒。
并发用户数
02
系统应支持至少100个并发用户。
数据备份与恢复
03
系统应具备定期自动备份和手动备份功能,同时能够在需要时
数据库课程设计— —图书管理系统
2024-01-09
目录
• 引言 • 系统需求分析 • 系统设计 • 系统实现 • 系统测试与优化 • 课程设计总结与展望
01
引言
课程设计目的
01 掌握数据库设计的基本步骤和方法
通过课程设计,使学生熟悉数据库设计的流程, 包括需求分析、概念设计、逻辑设计、物理设计 等阶段,并掌握各个阶段的主要任务和方法。
模块实现
图书管理模块
实现图书的录入、修改、删除等功能 ,提供对图书信息的全面管理。
借阅管理模块
实现图书的借阅、归还等功能,记录 借阅历史,方便管理员和读者查看。
读者管理模块
实现读者的注册、登录、个人信息管 理等功能,提供对读者信息的全面管 理。
系统管理模块
实现用户权限管理、系统日志查看等 功能,保障系统的安全性和稳定性。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

图书管理系统数据库

图书管理系统数据库

图书管理系统数据库1. 简介图书管理系统是一种用于管理图书馆或其他图书资源机构的软件系统。

它旨在提供一个方便的途径来管理图书的借阅、归还、查询等操作。

数据库在图书管理系统中起到了关键的作用,它用于存储和管理图书、用户、借阅记录等相关数据。

本文将介绍图书管理系统数据库的设计,包括数据库的结构和主要表的字段以及它们之间的关系。

2. 数据库结构图书管理系统数据库的结构主要包括以下几个方面:•图书信息表(book table)•用户信息表(user table)•借阅记录表(borrow table)•书架信息表(shelf table)•图书分类表(category table)下面将分别介绍这些表的字段和关系。

图书信息表存储了图书的基本信息,包括图书的编号、名称、作者、出版社、出版日期、价格等。

字段如下:字段名类型说明book_id int 图书编号(主键)name varchar(100) 图书名称author varchar(100) 作者publisher varchar(100) 出版社pub_date date 出版日期price decimal(10,2) 价格用户信息表存储了用户的基本信息,包括用户的编号、姓名、年龄、性别、联系方式等。

字段如下:字段名类型说明user_id int 用户编号(主键)name varchar(100) 用户姓名age int 用户年龄gender char(1) 用户性别(M/F)contact varchar(100) 联系方式2.3 借阅记录表借阅记录表存储了用户借阅图书的相关信息,包括借阅记录的编号、用户编号、图书编号、借阅日期、归还日期等。

字段如下:字段名类型说明borrow_id int 借阅记录编号(主键)user_id int 用户编号(外键)book_id int 图书编号(外键)borrow_date date 借阅日期return_date date 归还日期2.4 书架信息表书架信息表存储了图书馆中的书架信息,包括书架的编号、位置、容量等。

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

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

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

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

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

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

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

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

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

数据项二.概念结构设计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. 系统管理员可以管理其他管理员的账号和权限。

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

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

数据结构课程设计图书管理系统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”则结束输入,退出图书管理;有了图书信息数据之后,就可以进行图书信息的查询以及图书借阅等操作了。

若选“图书信息查询”,可根据提示按书号、书名、作者、出版社等进行查询,系统会将查询结果输出。

图书流通:有“借书处理”和“还书处理”两个重要操作。

当选择“借书处理”,系统接受输入信息后,首先查询读者文件。

若没查到,显示“非法读者!”,若查到,则再检查该读者书是否已借满,如果未借满,则继续检查图书文件;否则显示“书已借满!”。

检查图书文件如发现书号不存在或书已借出,都会提示读者“非法书号!”或“书已借出”,否则,进行借出处理,修改借阅文件、读者文件以及图书主文件的相关数据项,并显示“借书成功!”。

当选择“还书处理”,系统在接受输入信息之后,首先用书号查询借还书文件,若找到,则填入还书日期,然后再用书号查询图书主文件,修改借出数,用读者号查找读者文件,修改读者的借书数,而后显示“还书成功!”,否则显示“非法书号!”并返回主控菜单。

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

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

数据结构课程设计——图书借阅管理系统图书馆管理系统目录一、问题描述:二、系统需求分析:1 功能要求:2 技术要求:3 方案分析:三、概要设计:四、详细设计与程序代码:五、运行结果与测试:六、设计体会与总结一、问题描述图书借阅管理系统是一个学校不可缺少的部分,它的内容对于学校的管理者和读者来说都至关重要,直接关系到图书的借用率,所以开发图书管理系统能够为管理员和读者提供充足的信息和快捷的查询手段。

编写程序系统主要实现图书馆的增加图书、查询图书、删除图书、借阅图书、还书;增加会员、查询会员、删除会员、借书信息、到期书催还等智能化管理过程。

图书管理者只需略懂电脑知识就可以简易的操作该图书借阅管理系统。

二、系统需求分析图书借阅管理系统主要分为两大功能:(1)图书管理(增加图书、查询图书、删除图书、图书借阅、还书到期书催还);(2)会员管理(增加会员、查询会员、删除会员、借书信息);要完成这个题目,主要是建立解决图书和会员的信息的存储,解决的方法是建立两个带头结点的单链表,分别用于存储图书和会员。

解决了这个问题后就是如何建立这两个链表的联系了,解决的方法是在图书结点中设一个借书人编号,在会员结点中设一个数组用于存会员借的书。

解决了这两个问题,剩下的工作就简单了。

只需按链表的操作就可以了。

1功能要求在图书借阅管理程序中须实现以下功能:(1)图书修改功能:能对图书借阅系统存储的信息进行修改。

提供两种修改方式,如按照图书编号修改、按照书名修改。

图书编号是图书记录的自然顺序编号。

(2)图书删除功能:能对图书借阅系统的图书信息进行删除。

删除时以记录为单位,能一次删除一条记录。

(3)借书功能:能对借出的图书作记录信息,能一次借出一本图书。

(4)还书功能:能将被借出的图书信息还原,能一次借出一本图书。

(5)保存功能:能将记录保存在任何自定义的文件中,如保存在:c:\\books 、c:\\lenders。

(6)通信录管理结束后,能够正常退出图书借阅管理程序。

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

WORD格式石河子大学信息科学与技术学院计算机科学与技术专业课程设计报告二、结构图1.功能结构图图书管理系统新增图查询在恢复被为读者办理借办理还退出系书信息架的图删除图办理借书手续书手续统的输入书信息书信息书注册2.主流程图Start设置选择变量choice输出提示让用户选择要实行的操作 .借书功能还书功能图书维护读者维护退出系统Choice=Choice=1Choice=2Choice=3Choice=4Choice=0‘其它数值’提示输入错误Stop三、程序设计的想法和具体思路图书管理系统分为图书管理和会员管理两大部分。

设计一个图书类Book,包括一本图书的基本管理功能,具有以下私有数据:inttag;// 删除标记1:已删0:未删intno;// 图书编号charname[20];// 书名intonshelf;// 是否再架 1:再架2:已借1inttop; // 图书记录指针Bookbook[Maxb];// 图书记录在其构造函数中,将book.txt 文件的所有录入读到book[]中。

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

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

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

四、参考文献1)谭浩强,《C++程序设计》,北京,清华大学出版社,2006年2)李振鹏,张小莉,郑艳娟,《数据结构》,中国铁道出版社,2007年3)杨小平,《VisualC++项目案例导航》,北京,科学出版社,2002年4)DavidConger,《软件开发:编程与设计》,北京,清华大学出版社,2006年.5) FrancisGlassborowRobertaAllen ,《YouCanDoIt!——C++编程新手互动教程》,北京,人民邮电出版社,2005年五、课程设计总结心得体会选到这个课程设计题目的时候,感觉挺简单的,查找,增加,,显示,统计,这些平时都学过,用过,但是实际操作中还是遇到了很多问题,所以特意到图书馆专门借了几本关于数据结构程序设计方面的书,同时也希望能把平时没有学好的地方好好补一补,能对知识有更深层次的理解.一切准备就绪,把平时写的相关的程序出来参考,对比,慢慢才找到一些感觉,把源程序写出来.经过几天终于写完了程序的初稿,然后输入电脑,一编译,发现错误几十个,还有好多警告,只得一条一条的看,一个一个的改,首当其冲的是再输入电脑过程中不小心漏掉的标点符号,有些括号忘了,有些是忘了写分号等粗心导致的小毛病,这些错误很容易改正.到后面的错误就有些麻烦了,当中有个头文件忘了写,编译过程中好几十个错误就是改不过来, 后来和同学讨论才知道原来错在什么地方,这样一下就变成了几个错误,这时信心大增,有些错误都看不懂错在那里,由于英文水平不太好,只好去查字典,还要推敲这个单词在这里到底是哪个意思,再加上以往的经验和同学的帮助下,好不容易才得到零错误零警告,那时真开心,我的程序终于可以运行了,激动的按下运行,得到了预想的界面,按照提示操作,都很顺利,一个一个的实验每一个功能,都以为成功了,当运行到了删除功能时,突然出现死循环,只见操作界面不停的闪.这是逻辑错误,很难找,后来只有一步一步的,一句一句的检查,找到了错误的根源,并改正.从进入大学来,我们学习了C++,数据结构。

特别是高老师的认真授课,精心讲解下,同学们学到了很多东西,知识方面的很多,还有平时?心的习惯也养成了.这对我们以后的学习生活很有好处,最后感谢常老师一学期以来对我们的教育帮助,对我们程序设计时的辅导.六、程序运行结果附录:源代码#include<iostream> #include<iomanip>#include<string>#include<fstream>// 输入/输出文件流类usingnamespacestd;constintMaxr=100;// 最多的读者constintMaxb=100;// 最多的图书constintMaxbor=5;// 每位读者最多借五本书//读者类,实现对读者的信息的描述classReader{private:inttag;// 删除标记1:已删0:未删intno; // 读者编号charname[10];// 读者姓名intborbook[Maxbor];// 所借图书public:Reader(){}char*getname(){returnname;} // 获取姓名intgettag(){returntag;} // 获取删除标记intgetno(){returnno;} // 获取读者编号voidsetname(charna[]) // 设置姓名{strcpy(name,na);}voiddelbook(){tag=1;}// 设置删除标记1:已删0:未删voidaddreader(intn,char*na)// 增加读者{tag=0;no=n;strcpy(name,na);for(inti=0;i<Maxbor;i++)borbook[i]=0;}voidborrowbook(intbookid)// 借书操作{for(inti=0;i<Maxbor;i++){if(borbook[i]==0){borbook[i]=bookid;return;}intretbook(intbookid)// 还书操作5{for(inti=0;i<Maxbor;i++){if(borbook[i]==bookid){borbook[i]=0;return1;}}return0;}voiddisp()/ /读出读者信息{cout<<setw(5)<<no<<setw(10)<<name<<" 借书编号:[";for(inti=0;i<Maxbor;i++)if(borbook[i]!=0)cout<<borbook[i]<<"|";cout<<"]"<<endl;}};//读者类库,实现建立读者的个人资料classRDatabase{private:inttop; // 读者记录指针Readerread[Maxr];// 读者记录public:RDatabase() // 构造函数,将reader.txt 读到read[] 中{Readers;top=-1;fstreamfile("reader.txt",ios::in);//打开一个输入文件while(1){file.read((char*)&s,sizeof(s));if(!file)break;top++;read[top]=s;}{top=-1;6}intaddreader(intn,char*na)// 添加读者时先查找是否存在{Reader*p=query(n);if(p==NULL){top++;read[top].addreader(n,na);return1;}return0;}Reader*query(intreaderid)// 按编号查找{for(inti=0;i<=top;i++)if(read[i].getno()==readerid&&read[i].gettag()==0){return&read[i];}returnNULL;}voiddisp()// 输出所有读者信息{for(inti=0;i<=top;i++)read[i].disp();}voidreaderdata();// 读者库维护~RDatabase()// 析构函数,将read[] 写到reader.txt 文件中{fstreamfile("reader.txt",ios::out);for(inti=0;i<=top;i++)if(read[i].gettag()==0)file.write((char*)&read[i],sizeof(read[i]));file.close();}};voidRDatabase::readerdata(){charchoice;charrname[20];intreaderid;Reader*r;while(choice!='0')7{cout<<"读者维护:t1.新增t2.更改t3.删除t4.查找t5.显示t6.全删t0.退出"<<endl;cin>>choice;switch(choice){case'1':cout<<" 输入读者编号:";cin>>readerid;cout<< "输入读者姓名:";cin>>rname;addreader(readerid,rname);break;case'2':cout<<" 输入读者编号:";cin>>readerid;r=query(readerid);if(r==NULL){cout<<" 该读者不存在"<<endl;break;}cout<<" 输入新的姓名:";cin>>rname;r->setname(rname);break;case'3':cout<<" 输入读者编号:";cin>>readerid;r=query(readerid);if(r==NULL){cout<<" 该读者不存在"<<endl;break;}r->delbook();break;case'4':cout<<" 读入读者编号:";cin>>readerid;r=query(readerid);if(r==NULL){cout<<" 该读者不存在"<<endl;break;8}r->disp();break;case'5':disp();break;case'6':clear();break;default:cout<<" 输入错误,请从新输入:";break;}}}//图书类,实现对图书的描述,图书的编号,书名,借出,还入等classBook{private:inttag;// 删除标记 1:已删0:未删intno;// 图书编号charname[20];// 书名intonshelf;// 是否再架1:再架2:已借public:Book(){}char*getname(){returnname;}// 获取姓名intgetno(){returnno;}// 获取图书编号intgettag(){returntag;}// 获取删除标记voidsetname(charna[])// 设置书名{strcpy(name,na);}voiddelbook(){tag=1;}// 删除图书voidaddbook(intn,char*na)// 增加图书{tag=0;no=n;strcpy(name,na);onshelf=1;}intborrowbook()// 借书操作{if(onshelf==1){onshelf=0;return1;9}return0;}voidretbook()// 还书操作{onshelf=1;}voiddisp()// 输出图书{cout<<setw(6)<<no<<setw(18)<<name<<setw(10) <<(onshelf==1?" 在架":"已借")<<endl;}};//图书库类,实现对图书的维护,查找,删除等classBDatabase{private:inttop; // 图书记录指针Bookbook[Maxb];// 图书记录public:BDatabase()// 构造函数,将book.txt 读到book[]中{Bookb;top=-1;fstreamfile("book.txt",ios::in);while(1){file.read((char*)&b,sizeof(b));if(!file)break;top++;book[top]=b;}file.close();}voidclear()// 全删{top=-1;}intaddbook(intn,char*na)// 增加图书{Book*p=query(n);if(NULL==p){top++;book[top].addbook(n,na);10return1;}return0;}Book*query(intbookid)// 查找图书{for(inti=0;i<=top;i++)if(book[i].getno()==bookid&&book[i].gettag()==0){return&book[i];}returnNULL;}voidbookdata();// 图书库维护voiddisp(){for(inti=0;i<=top;i++)if(book[i].gettag()==0)book[i].disp();}~BDatabase()// 析构函数,将book[]写到book.txt 文件中{fstreamfile("book.txt",ios::out);for(inti=0;i<=top;i++)if(book[i].gettag()==0)file.write((char*)&book[i],sizeof(book[i]));file.close();}};voidBDatabase::bookdata(){charchoice;charbname[40];intbookid;Book*b;while(choice!='0'){cout<<"图书维护:t1.新增t2.更改t3.删除t4.查找t5.显示t6.全删t0.退出"<<endl;cin>>choice;switch(choice){case'1':cout<<" 输入图书编号:"<<endl;cin>>bookid;11cout<<" 输入图书书名:"<<endl;cin>>bname;addbook(bookid,bname);break;case'2':cout<<" 输入图书编号:"<<endl;cin>>bookid;b=query(bookid);if(b==NULL){cout<<" 该图书不存在"<<endl;break;}cout<<" 输入新的书名:"<<endl;cin>>bname;b->setname(bname);break;case'3':cout<<" 读入图书编号:"<<endl;cin>>bookid;b=query(bookid);if(b==NULL){cout<<" 该图书不存在"<<endl;break;}b->delbook();break;case'4':cout<<" 读入图书编号:"<<endl;cin>>bookid;b=query(bookid);if(b==NULL){cout<<" 该图书不存在"<<endl;break;}b->disp();break;case'5':disp();break;case'6':clear();12break;default:cout<<" 输入错误,请从新输入:";}}}//main() 函数的实现,程序的主界面的引导voidmain(){charchoice;intbookid,readerid;RDatabaseReaderDB;Reader*r;BDatabaseBookDB;Book*b;while(choice!='0'){ cout<<endl<<endl<<" ttt图书管理系统n";cout<<"1.借书t2.还书t3.图书维护t4.读者维护t0.离开"<<endl;cin>>choice;switch(choice){case'1':cout<<" 借书n读者编号:";cin>>readerid;cout<<" 图书编号:";cin>>bookid;r=ReaderDB.query(readerid);// 按编号查找if(NULL==r){cout<<" 不存在该读者,不能借书"<<endl;break;}b=BookDB.query(bookid);if(b==NULL){cout<<" 不存在该图书,不能借书"<<endl;break;}if(b->borrowbook()==0){cout<<" 该图书已借出,不能借书"<<endl;break;}r->borrowbook(b->getno());break;case'2':13cout<<"还书n读者编号:";cin>>readerid;cout<<" 图书编号:";cin>>bookid;r=ReaderDB.query(readerid);if(r==NULL){cout<<" 不存在该读者,不能还书"<<endl;break;}b=BookDB.query(bookid);if(b==NULL){cout<<" 不存在该图书,不能还书"<<endl;break;}b->retbook();r->retbook(b->getno());break;case'3':BookDB.bookdata();break;case'4':ReaderDB.readerdata();break;default:cout<<" 输入错误,请从新输入:";}}}14。

相关文档
最新文档