您当前的位置:首页 > 发表论文>论文发表

c++图书管理系统论文

2023-12-10 11:52 来源:学术参考网 作者:未知

c++图书管理系统论文

在图书馆管理中,图书管理系统是图书室的核心管理系统,是一个由人、计算机等组成的能进行管理信息收集、传递、加工、保存、维护和使用的系统。下面是我为大家整理的图书管理系统 毕业 论文,供大家参考。

浅谈图书馆管理系统

引言:校园图书馆自动化建设是国家 教育 信息化建设的一个重要组成部分。随着图书馆硬件设施的完善,对图书馆的管理水平和标准也越来越高。图书馆管理系统功能非常强大,系统操作简单灵活,易学易用,易于维护。适用于各高等院校的图书馆。

校园图书馆自动化建设是国家教育信息化建设的一个重要组成部分。随着图书馆硬件设施的完善,对图书馆的管理水平和标准也越来越高。传统手工管理对图书馆管理员而言,工作繁琐而艰巨,同时对读者借阅在时间和空间上也带来诸多不便,逐渐出现信息资源流通效率低、服务不够细致严密等问题。 如何才能更有效的发挥校园图书馆这个信息交换中心的应用效率。图书馆管理系统打破了传 统的图书管理模式,以系统性、实用性为原则,最大限度提高图书馆管理各个环节的自动化服务为目标 ,建立起了一套系统高效的数字自动化管理服务流程,极大的减轻了图书管理的工作量,有效的提高了 图书馆服务质量和效率。分层组件技术的应用,使每个功能和业务模块实现网络集成化的分配管理,顺应信息时代的发展,能够满足较大型用户的需要。

一、高校图书馆管理系统设计思路:

图书馆管理系统主要针对图书馆传统手工管理工作流程中图书编目、图书检索、图书流通和读者管理这四个主 要组成环节进行全面分析,从图书采验到馆后,图书馆管理员将图书详细信息(包括:ISBN号、正题名、 作者、出版社、价格等),编目录入到计算机,为减轻管理员传统繁复的手工分配工作,系统自动建立 书籍管理的财产号、唯一标识每本图书的识别条码和图书检索目录。对于图书检索,读者可以通过与图 书馆联网的 其它 任何一台计算机登陆访问馆藏目录,选择多种方式进行图书检索。

针对热门图书流通率 高以及一般中小学校学生课余支配时间有限的实际情况,提供网上馆际图书预借功能,管理员按预借表 目顺序提前为读者的借阅资料作合理调拨和准备,从而为学生提供更广的借阅时间和空间。为更加有效 的配合图书的流通管理工作,读者也可以通过这个查询终端对个人借阅时间、预借情况、图书催还、罚 款记录等借阅情况进行查看了解。同时建立一个详细的读者信息管理库,按读者不同类别设置不同服务 标准进行区分管理。系统综合每个环节提供关联统计,帮助管理员全面准确的了解这个庞大的信息资源 库的流通情况以及馆藏动态。科学准确的条码识别技术贯穿服务于整个图书信息录入、流通和读者借阅工作,减少了手工误差,提高了图书馆的服务质量和效率。

二、图书馆管理系统特点:

1.丰富的报表

图书馆管理系统提供丰富的报表(供有几十种报表),不仅可以打印出来,还可以导出到各种格式文件的文件,可以直接发布到校园网络上或提供给其他部门使用。可以说目前图书馆所需要的各种报表,系统都能提供。特别是根据学校用户要求开发的一些功能很受学校图书馆用户的欢迎,例如毕业班催还清单报表、图书借阅或读者排行榜、按工具书与教参等介质类型进行分类统计的报表、按藏书地点进行分类统计等一些非常实用的个性化报表。并且可以将报表导出到指定格式的文件中,以便进行数据交换或直接连接到校园网上。

2.图书远程编目

图书馆管理系统提供Z39.50的客户端,并与编目系统完整的结合,不仅实现本地书目总库的查重,本地共享编目库的套录,也实现与INTERNET上其他编目中心数据库的连接,达到免费套录异地数据库中的编目数据,大大提高了图书编目速度,又节约了成本。

3.系统方便实用

图书馆管理系统是专为高等院校图书馆特殊群体量身设计的,系统界面友好,操作非常方便,只要培训半天,用户即能流畅自如地操作。实践证明,不管学校图书馆是否有专业的管理人员,都能够管理出一个专业的图书馆。

图书编目建库是图书馆中一个最重要,也是最花时间的工作,系统应该在考虑到编目数据的共享、远程数据套录的同时,在编目的操作中也考虑的非常细致,比如在编目时,在需要输入汉字的地方,系统将自动出现本用户习惯使用的汉字输入法,而减少编目人员的操作步骤,提高建库速度。

4.打印图书标签方便

图书标签的打印和粘贴是一件非常麻烦和费事的工作,图书馆管理系统的标签打印非常方便,不仅提供标签的批量打印、标签补打,并且提供按各种条件、顺序来选择打印,根据自身的标签规格来自定义打印方式。方便的打印标签方式为贴图书标签提供了便捷。

5.图书入库方便快捷

