资源描述
西安科技大学软件工程课程设计报告题目: 图书馆管理系统 班级: 软件工程* 学号: * 姓名: * 2013年1月目 录1 绪论12 可行性研究报告13 需求规格说明书44 总体设计说明书75 数据库设计说明书86 详细设计说明书97 系统实现118测试分析报告23参考文献1.绪论1.1 选题目的及意义随着计算机技术的快速发展,人们对用计算机代替手工管理信息的需求越来越强烈,越来越多的计算机软件如雨后春笋般的应用于人们生产生活的各个领域,为人们提供各种各样的便利。本图书馆管理系统应用软件可以有效地解决高等院校、中小学图书馆由于藏书量增大而带来的管理问题,图书馆管理员可以更好地管理学校图书馆藏书信息,学生可以更方便地享受借书还书的服务,为更有效地学习知识提供有利的保证。对于我来说,选择这个题目作为课程设计的题目有以下两个原因:一是因为自从上大学以来,每当在图书馆借书的时候,我都会留心观察一下图书馆管理员的那台计算机上显示的内容,久而久之,就对本系统的基本流程越来越了解,做好一个软件的前提是必须对这个软件的功能和原理非常熟悉,相比别的题目,我对这个题目更加了解;二是本学期通过学习Java程序设计和Oracle数据库课程,我觉得这个题目虽然没有那么难(涉及算法的内容很少),但也不是轻而易举就能完成的,所以我想挑战一下自己,看看自己的实现能力到底怎么样,因此决定用面向对象方法学的思想,前台用Java程序设计语言编写界面,访问Oracle数据库中的数据,完成本系统。1.2 系统概述本系统通过JDBC-ODBC桥实现前后台数据的联系,基本上实现了一个图书馆管理系统所具备的基本功能,本系统把使用者分为三类:超级管理员、普通管理员、读者,对三种用户分别设计了各自的主界面,以便更好的实现信息的隐藏性,超级管理员可以进行这个系统所有操作;管理员只能执行超级管理员的基本功能,查看自己的信息;读者只能查看自己的信息,对自己当前借书进行挂失和续借两种操作,查询图书馆的藏书。2.可行性研究报告2.1 编写目的本报告编写目的在于研究图书馆管理系统应用软件是否可行,指出本软件开发所使用的方法和手段,并对该软件前景进行分析。本报告的预期读者是:高等院校、中小学图书馆管理人员、程序设计人员、以及对图书馆管理系统感兴趣的爱好者。2.2 相关背景 工程名称:图书馆管理应用软件 工程产品名称:高校图书馆管理系统应用软件 工程的组织者:西安科技大学计算机学院软件工程系 产品用户:高校图书馆、中小学图书馆; 产品的生产者:西安科技大学计算机学院软件工程062班袁震; 产品设计者:西安科技大学计算机学院软件工程062班袁震;2.3 可行性研究的前提本图书管理系统在功能上要求完成以下基本功能:a).读者、管理员登陆;b).借书;c).还书;d).续借;e).图书挂失;f).历史记录查询;g).新书入库;h).读者登记及修改个人信息; 本系统在性能上力争达到响应时间短,具有一定的容错能力,力争减少由用户直接输入数据,绝大多数据的输入都用可以选择的形式让用户进行选择。本系统预计有如下输出:a).登陆成功显示:成功则进入主界面;失败则重新输入;都要给出相应的提示;b).借书成功显示:显示借书是否成功,如成功,记录插入数据库,失败说明错误原因,返回借书界面;c).还书成功显示:显示还书是否成功,如成功,修改数据库多项记录,失败说明错误原因,返回主界面;d).续借成功显示:显示续借是否成功,如成功,修改数据库记录,失败则说明错误原因,返回主界面;e).图书挂失成功显示:成功则提示用户需要赔偿的价钱,并禁止该用户再借书,直到交了罚款为止;f).历史记录查询:管理员可以查询所有记录,用户只能查询自己的借还书记录;显示这些记录;g).新书入库成功显示:显示新书入库是否成功,成功则向数库插入数据,失败给出错误提示,返回主界面;h).读者登记成功显示:显示读者是否成功注册,成功则向数据库插入数据,失败给出提示,返回主界面;i).修改个人信息成功显示:显示个人信息是否成功修改,成功则修改数据库中的数据,失败则给出错误提示,返回主界面;本系统预计有如下数据输入:a).登陆系统时需要输入用户名和密码,选择用户类型;用户名、密码、和用户类型均为字符型;b).借书时需要选择用户编号和书的编号,均为字符型;c).还书时需要选择用户名和书的名字,均为字符型;d).续借时,需要选择书的编号,为字符型;e).挂失时,需要选择书的编号,为字符型;f).新书入库时,需要输入书的编号、名字、类别、价格、当前剩余藏书量、入库日期;其中入库时期为系统当前时间,价格为双精度浮点型,当前剩余藏书量为整型,其余均为字符型;g).读者登记时,需要输入读者的编号、名字、密码、当前最大可借书量,当前状态(0或1),0为未激活,1为激活;其中当前最大可借书量为整型,其余为字符型;h).修改个人密码时,需要提供一次原密码和两次新密码;均为字符型;本系统基本系统模型如图2-1所示:图1-1图书管理系统基本系统模型通过图1-1.,我们可以发现该系统的数据源是读者和图书馆管理员;读者处理的事务只有修改个人密码、续借、图书挂失,其余事务均由图书馆管理员来处理;数据终点是读者,意味着所有处理最后都要由读者确认,这种确认可以是某种操作,也可以是管理员的一句提示。本系统的完成期限为16天(即2008年12月22日到2009年1月7日)。2.4 目标本图书管理系统的主要开发目标为:a).实现图书管理的便捷程度;b).在完成数据库连接的基础上,适当提高查询速度和访问效率;c).在完成基本功能的基础上,减少代码量,提高工作效率;2.5 进行可行性研究的方法本系统可行性研究是通过走访大学图书馆的方式进行的,通过走访西安科技大学图书馆和陕西航天职工大学图书馆,对两校现有图书管理系统进行调查、了解,分析得出本系统应实现的基本功能,本系统根据两校图书馆管理系统进行相应的模仿的基础上,添加了一些自己的功能。2.6 评价尺度本系统在评价时应从以下几个方面进行分析:开发时间要尽量短;各个功能实现代码要尽量少;访问数据库的效率要尽量高;用户使用过程中容错能力要很强;2.7 对现有系统的分析通过对西安科技大学图书馆管理系统的分析,由于该系统是专业软件公司所为,基本上没有什么太大的问题,就是有时候会出现响应时间过长的问题,原因可能是访问数据库效率过低,所以本系统着重提高访问数据库效率的问题,在功能上尽量模仿上述系统。因此有必要对现有系统进行修改。现有系统的主要工作为处理借还书,新书入库,读者登记,读者信息修改,读者挂失等业务。现有系统最大局限性就是响应时间过慢,数据存储能力不足,由于使用时间很长,源代码无法找到,所以需要对该系统进行重新设计,以适应社会的需要。2.8 所建议使用的系统本图书管理系统采用面向对象的分析方法进行分析,然后用面向对象的设计方法进行设计,最后用面向对象语言Java进行实现,后台数据库使用Oracle,连接方式为JDBC-ODBC。Java中GUI程序设计本身就是界面程序设计,用它设计出来的界面不但美观,而且使用方便,使用者只需点几次鼠标,就能根据提示进行正确的操作,实现了图书管理的便捷程度;由于Java代码重用性非常好,加上本系统部分代码我可以用别的程序代码稍微做一些修改就可以实现功能,因此可以实现降低代码量的目的;Oracle数据库是目前市场上通用数据库之一,查询速度本身就非常多,再加上我会在代码中尽量避免多表连接查询和处理语句的使用,所以可以真正起到提高查询效率的目的。本系统局限性可能来自以下几个方面:a).界面不美观;b).部分功能无法实现;c).访问效率很低;d).容错性不够;对于a),我觉得我们应该注意力放在功能及代码的效率上,而不是去追求一个优秀的界面,对于界面,只要能看得过去就行;对于b),我尽量避免这个的发生,因为它是一个程序员水平的标尺,尽可能的用自己最大努力做出尽可能多的功能是我的目标;对于c),尽量减少多表连接操作的次数,应该就可以尽可能的提高访问效率了。对于d),这个是需要大量测试才能发现的,由于时间关系,不可能把所有的情况考虑完全,只能尽可能多地去考虑周全点,尽可能的把所有问题都考虑到。2.9 技术条件方面的可行性按照目前的技术水平,本系统的功能目标是可以达到的,该系统的功能是可以实现的,在规定的期限内,本系统可以开发完成。2.10 法律方面的可行性由于这个系统只供学习研究使用,不涉及任何商业行为,因此,该系统从法律方面是可行的。2.11 使用方面的可行性本图书管理系统是为学校图书馆开发的,从学校图书馆日常流程的角度来看,是可以使用该软件系统的;经过我们的调查,我们发现学校图书馆管理人员是有一定的计算机操作水平的,经过短期的培训,是可以熟练掌握本系统的使用细则的。2.12 结论由上面的内容我们可以得到如下研究结论:本图书馆管理系统可以立即开始进行。3.需求规格说明书对软件需求完全理解对于软件开发工作的成功是至关重要的,需求说明的任务是发现、规范的过程,有益于提高软件开发过程中的能见度,便于对软件开发过程中的控制与管理,便于采用工程方法开发软件,提高软件的质量,便于开发人员、维护人员、管理人员之间的交流、协作,并作为工作成果的原始依据,并且在向潜在用户传递软件功能、性能需求,使其能够判断该软件是否与自己的需求相关。3.1 编写目的为开发人员,维护人员,客户之间提供共同的协议而创立基础,对图书馆管理系统软件功能的实现做一全面的描述;本说明书预期读者为客户、业务或需求分析人员、测试人员、文档编写者、项目管理人员;3.2 任务概述本图书管理系统仅供学习、研究之用,应用目标是让使用该软件的用户感觉轻松、愉快的完成本系统的各个功能模块,给以客观公正的评价。本软件的灵感来源于本人长期使用本校的图书馆管理系统,对其结构和功能有了一定的了解,所以就产生了自己模仿一个的想法。由于本软件是模仿其他类似软件开发的,所以只能供学习、研究之用。|本软件终端用户应该是图书馆管理人员,各个年龄层次的读者。对于图书馆管理人员来说,应该对这个软件的流程很熟悉,所以本软件在设计时尽量追求可操作性和简洁大方的人机界面的设计,力求尽量减少用户直接输入性东西,大量使用可选框。对于读者,本软件将为其设计更加方便的界面,尽量不使用直接输入性信息,追求操作的最简单化。由于本软件只供学习和研究之用,所以不存在预期使用周期。3.3 需求规定通过对学校图书馆管理系统的使用和跟有关人员的访谈,我初步认为该系统应该有以下功能约定:1).每个读者最多在借数目为5;2).每种书只剩一本时,禁止外借;3).读者编号是10位数字,初始密码和编号相同,提示读者修改密码;4).管理员编号是5位数字,初始密码和编号相同,提示管理员修改密码;5).当读者挂失图书且未缴纳罚款时,禁止该读者借阅续借和挂失其他图书,直到罚款交齐为止;6).尽可能多的用可选项代替文本框,减少人为输入错误发生的概率;7).当可选项为编号时,为了方便查阅详细信息,设置按钮显示其详细信息;8).读者界面应该显示读者当前在借图书的详细信息;9).为了方便读者查询,应该提供多种查询图书的方式;10).图书挂失后,读者应该缴纳三倍书价的罚款作为赔偿;11).修改密码时,应提供原密码作为验证,两次输入新密码;12).用户登陆时,需根据用户身份,进入各自的主界面;通过对以上功能约定的分析,我将这个系统分为以下11个模块,它们分别是登陆模块、添加管理员、读者、书籍信息模块、借书模块、还书模块、续借模块、图书挂失模块、挂失处理模块、修改个人密码模块、删除操作记录、读者信息模块,查询图书模块等等。下面用IPO表分别写出对上述模块的功能要求进行定性和定量的叙述:1、登陆模块:模块名称登陆模块输入数据用户编号,密码,级别处理过程调用数据库数据进行验证输出数据无 表3-1 登陆模块IPO表2、添加管理员与读者模块模块名称添加管理员和读者模块输入数据新管理员编号和姓名处理过程编号唯一性验证,向数据库添加数据输出数据无 表3-2 添加管理员和读者模块IPO表3、添加书籍信息模块模块名称添加书籍信息模块输入数据书条形码号,书名,作者,分类,价格,数目处理过程编号唯一性验证,向数据库添加数据输出数据无 表3-3 添加书籍信息模块IPO表4、借书模块模块名称借书模块输入数据读者编号、书条形码号处理过程验证编号,向数据库添加数据输出数据无 表3-4 借书模块IPO表5、还书模块模块名称借书模块输入数据读者编号、书条形码号处理过程验证编号,修改数据库数据输出数据无 表3-5 还书模块IPO表6、续借模块模块名称续借模块输入数据读者编号、书条形码号处理过程验证编号,修改数据库数据输出数据无 表3-6 续借模块IPO表7、图书挂失模块模块名称图书挂失模块输入数据读者编号、书条形码号处理过程验证编号,修改数据库数据输出数据书名、应缴纳的罚款数额 表3-7 图书挂失模块IPO表8、图书挂失处理模块模块名称图书挂失处理模块输入数据读者编号处理过程查询挂失信息输出数据书名,罚款数额 表3-8 图书挂失处理模块IPO表9、修改个人密码模块模块名称修改个人密码模块输入数据读者编号,旧密码,新密码处理过程验证旧密码正确性,修改数据库数据输出数据无 表3-9 修改个人密码模块IPO表10、删除操作记录模块模块名称删除操作记录模块输入数据无处理过程删除数据库中操作记录表的信息输出数据无 表3-10 删除操作记录模块IPO表11、删除读者信息模块模块名称删除读者信息模块输入数据读者编号处理过程验证能否删除,删除数据库数据输出数据无 表3-11 删除读者信息模块IPO表12、查询图书信息模块模块名称查询图书信息模块输入数据图书编号或分类信息或书名关键字处理过程查询图书表输出数据相关图书信息 表3-12 删除读者信息模块IPO表3.4 性能需求该软件对输入数据、输出数据精度的要求如下表所示:数据类型方向格式字符型输入输出avcAaaa浮点型输入输出123.65日期型输出YYYY-MM-DD时间型输出HH24:MM:SS表3-13 数据精度要求表本图书管理系统要求响应时间低于1秒,更新处理时间、数据的转换和传送时间短,用户等待时间尽可能为0.本系统主要任务是访问后台数据库的数据,并做出相应的处理,所以对数据库的容量要求很高,因此建议设置变长的表空间,这样就可以避免出现分配的空间不够而给用户管理带来麻烦的情况。初始化表空间容量为5M,每次增长的空间为5M。本系统运行过程中可能出现的问题是数据库故障,处理方法是建议用户每天对数据库中的做一次备份,这样如果数据库出现问题,可以立即还原数据,而不造成大的损失3.5 事件跟踪图由于这个系统模块很多,如果画出每个模块的事件跟踪图,会占用很大的篇幅,何况很多模块的事件跟踪图大同小异,所以我决定画出正常情况下读者挂失图书模块、管理员新增图书信息模块、超级管理员查看操作记录模块的事件跟踪图。读者挂失图书模块的事件跟踪图如图3-1所示:图3-1 读者挂失模块的事件跟踪图管理员新增图书信息模块的事件跟踪图如图3-2所示:图3-2管理员新增图书信息模块事件跟踪图超级管理员查看操作记录模块的事件跟踪图如图3-3所示:图3-3超级管理管理员新增图书信息模块事件跟踪图4.总体设计说明书4.1 编写目的总体设计的目的就是回答“概括地说,系统应该如何实现?”这个问题。也就是说这个说明书的编写目的也就是告诉程序员和软件设计人员本图书馆管理系统系统的系统结构和软件结构。本报告的预期读者是:编写该软件的程序员、其他软件设计人员、系统分析员。4.2 图书管理系统的系统层次结构图图4-1 是该图书管理系统的系统层次结构图。4.3 图书管理系统的软件结构图图4-2 是图书管理系统的软件结构图5.数据库设计说明书5.1 概念结构设计本课程设计连接数据库是Oracle9i,用的方式是JDBC桥,因此数据库设计尤为重要;本系统E-R图如图3-4 图书管理系统的系统层次结构图图3-5 图书管理系统的软件结构图下:图5-1读者表和书表的E-R图图5-2 管理员表和操作记录表的E-R图5.2逻辑结构设计根据上述E-R模型,我们可以得到该系统的数据库应该包括五个表,分别是:读者信息表、书籍信息表、借阅信息表、管理员表、操作记录表;下面是这五个表的详细属性信息(下划线的是该表的主键):读者信息表:读者编号、姓名、密码、当前可借书册数、当前状态书籍信息表:书编号、书名、出版社、类别、单价、现有藏书量借阅信息表:借阅编号、读者编号、书编号、借书时间、预计还书时间、标识位、还书时间管理员表:管理员编号、姓名、密码、级别操作记录表:操作时间、发生事件5.3 物理结构设计一般数据库的物理结构设计包括两个方面:为关系模式选择存取方法和设计关系、索引等数据库文件的物理存储结构。本系统没有建立任何索引。6.详细设计说明书6.1 编写目的详细设计阶段的根本目标是确定应该怎样具体地实现所要求的系统,也就是说,经过这个阶段的设计工作,应该得出对目标系统的精确描述,从而在编码阶段可以把这个描述直接翻译成用某种设计语言书写的程序。本说明书是为了给程序员提供出一个程序的“蓝图”,指导他们更好地完成编码任务。本说明书目标读者是:软件设计师、所有参与这个项目的编码人员和测试人员。6.2 界面设计从需求规格说明书中,我们已经知道本系统将使用者分为三类:超级管理员、一般管理员和读者。而且他们的权限各不相同,故需要为他们各自设计主界面,本节将用三个参考模型详细说明三个主界面应如何设计。图6-1是超级管理员主界面设计参考模型。图6-2是一般管理员主界面设计参考模型。图6-3是读者主界面设计参考模型。图6-1 超级管理员主界面设计模型图6-2 一般管理员主界面设计模型图6-3 读者主界面设计模型6.3 一点说明由于本系统模块过多,如果把所有模块的详细设计过程全部写出,实验报告的篇幅将会很长,所以我只写出“添加书的信息”模块详细设计过程,其余模块类似。6.4 “添加书的信息”模块界面设计从需求规格说明书和数据库设计中,我们可以看出,书表的属性有:编号、书名、类别、当前在馆册数、价格和出版社;而为了节省字段,我把书名定义为书名和作者;当前在馆册数初始状态下就是藏书量,一般的图书馆一种书籍的藏书量不会超过5本,所以该项可设计为可选项;由于管理员的工作是很忙的,不可能不出现错误,尤其长时间做同一工作,所以出版社那一栏中我建议初始化为“出版社”,按钮设置方面,“提交”和“取消”是不可缺少的,但考虑到管理员的工作需要,我又设置了一个“重置”的按钮,单击这个按钮后,所有输入栏都将会回到刚打开窗口时的状态;因此,其界面设计参考模型如图6-4所示。图6-4 “添加书的信息”模块界面设计参考模型6.5 “添加书的信息”模块参考方法设计表6-1和表6-2是“添加图书信息”模块参考方法设计方法名称checkID方法返回类型boolean方法形参名称String id前置条件单击“提交”SQL语句select * from book where b_no=id处理结果如果没有这个号码,返回false,反之返回true表6-1 “添加图书信息”模块参考方法1方法名称insertBook方法返回类型boolean方法形参名称Book b前置条件所有验证都已完毕,且没有异常SQL语句insert into book values(id ,name,puname,leibie,price,lsnum )处理结果如果插入成功,返回true,失败,返回false表6-2 “添加图书信息”模块参考方法27.系统实现7.1 开发环境中央处理器:Core(TM)2 CPU T5600;内存:512MB;主频:1.83GHz;开发平台:JBuider2006;数据库:Oracle 9i; 运行平台:Windows XP7.2 关键技术本图书管理系统所使用的关键技术有:JDBC-ODBC桥,JavaGUI程序设计基本技术,数据库增删改查技术,面向对象程序设计技术(类的继承和派生技术)。7.3 运行结果7.3.1访问数据库模块该系统访问数据库使用的是JDBC-ODBC桥的方式,为了节省工作量,需要编写一个类专门用户访问Oracle数据库,这个类的代码如下:package librarysystem.tools;import java.sql.ResultSet;import java.sql.*;public class DBClass implements DBinterface public DBClass() Connection conn=null; Statement stmt=null; ResultSet rs=null; protected static final String DRIVER=oracle.jdbc.driver.OracleDriver; protected static final String URL=jdbc:oracle:thin:localhost:1521:ora9i; public boolean createConnect() try Class.forName(DRIVER); conn=DriverManager.getConnection(URL,lmsm,1234); return true; catch(Exception e) e.printStackTrace(); return false; public int getExecuteUpdate(String sql) try stmt=conn.createStatement(); int n=stmt.executeUpdate(sql); return n; catch(Exception e) e.printStackTrace(); return -1; public ResultSet getExecuteQuery(String sql) try stmt = conn.createStatement(); rs = stmt.executeQuery(sql); return rs; catch(Exception e) e.printStackTrace(); return null; public void closeConnect1() try if(rs!=null) rs.close(); catch(Exception e) e.printStackTrace(); public void closeConnect2() try if(stmt!=null) stmt.close(); catch(Exception e) e.printStackTrace(); public void closeConnect3() try if(conn!=null) conn.close(); catch(Exception e) e.printStackTrace(); 有了这个类,再访问数据库时,只需创建该类的对象,调用方法就可以了,不必在每次访问数据时都要设置很多参数变量。7.3.2 登陆模块由于这个系统是用JBuider2006开发的,界面设计代码不用自己写,只需要将所需的控件拖到合适的位置就大功告成了,所以我省去那些系统生成的代码,如果代码是自己写的,就把代码写在实验报告中吧!图7-1是登陆模块的界面。在这个系统实现中,主要代码是消息响应方法,对于每个模块我都把它消息响应代码写在实验报告中,重复的就不再写了。public void actionPerformed(ActionEvent e) /读取界面输入数据. if (e.getActionCommand().equals(登陆) /验证信息,详见源代码/ /验证成功 if (flag) /判断用户类型 if (jibie.equals(管理员) /控制信息详见源代码/. lc = new LoginControl();/验证用户名和密码与数据库中是否一致 if (lc.checkManager(manager) /控制信息.详见源代码 if (grade = 1) /显示超级管理员登陆成功 this.showInformation(超级管理员登陆成功); /操作记录表中添加记录 record = 超级管理员 + manager.getName() + 登陆成功!;/控制信息/详见源代码/进入超级管理员界面 this.setVisible(false); new SuperManagerWindow(); else / this.showInformation(管理员登陆成功); record = 一般管理员 + manager.getName() + 登陆成功!;/提示改密码 if (manager.getId().equals(manager.getPwd() this.showInformation(为了您信息安全,请尽快修改密码!); /进入管理员界面 new ManagerWindow(); else /显示登陆失败信息 this.showError(用户名或密码错误,请查验!); record = 某管理员登陆失败!; else /读者登陆验证代码省略 /向操作记录表中添加信息 rc = new RecordControl(); rc.InsertRecord(record); else /响应退出按钮 this.setVisible(false); 7.3.3 添加管理员、读者、书籍信息模块这三个模块在设计思路上大同小异,故放在一起分析,以添加书籍模块为例,设计界面如图7-2所示,其余两个详见系统测试部分,下面是消息响应方法的思路及关键代码;图7-1登陆界面图7-2 添加图书信息public void actionPerformed(ActionEvent e) /得到文本框中输入的内容 if (e.getActionCommand().equals(提交) /控制验证详见源代码 /进行主键唯一性验证 if(ibc.checkID(id) flag=false; this.showError(条形码已经被使用,请更换!); if(flag)/设置Book对象中的内容./插入数据库 if(ibc.InsertBook(book) /向操作记录表中添加信息 else this.showError(价格出现问题,请核实!); else if(e.getActionCommand().equals(重置) /将五个文本框恢复到初始状态下 else/响应取消按钮 this.dispose(); 7.3.4 借书模块借书模块的设计充分体现了减少键盘输入的思想,用户只需选择就可以完成操作,但如果书很多,或读者很多时,选择速度会很慢,现在大部分都用模式识别技术,直接去扫描条形码,所以这个设计有点落伍。图7-3是借书模块界面的图。图7-3 添加借阅记录(借书模块)界面消息响应方法思路如下: public void actionPerformed(ActionEvent e) if (e.getActionCommand().equals(显示读者信息) String id = (String) cbx1.getSelectedItem(); Reader r = imco.showReader(id); ShowReaderView srv = new ShowReaderView(r); else if (e.getActionCommand().equals(关于该书) /显示书的信息,和读者信息一致,省去 else if (e.getActionCommand().equals(提交) /得到文本框的内容/取得该编号的所有信息 Reader r=imco.showReader(r_id); Book b=imco.showBook(b_id);/如果读者不能借书 if(r.getBooknum()=0) flag=false; this.showError(读者已不能再借书,已经借满了!); /如果读者挂失图书未缴纳罚款 if(r.getIsUse()=0) flag=false; this.showError(该读者未交挂失书罚款,已不能再借书了!); /如果书只剩一本 if(b.getLsnum()=1) flag=false; this.showError(该书不能借出,只有一本了!); if(flag)/插入信息 if (imco.InsertMessage(r_id, b_id) /控制代码/插入操作记录表对应信息 else this.showError(借书操作失败!请查验!);7.3.5还书模块还书模块我设计了两个界面,第一个界面得到还书人的编号,然后用它去数据库查询该读者未还的书,把未还的书的编号显示在第二个界面的可选框中,然后选择就可以完成操作了。图7-4是第一个界面,图7-5是第二个界面。图7-4还书界面A图7-5还书界面B还书界面A的消息响应框架:public void actionPerformed(ActionEvent e) String id=(String)cmb.getSelectedItem(); if(e.getActionCommand().equals(读者详细信息) Reader r=imco.showReader(id); new ShowReaderView(r); else /响应下一步按钮 this.setVisible(false); ReturnBookA_r_id=id;/进入界面B new ReturnViewB(); 还书界面B的消息响应方法框架: public void actionPerformed(ActionEvent e) /得到输入信息 if (e.getActionCommand().equals(查看书的信息) /显示书的详细信息 else if(e.getActionCommand().equals(取消) this.setVisible(false); else /得到读者和书在表中的所有信息/修改借阅信息表的数据 if(rbco.upDateMessage(b_id,r_id)/修改读者信息表和书籍信息表的信息 imco.updateReaderBook(r,b);/插入操作记录/给出相关提示 else /错误信息提示n 7.3.6 续借和挂失模块经分析,这两个模块初始条件是一样的,因此用同一个界面设计,处理过程方面都是去修改借阅信息表中的标识位的具体数值,0代表借书没有续借;1代表借书已经续借;2代表书已经还了;3代表挂失没有交罚款;4代表挂失已缴纳罚款。如果该书续借过了,给出提示;图7-6是这两个模块的界面。图7-6 续借挂失界面续借挂失界面的消息响应方法框架是: public void actionPerformed(ActionEvent e) /得到Book Reader 的对象/得到选择框内容 if (e.getSource() = btn2) /响应续借按钮 /验证代码. if (flag) /修改借阅信息表的信息 if (rco.updateConMessage(b_id) /插入操作记录表的信息 else if (e.getSource() = btn1) /查看书的信息 else if (e.getSource() = btn3) ./响应挂失的按钮 if (rco.updateLose(b_id) /向操作记录表中插入信息,并提示读者尽快缴纳罚款 else /响应取消按钮,回到读者主界面 7.3.7处理挂失信息模块该模块是管理员在读者前来缴纳罚款时使用的,如果没有挂失信息,给出管理员提示;有挂失信息,给出挂失的读者的编号,管理员选择合适的编号后进入第二个界面,显示挂失的书名和应该缴纳的罚款数,读者缴纳罚款后,管理员将单击缴纳罚款按钮,完成处理挂失的操作;第一个界面初始化是我自己写的,现将代码写入实验报告: private void jbInit() throws Exception panel.setLayout(borderLayout1); this.getContentPane().add(panel, java.awt.BorderLayout.CENTER);/分别初始化有无挂失信息的处理界面 if (this.getNum() = 0) lbl.setText(目前没有读者挂失图书!); panel.add(lbl, BorderLayout.NORTH); btn = new JButton(返回); panel.add(btn, BorderLayout.SOUTH); this.setSize(100, 200); this.setLocation(100, 100); this.setVisible(true); else String text = 有 + this.getNum() + 位读者挂失图书; lbl.setText(text); cmb = new JComboBox(this.getNo(); btn = new JButton(处理); panel.add(lbl, BorderLayout.NORTH); panel.add(cmb, BorderLayout.CENTER); panel.add(btn, BorderLayout.SOUTH); this.setSize(200, 200); this.setLocation(100, 100); this.setVisible(true); btn.addActionListener(this); JPanel panel = new JPanel(); JLabel lbl = new JLabel();JComboBox cmb = null; JButton btn = null;BorderLayout borderLayout1 = new BorderLayout();图7-7处理挂失记录1 图7-8处理挂失记录2图7-8中如果单击处理按钮会出现以下界面:图7-9显示缴纳罚款界面显示缴纳罚款界面中缴纳罚款的消息响应代码如下: /将该用户的状态改为可用,然后向操作记录表中添加信息if (lbico.updateReaderUse() RecordControl rc = new RecordControl(); InsertMessageControl imco = new InsertMessageControl(); Reader r = imco.showReader(lbico.getR_id(); String message = r.getName() + 已交纳罚款 + tfd2.getText() + 操作员: + LoginView.name; rc.InsertRecord(message); else this.showError(出现问题,请查验!); 7.3.8 修改个人密码模块该模块首先需要输入一次旧密码,然后需要输入两次新密码,如果修改成功,向操作信息表中添加记录。图7-10是该模块的界面;图7-10修改个人密码提交按钮的消息处理代码: /取三个密码框中输入的数据,分别存入pwd1,pwd2,pwd3中/验证是否为空 if (pwd1.length() = 0) | (pwd2.length() = 0) | (pwd3.length() = 0) flag = false; this.showError(密码长度不能为空!请查验!); /验证首字母是否为空格 if (pwd1.length() != 0) & (pwd1.charAt(0) = ) | (pwd2.length() != 0) & (pwd2.charAt(0) = ) | (pwd3.length() != 0) & (pwd3.charAt(0) = ) flag = false; this.showEr
展开阅读全文