• 445.50 KB
  • 2022-04-22 11:30:57 发布

C++图书馆管理系统毕业设计(含源文件)

  • 64页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'C++图书馆管理系统毕业设计(含源文件)图书管理系统摘要图书馆作为一个信息资源的集散地,包含很多信息数据的管理。若图书馆采取手工的方式对图书资料和图书借阅情况进行人工管理的话,由于信息数据的繁多,会使手工处理的工作量非常大,同时也就影响了图书馆整体的管理效率。因此,人们希望使用一个有效的图书管理系统,用以提高图书馆的日常工作效率。在这样的背景下,本文针对图书管理的一般流程,以C/S模式设计出了一个图书借阅管理系统,可满足大多数中小型的图书馆的管理要求。本设计是建立在VisualC++及Access数据库平台开发基础上的,一个典型的信息管理系统(MIS)。在本文中,给出了该系统的整个系统分析、设计以及实现的过程,包括需求分析、功能模块的分析与设计、数据模式的分析与设计,最后是系统的VC实现。所设计的图书管理系统可以满足读者,系统的运行结果表明,图书馆工作人员以及管理人员三者的共同需求。关键词:图书馆;借阅;权限;管理系统I BOOKMANAGEMENTSYSTEMABSTRACTSincevolumesofbookmanagementactivitieshavetotakeplacedailyinlibrary,itwillbeahardworkandbelowefficiencyifonlymanualoperationsareadoptedinthemanagement.Toupgradetheirmanagementefficiency,peoplewouldliketodevelopvariousBookManagementSystemstohelptheirdailywork.Inthispaper,abookmanagementsystembuiltinClient/Servermodelisdesigned,whichcanmeetrequirementsofmostlibrarymanagementforitsintegrationofgenerallibrarytransactionmanagementprocesses.Thedesignisatypicalinformationmanagementsystem(MIS),whichbasedonVisualC++andAccessdatabaseplatformdevelopmentbasis.Inthispaper,itsdevelopmentmainlyincludingthesystem’srequirementanalysis,functionmodulesdesign,datamodeldesignanditsVCimplementation.Therunningofthesystemprovesthatitcouldmeetthecommonusageforvariouskindsofusersincludingreaders,librarystaffsandadministrators.Keywords:library;borrowing;authority;managementsystemI 61第一章绪论§1.1开发背景§1.1.1课题的背景当今时代是飞速发展的信息时代,各行各业中都离不开信息处理,这正是一个计算机被广泛应用的有利时机。使用计算机进行信息控制,不仅可以提高工作效率,而且还大大的提高了其信息的安全性。尤其对于复杂的信息管理,计算机能够充分发挥它的优势,因此我们进行信息管理以及信息管理系统的开发时,就需要很好的使用计算机。系统开发是系统管理的前提,本系统就是为管理图书借阅信息而设计的。根据调查得知,图书馆中的工作人员对借阅管理采用的主要方式是基于文本、表格等纸介质的手工处理,对于图书借阅情况(如借书天数、超过限定借书时间的天数)的统计和核实等往往采用对借书卡的人工检查进行,对借阅者的借阅权限、以及借阅天数等也是用人工计算、手抄进行。但是由于图书馆中数据信息处理工作量十分大,因此很容易出错,经常出现数据的丢失等一系列问题,总的来说,缺乏系统,规范的信息管理手段。§1.1.2课题的来源本课题是基于VisualC++及Access数据库平台开发的图书借阅管理系统,用于解决图书在馆内信息的变更以及读者借阅等问题。§1.2图书借阅管理的发展概况图书借阅管理系统的发展历史可以追溯到20世纪60年代末期。由于当时计算机技术已经进入实用阶段,同时大型图书馆用手工来查找图书信息或统计借阅信息既费时费力又非常容易出差错,为了解决这个矛盾,第一代的图书借阅管理系统应运而生。当时由于技术条件和需求的限制,用户非常少,它的出现为图书借阅的管理展示了美好的前景,即用计算机的高速度和自动化来代替手工的巨大工作量,用计算机的高准确性来避免手工的错误和误差。第二代的图书借阅管理系统出现于20世纪70年代末。由于计算机技术的飞速发展,无论是计算机的普及性,还是计算机系统工具和数据库技术的发展,都为图书借阅管理系统的阶段发展提供了可能。但未能系统地考虑图书借阅的需求和理念。61 图书借阅管理系统的革命性变革出现在20世纪90年代末。随着信息爆炸、知识经济时代的到来,使个人、单位、社会对图书借阅管理系统有了更高的需求;同时由于个人电脑的普及,数据库技术、客户/服务器技术,特别是Internet/Intranet技术的发展,使得第三代图书借阅管理系统的出现成为必然。第三代[2]图书借阅管理系统的特点是从图书借阅管理的角度出发,用集中的数据库处理几乎所有与图书借阅相关的数据。友好的用户界面,强有力的报表生成工具、分析工具和信息的共享使得图书借阅管理人员得以摆脱繁重的日常工作,集中精力从战略的角度来考虑图书借阅规划和政策。61 第二章系统解决方案§2.1设计方案的论证§2.1.1设计方案的选择方案一:使用B/S架构建模所谓B/S架构,是指“Browser/Server(浏览器/服务器)”应用模式,是过去一直使用的C/S(Client/Server)架构的发展,采用这种模式设计的应用系统,用户的电脑上不需要安装或者任何软件(或者只需要下载安装一些插件),就可以使用浏览器,和平时上网一样,进行业务处理。这种模式最大的优势是对广域分布用户的支持(主要是基于这种架构特殊的事务处理模式),即使是拨号上网的远程用户,也不会感觉速度很慢。另外,无需安装、操作和维护简单方便也是这种应用架构的优势。其工作原理是在前端采用IE、Netscape等浏览器将用户提交的操作信息向Web服务器发出HTTP请改,Web服务器通过ASP和一些中间组件访问后台数据库,并将操作结果以HTML页面的形式返回给前端浏览器。如图:HTML请求HTML响应WEB服务器浏览器Asp文件ADOODBC数据库图2.1B/S工作流程图但就发展程度而言,B/S架构在技术上还不是很成熟。方案二:使用C/S架构建模这里所说的C/S架构,是“Client/Server(客户机/服务器)”61 应用模式。请求另一计算机为之服务的计算机称为客户机(Client),而处理数据库的计算机称为服务器(Server)。客户机运行数据请求程序,并将这些请求传送到服务器。由客户机执行的计算称为前端处理,具有所有与提供、操作和显示数据相关的功能;而在服务器上执行的计算称为后端处理,它的设备是一台管理数据资源并执行数据库引擎功能(如存储、操作和保护数据)的计算机。客户机/服务器是将处理工作分散到工作站和服务器上去处理,服务器不仅负责存取数据,还要对数据作一定的处理工作,这样在数据发送给工作站之前即取得查询结果集,从而在大部分情况下可大大减少网络传输的开销。因此,用户只需关心界面的处理工作即可,从而减轻了工作处理负担。工作流程图如下:服务器数据库命令数据工作站的前端应用程序数据库接口数据库通信接口服务器端数据库引擎命令数据图2.2C/S工作流程图两层客户机/服务器技术在结构、开发环境、应用平台的开发方式上都已经非常成熟了,这是相对B/S架构最大的一个优势。方案的比较与选取Client/Server(C/S)是当前数据库应用程序中极为流行的一种方式,尤其是在网络技术的充分发展之后。当前有很多系统都采用这种方式进行构造,其最大优点是将计算机工作任务分别由客户端和服务器端来共同完成,这样有利于充分合理利用系统资源。而我们经常提到的Browser/server(B/S)结构,它也是采用C/S结构的基本思想,使用浏览器作为系统前端,实现了我们理想中的瘦客户。但是系统的工作量并没有真正减少,而是将部分客户端的工作量交付给服务器端来完成。考虑到技术风险的问题,本系统决定采用的是C/S结构。§2.1.2设计工具的选择设计工具的选择对一个系统的开发来说是十分重要的,既决定开发人员的工作效率,也决定了能否给用户提供一个友好的界面,还决定着今后是否能方便地对系统进行维护、改善及扩充。前台开发技术的选择:Visual61 C++是一个功能强大的可视化软件开发工具。自1993年Microsoft公司推出VisualC++1.0后,随着其新版本的不断问世,VisualC++已成为专业程序员进行软件开发的首选工具。VisualC++6.0不仅是一个C++编译器,而且是一个基于Windows操作系统的可视化集成开发环境(integrateddevelopmentenvironment,IDE)。VisualC++6.0由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导ClassWizard等开发工具。这些组件通过一个名为DeveloperStudio的组件集成为和谐的开发环境。后台数据库的选择:现有的数据库有大型的SQLServer,Oracle和小型的Access,FoxPro,而本系统采用的是微软公司的Access。因为Access能使用数据表示图或自定义窗体收集信息。数据表示图提供了一种类似于Excel的电子表格,可以使数据库一目了然。另外,Access允许创建自定义报表用于打印或输出数据库中的信息。Access也提供了数据存储库,可以使用桌面数据库文件把数据库文件置于网络文件服务器,与其他网络用户共享数据库。Access是一种关系数据库工具,关系数据库是已开发的最通用的数据库之一。如上所述,Access作为关系数据库开发具备了许多优点,可以在一个数据包中同时拥有桌面数据库的便利和关系数据库的强大功能,同时对于小型的数据交换来说使用非常方便。§2.2设计方案的说明§2.2.1设计意义根据上面绪论中提到的问题,有必要建立一个图书管理系统,使图书管理工作规范化、系统化、程序化,避免图书管理的随意性,提高信息处理的速度和准确性,以保证能够及时、准确、有效的查询和修改图书信息。作为计算机应用的一部分,使用计算机对图书信息进行管理,具有着手工管理所无法比拟的优点。通过该系统,能够让图书管理员迅速完成借阅图书的工作,还能对现存图书和借阅人员情况进行快速的查询;再者,借阅者自己也可以通过该系统对现存图书信息进行查询,完全能达到了快速、准确、便利管理图书的要求。§2.2.2系统总体描述该系统是一个典型的信息管理系统(MIS)。通过这个系统,管理员能简捷、方便的管理图书信息、读者信息以及借阅信息;而用户也可以通过该系统对这些信息进行查询。该系统按照用户权限和实现功能的不同分为了两部分:外部读者对数据库的查询访问和内部管理人员对数据记录的管理维护。每一部分中包含各自实现的各项功能,对每一项功能的实现,将按照窗体设计以及运行情况的顺序逐一进行设计。61 §2.2.3系统角色类型该系统共有两类用户,他们是:管理员和读者管理员整个系统的最高管理者读者可查询相关信息图2.3用户类别总图读者:读者是权限最低的用户,只能进行信息浏览,无法进行其它的操作。示意图如下:信息查询退出系统读者图2.4读者权限用例图高级管理员:高级管理员是该系统中最高级别的管理员,他们能对该系统的所有功能模块进行操作,其中包括可以删除、修改一般管理员的信息;修改各人员的权限以及登陆密码等。示意图如下:管理员读者管理图书管理借阅管理信息查询退出系统设置管理员61 图2.5管理员权限用例图§2.2.4系统规划对于数据库系统,规划工作是十分必要的,规划的好坏将直接影响整个图书管理系统的成功与否。数据库设计中规划阶段的主要任务是:对建立数据库必要性及可行性进行分析,确定数据库系统在整个图书管理系统的地位。根据图书管理系统对技术人员和管理人员的水平、数据采集、管理活动以及借阅者的计算机素质的要求,决定把数据库管理系统设计成为一个综合的数据库,此数据库包括所有操作人员的活动功能。而且一般的图书管理系统应用界面都较为简单、功能都较为单一,因此,用一个综合的数据库就能满足图书管理要求,而且实现容易。图书管理系统可以按照用户权限和实现功能的不同分为两部分:外部学生对数据库的查阅访问和内部管理人员对图书记录的管理维护。但是,这两部分都调用的是同一数据库,只不过内部管理人员能实现所有管理功能,而外部读者访问数据库时,一些功能被屏蔽了。下面列出主要的系统功能规划:Ø设计不同用户的操作权限和登陆方法Ø对所有用户开放的图书查询、读者查询以及借阅查询Ø根据借阅情况对数据库进行操作Ø根据还书情况对数据库进行操作Ø根据续借情况对数据库进行操作Ø维护读者、图书以及管理员信息§2.2.5预期目的Ø提高图书馆的工作效率Ø通过全面简洁的信息查询、删除和修改方式,提高图书馆的工作效率Ø通过使用本系统,能达到全面高效的提高图书馆的管理水平、降低人力资源消耗、提高工作效率的目的。§2.2.6技术要求Ø数据库设计满足功能要求Ø数据库冗余度小,尽量满足三范式要求Ø绘制数据库各数据表之间的关系图Ø建立数据库访问接口类,实现对数据库的访问61 Ø完成功能模块中的一个较小的功能,以测试数据库接口的正确性61 第三章系统详细设计§3.1系统模块架构系统整体架构图如下:图书借阅管理系统读者管理图书管理退出系统管理员设置图书借还读者借阅权限读者档案管理图书类型设置图书信息管理图书借阅图书归还图书续借管理员档案管理系统查询查询图书信息查询读者信息查询借阅信息添加读者借阅权限修改读者借阅权限删除读者借阅权限添加读者信息修改读者信息删除读者信息添加图书类型修改图书类型删除图书类型添加图书信息修改图书信息删除图书信息添加管理员信息修改管理员信息删除管理员信息用户查询用户查询用户查询图3.1系统模块架构图61 §3.2系统功能说明§3.2.1系统登陆模块开始系统登陆手动输入用户编号和密码判断用户名和密码是否正确NY登陆到主界面图3.2系统登陆流程图(1)功能说明用户必须通过该模块才能进入到系统中去,进行各种操作。(2)功能特性系统通过该模块来实现权限,因此对于系统的保密性来说,是至关重要的环节。(3)输入、输出格式输入:系统登陆信息表Ø用户Ø密码输出:Ø判断是否可以进入系统61 §3.2.2读者管理模块§3.2.2.1读者借阅设置功能模块结束开始读者借阅设置添加借阅设置人工输入删除借阅设置人工输入该类型是否存在删除成功重新填写YNYN是否删除NYYN修改借阅设置该类型是否存在人工输入修改类型信息是否修改修改成功NNYY添加成功该类型是否存在是否添加图3.3读者借阅权限流程图(1)功能说明对于读者类型设置模块来说,主要是完成对图书馆借书的读者进行分类的功能,针对不同权限的读者,其能借阅的数量有所不同。读者类型设置模块主要包括:61 Ø添加读者类型基本信息Ø修改读者类型基本信息Ø删除读者类型基本信息(2)功能特性读者类型设置模块主要是用于设置不同权限用户的借书数量。(3)输入、输出格式输入:读者类型设置基本信息Ø类型名称Ø可借数量输出:Ø显示读者类型基本信息表(4)前提条件实现本功能,必须具有该系统的管理员权限。61 §3.2.2.2读者档案管理功能模块开始读者管理添加读者人工输入删除读者人工输入读者是否存在删除成功结束重新填写YNYN是否删除NYYN修改读者读者是否存在人工输入修改信息是否修改修改成功NNYY添加成功读者是否存在是否添加图3.4读者档案管理流程图(1)功能说明61 对于读者管理来说,读者的档案管理是非常重要的。在图书馆里,借书的读者众多,因此必须记录每位读者的基本信息,这样能及时联系读者,便于管理人员管理。读者档案管理模块主要包括:Ø添加读者的基本信息Ø修改读者的基本信息Ø删除读者的基本信息(2)功能特性读者档案管理模块的主要功能是管理读者的基本信息。(3)输入、输出格式输入:读者档案基本信息Ø读者条码Ø读者姓名Ø身份证号输出:Ø显示读者档案基本信息表(4)前提条件实现本功能,必须具有图书管理系统管理员权限。61 §3.2.3图书管理模块§3.2.3.1图书类型设置功能模块开始图书类型设置添加图书类型人工输入删除图书类型类心人工输入图书类型是否存在删除成功结束重新填写YNYN是否删除NYYN修改图书类型图书类型是否存在人工输入修改类型信息是否修改修改成功NNYY添加成功图书类型是否存在是否添加图3.5图书类别设置流程图(1)功能说明61 图书类型设置模块的功能体现在两个方面:一方面,可以对图书管里的图书信息进行合理而有效的分类管理,这样在实际图书管理过程中带来了极大的方便。另一方面不同类型的图书,在不同时间和不同的地点的借阅需求也是不同,因此通过图书类型设置,对不同类型的图书借阅的天数进行了合理的设定(在该系统中没有实现),为图书的实际借阅过程提供了更为合理和灵活多变的需求。图书类型设置模块主要包括:Ø添加图书类型基本信息Ø修改图书类型基本信息Ø删除类型类型基本信息(2)功能特性图书类型设置模块帮助图书管理人员在新书的入库的操作方面带来极大的方便,在一定程度上简化了烦琐的图书信息录入操作。同时也简化了图书库存表的容余字段,提高的在图书查询过程中的效率。对图书进行了科学有效的分类,从而更加有效的实现了图书的整个管理过程。(3)输入、输出格式输入:图书类别信息表Ø图书条码信息Ø图书类型名称信息输出:Ø图书类型信息表(4)前提条件实现本功能,必须具有图书管理系统管理员权限。61 §3.2.3.2图书档案管理功能模块开始图书管理添加图书信息人工输入删除图书信息类心人工输入图书是否存在删除成功结束重新填写YNYN是否删除NYYN修改图书信息图书是否存在人工输入修改信息是否修改修改成功NNYY添加成功图书是否存在是否添加图3.6图书信息管理流程图(1)功能说明图书信息管理子系统模块帮助图书管理人员对图书管中新书的入馆、图书的借阅、图书信息的修改,图书的查询和盘点等操作进行全面的控制和管理,以达到记录图书馆库存、统计图书数量、记录图书流量,杜绝图书在管理过程中的混乱现象,提高了图书管理人员的工作效率,以达到保证图书借阅过程顺利进行的目的。61 (2)功能特性图书信息管理管理模块是整个系统的基础,所有的操作和控制都是围绕它进行。它的精髓和目的是保证整个图书管理系统中图书信息透明度和馆存可见性。(3)输入、输出格式输入:Ø图书条码Ø图书名称Ø图书出版日期Ø图书作者Ø图书出版社Ø能否借出输出:Ø图书管理基本信息表(4)前提条件实现本功能,必须具有图书管理系统管理员权限。§3.2.4图书借还模块§3.2.4.1图书借阅功能模块61 开始借阅图书输入权限检索图书信息判断读者是否有权借书显示读者信息输入编号检索读者信息判断读者是否存在显示图书信息判断图书是否借出输入编号输入权限记录借书信息取书NY结束NNYY图3.6图书借阅流程图(1)功能说明61 本模块在建立在图书管理模块和读者管理模块的基础上的,通过对读者验证,借阅信息查询和图书信息查询三个部分来体现读者到图书馆借书的流程。不仅要对实现对读者身份的核对,也要实现对不同读者在借书时享有的不同条件的核对,比如借书的次数和借书量,对于不同得读者来说是不同的。对多次借书的读者要检查其以前的借阅的书是否归还?完成借书后什么时间应该归还等等(但有的功能在此次的设计中没有得到实现)。(2)功能特性该模块的主要是功能是完成读者对图书的借阅,并且该模块操作方便,界面人性化。(3)输入、输出格式输入:Ø书籍条码Ø读者条码输出:Ø对话框显示操作成功!(4)前提条件实现本功能,必须具有图书管理系统管理员权限。§3.2.4.2图书归还功能模块61 开始归还图书判断读者是否存在输入编号输入权限判断图书是否超期检索读者信息显示读者信息显示图书借阅信息判断图书是否受损超期罚款受损赔偿还书结束NYNNYY图3.7图书归还流程图(1)功能说明本模块是建立在图书借阅模块基础上的,主要用于完成读者对图书的还书[8]61 ,其中涉及到的信息包括读者信息,借阅信息两个部分。先是确认读者,核对借阅信息;检查完毕后,可归还图书。(2)功能特性完成读者对图书的归还。(3)输入、输出格式输入:Ø图书条码输出:Ø读者姓名Ø读者借书日期Ø图书应还书信息Ø超期天数(4)前提条件实现本功能,必须具有图书管理系统管理员权限。61 §3.2.5管理员设置模块§3.2.5.1管理员信息管理模块开始管理员管理添加管理员人工输入删除管理员人工输入管理员是否存在删除成功结束重新填写YNYN是否删除NYYN修改管理员管理员是否存在人工输入修改信息是否修改修改成功NNYY添加成功管理员是否存在是否添加图3.10管理员档案管理流程图(1)功能说明对于管理员管理来说,管理员的档案和读者档案一样都是非常重要的。在图书馆里,管理员人员的变迁十分的频繁,因此管理员的档案变动就很大,因此就非常需要这样一个模块,来对管理员的档案进行有效的管理。61 管理员档案管理模块主要包括:Ø添加管理员的基本信息Ø修改管理员的基本信息Ø删除管理员的基本信息(2)功能特性管理员档案管理模块主要是对管理员的基本信息进行管理(与读者管理基本相同)。(3)输入、输出格式输入:管理员档案基本信息Ø管理员条码Ø管理员姓名Ø身份证号Ø出生日期输出:Ø显示管理员档案基本信息表(4)前提条件实现本功能,必须具有图书管理系统管理员权限。§3.2.6系统查询模块为让读者对图书馆中信息更为了解,因此特别为普通的读者开发了这个模块,该模块的功能是所有用户都可以使用的,它包括对图书信息的查询,读者信息的查询以及对读者借阅信息的查询。61 §3.2.6.1查询图书基本信息模块开始查询输入查询条件查询的信息是否存在NY显示查询结果结束图2.11图书信息查询流程图(1)功能说明图书信息查询子系统模块帮助读者了解图书馆中相关信息的情况,以便读者可以有针对性的借阅图书,可以更好的满足读者的要求,又提高了图书管理人员的工作效率,保证图书借阅过程顺利进行的目的。(2)功能特性图书信息查询模块是建立在基本信息管理基础上的模块,所有的操作和控制都是围绕它进行。它的精髓和目的是保证整个图书管理系统中基本信息对读者的透明度和馆存可见性。主要体现在:读者可以随时对图书馆中相关情况进行查询,以方便读者的借阅。(3)输入、输出格式输入:Ø读者ID输出:Ø图书管理基本信息表61 (4)前提条件所以用户都可以使用该模块。§3.3数据表§3.3.1数据库的理论基础一个成功的信息管理系统,是建立在许多条件之上的,而数据库是其中一个非常重要的条件和关键技术。信息管理系统所涉及的数据库设计分五个步骤:数据库需求分析、概念设计、逻辑设计、物理设计与加载测试。(1)、 数据库需求分析的任务是将业务管理单证流化为数据流,划分主题之间的边界,绘制出DFD图,并完成相应的数据字典。(2)、 概念设计的任务是从DFD出发,绘制出本主题的实体-关系图,并列出各个实体与关系的纲要表。(3)、逻辑设计是从E-R图与对应的纲要表出发,确定各个实体及关系的表名属性。(4)、物理设计的任务是确定所有属性的类型、宽度与取值范围,设计出基本表的主键,将所有的表名与字段名英文化(现在很多软件能支持中文字段,如MS SQL Server,我就是用的中文字段名),实现物理建库,完成数据库物理设计字典。(5)、加载测试工作贯穿于程序测试工作的全过程,整个录入、修改、查询、处理工作均可视为对数据库的加载测试工作。要设计出一个好的信息管理系统数据库,除满足系统所要求的功能外,还必须遵守下列原则:Ø基本表的个数越少越好Ø主键的个数越少越好Ø字段的个数越少越好Ø所有基本表的设计均应尽量符合第三范式数据库的设计中,如何处理多对多的关系和如何设计主键,是两个有着较大难度、需要重点考虑的问题。§3.3.2系统E-R图61 读者借还图书姓名身份证号编码条码书名作者出版日期出版社最大借阅数图3.1系统E-R图§3.3.3数据表1.图书分类信息表如下:表3.1图书分类信息表序号名称数据类型长度、精度要求关键字1图书条码char8Y2作者char103图书名称char204出版社char206出版日期datetime87作者char202.读者借(还)书记录表如下:表3.2读者借(还)书记录表序号名称数据类型长度、精度要求是否为关键字1读者条码int8Y61 2还书日期char103应还日期char104超出天数int105读者姓名char101.缴纳罚金记录表如下:表3.3缴纳罚金记录表序号名称数据类型长度、精度要求是否为关键字1读者条码int8Y2读者姓名char203超期天数int104应还日期datetime105还书日期datetime102.读者信息表如下:表3.4读者信息表序号名称数据类型长度、精度要求是否为关键字1读者IDint8Y2读者姓名char203身份证号int505.用户信息表如下:表3.5用户信息表图序号名称数据类型长度、精度要求唯一性要求1用户名char202用户条码int10Y3身份证号int504密码char205职务char1061 §3.4数据关系图图3.2数据关系图61 第四章系统实现§4.1模块实现的理论基础在这次的设计中,使用的是用Access数据库。§4.2登陆模块的实现图4.1登陆模块界面代码说明:实现登录功能的代码如下:voidCLoginDlg::OnConfirm(){//TODO:AddyourcontrolnotificationhandlercodehereCClerkDataSetmrsDataSet;/*声明记录集*/CStringmSqlStr;UpdateData(TRUE);if(m_strName.IsEmpty())/*判断用户名信息是否为空*/{AfxMessageBox("请输入用户名!");return;}mSqlStr="SELECT*FROMCLERKWHERENAME="";mSqlStr=mSqlStr+m_strName;61 mSqlStr=mSqlStr+""ANDPASSWORD="";mSqlStr=mSqlStr+m_strPassword;mSqlStr=mSqlStr+""";if(!mrsDataSet.Open(AFX_DB_USE_DEFAULT_TYPE,mSqlStr)){AfxMessageBox("CLERK表打开失败!");return;}if(!mrsDataSet.IsEOF()){//Openallfunctionforuserm_bSuccess=TRUE;m_strUSERID=mrsDataSet.m_CLERK_ID;CDialog::OnOK();}else{AfxMessageBox("登录失败!");m_strUSERID=_T("");return;}}voidCLoginDlg::OnCancel(){//TODO:AddyourcontrolnotificationhandlercodehereCDialog::OnCancel();}61 §4.3读者信息管理模块的实现图4.2读者信息管理模块界面流程说明:读者档案管理模块主要包括读者基本信息添加、修改、删除,查询。读者档案管理包括的信息:读者条码、姓名、身份证号。进入该模块点击添加按钮,在输入信息框中输入读者档案信息,点击确定即完成添加操作。进入该模块点击修改按钮,即可修改读者的基本信息,点击确定即可完成修改操作。进入该模块点击删除按钮,点击要删除的读者的基本,点击确定即可完成修改操作。代码说明:实现保存功能的代码如下:voidCReaderMDlg::OnExit(){//TODO:AddyourcontrolnotificationhandlercodehereCDialog::OnOK();}voidCReaderMDlg::OnFirst(){//TODO:Addyourcontrolnotificationhandlercodehereif(!m_rsDataSet.IsBOF()){m_rsDataSet.MoveFirst();61 DisplayRecord();SetButtonState();}}voidCReaderMDlg::OnLast(){//TODO:Addyourcontrolnotificationhandlercodehereif(!m_rsDataSet.IsEOF()){m_rsDataSet.MoveLast();DisplayRecord();SetButtonState();}}voidCReaderMDlg::OnNew(){//TODO:Addyourcontrolnotificationhandlercodeherem_strReaderID="";m_strReaderName="";m_strIDCard="";UpdateData(FALSE);m_bEdit=TRUE;m_bAdd=TRUE;SetButtonState();SetTextState();CWnd*pWnd;pWnd=GetDlgItem(IDC_READER_ID);pWnd->SetFocus();}voidCReaderMDlg::OnNext(){//TODO:Addyourcontrolnotificationhandlercodehereif(!m_rsDataSet.IsEOF()){m_rsDataSet.MoveNext();DisplayRecord();SetButtonState();}61 }voidCReaderMDlg::OnPrior(){//TODO:Addyourcontrolnotificationhandlercodehereif(!m_rsDataSet.IsBOF()){m_rsDataSet.MovePrev();DisplayRecord();SetButtonState();}}voidCReaderMDlg::OnSave(){//TODO:AddyourcontrolnotificationhandlercodehereUpdateData(TRUE);if(m_strIDCard.IsEmpty()||m_strReaderName.IsEmpty()||m_strReaderID.IsEmpty()){AfxMessageBox("请输入相应数据!");return;}if(m_bAdd){m_rsDataSet.AddNew();}else{m_rsDataSet.Edit();}m_rsDataSet.m_IDCARD=m_strIDCard;m_rsDataSet.m_NAME=m_strReaderName;m_rsDataSet.m_READER_ID=m_strReaderID;//m_rsDataSet.m_FLAG_BORROW="Y";m_rsDataSet.Update();m_rsDataSet.Requery();m_bAdd=FALSE;m_bEdit=FALSE;DisplayRecord();SetButtonState();SetTextState();}61 voidCReaderMDlg::OnCancelRec(){//TODO:Addyourcontrolnotificationhandlercodeherem_bAdd=FALSE;m_bEdit=FALSE;DisplayRecord();SetButtonState();SetTextState();}voidCReaderMDlg::OnDelete(){//TODO:Addyourcontrolnotificationhandlercodeherem_rsDataSet.Delete();DisplayRecord();SetButtonState();}voidCReaderMDlg::OnEdit(){//TODO:Addyourcontrolnotificationhandlercodeherem_bEdit=TRUE;SetButtonState();SetTextState();CWnd*pWnd;pWnd=GetDlgItem(IDC_READER_NAME);pWnd->SetFocus();}voidCReaderMDlg::OnEnquery(){//TODO:AddyourcontrolnotificationhandlercodehereUpdateData(TRUE);if(m_strReaderIDQ.IsEmpty()&&m_strReaderNameQ.IsEmpty()){m_rsDataSet.m_strFilter="";m_rsDataSet.Requery();DisplayRecord();SetButtonState();return;}61 BOOLmAll=FALSE;if(!m_strReaderIDQ.IsEmpty()){m_rsDataSet.m_strFilter="READER_ID=""+m_strReaderIDQ;m_rsDataSet.m_strFilter=m_rsDataSet.m_strFilter+""";mAll=TRUE;}if(!m_strReaderNameQ.IsEmpty()){if(mAll){m_rsDataSet.m_strFilter=m_rsDataSet.m_strFilter+"ANDNAME="";m_rsDataSet.m_strFilter=m_rsDataSet.m_strFilter+m_strReaderNameQ;m_rsDataSet.m_strFilter=m_rsDataSet.m_strFilter+""";}else{m_rsDataSet.m_strFilter="NAME=""+m_strReaderNameQ;m_rsDataSet.m_strFilter=m_rsDataSet.m_strFilter+""";}}m_rsDataSet.Requery();DisplayRecord();SetButtonState();}BOOLCReaderMDlg::DisplayRecord(){if(m_rsDataSet.IsEOF()&&m_rsDataSet.IsBOF()){m_strReaderID="";m_strReaderName="";m_strIDCard="";}else{if(m_rsDataSet.IsBOF()){m_rsDataSet.MoveNext();}else{61 if(m_rsDataSet.IsEOF()){m_rsDataSet.MovePrev();}}m_strReaderID=m_rsDataSet.m_READER_ID;m_strReaderName=m_rsDataSet.m_NAME;m_strIDCard=m_rsDataSet.m_IDCARD;}UpdateData(FALSE);returnTRUE;}BOOLCReaderMDlg::SetButtonState(){CWnd*pWnd;if(!m_rsDataSet.IsOpen()){pWnd=GetDlgItem(IDC_FIRST);pWnd->EnableWindow(FALSE);pWnd=GetDlgItem(IDC_NEXT);pWnd->EnableWindow(FALSE);pWnd=GetDlgItem(IDC_PRIOR);pWnd->EnableWindow(FALSE);pWnd=GetDlgItem(IDC_LAST);pWnd->EnableWindow(FALSE);pWnd=GetDlgItem(IDC_NEW);pWnd->EnableWindow(FALSE);pWnd=GetDlgItem(IDC_EDIT);pWnd->EnableWindow(FALSE);pWnd=GetDlgItem(IDC_ENQUERY);pWnd->EnableWindow(FALSE);pWnd=GetDlgItem(IDC_DELETE);pWnd->EnableWindow(FALSE);pWnd=GetDlgItem(IDC_SAVE);pWnd->EnableWindow(FALSE);pWnd=GetDlgItem(IDC_CANCEL_REC);pWnd->EnableWindow(FALSE);returnTRUE;}61 if(m_bEdit){pWnd=GetDlgItem(IDC_FIRST);pWnd->EnableWindow(FALSE);pWnd=GetDlgItem(IDC_NEXT);pWnd->EnableWindow(FALSE);pWnd=GetDlgItem(IDC_PRIOR);pWnd->EnableWindow(FALSE);pWnd=GetDlgItem(IDC_LAST);pWnd->EnableWindow(FALSE);pWnd=GetDlgItem(IDC_NEW);pWnd->EnableWindow(FALSE);pWnd=GetDlgItem(IDC_EDIT);pWnd->EnableWindow(FALSE);pWnd=GetDlgItem(IDC_ENQUERY);pWnd->EnableWindow(FALSE);pWnd=GetDlgItem(IDC_DELETE);pWnd->EnableWindow(FALSE);pWnd=GetDlgItem(IDC_SAVE);pWnd->EnableWindow(TRUE);pWnd=GetDlgItem(IDC_CANCEL_REC);pWnd->EnableWindow(TRUE);returnTRUE;}if(m_rsDataSet.IsBOF()){pWnd=GetDlgItem(IDC_FIRST);pWnd->EnableWindow(FALSE);pWnd=GetDlgItem(IDC_PRIOR);pWnd->EnableWindow(FALSE);}else{pWnd=GetDlgItem(IDC_FIRST);pWnd->EnableWindow(TRUE);pWnd=GetDlgItem(IDC_PRIOR);pWnd->EnableWindow(TRUE);61 }if(m_rsDataSet.IsEOF()){pWnd=GetDlgItem(IDC_NEXT);pWnd->EnableWindow(FALSE);pWnd=GetDlgItem(IDC_LAST);pWnd->EnableWindow(FALSE);}else{pWnd=GetDlgItem(IDC_NEXT);pWnd->EnableWindow(TRUE);pWnd=GetDlgItem(IDC_LAST);pWnd->EnableWindow(TRUE);}if(m_rsDataSet.IsBOF()&&m_rsDataSet.IsEOF()){pWnd=GetDlgItem(IDC_EDIT);pWnd->EnableWindow(FALSE);pWnd=GetDlgItem(IDC_DELETE);pWnd->EnableWindow(FALSE);}else{pWnd=GetDlgItem(IDC_EDIT);pWnd->EnableWindow(TRUE);pWnd=GetDlgItem(IDC_DELETE);pWnd->EnableWindow(TRUE);}pWnd=GetDlgItem(IDC_NEW);pWnd->EnableWindow(TRUE);pWnd=GetDlgItem(IDC_ENQUERY);pWnd->EnableWindow(TRUE);pWnd=GetDlgItem(IDC_SAVE);pWnd->EnableWindow(FALSE);pWnd=GetDlgItem(IDC_CANCEL_REC);pWnd->EnableWindow(FALSE);returnTRUE;61 }BOOLCReaderMDlg::OnInitDialog(){CDialog::OnInitDialog();//TODO:Addextrainitializationherem_bAdd=FALSE;m_bEdit=FALSE;if(!m_rsDataSet.Open(AFX_DB_USE_DEFAULT_TYPE))AfxMessageBox("数据打开失败!");DisplayRecord();SetButtonState();SetTextState();returnTRUE;//returnTRUEunlessyousetthefocustoacontrol//EXCEPTION:OCXPropertyPagesshouldreturnFALSE}BOOLCReaderMDlg::SetTextState(){CWnd*pWnd;if(m_bEdit){pWnd=GetDlgItem(IDC_READER_NAME);pWnd->EnableWindow(TRUE);pWnd=GetDlgItem(IDC_READER_ID);if(m_bAdd)pWnd->EnableWindow(TRUE);elsepWnd->EnableWindow(FALSE);pWnd=GetDlgItem(IDC_IDCARD);pWnd->EnableWindow(TRUE);}else{pWnd=GetDlgItem(IDC_READER_NAME);pWnd->EnableWindow(FALSE);pWnd=GetDlgItem(IDC_READER_ID);pWnd->EnableWindow(FALSE);pWnd=GetDlgItem(IDC_IDCARD);61 pWnd->EnableWindow(FALSE);}pWnd=GetDlgItem(IDC_READER_NAME_FOR_Q);pWnd->EnableWindow(TRUE);pWnd=GetDlgItem(IDC_READER_ID_FOR_Q);pWnd->EnableWindow(TRUE);returnTRUE;}§4.4图书信息管理模块的实现图书管理模块界面和读者管理界面基本相同。流程说明:图书类型设置模块组要包括图书类型信息添加,图书类型信息修改,图书类型信息删除。图书类型信息包括:图书分类号的代码、图书类型名称信息。进入模块点击添加按钮,在字段信息输入框中添加相应的图书类型信息,点击确定即可完成添加操作。进入模块点击修改按钮,在要修改的字段信息输入框中添加相应的图书类型新的修改信息,然后点击确定即可完成修改操作。进入模块点击删除按钮,然后点击要删除的一条图书类型信息记录,再点击确定即可完成删除操作。§4.5图书借阅管理模块的实现图4.3图书借阅管理模块界面流程说明:61 首先进入借阅模块后,选择读者编码,选择书籍编码,以完成读者借阅。代码说明:voidCLendOutDlg::OnConfirm(){intm_nMaxNum;BOOLm_bCanBorrow;BOOLm_bCanLendOut;m_bCanBorrow=FALSE;m_bCanLendOut=FALSE;CStringmSqlStr;UpdateData(TRUE);//mSqlStr="SELECT*FROMREADERWHEREREADER_ID=""+m_strReaderID;//mSqlStr="SELECTFLAG_BORROW,READER_IDFROMREADER";//mSqlStr=mSqlStr+""";//if(!m_rsReaderDataSet.Open(AFX_DB_USE_DEFAULT_TYPE,mSqlStr))if(!m_rsReaderDataSet.Open(AFX_DB_USE_DEFAULT_TYPE)){AfxMessageBox("数据表打开错误!");return;}m_rsReaderDataSet.m_strFilter="READER_ID=""+m_strReaderID;m_rsReaderDataSet.m_strFilter=m_rsReaderDataSet.m_strFilter+""";m_rsReaderDataSet.Requery();if(!m_rsReaderDataSet.IsEOF()){if(m_rsReaderDataSet.m_FLAG_BORROW=="Y"){mSqlStr="SELECT*FROMBORROWWHEREREADER_ID=""+m_strReaderID;61 mSqlStr=mSqlStr+""";if(!m_rsDataSet.Open(AFX_DB_USE_DEFAULT_TYPE,mSqlStr)){m_rsReaderDataSet.Close();AfxMessageBox("数据表打开错误!");return;}//Addsomecodetodeterminethenumofbookwhichthisreaderborrowed.m_bCanBorrow=TRUE;m_rsDataSet.Close();}}m_rsReaderDataSet.Close();if(!m_bCanBorrow){AfxMessageBox("读者不能借书!");return;}mSqlStr="SELECT*FROMBOOKWHEREBOOK_ID=""+m_strBookID;mSqlStr=mSqlStr+""";if(!m_rsBookDataSet.Open(AFX_DB_USE_DEFAULT_TYPE,mSqlStr)){AfxMessageBox("数据表打开错误!");return;}if(!m_rsBookDataSet.IsEOF()){if(m_rsBookDataSet.m_FLAG_BORROW=="Y")61 {m_bCanLendOut=TRUE;}else{AfxMessageBox("此书不外借!");m_rsBookDataSet.Close();return;}}else{AfxMessageBox("无此书!");m_rsBookDataSet.Close();return;}m_rsBookDataSet.Close();CMainFrame*pWnd;pWnd=(CMainFrame*)this->GetParent();CStringm_strUserID;m_strUserID=pWnd->m_strUserID;//mSqlStr="INSERTINTOBORROW(READER_ID,BOOK_ID,BORROW_DATE,B_CLERK_ID)VALUES("";mSqlStr="INSERTINTOBORROW(READER_ID,BOOK_ID,B_CLERK_ID)VALUES("";mSqlStr=mSqlStr+m_strReaderID;mSqlStr=mSqlStr+"","";mSqlStr=mSqlStr+m_strBookID;mSqlStr=mSqlStr+"","";//mSqlStr=mSqlStr+"",SYSDATE,"";61 mSqlStr=mSqlStr+m_strUserID;mSqlStr=mSqlStr+"")";CDatabasemDB;if(!mDB.Open(_T("Library"))){AfxMessageBox("无法打开数据库!");return;}try{mDB.ExecuteSQL(mSqlStr);}catch(CDBExceptione){AfxMessageBox("执行错!");return;}mDB.Close();AfxMessageBox("操作成功!");}voidCLendOutDlg::OnCancel(){CDialog::OnCancel();}BOOLCLendOutDlg::OnInitDialog(){CDialog::OnInitDialog();returnTRUE;//returnTRUEunlessyousetthefocustoacontrol//EXCEPTION:OCXPropertyPagesshouldreturnFALSE}61 §4.6图书归还模块的实现图4.4图书归还界面流程说明:输入图书代码以完成操作。代码说明:实现还书功能的代码如下:intCReturnBookDlg::QryBorrow(){intresult;CTimem_ReturnDate_tmp;CStringm_strtmp;CTimem_Current_Time=CTime::GetCurrentTime();CTimeSpanm_TimeSpan_tmp(30,24,59,59);UpdateData(true);if(strcmp(m_Book_ID,"")==0)return0;61 m_rsDataSet.m_strFilter="reader.reader_ID=borrow.reader_IDandBOOK_ID=""+m_Book_ID+""";if(!m_rsDataSet.Open()){AfxMessageBox("数据打开失败!");return-1;}m_rsDataSet.Requery();if(m_rsDataSet.GetRecordCount()!=0){m_ReaderName=m_rsDataSet.m_ReaderName;m_BorrowDate=m_rsDataSet.m_BORROW_DATE.Format("%Y,%B%d");m_ReturnDate_tmp=m_rsDataSet.m_BORROW_DATE+m_TimeSpan_tmp;m_ReturnDate=m_ReturnDate_tmp.Format("%Y,%B%d");if(m_ReturnDate_tmpm_hWnd,m_strtmp,"提示",MB_YESNO)==IDYES)SetTxtNull();elseCDialog::OnClose();}elseif(rs==2){if(::MessageBox(this->m_hWnd,"还书处理正常完成","提示",MB_YESNO)==IDYES)SetTxtNull();elseCDialog::OnClose();61 }elseif(rs==0){if(m_Book_ID=="")return;::MessageBox(this->m_hWnd,"该书号信息不存在!","警告",MB_OK);}//TODO:AddyourcontrolnotificationhandlercodeherepWnd=GetDlgItem(IDC_EDITBook_ID);pWnd->SetFocus();}voidCReturnBookDlg::OnCancel(){//TODO:AddextracleanuphereCDialog::OnCancel();}intCReturnBookDlg::Insert_Fine(){CDatabasemdb;CStringm_strsql;CTimem_CurrentTime;m_CurrentTime=CTime::GetCurrentTime();m_strsql.Format("insertintofine(Reader_ID,amount,days,fine_date)values("%s",%f,%d",m_rsDataSet.m_READER_ID,(m_Days*0.2),m_Days);m_strsql=m_strsql+",""+m_CurrentTime.Format("%Y,%B%d")+"")";if(!mdb.Open(_T("Library"))){AfxMessageBox("数据库打开出错");return0;}61 try{mdb.BeginTrans();mdb.ExecuteSQL(m_strsql);m_strsql="UPDATEREADERSETFLAG_BORROW="N"WHEREREADER_ID=""+m_rsDataSet.m_READER_ID;m_strsql=m_strsql+""";mdb.ExecuteSQL(m_strsql);mdb.CommitTrans();return1;}catch(CDBExceptione){AfxMessageBox("数据库执行出错");return0;}}intCReturnBookDlg::Insert_History(){CDatabasemdb;CStringm_strsql;if(!mdb.Open(_T("library"))){AfxMessageBox("数据库执行出错");return0;}m_strsql="INSERTINTOHISTORY(READER_ID,BOOK_ID,BORROW_DATE,RETURN_DATE)VALUES(""+m_rsDataSet.m_READER_ID+""";m_strsql=m_strsql+",""+m_rsDataSet.m_BOOK_ID+""";61 m_strsql=m_strsql+",""+m_BorrowDate+""";m_strsql=m_strsql+",""+(CTime::GetCurrentTime()).Format("%Y,%B%d")+"")";try{mdb.BeginTrans();mdb.ExecuteSQL(m_strsql);mdb.CommitTrans();}catch(CDBExceptione){AfxMessageBox("数据库执行出错");return0;}return1;}intCReturnBookDlg::SetTxtNull(){CWnd*pWnd;m_Book_ID="";m_BorrowDate="";m_Days=0;m_ReaderName="";m_ReturnDate="";UpdateData(false);pWnd=GetDlgItem(IDC_EDITBook_ID);//pWnd->SetFocus();return1;}intCReturnBookDlg::setTxtDisable()61 {CWnd*pWnd;pWnd=GetDlgItem(IDC_EDITReaderName);pWnd->EnableWindow(false);pWnd=GetDlgItem(IDC_EDITBorrowDate);pWnd->EnableWindow(false);pWnd=GetDlgItem(IDC_EDITReturnDate);pWnd->EnableWindow(false);pWnd=GetDlgItem(IDC_EDITDays);pWnd->EnableWindow(false);return1;}BOOLCReturnBookDlg::OnInitDialog(){CDialog::OnInitDialog();//setTxtDisable();returntrue;}§4.7缴纳罚金模块的实现流程说明:输入读者条码以完成操作。代码实现:voidCFineDlg::OnConfirm(){//TODO:Addyourcontrolnotificationhandlercodehere//UpdateData(TRUE);//CWnd*pWnd;61 //pWnd=GetDlgItem(IDC_READER_ID);//pWnd->GetWindowText(m_strReaderId);if(m_szReaderID.IsEmpty()){AfxMessageBox("请输入读者编码!");return;}CStringmSqlStr;CDatabasemDB;if(!mDB.Open(_T("library")))AfxMessageBox("数据库打开出错");mSqlStr="UPDATEREADERSETFLAG_BORROW="Y"WHEREREADER_ID=""+m_szReaderID;mSqlStr=mSqlStr+""";try{mDB.ExecuteSQL(mSqlStr);}catch(CDBExceptione){AfxMessageBox("执行错!");return;}61 mSqlStr="DELETEFROMFINEWHEREREADER_ID=""+m_szReaderID;mSqlStr=mSqlStr+""";try{mDB.ExecuteSQL(mSqlStr);}catch(CDBExceptione){AfxMessageBox("执行错!");return;}charmTemp[10];_itoa(m_nAmount,mTemp,10);mSqlStr="INSERTINTOFINE_HISTORY(READER_ID,AMOUNT)VALUES(""+m_szReaderID;mSqlStr=mSqlStr+"",";mSqlStr=mSqlStr+mTemp;mSqlStr=mSqlStr+")";try{mDB.ExecuteSQL(mSqlStr);}catch(CDBExceptione){AfxMessageBox("执行错!");return;}61 mDB.Close();AfxMessageBox("执行成功!");}voidCFineDlg::OnExit(){//TODO:AddyourcontrolnotificationhandlercodehereCDialog::OnCancel();}voidCFineDlg::OnKillfocusReaderId(){//TODO:AddyourcontrolnotificationhandlercodehereUpdateData(TRUE);if(m_strReaderID.IsEmpty()){AfxMessageBox("请输入读者编码!");return;}m_szReaderID=m_strReaderID;CReaderDataSetm_rsReaderDataset;if(!m_rsReaderDataset.Open(AFX_DB_USE_DEFAULT_TYPE)){AfxMessageBox("数据表打开失败!");return;}61 m_rsReaderDataset.m_strFilter="READER_ID=""+m_strReaderID;m_rsReaderDataset.m_strFilter=m_rsReaderDataset.m_strFilter+""";m_rsReaderDataset.Requery();if(m_rsReaderDataset.IsEOF()){AfxMessageBox("没有此读者!");m_rsReaderDataset.Close();return;}m_strReaderName=m_rsReaderDataset.m_NAME;m_rsReaderDataset.Close();CStringmSqlStr;mSqlStr="SELECT*FROMFINEWHEREREADER_ID=""+m_strReaderID;mSqlStr=mSqlStr+""";CFineDataSetm_rsFineDataSet;if(!m_rsFineDataSet.Open(AFX_DB_USE_DEFAULT_TYPE,mSqlStr)){AfxMessageBox("数据表打开失败!");return;}if(m_rsFineDataSet.IsEOF()){AfxMessageBox("读者没有罚款记录!");m_rsFineDataSet.Close();61 return;}m_nAmount=m_rsFineDataSet.m_AMOUNT;m_nDays=m_rsFineDataSet.m_DAYS;//m_dFineDate=m_rsFineDataSet.m_FINE_DATE;m_rsFineDataSet.Close();UpdateData(FALSE);}61 第五章系统功能测试§5.1测试概述依据用户需求,设计测试用例,对软件进行系统级测试。并根据测试结果填写测试表格的测试结果栏。§5.2测试目的测试的重点是对各项功能的正常运转进行全面测试,检测软件的各子系统的协作能力。具体目的如下:Ø确保系统达到需求功能的说明;Ø确保系统满足性能需求;Ø强度测试确认程序能够处理要求的负载;Ø确保系统在要求的硬件和软件平台上工作正常。§5.3测试过程及结果§5.3.1测试用例本项目所做的测试列表如下:测试单元:图书信息管理单元测试类型:功能测试测试日期:2010/5/10表5.1图书信息管理测试用例表编号测试说明期望结果实际结果成功/失败1测试新书信息添加是否成功新书信息成功写入数据库数据库中可以找到新添加记录。成功2测试图书信息修改将重新输入数据录入到数据库中修改图书信息信息成功成功测试单元:借阅管理单元测试类型:功能测试测试日期:2010/5/1061 表5.2图书借阅管理测试用例表编号测试说明期望结果实际结果成功/失败1测试读者是否可以进行第一次借阅能够借阅成功,并在界面中显示借阅信息弹出对话框,“操作成功”成功测试单元:查询读者信息单元测试类型:功能测试测试日期:2010/5/10表5.3查询管理测试用例表编号测试说明期望结果实际结果成功/失败1测试按读者的各项信息是否可以进行查询根据不同的查询信息对读者进行查询显示查询项成功2测试多项的查询条件是否能进行查询根据不同的查询条件对读者信息进行查询显示查询结果成功§5.3.2测试结论根据上面的测试,该系统各功能模块均能正常使用,此次设计完成。61 第六章    用户操作说明 §6.1 软硬件环境硬件配置:586以上档次的计算机,彩色显示器,内存>128M,硬盘>10G。软件配置:Windows98/XP操作系统,VisualBasic6.0数据库管理系统。§6.2应用系统安装使用安装盘:本应用系统经过VisualC++6.0提供的安装向导生成安装软盘,使用时只须在Windows环境下直接安装即可。§6.3操作方法1.直接启动应用系统2.运行程序即可3.主界面上有八个主菜单,而每一个主菜单上又有几个子菜单,用户可以跟据自己的要求点击上面的子菜单,进行相应的操作。61 设计体会与总结本设计是一个面向图书馆借阅管理的,具有一定实用性的数据库信息管理系统。它主要完成对图书借阅的一系列管理,包括借书、还书以及图书,读者,管理员的信息管理。本系统采用当前流行的面向对象的开发工具VisualC++以及数据库工具Access来完成整个系统的设计。系统在设计过程中不可避免地遇到了各种各样的问题,由于整个系统完全都是由个人设计的,有关VisualC++许多细节问题都要靠自己去摸索,加之本人水平有限,并没有完全地理解VisualC++的强大功能,而且还存在着许多不足之处。如:Ø 受开发条件和开发时间的限制,本系统只利用了本地数据库,它同应用程序处于同一系统中,能存储的数据量也有一定限制,并没有发挥出VC其数据库方面的优势。Ø添加功能尚不够全面完善,不能动态生成读者编号和图书编号。Ø在一些数据输入时没有及时的进行数据格式校验,不能保证数据输入的绝对正确性。Ø由于时间关系,系统功能实现不够完善,使用不是很方便,比如,没有实现读者对图书详细信息的查询,或者是图书损害应该如何罚款的功能。这些都是需要完善的地方,该系统离实际使用也还有相当的距离,需要我进行不断地补充和完善。这次毕业设计完成后,体会颇多,在学与做的过程中,取长补短,不断学习新的知识,吸取经验,达到进步的目的。在学与做的过程中自身的努力以及相关图书资料的帮助,逐渐熟悉了VisualC++在数据库方和控件的应用知识。程序开发的一般过程和对数据库知识的进一步的了解,在这个快速发展的当代社会里,数据库已经普遍应用在各个领域。在这次的毕业设计中我学习到不少的数据库知识,但由于自己的理论知识水平有限,实践知识和设计经验不足,在设计过程中难免存在一些问题,甚至错误。恳请各位老师批评指正,致使我在以后的工作和实践中加以改进和提高。61 参考文献[1]XingCX,ZengC,LiC,ZhouLZ.Astudyonarchitectureofmassiveinformationmanagementfordigitallibrary.JournalofSoftware,2004[2]LiuXM,BrodyT,HarnadS,CarrL,MalyK,ZubairM,NelsonM.Ascalablearchitectureforharvest-baseddigitallibraries:TheODU/Southamptonexperiments.D-LibMagazine,2002,8(11).[3]WENJi-Rong2,LUANJin-Feng1,MAWei-Ying2,DONGYi-Sheng.AMethodtoQueryDocumentDatabasebyContentandStructureJournalofSoftware软件学报2003[4]孟小峰、周龙骧、王珊,数据库技术发展趋势,软件学报,2004[5]魏志强、王忠华、何敏等,《数据库应用实务篇》,中国铁道出版社2000[6]BaldonadoM,ChangCK,GravanoL,PaepckeA.TheStanforddigitallibrarymetadataarchitecture.InternationalJournalonDigitalLibraries,1997[7]XingCX,WuKH,LuoDY,ZhouLZ,LiuGL,QinYG.THADL:AdigitallibraryforChineseancientarchitecturestudy.In:Proc.ofthe12thInt"l.Conf.onNewInformationTechnology.Beijing:TsinghuaUniversityPress,2001[8]张春林,马成勇,刘均.《数据库系统设计与开发》.清华大学出版社,2005[9]清华天则工作室编著.《编程技巧及故障排除即时通(VC篇)》.兵器工业出版社[10]梁普选.《VisualC++程序设计与实践》.清华大学出版社.2006[11]张瑞丰.《C++语言程序设计》,清华大学出版社,200661'