图书馆管理系统的图书入库非常方便快捷,在录入图书条形码时不指定其地点,加快图书编目的录入速度,在真正入库处才指定图书的入库地点,这也避免图书入库错误,导致图书所在库并不是先前指定的库,引起图书书库的混乱。系统提供了批量入库和单本图书的入库,可以快速的将每本图书入到指定的书库中。而清楚的图书入库清单报表,也提供管理员一个清楚的依据。

6.图书借还非常方便

图书馆管理系统的图书借还非常方便,借书、还书、续借、罚款等都在一个界面中,图书的借还根本不用考虑什么,只要使用条形码阅读器扫描图书条形码或借书证条形码即可,系统将自动进行“借”与“还”,不需要用户选择。对逾期还书的处理一般图书软件只提供罚款的处理方式。

7.借书证信息管理灵活方便

读者借书证的管理中,图书馆管理系统的对读者管理非常灵活,按入学年度分成不同的读者类型,这在读者批量注销(如毕业)时将操作非常方便快速。读者信息中也可以加入读者的相片,在借还图书时可以方便的检查借书的读者是否是其本人,防止借书证丢失后的损失。

8.数据完整、一致性好

图书馆管理系统软件均采用MsSql数据库,并在数据库表级对数据的完整性和一致性进行约束,保证数据库中数据的正确性和安全性。方便的数据库备份,防止运行环境的突然崩溃(如硬盘损坏、系统遭病毒破坏)而不至于影响数据库中的数据。

随着计算机技术的飞速发展,利用计算机来获得和处理信息是当今信息管理的一大特点。图书馆管理系统功能非常强大,系统操作简单灵活,易学易用,易于维护,适用于各高等院校的图书馆。它的系统化,规范化和自动化,能最大程度提高操作人员的办公效率。

试谈中小型图书馆的图书管理系统

摘要:随着计算机技术的不断发展,计算机已经深入到社会生活的各个角落。为了方便管理人员对图书馆书籍、读者资料、借还书等进行高效的管理,在工作人员具备一定的计算机操作能力的前提下,采用图书馆管理系统软件可以提高其管理效率。

关键词:图书馆管理;系统软件;管理效率

随着近年来信息技术及计算机 网络技术 的不断发展, 图书馆也先从传统的图书馆发展到自动化图书馆,再发展到今天的数字图书馆,这些变化使得图书馆的形象越来越现代化,人们查找资料也更加方便。对于一些小图书馆和一些图书室来说,由于工作人员比较少,长期以来,作为图书馆的主要工作―图书借阅一直未能很好地开展。在平常的图书借阅工作中, 由于大部分读者不熟悉图书馆藏书,且对图书排架分类的不了解,往往花费很长时间才能找到其所需的书。为提高管理效率,更好地为读者服务,利用已有的办公局域网络条件,将馆藏书籍做成基于WEB的查询系统,实现图书在一个单位的网络内甚至Internet上查询,可使图书查询和借阅变得更加方便快捷,从而使图书室的工作效率得到明显提高。

一、问题定义及系统背景

本系统是为了方便用户对图书的管理开发的。要求系统界面友好,使用简单,提供对图书信息、读者信息和图书流通情况的编辑、查询、统计报表等全面的数据管理功能,同时使用户能方便的进行图书的出借、返还等操作,并提供预约、续借,馆际互借等功能。此外系统还具有一定的安全性和可维护性。

三、系统功能分析

系统协助图书馆管理员实现各种日常事务的管理。系统维护数据库,保存图书和读者的资料以及图书流通情况的资料,便于管理员管理图书和读者的有关数据,还可根据需要随时进行数据的查询和统计并按所需格式和方式输出。利用这些数据,系统可协助管理员进行读者的图书出借、返还、预约和续借等操作,读者身份认证和借书权限认证等都可由系统承担,大大减轻了管理员的工作量。此外,对于系统本身的维护,系统具备一定的安全机制和信息备份机制,对用户分级管理,设置用户权限,保证 系统安全 性;提供数据库文件的备份功能,按用户要求备份,防止意外数据丢失影响系统工作。通过需求分析,系统应具备以下功能,具体描述如下:

(1)图书信息维护:主要完成图书馆新进图书的编号、登记、入馆等操作。

(2)读者信息维护:主要是完成读者信息的添加、修改和删除等操作,只有是系统中的合法读者才有资格进行图书的借阅活动。

(3)借书/还书处理:主要完成读者的借书和还书活动,记录读者借还书情况并及时反映图书的在库情况。

(4)读者借阅记录:让每位读者能及时了解自己的借书情况,包括曾经借阅记录以及未还书记录。

(5)图书书目检索:读者能够根据不同的信息(如书名、作者、关键词等)对图书馆的存书情况进行查找,以便快速的找到自己希望的图书。

(6)图书超期通知:为图书管理员提供一个统计信息,能够统计出到目前为止逾期未归还的图书及相应的读者信息。

三、可行性研究

在图书管理系统中,要为每个借阅者建立一个账户,并给借阅者发放借阅卡,账户中存储借阅者的个人信息、借阅信息以及预定信息。持有借阅卡的介于这可以借阅书刊、返还书刊、查询书刊信息、预定书刊并取消预订,但这些操作都是通过图书管理员进行的,也即借阅者不直接与系统交互,而是图书管理员充当借阅者的代理与系统交互。

1.系统设计目标

(1)对图书资源进行分类,发布到网上,以供读者阅读或查询。

(2)为读者提供图书检索功能,读者能方便地阅览电子图书,建立书签。

(3)图书馆管理员能对读者的用户名、密码及权限进行管理。

(4)图书馆管理员能够通过自己的用户名密码进行登录、查询、修改图书馆藏书信息并能对阅览者的信息进行浏览、添加、删除、修改操作。

(5)该系统还应能对借阅者的借书信息数据进行记录并计算自动计算借阅时间;根据软件设置,系统自动选择对于超时归还者的惩罚办法。

2.分析系统建设在各方面的可行性

系统的可行性研究可从技术、经济、操作、组织、社会5个方面进行。

(1)技术可行性由于网络的普遍应用,使的期刊管理业务非常的方便,无需再进行网络的建设。ASP.NET对数据库的支持好、开发难易度容易、使用简单的Windows平台、对组件的支持,采用编译之后执行的方式。SQLServer数据库和ASP.NET技术的有机结合,可以开发出实用、简便、高效的基于网络的期刊管理系统。因此技术上是可行的。

(2)经济可行性一方面,系统的开发不需要额外增加设备购置费、软件开发费、管理和维护费用。另一方面,系统的开发可以较好地解决图书馆因日常事务繁杂而造成的处理效率低,出错率偏高的局面,并可以及时了解各项日常事务的进展情况,为及时调整库存资料提供可靠的数据支持,从而明确工作目标,同时还可以减少人工劳动、提高工作效率、增加书本流通量。

(3)操作可行性计算机以强大的信息处理能力作为人类脑力劳动的有利助手登上历史舞台后,已渗透到社会生活的各个领域,使现代社会组织、特别是企业,学校的信息处理能力适应现代化管理的要求,且系统逐步从单项事务信息处理系统迅速向综合服务(决策支持系统)的管理信息系统发展。本系统使用界面良好,易于操作。图书馆拥有一批较高素质的员工,只需了解相关知识,就可熟练操作本系统了。

(4)组织可行性制定合理的项目实施进度计划、设计合理的组织机构、选择 经验 丰富的管理人员、建立良好的协作关系、制定合适的培训计划等,保证项目顺利执行。此系统的开发只需要编程技术纯熟的学生,配合熟悉的系统开发过程及熟悉图书管理流程的人即可完成,在学校符合这样要求的人挺多,可组成系统开发团队,所以在组织上市可行的。

(5)社会可行性此系统主要针对图书馆,而且是给图书管理员减负,促进图书馆图书有序、安全、高效管理的系统,对社会没有什么不良的影响。综上可得,图书管理系统的开发在技术、经济、操作、社会上都是可行的。

结语:

综上所述,开发中小型图书馆的图书管理软件已经很有必要,并且实现研究服务于实践的原则。从而在图书馆对新旧书的反应;对书籍借阅的管理能力;对读者和图书馆工作人员的管理能力;对图书馆管理人员软件操作的适应时间和操作感觉这些方面都将大大的提高的同时,获得显著的社会效益。

试谈图书管理系统安全稳定性

SQL(结构化查询语言)是世界上最流行的和标准化的数据库语言。Mysql可以说是目前最为流行的开源数据库管理系统软件,是一个真正的多用户、多线程SQL数据库服务器。Mysql开放源码,快捷灵活、稳定和容易使用等优点决定了其在中小型管理系统应用的优势。本文以基于Mysql网络数据库的图书管理系统为例,从安全稳定性要求和采取的安全策略等方面进行分析研究。

1Mysql在信息管理系统的应用与优势

1.1Mysql的基本特性与应用

Mysql与其他大型数据库Oracle、DB2、SQLServer等相比,有自身的不足之处,但是没有影响到Mysql在信息管理系统的应用。在个人或者是中小型的企业,Mysql发挥了自身的优势与作用。Mysql开放源码,具有快捷灵活、稳定和容易使用等优点,并有效的提供了PHP、C,C++,JAVA和HTML等主流前端开发软件的API接口。支持多种 操作系统 包括Windows、Linux、Solaris、MasOS等。目前,搭建动态网站或者服务器的开源软件组合有典型的网络架构LAMP,极大地方便了开发者。Mysql应用非常广泛,Google、facebook、等使用Mysql作为网络数据库。

1.2Mysql应用于图书管理系统的优势

Mysql应用于图书管理系统的优势主要分为三个方面,一是免费开源优势,如果再使用linux操作系统,可以减少购买操作系统和数据库的开销。二是多种平台支持的优势,Mysql可以与多个平台进行有效的连接,实现信息资源的共享。三是中小型数据库灵活稳定的优势,在设计Mysql程序的时候,加入了SQL中没有的一些补充条件,更加的适用于在中小型数据库中使用。图书管理系统通常要保存用户信息、图书信息和借阅信息,以及建立相关的书籍查询等,数据仓库并不是很庞大,因此,使用Mysql来管理数据非常合适。

2基于Mysql的图书管理系统安全稳定性分析

高校图书管理系统是基于互联网的网络数据库,通常采用B/S的体系结构,因此,在浏览器层、Web服务器层、数据库服务器层都会存在安全性要求,以及在操作系统、网络技术等方面的安全问题。只有控制好图书管理系统的安全问题,才能保证信息资源的有效共享。基于网络数据库的图书管理系统的安全稳定性具有以下几个特点:(1)较高的稳定性,包括操作系统的稳定性和数据库系统的稳定性,要保持Mysql数据库的正常运行轨迹。(2)数据的保密性能,对客户信息、访问浏览量、客户端等进行有效的保密。(3)运行的速度很快,包括浏览器端、数据库服务器端的访问速度,以保证数据信息在查找、修改等方面的快速反应。(4)数据的备份与数据的恢复功能。数据库服务器中,包括图书信息、借阅图书记录、客户账号等在内的相关数据的安全问题,是保证图书管理系统正常运转的重要因素。要采取严格的防范 措施 ,同时,当发生数据故障的时候,要在最短的时间内恢复数据与系统。

3基于Mysql的图书管理系统安全稳定性策略

图书管理系统通常采用三层B/S结构模式,即用户层、Wed服务器层和数据库层。图书管理系统要注意提高数据库安全、操作系统安全和网络安全技术等方面的安全策略。

3.1优化数据库设计

比如,在遵循关系模式规范化的基础上,优化表设计适当增加中间表或增加冗余字段以减少连接查询所花的时间,优化JOIN操作和子查询尽量使用全连接避免产生中间表,尽量避免LIKE关键字和通配符进行查询。另外,还可以修改my.ini文件,对相关参数如sort_buffer_size、read_buffer_size、query_cache_size、max_connections等,设置合适的缓冲区大小和MySQL允许的最大连接进程数,以优化服务器提高系统性能,提高保证图书信息资源查询效率。

3.2数据容灾与备份机制

要定期地进行数据备份,保护图书书目数据、流通数据、客户信息等。定期的进行数据库的重组工作,增强数据库的使用性能。用好MYSQL的容灾与备份机制,比如:建立主从数据库集群,采用MySQL复制;制定数据库备份/恢复计划;启动数据库服务器的二进制变更日志;定期检查数据表;定期对备份文件进行备份;把MySQL的数据目录和备份文件分别放到两个不同的驱动器中,等等。

3.3帐户安全策略

可以从账户安全检查、系统内部安全措施、哈希加密等方面着手进行。比如,检查用户表mysql.user是否有匿名空账号(user=‘’),如有应将其删除。使用哈希加密帐户密码。加强客户的登录认证,尤其是服务器主机的登录认证。在主数据库创建从数据库操作所用的用户,并指定使用SLL认证等等。

3.4网络安全和操作系统安全策略

在网络安全策略方面,利用NAT技术,有效的防止发生来自网络外部的攻击现象,将局域网络内部的计算机系统进行隐蔽。正确设置计算机操作系统,确保客户使用真实身份,登录具有合法性。此外,还可以设置系统的实时监控,优化网络防火墙、文件加密以及杀毒软件技术的升级,等等。

4结语

综上所述,要确保基于Mysql在图书馆管理系统的安全稳定性能,要考虑很多种因素的影响,在数据库设计、数据库服务器、数据容灾与备份、帐户安全,以及计算机网络、操作系统等方面进行优化配置。图书管理系统的安全与稳定性能保证了信息数据的安全、稳定性与高效,保证了客户在不同的时间、地点、平台中有效的使用图书馆的资源信息共享。

参考文献:

[1]晋征.论基于网络数据库的图书馆管理系统安全性研究与实现[J].网络安全技术与应用,2015(3):27-29.

[2]阳学军.基于网络和人工智能的图书馆信息管理系统研究[J].岳阳职业技术学院学报,2005(3):59-61.

[3]林爱鲜.基于神经网络的图书馆管理系统的构建研究[J].电脑与电信,2012(4):48-50.

[4]田华.图书馆分布式数据库安全技术研究[J].现代情报,2007(4):161-163

c++图书管理系统设计报告

目录

一、序言 4
二、需求分析说明书 4
2.1系统介绍 4
2.2系统面向的用户群体 4
2.3系统的功能性需求 4
2.4系统的非功能性需求 5
2.4.1用户界面需求 5
2.4.2软硬件环境需求 5
2.4.3软件质量需求 5
三、可行性分析报告 5
3.1技术可行性 5
3.2人员可能性 5
3.3时间、设备可能性 5
3.4系统工作量 5
3.5代码工作量 5
3.6文档要求 5
四、开发环境与项目规划 5
4.1开发环境 5
4.2项目规划与管理 5
4.2.1开发人员安排 5
4.2.2开发进度安排 6
五、软件界面设计标准与规范 6
5.1编写目的 6
5.2界面设计思想 6
5.3界面设计原则 6
5.4界面设计样式 6
5.5常见提示信息样式 6
5.6常见错误信息样式 7
5.7其他界面约定 7
六、软件编码设计标准与规范 7
6.1对象命名约定 7
6.2常量和变量命名约定 8
6.3结构化编码约定 8
6.4数据源的约定 9
6.5数据库访问约定 9
6.6其他约定 9
七、数据库分析与设计 10
7.1数据库环境说明 10
7.2数据库命名标准与规范 10
7.3数据库逻辑设计 10
7.4数据库物理设计 10
7.4.1表、视图汇总 10
7.4.2各表、视图设计详解 11
八、软件体系结构设计说明书 15
8.1系统概述 15
8.2设计约束 15
8.3设计策略 15
8.4系统概要设计说明书 16
8.4.1图例说明 16
8.4.2系统总体结构图 16
8.4.3销售子系统流程图 17
8.4.4进货子系统流程图 17
8.4.5退货子系统流程图 17
8.5系统详细设计说明书 17
8.5.1系统模块汇总 17
8.5.2系统核心模块详解 18
8.5.3系统模块详解 28
九、用户界面设计报告 42
9.1界面设计规范 42
9.2系统窗体汇总 42
9.3主界面设计 43
9.4子界面设计 43
9.5界面资源设计 44
十、软件测试分析报告 44
10.1测试范围与主要内容 44
10.2测试方法 44
10.3测试报告 44
10.4改进建议与措施 45
十一、软件使用说明书 45
11.1软件概述 45
11.2系统安装 45
11.3使用说明 45
11.3.1系统登陆 45
11.3.2注销与退出 46
11.3.3办理进货登记 46
11.3.4办理退货登记 48
11.3.5销售图书 48
11.3.6会员管理 49
11.3.7员工管理 49
11.3.8书目检索 50
11.3.9查看统计信息 50
11.3.10修改密码 50
11.3.11关于/帮助 50
参考资料 51

C++:图书管理系统设计

以前做的,可以参考一下

//***********************
//图书馆管理系统
//***********************
#include<stdio.h>
#include<string.h>
#include<malloc.h>
#define null 0
#define max 65536
static int n;
//*********************
// 图书结构体
//*********************
typedef struct
{
char num[10]; //书号
char name[9]; //书名
char addr[31]; //作者
int Nowcounter; //现存量
int Allcounter; //总库存量
}datatype;
datatype *x[max]; //定义两个指针数组
datatype *p;

//*****************************
//图书功能函数列表
//*****************************
void redo(); //主递归函数
void creatlist(datatype *x[]); //图书建立函数
int menu_select(); //功能菜单函数
void find(datatype *x[],int n); //查找函数
void delnode(datatype *x[]); //插入函数
void printlist(datatype *x[]); //显示函数
void jieyue(datatype *x[],int n); //借阅函数
void guihuan(datatype *x[],int n); //归还函数
//*****************************
//主递归函数程序
//*****************************
void redo()
{
int i=0,j,n1,k=0,flage;
for( ; ;)
{
switch( menu_select())
{
case 1: //选项1的实现
printf("***********************\n");
printf("* 图书的建立 *\n");
printf("***********************\n");
creatlist(x);
break;
case 2: //选项2的实现
printf("***********************\n");
printf("* 新图书信息的添加 *\n");
printf("***********************\n");
printf(" 插入的个数:");
scanf("%d",&n1); //输入插入新图书的个数
for(i=0;i<n1;i++)
{
flage=0;
p=(datatype *)malloc(sizeof(datatype)); //分配一个节点空间
printf(" 书名: ");
scanf("%s",p->name); //输入插入书的书名
if(flage==0)
{
for(j=0;j<n;j++)
{
if(strcmp(x[j]->name,p->name) == 0 )//调用比较函数查看书名是否已知
{
x[j]->Allcounter++;
x[j]->Nowcounter++;
flage=1;
}

}

if(flage==0)
{
n++;
printf(" 第 %d 个图书数据:\n",n); //插入新的图书
p=(datatype *)malloc(sizeof(datatype));
x[n-1]=p;
printf(" 书名:");
scanf("%s",x[n-1]->name); //输入书名
printf(" 编号:");
scanf(" %s",x[n-1]->num); //输入书号
printf(" 作者:");
scanf(" %s",x[n-1]->addr); // 输入作者名
printf(" 总库存量: ");
scanf("%d",&x[n-1]->Allcounter); //输入总库存量
x[n-1]->Nowcounter=x[n-1]->Allcounter;
}
}
}
break;
case 3:
printf("***********************\n");
printf("* 图书信息的查询 *\n");
printf("***********************\n");
find(x,n);
break;
case 4:
printf("************************\n");
printf("* 图书信息的删除 *\n");
printf("************************\n");
delnode(x);
break;
case 5:
printf("************************\n");
printf("* 图书信息的显示 *\n");
printf("************************\n");
printlist(x);
break;
case 6:
printf("************************\n");
printf(" 图书的借阅\n");
printf("************************\n");
jieyue(x,n);
break;
case 7:
printf("************************\n");
printf(" 图书的归还\n");
printf("************************\n");
guihuan(x,n);
break;
case 0:
printf("\t 谢谢使用,再见! \n");
return;
}
}
}
//*************************
//主函数程序
//*************************
void main ()
{
redo(); //调用主递归函数
}
//*************************
//功能菜单函数
//*************************
int menu_select()
{
int i;
printf(" 欢迎进入图书管理系统!\n");
printf("===========================\n");
printf(" 1. 图书信息的采集\n");
printf(" 2. 新图书的插入\n");
printf(" 3. 图书信息的查询\n");
printf(" 4. 图书的删除\n");
printf(" 5. 图书的显示\n");
printf(" 6. 图书的借阅\n");
printf(" 7. 图书的归还\n");
printf(" 0. 退出管理系统\n");
printf("===========================\n");
printf(" 请选择0-7: ");
scanf("%d",&i);
while(i<0||i>7)
{
printf("\n\t输入出错,重选0-7: ");
scanf("%d",&i);
}
return i;
}
//********************************
// 建立链表图书建造函数
//********************************
void creatlist(datatype *x[])
{
int i;
printf(" 请输入要建立图书的个数:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf(" 第 %d 个图书数据:\n",i+1);
p=(datatype *)malloc(sizeof(datatype)); //分配一个节点空间
x[i]=p;
printf(" 书名:"); //输入图书各项内容
scanf("%s",x[i]->name);
printf(" 编号:");
scanf(" %s",x[i]->num);
printf(" 作者:");
scanf(" %s",x[i]->addr);
printf(" 总库存量: ");
scanf("%d",&x[i]->Allcounter);
x[i]->Nowcounter=x[i]->Allcounter;
}
}

//**********************************
// 查找函数程序
//*********************************
void find(datatype *x[],int n)
{

char num[10];
char name[9];
int t,i;
printf("=================\n"); //输出查找方式
printf(" 1.按编号查询 \n");
printf(" 2.按书名查询 \n");
printf("=================\n");
printf(" 请选择 : ");
scanf("%d",&t); //输入选择信息
if(t==1)
{
printf(" 请输入要查找者的编号: ");
scanf("%s",num); //输入书号
for(i=0;i<n;i++)
{
if(strcmp(x[i]->num,num)==0) //调用strcmp函数
{
printf(" 编号 书名 作者 现库存量 总库存量\n"); //输出要查询书的信息
printf(" %-10s%-10s%-10s%-10d%-10d\n",x[i]->num,x[i]->name,x[i]->addr,x[i]->Nowcounter,x[i]->Allcounter);
}
else
continue;
}
}
else
{
printf(" 请输入要查询的书名: ");
scanf("%s",name); // 输入书名
for(i=0;i<n;i++)
{
if(strcmp(x[i]->name,name)==0)
{
printf("编号 书名 作者 现库存量 总库存量\n"); //输出要查询书的信息
printf(" %-10s%-10s%-10s%-10d%-10d\n",x[i]->num,x[i]->name,x[i]->addr,x[i]->Nowcounter,x[i]->Allcounter);
}
else
continue;
}
}
}
//******************************
//删除函数程序
//******************************
void delnode(datatype *x[])
{
char num1[10],name1[10]; //定义两个字符数组
int i,j,m=1,p;
printf(" 1.按编号删除\n"); //输出选择方式
printf(" 2.按书名删除\n");
printf(" 3.返回\n");
printf(" 请选择:\n");
scanf("%d",&p); //输入选择信息
if(p>3||p<1)
{
printf(" 您的输入有误,请重新输入!\n");
scanf("%d",&p); //重新输入选择信息
}
switch(p) //实现删除程序
{
case 1:
printf(" 输入要删除书的编号:\n");
scanf(" %s",num1);
for(i=0;i<n;i++)
{
if(strcmp(x[i]->num,num1)==0) //调用strcmp函数
{
m=0;
n--;
for(j=i;j<n;j++)
x[j]=x[j+1]; //将该书信息删除
printf(" 该书已删除!\n");
}
}
if(m==1)
printf(" 没有这样的的图书\n");
break;
case 2:
printf(" 输入要删除书的名字:\n");
scanf("%s",&name1);
for(i=0;i<n;i++)
{
if(strcmp(x[i]->name,name1)==0) //调用strcmp函数
{
m=0;
n--;
for(j=i;j<n;j++) //将该书信息删除
x[j]=x[j+1];
printf(" 该书已删除!\n");
}
}
if(m==1)
printf(" 没有这样的的图书\n");
break;
case 3:
break;

}
}
//////////////////////////
////借阅函数程序
/////////////////////////
void jieyue(datatype *x[],int n)
{
int i,m=1,p;
char name1[10],num1[10]; //定义两个字符数组
printf(" 1.按名字借阅\n"); //输出选择方式
printf(" 2.按编号借阅\n");
printf(" 3.返回\n");
printf(" 请选择\n");
scanf("%d",&p); //输入选择信息
if(p>3||p<1)
{
printf(" 您的输入有误!\n");
scanf("%d",&p); //重新输入选择信息
}
switch(p) //实现查询程序
{
case 1:
printf(" 请输入你要的书的名字!\n");
scanf("%s",&name1); // 输入书名
for(i=0;i<n;i++)
{
if(strcmp(x[i]->name,name1)==0) //调用strcmp函数
{
m=0;
if(x[i]->Nowcounter!=0)
x[i]->Nowcounter--;
printf(" 借书成功!\n");
if(x[i]->Nowcounter==0)
printf(" 这本书已经没有了 \n");
}
}
if(m==1)
printf(" 您要的书不存在!\n");
break;
case 2:
printf(" 请输入你要的书的编号!\n");
scanf("%s",&num1); // 输入书号
for(i=0;i<n;i++)
{
if(strcmp(x[i]->num,num1)==0) //调用strcmp函数
{
m=0;
if(x[i]->Nowcounter!=0)
x[i]->Nowcounter--; //现存书数量减1
printf(" 借书成功!\n");
if(x[i]->Nowcounter==0)
printf(" 这本书已经没有了 \n");
}
}
if(m==1)
printf(" 您要的书不存在!\n");
break;
case 3:
break;
}
}
///////////////////////
/////归还程序
//////////////////////
void guihuan(datatype *x[],int n)
{
int i,q,m=1;
char name1[10],num1[10]; //定义两个字符数组
printf(" 1.按书名归还\n"); //输出可选择方式
printf(" 2.按书号归还\n");
printf(" 3.返回\n");
printf(" 请选择\n");
scanf("%d",&q); //输入选择信息
if(q>3||q<1)
{
printf(" 您的输入有误!\n");
scanf("%d",&q); //重新输入选择信息
}
switch(q) //实现归还程序
{
case 1:
printf(" 输入归还书的书名: ");
scanf("%s",&name1); // 输入书名
for(i=0;i<n;i++)
{
if(strcmp(x[i]->name,name1)==0)
{
m=0;
x[i]->Nowcounter++;
printf("此书归还成功!\n");
printf("此书的存储情况\n");
printf("编号 书名 作者 现存量 总存量\n");
printf("===============================================\n");
printf(" %-10s%-10s%-10s%-10d%-10d\n",x[i]->num,x[i]->name,x[i]->addr,x[i]->Nowcounter,x[i]->Allcounter);
printf("===============================================\n");
}
if(strcmp(x[i]->name,name1)==0)
continue;
}
if(m==1)
printf("此书不是图书馆的!\n");
break;
case 2:
printf("输入归还书的书号\n");
scanf("%s",&num1); // 输入书号
for(i=0;i<n;i++)
{
if(strcmp(x[i]->num,num1)==0)
{
m=0;
x[i]->Nowcounter++; //显存书增加1
printf("此书归还成功!\n");
printf("此书的存储情况\n");
printf("编号 书名 作者 现存量 总存量\n");
printf("==============================================\n");
printf(" %-10s%-10s%-10s%-10d%-10d\n",x[i]->num,x[i]->name,x[i]->addr,x[i]->Nowcounter,x[i]->Allcounter);
printf("==============================================\n");
}
if(strcmp(x[i]->num,num1)==0) //调用strcmp函数
continue;
}
if(m==1)
printf("此书不是图书馆的!\n");
break;
case 3:
break;
}
}
//**************************************
// 输出程序
//**************************************
void printlist(datatype *x[])
{
int i;
printf("编号 书名 作者 现存量 总存量\n"); //输出图书各项信息
for(i=0;i<n;i++)
{
printf(" %-10s%-10s%-10s%-10d%-10d\n",x[i]->num,x[i]->name,x[i]->addr,x[i]->Nowcounter,x[i]->Allcounter);
}
printf("===============================================\n");
}
求采纳为满意回答。

用c++编写图书管理系统

给你找了一个,你参考一下:
/*****************************************************************************************/
#include <iostream>
#include <iomanip>
#include <string>
#include <fstream>//输入/输出文件流类
using namespace std;
const int Maxr=100;//最多的读者
const int Maxb=100;//最多的图书
const int Maxbor=5;//每位读者最多借五本书
//读者类,实现对读者的信息的描述

class Reader
{
private:
int tag; //删除标记 1:已删 0:未删
int no; //读者编号
char name[10]; //读者姓名
int borbook[Maxbor];//所借图书
public:
Reader() {}
char *getname() {return name;} //获取姓名
int gettag() {return tag;} //获取删除标记
int getno() {return no;} //获取读者编号
void setname(char na[]) //设置姓名
{
strcpy(name,na);

}
void delbook(){ tag=1; }//设置删除标记 1:已删 0:未删
void addreader(int n,char *na)//增加读者
{
tag=0;
no=n;
strcpy(name,na);
for(int i=0;i<Maxbor;i++)
borbook[i]=0;
}
void borrowbook(int bookid)//借书操作
{
for(int i=0;i<Maxbor;i++)
{
if (borbook[i]==0)
{
borbook[i]=bookid;
return;

}
}

}
int retbook(int bookid)//还书操作
{
for(int i=0;i<Maxbor;i++)
{
if(borbook[i]==bookid)
{
borbook[i]=0;
return 1;

}
}
return 0;
}
void disp()//读出读者信息
{
cout << setw(5) << no <<setw(10) << name<<"借书编号:[";
for(int i=0;i<Maxbor;i++)
if(borbook[i]!=0)
cout << borbook[i] << "|";
cout << "]"<<endl;

}
};

//读者类库,实现建立读者的个人资料
class RDatabase
{
private:
int top; //读者记录指针
Reader read[Maxr];//读者记录
public:
RDatabase() //构造函数,将reader.txt读到read[]中
{
Reader s;
top=-1;
fstream file("reader.txt",ios::in);//打开一个输入文件
while (1)
{
file.read((char *)&s,sizeof(s));
if (!file)break;
top++;
read[top]=s;
}
file.close(); //关闭 reader.txt
}
void clear()//删除所有读者信息
{
top=-1;
}
int addreader(int n,char *na)//添加读者时先查找是否存在
{
Reader *p=query(n);
if (p==NULL)
{
top++;
read[top].addreader(n,na);
return 1;
}
return 0;

}
Reader *query(int readerid)//按编号查找
{
for (int i=0;i<=top;i++)
if (read[i].getno()==readerid &&
read[i].gettag()==0)
{
return &read[i];
}
return NULL;
}
void disp() //输出所有读者信息
{
for (int i=0;i<=top;i++)
read[i].disp();
}
void readerdata();//读者库维护
~RDatabase() //析构函数,将read[]写到reader.txt文件中
{
fstream file("reader.txt",ios::out);
for (int i=0;i<=top;i++)
if (read[i].gettag()==0)
file.write((char *)&read[i],sizeof(read[i]));
file.close();

}
};
void RDatabase::readerdata()
{

char choice;
char rname[20];
int readerid;
Reader *r;
while (choice!='0')
{
cout <<"\n\n\t\t\t读 者 维 护\n\n\n\t\t 1 新 增\n\n\t\t 2 更 改\n\n\t\t 3 删 除\n\n\t\t 4 查 找\n\n\t\t 5 显 示\n\n\t\t 6 全 删\n\n\t\t 0 退 出"<<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;
}
r->disp();
break;
case '5':
disp();
break;
case '6':
clear();
break;
default:cout<<"输入错误,请从新输入:";break;
}
}
}

//图书类,实现对图书的描述,图书的编号,书名,借出,还入等
class Book
{
private:
int tag;//删除标记 1:已删 0:未删
int no;//图书编号
char name[20];//书名
int onshelf;//是否再架 1:再架 2:已借
public:
Book(){}
char *getname() { return name; }//获取姓名
int getno(){ return no; }//获取图书编号
int gettag(){ return tag; }//获取删除标记
void setname(char na[])//设置书名
{
strcpy(name,na);
}
void delbook(){ tag=1;}//删除图书
void addbook(int n,char *na)//增加图书
{
tag=0;
no=n;
strcpy(name,na);
onshelf=1;
}
int borrowbook()//借书操作
{
if (onshelf==1)
{
onshelf=0;
return 1;
}
return 0;
}
void retbook()//还书操作
{
onshelf=1;
}
void disp()//输出图书
{
cout << setw(6) << no << setw(18) << name << setw(10)
<<(onshelf==1? "在架":"已借") <<endl;
}
};

//图书库类,实现对图书的维护,查找,删除等
class BDatabase
{
private:
int top; //图书记录指针
Book book[Maxb]; //图书记录
public:
BDatabase()//构造函数,将book.txt读到book[]中
{
Book b;
top=-1;
fstream file("book.txt",ios::in);
while (1)
{
file.read((char *)&b,sizeof(b));
if (!file) break;
top++;
book[top]=b;
}
file.close();
}
void clear()//全删
{
top=-1;
}
int addbook(int n,char *na)//增加图书
{
Book *p=query(n);
if (NULL==p)
{
top++;
book[top].addbook(n,na);
return 1;
}
return 0;
}
Book *query(int bookid)//查找图书
{
for (int i=0;i<=top;i++)
if (book[i].getno()==bookid &&book[i].gettag()==0)
{
return &book[i];
}
return NULL;
}
void bookdata();//图书库维护
void disp()
{
for (int i=0;i<=top;i++)
if (book[i].gettag()==0)
book[i].disp();
}
~BDatabase()//析构函数,将book[]写到book.txt文件中
{
fstream file("book.txt",ios::out);
for (int i=0;i<=top;i++)
if (book[i].gettag()==0)
file.write((char *)&book[i],sizeof(book[i]));
file.close();
}
};
void BDatabase::bookdata()
{
char choice;
char bname[40];
int bookid;
Book *b;
while (choice!='0')
{
cout <<"\n\n\n\t\t\t图 书 维 护 "<<endl<<endl;
cout<<"\t\t1 新 增\n \t\t2 更 改\n\t\t3 删 除\n\t\t4 查 找\n\t\t5 显 示\n\t\t6 全 删\n\t\t0 退 出"<<endl;
cin >> choice;
switch (choice)
{
case '1':
cout << "输入图书编号:"<<endl;
cin >> bookid;
cout << "输入图书书名:"<<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();
break;
default:cout<<"输入错误,请从新输入:";
}
}
}

//main() 函数的实现,程序的主界面的引导

void main()
{
char choice;
int bookid,readerid;
RDatabase ReaderDB;
Reader *r;
BDatabase BookDB;
Book *b;
while(choice!='0')
{
cout <<endl<<endl<<"\t\t\t 图 书 管 理 系 统\n\n\n";

cout <<"\t\t\t1 借 书\n\n\t\t\t2 还 书 \n\n\t\t\t3 图 书 维 护\n\n\t\t\t4 读 者 维 护\n\n\t\t\t0 离 开"<<endl;
cin >> choice;
switch (choice)
{
case '1':
cout <<" 借书 读者编号:";
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':
cout<<"还书\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<<"输入错误,请从新输入:";

}
}
}

相关文章
学术参考网 · 手机版
https://m.lw881.com/
首页