![图书馆管理系统-毕业论文_第1页](http://file4.renrendoc.com/view/8c010b88f5417b3c5087619567ca4958/8c010b88f5417b3c5087619567ca49581.gif)
![图书馆管理系统-毕业论文_第2页](http://file4.renrendoc.com/view/8c010b88f5417b3c5087619567ca4958/8c010b88f5417b3c5087619567ca49582.gif)
![图书馆管理系统-毕业论文_第3页](http://file4.renrendoc.com/view/8c010b88f5417b3c5087619567ca4958/8c010b88f5417b3c5087619567ca49583.gif)
![图书馆管理系统-毕业论文_第4页](http://file4.renrendoc.com/view/8c010b88f5417b3c5087619567ca4958/8c010b88f5417b3c5087619567ca49584.gif)
![图书馆管理系统-毕业论文_第5页](http://file4.renrendoc.com/view/8c010b88f5417b3c5087619567ca4958/8c010b88f5417b3c5087619567ca49585.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
******届班级:软件G142辽宁****学院毕业设计(论文)题目:图书馆管理系统设计系(部):信息工程系专业:软件技术姓名:小峰学号:19目录第一章 引言 图书馆管理系统设计引言随着网络技术的高速发展,计算机应用的普及,利用计算机对图书馆的日常工作进行管理势在必行。虽然目前很多大型的图书馆已经有一套完善的管理系统,但一些中小型图书馆,包括在一些高校中,图书馆的大部分工作仍需要手工完成,工作起来效率比较低,管理员不能及时了解图书馆内各类图书的借阅情况,读者需要的图书难以在短时间内找到,所以图书管理涉及到大量的数据处理,一个现在化的图书馆根本不可能手工完成的庞大的数据处理。该毕业设计鉴于管理系统的不断发展,为了减轻人工操作管理图书的负担,提高图书馆图书管理工作的效率。使用JSP进行网页界面的设计,采用Servlet和JavaBean进行开发了一个适用于中小型图书馆的在线图书馆管理系统,该系统较完善的实现了不同级别用户所需求的各项图书管理操作。该毕业设计的学习和实践过程以实用性为目的,特别注意整体的设计和构思,避免了开发过程中不必要的反复修改和添减。程序编写时着重体现编程实用技巧,对系统的安全性,实用性和可维护性都做了较为充分的考虑。为保护个人知识产权,在系统中还添加了产品信息的介绍。该数据库应用系统的学习、开发和其他的系统开发步骤一样被分为5个部分:开发工具概述,系统的需求分析设计,数据库设计,系统功能实现,系统运行。该论文从对Javaweb系统开发基础的叙述开始,对整个系统的具体开发设计过程做了详细介绍。并在附录部分附有该系统精华部分的程序编码。由于水平有限,论文中难免存在错误和不足之处,敬请各位批评和指正。
系统分析与系统设计需求分析长期以来,人们使用传统的人工方式管理图书馆的日常业务,其操作流程比较烦琐。在借书时,读者首先将要借的书和借阅证交给工作人员,然后工作人员将每本书的信息卡片和读者的借阅证放在一个小格栏里,最后在借阅证和每本书贴的借阅条上填写借阅信息。在还书时,读者首先将要还的书交给工作人员,工作人员根据图书信息找到相应的书卡和借阅证,并填好相应的还书信息。从上述描述中可以发现,传统的手工流程存在的不足。首先处理借书、还书业务流程的效率很低;其次处理能力比较低,一段时间内,所能服务的读者人数是有限的。为此,图书馆管理系统需要为企业解决上述问题,为企业提供快速的图书信息检索功能、快捷的图书借阅和归还流程。一个最基本的图书馆管理系统要有如下几个重要功能:用户在借书超期的情况下得到来自管理员注:本系统的使用对象为图书馆的管理员(以下简称管理员),即管理员为本系统的用户。注:本系统的使用对象为图书馆的管理员(以下简称管理员),即管理员为本系统的用户。管理员可以方便进行图书管理,用户管理,管理员管理。图书管理包括图书信息以及图书分类的添加,修改,删除。用户管理包括用户信息的添加,删除,修改。管理员管理包括管理员信息的添加,删除,修改等。管理员可以修改自己的密码,修改前需先核实自己的原始密码。实现模糊查询。管理员权限的限制可行性分析为了对问题进行研究,以最小代价在最短的时间内确定问题是否可解,经过对此项目进行详细调查研究,初拟本系统的实现报告,对软件开发中将要面临的问题及其解决方案进行初步设计及合理安排,明确开发目标。技术可行性分析该网站的开发语言我选择了JSP语言做前台页面,JAVA语言实现后台管理功能;JSP技术在开发网站有着很大的优势:最大的优势就是和JAVA语言一样,与平台的无关性,也是一次编写到处可以运行;除此之外,JSP/Servlet的安全以效率也是十分惊人的;再者JSP相对其他编写网站的语言ASP/PHP等其他语言来说在环境中进行系统部署中的局限性显而易见的少的很多。选择JAVA语言开发程序的优势就更不用了,JAVA语言的平台无关性,以及JAVA语言技术的发展越来越成熟化;而且近年来JAVA语言也正在逐渐成为了Internet应用的主要开发语言;该网站选择模式二为网站的开发结构(也就是俗称的MVC设计模式);在模式二中所有的开发都是以Servlet为主体展开的,由Servlet接收所有的客户端请求,然后根据请求调用相应的JavaBean,然后将所有的显示结果交给JSP完成。所有开发该网站在技术层面上来说是绝对可行的。经济可行性分析对于开发此网站的开发者来说,首先电脑需要有Java环境,然后开发者需要到各工具官方网站上免费下载这三款开源的软件:Eclipse、Mysql数据库以及Tomcat服务器。因为下载的Eclipse是标准版的,不含开发web工程需要的插件,所以需要安装WTP和tomcatplugin插件才可使用。因为使用都是开源软件,所以创建该网站对于开发者来不需要投入多少金钱,但是需要开发者投入一定的时间来完成。但该网站开发出来后极大提高了中小型图书馆包括高校图书馆在内的工作效率,所以该网站建设完成所产生的效益是显而易见的,所以从经济方面上讲开发此系统是可行的。安全可行性分析在系统运行后,就管理者而言,关心的是如何管理图书信息及用户信息,只要把图书信息及用户的信息放入服务器端的数据库或专门的数据库服务器,管理者就可运行相应的后台程序进行处理。就用户方而言,由于用户使用本系统时不会也不必关心系统内部的结构及实现方法,即对用户来说是透明的,所以本系统对用户而言是定位在界面友好、操作方便、功能齐全的原则上的,用户只需简单的用鼠标点击各页面上的链接或按钮就能执行相应的功能。操作可行性分析目前资源的利用情况和可操作性,只需根据相关需要对数据库中的相应表数据直接操作就可以实现系统的完整、稳定的运行,不会造成系统的巨大压力,可以保证系统的正常运行。综上所述,通过技术可行性分析、经济可行性分析、安全可行性分析、操作可行性分析,本系统的开发是可行的。系统目标根据前面所进行的需求分析和实际的调查,图书馆管理系统实施后,应达到以下目标:界面设计友好、美观。数据存储安全、可靠。倍总分类清晰、准确。强大的查询功能,保证数椐查询的灵活性。实现对图书借阅、续借和归还过程的全程数据信息跟踪。提供图书借阅排行榜,为图书馆管理员提供了真是的数据信息。提供借阅到期提解功能,使管理者可以及时了解到己经到达归还日期的图书借阅信息。提供灵活、方便的权限设置功能.使整个系统的管理分工明确。具有易维护性和易操作性。系统功能结构根据图书馆管理系统的特点,可以将其分为系统设置、读者管理、图书管理、图书借还、系统查询等5个部分,其中各个部分及其包含的具体功能模块如图2-1所示。图2-1系统功能结构图系统流程图图书馆管理系统的系统流程图如图2-2所示。图2-2系统流程图开发环境在开发图书馆管理系统时,需要具备以下的软件环境。服务器端:操作系统:windows10。Web服务器:Tomcat8.0。Java开发包:JDK1.8以上。前端工具:Dreamweaver。数据库:MySQL。浏览器:IE9.0。客户端:浏览器:IE9.0。分辨率:最佳为1024×768分辨率。文件夹组织结构在开发图书馆管理系统时,设计了如图2-3所示的文件夹组织结构图。在开发时,只需要将所创建的文件保存在相应的文件夹中就可以了。图2-3图书馆管理系统文件夹组织结构顶层用例图本系统顶层用例如图2-4所示。图2-4顶层用例图用例分析与描述登录用例图图2-5登录用例图用例的事件流描述简单描述:本用例描述了用户如何登录到系统中。前置条件用户访问本系统后置条件如果用例成功,用例登录到系统中,否则系统的状态不变。事件流基流图书馆管理员登录到本系统时,服务启动。系统显示要管理员输入管理员名称和管理员密码。管理员输入自己的名称和密码,提交。系统验证输入的名称和密码,用户成功登录系统。替代流未输入管理员名称,系统提示请输入管理员名称。未输入管理员密码,系统提示请输入管理员密码。系统检索不到该用户的账号密码,系统提示您输入的管理员名称或密码错误。系统设置用例图图2-6系统设置用例图用例的事件流描述简单描述:管理员登录系统后选择系统设置,会弹出图书馆信息、管理员设置、参数设置、书架设置四个选项,选择进入其功能页面。前置条件已登录后置条件用例成功后会弹出图书馆信息、管理员设置、参数设置、书架设置四个选项。事件流基流选择一选项后进入其功能页面。读者管理用例图图2-7读者管理用例图用例的事件流描述简单描述:管理员登录系统后选择读者管理,会弹出读者类型管理、读者档案管理两个选项,选择进入其功能页面。前置条件已登录后置条件用例成功后会弹出读者类型管理、读者档案管理两个选项事件流基流选择一选项后进入其功能页面。图书管理用例图图2-8图书管理用例图用例的事件流描述简单描述:管理员登录系统后选择图书管理,会弹出图书类型管理、图书档案管理两个选项,选择进入其功能页面。前置条件已登录后置条件用例成功后会弹出读者类型管理、读者档案管理两个选项事件流基流选择一选项后进入其功能页面。图书借还用例图图2-9图书借还用例图用例的事件流描述简单描述:管理员登录系统后选择图书借还,会弹出图书借阅、图书续借、图书归还三个选项,选择进入其功能页面。前置条件已登录后置条件用例成功后会弹出图书借阅、图书续借、图书归还三个选项。事件流基流选择一选项后进入其功能页面。系统查询用例图图2-10系统查询用例图用例的事件流描述简单描述:管理员登录系统后选择系统查询,会弹出图书档案查询、图书借阅查询、借阅到期提醒三个选项,选择进入其功能页面。前置条件已登录后置条件用例成功后会弹出图书档案查询、图书借阅查询、借阅到期提醒三个选项事件流基流选择一选项后进入其功能页面。更改口令用例图图2-9更改口令用例图用例的事件流描述简单描述:管理员登录系统后选择更改口令,会进入更改口令页面,填入相关信息即可更改登录口令。前置条件已登录后置条件如果用例成功,则成功修改密码,否则原始密码不改变。事件流基流用户点击更改口令按钮。系统显示要求用户填写原密码、新密码和确认密码。用户填写相关信息,提交。系统验证成功后,提示密码修改成功。替代流系统对比原始密码不正确,系统提示错误。系统验证两次密码输入不一致,系统提示错误。
数据库设计数据库分析由于本系统是为中小型图书馆开发的程序,需要充分考虑到成本问题及跨平台等问题,而MySQL是目前最为流行的开放源码的数据库,是完全网络化的跨平台的关系型数据库系统,这正好满足了中小型企业的需求,所以本系统采用Mysql数据库。数据库逻辑结构如表3-1所示为本系统数据库中所包含的数据表的结构。表3-1db_librarysys数据库所包含数据表的结构表tb_bookcase书架信息表tb_bookinfo图书信息表tb_booktype图书类型表tb_borrow图书借阅信息表tb_giveback图书归还信息表tb_library图书馆信息表tb_manager管理员信息表tb_parameter参数设置表tb_publishing出版社信息表tb_purview权限表tb_reader读者信息表tb_readertype读者类型信息表tb_manager(管理员信息表)管理员信息表主要用来保存管理员信息。tb_manager的表结构如表3-2所示。表3-2tb_manager的表结构字段名数据类型是否为空是否主键默认值描述idint(10)unsigned否是ID(自动编号)namevarchar(30)是NULL管理员名称(续表)字段名数据类型是否为空是否主键默认值描述pwdvarchar(30)是NULL密码tb_purview(权限表)权限表主要用来保存管理员的权限信息,该表中的id字段与管理员信息表(tb_manager)中的id字段相关联。tb_purview的表结构如图表3-3所示。表3-3tb_purview的表结构字段名数据类型是否为空是否主键默认值描述idint(11)否是0管理员ID号syssettinyint(1)是0系统设置readersettinyint(1)是0读者管理booksettinyint(1)是0图书管理borrowbacktinyint(1)是0图书借还sysquerytinyint(1)是0系统查询tb_bookinfo(图书信息表)图书信息表主要用来保存图书信息。表tb_bookinfo的结构如图表3-4所示。表3-4tb_bookinfo的表结构字段名数据类型是否为空是否主键默认值描述barcodevarchar(30)是NULL条形码booknamevarchar(70)是NULL书名typeidint(10)unsigned是NULL类型authorvarchar(30)是NULL作者translatorvarchar(30)是NULL译者ISBNvarchar(20)是NULL出版社pricefloat(8,2)是NULL价格pageint(10)unsigned是NULL页码bookcaseint(10)unsigned是NULL书架inTimedate是NULL录入时间(续表)字段名数据类型是否为空是否主键默认值描述operatorvarchar(30)是NULL操作员deltinyint(1)是0是否删除idint(11)否是ID(自动编号)tb_borrow(图书借阅信息表)图书借阅信息表主要用来保存图书借阅信息。tb_borrow的表结构如表3-5所示。表3-5tb_borrow的表结构字段名数据类型是否为空是否主键默认值描述idint(10)unsigned否是ID(自动编号)readeridint(10)unsigned是NULL读者编号bookidint(10)是NULL图书编号borrowTimedate是NULL借书时间backtimedate是NULL应还时间operatorvarchar(30)是NULL操作员ifbacktinyint(1)是0是否归还tb_giveback(图书归还信息表)图书归还信息表主要用来保存图书归还信息。tb_giveback的表结构如表3-6所示。表3-6tb_giveback的表结构字段名数据类型是否为空是否主键默认值描述idint(10)unsigned否是ID(自动编号)readeridint(11)是NULL读者编号bookidint(11)是NULL图书编号backTimedate是NULL归还时间operatorvarchar(30)是NULL操作员tb_reader(读者信息表)读者信息表主要用来保存读者信息。tb_reader的表结构如图3-7所示。表3-7tb_reader的表结构字段名数据类型是否为空是否主键默认值描述idint(10)unsigned否是ID(自动编号)namevarchar(20)是NULL姓名sexvarchar(4)是NULL性别barcodevarchar(30)是NULL条形码vocationvarchar(50)是NULL职业birthdaydate是NULL出生日期paperTypevarchar(10)是NULL有效证件paperNOvarchar(20)是NULL证件号码telvarchar(20)是NULL电话emailvarchar(100)是NULL电子邮件createDatedate是NULL登记日期operatorvarchar(30)是NULL操作员remarktext是0备注typeidint(11)是类型
设计流程图书馆管理系统的使用对象是图书馆的管理人员,要保证系统的界面友好性和易操作性,软件的整体配色采用绿色加橙色,使用绿色可减少眼睛的疲劳,使用橙色可防止一些误操作的产生。每天借书还书操作的重复率,将这两项的入口放在一起,方便操作。此外对于用户权限的控制也在本系统有体现。登录功能作为一个企业所使用的系统,内部保存的数据尤为重要,必须需要使用账号和密码登录,来防止他人对系统数据的恶意破坏。系统登录是进入图书馆管理系统的入口。在运行本系统后,首先进入的是系统登录页面,在该页面中,系统管理员可以通过输入正确的管理员名称和密码登录到系统,当用户没有输入管理员名称或密码时,系统会通过JavaScript进行判断,并给予提示信息。系统登录的运行结果如图4-1所示。图4-1系统登录页面此外,从安全角度考量,还需要防止非法用户登录本系统,具体在第五章详细设计阶段进行说明。主界面设计管理员通过“系统登录”模块的验证后,可以登陆到图书馆管理系统的主界面,主界面运行结果如图4-2(a)所示。系统主界面主要包括Banner信息栏、导航栏、排行榜和版权信息4部分。其中,导航栏中的功能菜单将根据管理员的权限进行显示。例如,系统管理员admin登录后,将拥有整个系统的全部功能,因为他是超级管理员,具体情况如图4-3(a)所示。(a)系统主界面运行结果(b)主界面布局图4-2主界面设计图(a)admin超级管理员状态(b)无权限用户登录状态图4-3导航栏功能菜单的不同显示在如图4-2(a)所示的主界面中,Banner信息栏、导航栏和版权信息并不是仅保存于主界面中,其他功能模块的子界面中也需要包括此部分。因此,可以将这几个部分分别存放保存在单独的文件中,这样,在需要放置相应功能时只需包含这些文件即可,主要界面的布局如图4-2(b)所示。考虑到本系统中需要包含的多个文件之间相对比较独立,并且不需要进行参数传递,属于静态包含,因此采用<%@include%>指令实现,部分代码如下:<%@includefile="banner.jsp"%><%@includefile="navigation.jsp"%><!--省略部分代码--><tablewidth="778"height="510"border="0"align="center"cellpadding="0"cellspacing="0"bgcolor="#FFFFFF"class="tableBorder_gray"><tr><tdalign="center"valign="top"style="padding:5px;"> <!--省略部分代码--></td></tr></table><%@includefile="copyright.jsp"%>系统设置功能修改图书馆信息功能作为一个图书管理系统,并不是专为一家企业所开发的,可以使用在多个图书馆中,那么图书馆的详细信息就不能写在代码当中,那样修改的代价太大。所以设计此功能,方便修改信息,如图4-4所示。图4-4修改图书馆信息页面图4-5修改管理员权限管理员设置功能进入管理员设置页面,将显示管理员列表,可以添加、删除管理员,也可修改管理员的权限(如图4-5),这样就方便企业来控制每个职工的权限,不会出现越权问题。图4-6管理员列表书架设置功能书架的设置是一个图书馆必须的要素,在此设置好书架后,就可以在导入图书时,选择书架,如图4-7为书架设置页面。图4-7书架设置页面读者管理设置读者类型管理因为系统需要记录借书人的相关信息,所以需要先设置读者的类型,来控制借书的数量,如图4-8所示。图4-8读者类型管理页面读者档案管理系统需要记录借书人的相关信息,包括4.4.1提到的读者类型在内的条形码、姓名、证件类型、证件号码、电话、Email等信息。图4-9读者档案管理页面图书管理设置图书类型管理系统需要先设置图书的类型,来控制图书可借的天数,如图4-10所示。图4-10图书类型管理页面图书档案管理作为图书馆管理系统,图书的管理尤为重要,该功能的目的就是记录图书的档案,包括条形码(ISBN)、图书名称、图书类型、出版社、书架等信息。由于列表不能完全的显示图书的全部信息,所以点击图书名称即可进图详细信息页面(如图4-12所示)。图4-11读者档案管理页面图4-12图书详情页图书借还设置本块就是本系统的核心部分,在设计方面图书借阅、图书续借、图书归还是相似的,实现方面也是非常类似的。图书借阅先输入读者的条形码,之后会显示读者的信息,之后添加图书,完成借阅图4-13图书借阅页面图书续借图4-14图书续借页面图书归还图4-15图书归还页面图书借阅排行榜功能为了让管理员清楚的了解到图书的借阅情况,特设计了本功能,用来统计图书的借阅情况,并显示在首页上,如图4-16所示。图4-16图书借阅排行榜系统查询设置图书档案查询当图书库里的图书超过一定量时,想查找到一本书修改或删除它是相当不容易的,因此开发了此功能。图4-17图书档案查询页面图书借阅查询按照图书信息查询或者借阅时间查询,如图4-18所示。图4-18图书借阅查询页面借阅到期提醒图书的借阅都是有时间限制的,借阅到期提醒会给出管理员所有图书借阅到期时间的统计列表,如图4-19所示。图4-19借阅到期提醒页面更改口令设置更改口令是每个管理系统必备的功能,用于修改用户的登录口令。图4-20更改口令页面
详细设计管理员模块设计管理员模块主要包括管理员登陆、查看管理员列表、添加管理员信息、管理员权限设置、管理员删除和更改口令6个功能。管理员模块的框架如图5-1所示。图5-1管理员模块的框架图编写管理员的实体类在管理员模块中,涉及的数据表是tb_manager(管理员信息表)和tb_purview(权限表),其中,管理员信息表中保存的是管理员的名称和密码等信息,权限表中保存的是各管理员的权限信息,根据这些信息可以得出管理员模块的实体类。管理员模块的实体类的名称为ManagerForm。具体代码如下:packagecom.actionForm;importorg.apache.struts.action.ActionForm;publicclassManagerFormextendsActionForm{privateIntegerid=newInteger(-1);//管理员ID号privateStringname="";//管理员名称privateStringpwd="";//管理员密码privateintsysset=0;//系统设置权限privateintreaderset=0;//读者管理权限privateintbookset=0;//图书管理权限privateintborrowback=0;//图书借还权限privateintsysquery=0;//系统查询权限publicIntegergetId(){returnid;}publicvoidsetId(Integerid){this.id=id;}……编写管理员的Servlet控制类管理员功能模块的Servlet控制类继承了HttpServlet类,在该类中,首先需要在构造方法中实例化管理员模块的ManagerDAO类(该类用于实现与数据库的交互),然后编写doGet()和doPost()方法,在这两个方法中根据request的getParameter()方法获取的action参数值执行相应的方法,由于这两个方法中的代码相同,所以只需在同一个方法doGet()中写相应代码,在另一个方法doPost()中调用doGet()方法即可。配置管理员的Servlet控制类管理员的Servlet控制类编写完需要在web.xml文件中配置该Servlet,关键代码如下:<servlet><servlet-name>Manager</servlet-name><servlet-class>com.action.Manager</servlet-class></servlet><servlet-mapping><servlet-name>Manager</servlet-name><url-pattern>/manager</url-pattern></servlet-mapping>系统登录的实现过程系统登录是进入图书馆管理系统的入口。在运行本系统后,首先进入的是系统登录页面,在该页面中,系统管理员可以通过输入正确的管理员名称和密码登录到系统,当用户没有输入管理员名称或密码是,系统会通过JavaScript进行判断,并给予提示信息。系统登录的运行结果如图4-1所示。此外还需要修改5.1.2和5.1.3中提到的Serclet控制类以及ManagerDAO类。从安全角度考量,仅靠上面介绍的系统登录页面并不能有效地保证系统的安全,一旦系统主界面的地址被他人获得,就可以通过在地址栏中输入系统的主界面地址从而直接进入到系统中。由于系统的Banner信息栏banner.jsp几乎包含整个系统的每个页面(如图4-2(b)),因此这里将验证用户是否登录的代码放置在该页中。验证用户是否登录的具体代码如下:<%ChStrchStr=newChStr();Stringmanager=(String)session.getAttribute("manager");//验证用户是否登录if(manager==null||"".equals(manager)){ response.sendRedirect("login.jsp");}%>这样,当系统调用每个页面时,都会判断session变量manager是否存在,如果不存在,将页面重定向到系统登录页面。添加管理员的实现过程管理员登陆系统后,在管理员设置页面,单击“添加管理员信息”超链接,打开添加管理员信息页面。添加管理员信息页面的运行结果如图5-2所示。图5-2添加管理员信息页面设计添加管理员信息页面添加管理员页面主要用于收集输入的管理员信息及通过自定义的JavaScript函数验证输入信息是否合法,该页面中所涉及的表单元素如表5-1所示。表5-1添加管理员页面涉及的表单元素名称元素类型重要属性含义form1formmethod=”post”action=”manager?action=managerAdd”表单nametext管理员名称pwdpassword管理员密码pwd1password确认密码(续表)名称元素类型重要属性含义Buttonbuttonvalue=”保存”onClick=”check(form1)”“保存”按钮Submit2buttonvalue=”关闭”onClick=”window.close()”“关闭”按钮编写自定义的JavaScript函数,用于判断管理员名称、管理员密码、确认密码文本框是否为空,以及两次输入的密码是否一致。程序代码如下:<scriptlanguage="javascript">functioncheck(form){ if(.value==""){ alert("请输入管理员名称!");.focus();return; } if(form.pwd.value==""){ alert("请输入管理员密码!");form.pwd.focus();return; } if(form.pwd1.value==""){ alert("请确认管理员密码!");form.pwd1.focus();return; } if(form.pwd.value!=form.pwd.value){ alert("您两次输入的管理员密码不一致,请重新输入!");form.pwd.focus();return; } form.submit();}</script>修改管理员的Servlet控制类在添加管理员页面中,输入合法的管理员名称及密码后,单击“保存”按钮,网页会访问一个URL,这个URL是manager?action=managerAdd。从该URL地址中可以知道添加管理员信息页面涉及的action的参数值为managerAdd,也就是当action=managerAdd时,会调用添加管理员信息的方法managerAdd()。在添加管理员信息的方法managerAdd()中,首先需要将接收到的表单信息保存到管理员实体类ManagerForm中,然后调用ManagerDAO类中的insert()方法,将添加的管理员信息保存到数据表中,并将返回值保存到变量ret中,如果返回值为1,则表示信息添加成功,将页面重定向到添加信息成功的页面;如果返回值为2,则表示该管理员信息已经添加,将错误提示信息“该管理员信息已经存在!”保存到HttpServletRequest对象的error参数中,然后将页面重定向到错误提示信息页面;否则,将错误提示信息“添加管理员信息失败!”保存到HttpServletRequest的对象error中,并将页面重定向到错误提示页。编写添加管理员信息的ManagerDAO类的方法从managerAdd()方法中可以知道添加管理员信息使用的ManagcrDAO类的方法是insert()。在insert()方法中首先从数据表tb_manager中查询输入的管理员名称是否存在,如果存在,将标志变量设置为2,否则将输入的信息保存到管理员信息表中,并将返回值赋给标志变量,最后返回标志变量。Inscrt()方法的具体代码如下:publicintinsert(ManagerFormmanagerForm){Stringsql1="SELECT*FROMtb_managerWHEREname='"+managerForm.getName()+"'";ResultSetrs=conn.executeQuery(sql1);Stringsql="";intfalg=0;try{if(rs.next()){falg=2;}else{sql="INSERTINTOtb_manager(name,pwd)values('"+managerForm.getName()+"','"+managerForm.getPwd()+"')";falg=conn.executeUpdate(sql);System.out.println("添加管理员信息的SQL:"+sql);}}catch(SQLExceptionex){falg=0;}finally{ conn.close();}returnfalg;}制作添加信息成功页面下面将添加管理员信息、设置管理员权限和管理员信息删除3个模块操作成功的页面,这里用一个JSP文件实现,只是通过传递的参数para的值进行区分,关键代码如下:<%intpara=Integer.parseInt(request.getParameter("para"));switch(para){ case1: %> <scriptlanguage="javascript"> alert("管理员信息添加成功!"); opener.location.reload(); window.close(); </script> <% break; case2: %> <scriptlanguage="javascript"> alert("管理员权限设置成功!"); opener.location.reload(); window.close(); </script> <% break; case3: %> <scriptlanguage="javascript"> alert("管理员信息删除成功!"); window.location.href="manager.do?action=managerQuery"; </script> <% break;}%>设置管理员权限的实现过程管理员登陆系统后,在管理员设置页面,单击指定管理员后面的“权限设置”超链接,即可进入到权限设置页面,设置该管理员的权限。权限设置页面的运行结果如图5-3所示。图5-3权限设置页面在管理员列表中添加权限设置页面的入口在“査看管理员列表”页面的管理员列表中,添加“权限设置”列,并在该列中添加以下用于打开“权限设置”页面的超链接代码。<ahref="#"onClick="window.open('manager.do?action=managerModifyQuery&id=<%=ID%>','','width=292,height=175')">权限设置</a>从上面的URL地址中可以知道,设置管理员权限页面所涉及的action的参数值为managerModify-Query,当action=managerModifyQuery时,会调用查询指定管理员权限信息的方法managerModifyQuery(),具体代码如下:if("managerModifyQuery".equals(action)){ managerModifyQuery(request,response);}在查询指定管理员权限信息的方法managerModifyQuery()中,首先需要将接收到的表单信息保存到管理员实体类ManagerForm中;再调用ManagerDAO类中的query_update()方法,查询出指定管理员权限信息:再将返回的査询结果保存到HttpServletRequest的对象managerQueryif中。査询指定管理员权限信息的方法managerModifyQuery()的具体代码如下:privatevoidmanagerModifyQuery(HttpServletRequestrequest, HttpServletResponseresponse)throwsServletException,IOException{ ManagerFormmanagerForm=newManagerForm(); managerForm.setId(Integer.valueOf(request.getParameter("id")));//获取并设置管理ID号 request.setAttribute("managerQueryif",managerDAO .query_update(managerForm)); request.getRequestDispatcher("manager_Modify.jsp").forward(request, response); //转到权限设置成功页面 }从managerModifyQuery()中可以知道,查询指定管理员权限信息使用的ManagerDAO类的方法是query_update()。在query_update()方法中,首先使用左连接从数据表tb_manager和tb_purview中查询出符合条件的数据,然后将查询结果保存到Collection集合类中,并返回该集合类,query_update()方法的具体代码如下:publicManagerFormquery_update(ManagerFormmanagerForm){ManagerFormmanagerForm1=null;Stringsql="selectm.*,p.sysset,p.readerset,p.bookset,p.borrowback,p.sysqueryfromtb_managermleftjointb_purviewponm.id=p.idwherem.id="+managerForm.getId()+"";ResultSetrs=conn.executeQuery(sql); //执行查询语句try{while(rs.next()){managerForm1=newManagerForm();managerForm1.setId(Integer.valueOf(rs.getString(1)));…managerForm1.setSysquery(rs.getInt(8));}}catch(SQLExceptionex){ ex.printStackTrace(); //输出异常信息}finally{ conn.close(); //关闭数据库连接}returnmanagerForm1;}设计权限设置页面将Servlet控制类中managerModifyQuery()方法返回的査询结果,显示在设置管理员权限页manager_Modify.jsp中。在manager_Modify.jsp中,通过request.getAttribute()方法获取查询结果,并将其显示在相应的表单元素中。权限设置页面中所涉及的表单元素如表5-2所示。表5-2权限设置页面所涉及的表单元素名称元素类型重要属性含义form1formmethod=”post”action=”manager?action=managerAdd”表单idhiddenvalue=”<%=ID%>”管理员编号nametextreadonly=”yes”value=”<%=name%>”管理员名称syssetcheckboxvalue=”1”<%if(sysset==1){out.println(“checked”);%>系统设置readersetcheckboxvalue=”1”<%if(readerset==1){out.println(“checked”);%>读者管理booksetcheckboxvalue=”1”<%if(bookset==1){out.println(“checked”);%>图书管理borrowbackcheckboxvalue=”1”<%if(borrowback==1){out.println(“checked”);%>图书借还sysquerycheckboxvalue=”1”<%if(sysquery==1){out.println(“checked”);%>系统查询Buttonsubmitvalue=”保存”“保存”按钮Submit2buttonvalue=”关闭”onClick=”window.close()”“关闭”按钮修改管理员的Servlet控制类在权限设置页面中设置管理员权限后,单击"保存"按钮,网页会访问一个URL,这个URL是manager?action=managerModify。从该URL地址中可以知道保存设置管理员权限信息涉及的action的参数值为managerModify,也就是当action=managerModify时,会调用保存设置管理员权限信息的方法managerModify(),具体代码如下:if("managerModify".equals(action)){ managerModify(request,response);}在保存设置管理员权限信息的方法managerModify()中,首先需要将接收到的表单信息保存到管理员实体类ManagerForm中,然后调用ManagerDAO类中的update()方法,将设置的管理员权限信息保存到权限表tb_purview中,并将返回值保存到变量ret中,如果返回值为l,表示信息设置成功,将页面重定向到设置信息成功页面;否则,将错误提示信息“修改管理员信息失败!”保存到HttpServletRequest对象的error参数中,然后将页面重定向到错误提示信息页面。保存设置管理员权限信息的方法managerModify()的具体代码如下:privatevoidmanagerModify(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{ ManagerFormmanagerForm=newManagerForm(); managerForm.setId(Integer.parseInt(request.getParameter(“id”))); //获取并设置管理员ID号 managerForm.setName((request.getParameter(“name”))); //获取并设置管理员名称 managerForm.setPwd((request.getParameter(“pwd”))); //获取并设置管理员密码 managerForm.setSysset((request.getParameter(“sysset”)==null?0:Integer.parseInt(request.getParameter(“sysset”))); //获取并设置系统设置权限 managerForm.setReaderset((request.getParameter(“readerset”)==null?0:Integer.parseInt(request.getParameter(“readerset”))); //获取并设置读者管理权限 managerForm.setBookset((request.getParameter(“bookset”)==null?0:Integer.parseInt(request.getParameter(“bookset”))); //获取并设置图书管理权限 managerForm.setBorrowback((request.getParameter(“borrowback”)==null?0:Integer.parseInt(request.getParameter(“borrowback”)));//获取并设置图书借还权限 managerForm.setSysquery((request.getParameter(“sysquery”)==null?0:Integer.parseInt(request.getParameter(“borrowback”))); //获取并设置系统查询权限 intret=managerDAO.update(managerForm); //调用设置管理员权限的方法 if(ret==0){ request.setAttribute("error","设置管理员权限失败!"); //保存错误提示信息到error参数中 returnmapping.findForward("error"); //转到错误提示页面 }else{ returnmapping.findForward("managerModify"); //转到权限设置成功页面 } }编写保存设置管理员权限信息的ManagerDAO类的方法从managerModify()方法中可以知道设置管理员权限时使用的ManagerDAO类的方法是update()。在update()方法中,首先从数据表tb_manager中查询要设置权限的管理员是否已经存在权限信息,如果是,则修改该管理员的权限信息;如果不是,则在管理员信息表中添加该管理员的权限信息,并将返回值赋给标志变量,然后返回标志变量。update()方法的具体代码如下:publicintupdate(ManagerFormmanagerForm){Stringsql1="SELECT*FROMtb_purviewWHEREid="+managerForm.getId()+"";ResultSetrs=conn.executeQuery(sql1); //查询要设置权限的管理员的权限信息Stringsql="";intfalg=0;try{ //捕捉异常信息if(rs.next()){ //当已经设置权限时,执行更新语句sql="Updatetb_purviewsetsysset="+managerForm.getSysset()+",readerset="+managerForm.getReaderset()+",bookset="+managerForm.getBookset()+",borrowback="+managerForm.getBorrowback()+",sysquery="+managerForm.getSysquery()+"whereid="+managerForm.getId()+"";}else{ //未设置权限时,执行插入语句sql="INSERTINTOtb_purviewvalues("+managerForm.getId()+","+managerForm.getSysset()+","+managerForm.getReaderset()+","+managerForm.getBookset()+","+managerForm.getBorrowback()+","+managerForm.getSysquery()+")";}falg=conn.executeUpdate(sql);}catch(SQLExceptionex){falg=0; //表示设置管理员权限失败}finally{ conn.close(); //关闭数据库连接}returnfalg;}删除管理员的实现过程管理员登录后,选择“系统设置/管理员设置”命令,进入到査看管理员列表页面,在该页面中,单击指定管理员信息后面的“删除”超链接,该管理员及其权限信息将被删除。在査看管理员列表页面中,添加以下用于删除管理员信息的超链接代码:<ahref="manager.do?action=managerDel&id=<%=ID%>">删除</a>从上面的URL地址中,可以知道删除管理员页所涉及的action的参数值为managerDel,当action=managerDel时,会调用删除管理员的方法managerDel(),具体代码如下:if("managerDel".equals(action)){ managerDel(request,response);}在删除管理员的方法managerDel()中,首先需要实例化ManagerForm类,并用获得的ID参数的值重新设置该类的setld()方法,再调用ManagerDAO类中的delete()方法,删除指定的管理员,并根据执行结果将页面转到相应页面。删除管理员的方法managerDel()的具体代码如下: privateActionForwardmanagerDel(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{ ManagerFormmanagerForm=newManagerForm() managerForm.setId(Integer.valueOf(request.getParameter("id"))); //获取并设置管理员ID号 intret=managerDAO.delete(managerForm); //调用删除信息的方法delete() if(ret==0){ request.setAttribute("error","删除管理员信息失败!"); //保存错误提示信息到error参数中 request.getRequestDispatcher("error.jsp").forward(request,response); //转到错误提示页面 }else{ request.getRequestDispatcher("manager_ok.jsp?para=3").forward(request,response); //转到删除管理员信息成功页面 } }从managerDel()方法中可以知道删除管理员使用的ManagerDAO类的方法是delete()。在delete()方法中,首先将管理员信息表tb_manager中符合条件的数据删除,再将权限表tb_purview中的符合条件的数据删除,最后返回执行结果。delete()方法的具体代码如下:publicintdelete(ManagerFormmanagerForm){ intflag=0; try{ //捕捉异常信息Stringsql="DELETEFROMtb_managerwhereid="+managerForm.getId()+"";flag=conn.executeUpdate(sql); //执行删除管理员信息的语句if(flag!=0){Stringsql1="DELETEFROMtb_purviewwhereid="+managerForm.getId()+"";conn.executeUpdate(sql1); //执行删除权限信息的语句}}catch(Exceptione){ System.out.println("删除管理员信息时产生的错误:"+e.getMessage()); //输出错误信息}finally{ conn.close(); //关闭数据库连接}returnflag;}}至此就完成了管理员模块中的添加管理员信息、管理员权限设置和管理员删除。主界面UI系统主界面是登陆系统后第一个页面,主要包括Banner信息栏、导航栏、排行榜和版权信息4部分。Banner信息栏用来放Logo信息和显示目前登陆的管理员名称(如图5-4中“欢迎您!admin”),下部放置了滚动条用来显示近三天的天气信息,实时获取最新的天气资讯。图5-4主界面Banner信息栏导航栏在Banner信息栏下方,左侧显示的是当前日期时间,右侧分别为“首页”、“系统设置”、“读者管理”、“图书管理”、“图书借还”、“系统查询”、“更改口令”、“突出系统”8个导航按钮,分别对应系统的不同功能。图5-5主界面导航栏在导航栏下方就是图书馆借阅排行榜,在此显示的是整个图书馆借阅量的排行情况,如图5-6所示。图5-6主页面图书馆借阅排行榜在主页面最下面就是版权信息部分,这是每个网站必须的。由于本网站还没有部署在网络上,并没有备案信息。图5-7主页面版权信息主页面的具体代码将附在附录中。
设计结论本系统主要使用JSP进行网页界面的设计,采用Servlet和JavaBean进行开发而成的,数据库则是通过MySQL建立的。开始设计系统时,主要是定义数据库,并初始化其中的数据。这项工作的技术性并不强,只是简单的输入各种数据。到了数据库设计完成,进入网络页面编程的时候,才是最为耗费时间的工作。在这过程中,碰到的问题大都是语法问题,还有少部分则出现在与数据库的连接访问过程之中。比如数据库在使用时更改了存放路径,导致通过网页无法正常访问其中的数据,这时只有在网页代码中对指定路径的语句做出相应的修改,才能使其正常访问;还有就是使用SQL语句问题,虽然可以正常工作,但是存在一定的安全隐患,必须修改代码来防范这个问题。在系统设计过程中,我得到了指导老师的细心指导和其他同学的热心帮助,他们使我的开发进度没有出现停滞,让我少走了不少弯路。这也使我明白了一个道理,没有人可以事无巨细,全部做到没有遗漏,总有些你能力无法企及的地方。相互交流才是解决这些问题的最佳方法。通过这次的毕业设计,不仅提高了我解决问题的能力,更是锻炼了我自己动手编程能力,为我今后的发展提供了宝贵的实践经验。整个系统使用JSP技术来完成,在系统设计的时候合理的设计数据库是系统的关键。还有就是在整个系统的设计过程中尽量使用英语,避免大量使用中文来标识文件名和变量名,这样降低了系统程序的执行效率。而且更可怕的是有些中文标识和中文参数计算机并不认识形成了乱码,出现了许多致命的错误了系统运行异常。总的来说,这次毕业设计起到了很大的效果,它是对我们整个大学生涯中所学到的知识的一次检查,也对我们将来从事的工作有了一个新的认识。我觉得设计得出的结果并不重要,最重要的是总结出来的经验以及在制作过程中所学会的知识积累了很多相关的经验,增强了解决问题的能力。在以前的jsp学习中只是了解了很少一部分知识而已,这门技术是博大精深的,在此期间查阅了很多相关资料,了解到了更多的更加实用的知识。意识到了后台数据库sql的重要性,对jsp方面的编程思想有了进一步的体会。由于时间有限所以本系统还有很多地方考虑的还不够周全,有许多需要改进的地方,所以在以后还要在jsp结合数据库的开发上做更多的东西,把两者更好的联系在一起,其次就是对页面的布局要更加清晰,更加符合习惯。由于作者的理论水平和时间有限,对于图书馆管理系统平台的研发只是初步的探索与实践,本论文所涉及项目研发尚有很多不完善与不成熟之处,以下是未来需要进一步改善的几个方面:软件工程实践、编码规范与质量该项目开发过程中,严格遵循了项目开发的必要工作规范和流程。但是,与软件公司的项目管理标准和规范相比,毕业设计过程中仍有许多改进之处,如:参照CMMI标准,开发过程中资料应更齐备,应该遵循更严格的职业规范,养成符合软件公司要求的职业素质;编码质量需要提高,应该严格遵守相关设计和编码规范等。系统的进一步完善该项目的实际功能需求是与时俱进的,随着实际图书馆管理模式的不断更新和提高,图书馆管理平台将会不断产生新的需求,这从技术和数据库维护上带来了新的挑战,如数据安全性和功能性设计等,都将在不同的时期得到不同的新要求。
致谢有人说:大学是人生的一本教科书。当我踏着轻盈的步伐进入辽宁建筑职业学院时,我有幸读了这本“教科书”。转眼间三年快过去了,回首来时路,我感谢辽宁建筑职业学院对我的辛苦培育,让我在大学这三年来学到很东西,当然我特别要感谢信息工程系为我提供了良好的学习环境、感谢领导、老师们三年来对我无微不至的关怀和指导,让我一路盘点收获与经验。不知不觉,毕业设计已经马上就要完成了,它的完成离不开老师的培养和孜孜不倦的教导,在此要深深感谢我的指导老师王娜,感谢她长久以来在学习上的指导和教诲,感谢同组同学真挚的帮助。正是有了老师这种严谨的治学作风,实事求是的探索精神以及忘我的奉献精神,她的这种认真负责的态度给予我的不仅仅是感动,更是一种鞭策,思考,激励。毕业设计的这段日子给我留下了美好而深刻的印象,给我增添了一段美好的回忆。顺利完成毕业设计是一个艰苦的过程,它的运行即为将我们平时所学投入到了实战演练中。通过本次毕业设计,我认识到,任何一个出色的软件产品,都包含着辛勤的汗水,都是参与开发者的心血造就的。同时我也认识到,当我走向社会、走上工作岗位的时候,我应当以怎样的心理来准备面对工作的艰苦,并从中实现自己的价值。最后,要感谢各位评阅及答辩老师在百忙之中抽出时间对论文进行审阅并参加答辩。因本人水平有限,所以毕业设计中肯定存在不少错误和不足之处,欢迎广大老师和同学批评指正,在此深表感谢。
参考文献BruceEckel,《Java编程思想》,机械工业出版社,2003年10月王珊,萨师煊,《数据库系统概论》(第四版),高等教育出版社,2006年5月Stephens,《数据库设计》,机械工业出版社,2009年10月唐有明,吴华等,《JSP动态网站开发》,清华大学出版社,2006年8月姜旭平等,《信息系统开发方法》,清华大学出版社,1996年张桂珠等,《Java面向对象程序设计》,北京邮电大学出版社,2003年朱少民,《软件测试方法和技术》,清华大学出版社,2005年许卓群,《数据结构》(计算机应用),中央广播电视大学出版社,2006年赛奎春,《JSP工程应用与项目实践》,机械工业出版社,2002年8月孙卫琴,《基于MVC的JAVAWEB.设计与开发》,北京电子工业出版社,2005年6佟伟光等,《软件测试技术》,人民邮电出版社,2005年
附录系统主要代码:代码位置:/tsgglxt/WebRoot/banner.jsp<%@pagecontentType="text/html;charset=gb2312"%><%@pageimport="com.core.ChStr"%><%ChStrchStr=newChStr();Stringmanager=(String)session.getAttribute("manager");//验证用户是否登录if(manager==null||"".equals(manager)){ response.sendRedirect("login.jsp");}%><metahttp-equiv="Content-Type"content="text/html;charset=gb2312"><tablewidth="778"border="0"align="center"cellpadding="0"cellspacing="0"><tr><tdheight="118"valign="top"background="Images/top_bg.gif"bgcolor="#EEEEEE"><tablewidth="100%"height="33"border="0"cellpadding="0"cellspacing="0"><tr><tdwidth="81%"height="10"></td><tdcolspan="2"></td></tr><tr><tdheight="20"> </td><tdwidth="10%"><ahref="#"onClick="window.location.reload();"class="word_dark">刷新页面</a></td><tdwidth="9%"><ahref="#"onClick="myclose()"class="word_dark">关闭系统</a></td> <scriptlanguage="javascript"> functionmyclose(){ if(confirm("真的要关闭当前窗口吗?")){ window.close(); } } </script></tr></table><tablewidth="93%"height="79"border="0"cellpadding="0"cellspacing="0"><tr><tdheight="69"align="right"valign="bottom">当前登录用户:<%=chStr.toChinese(manager)%></td></tr></table></td></tr></table>代码位置:/tsgglxt/WebRoot/main.jsp<%@pagecontentType="text/html;charset=gb2312"language="java"%><%@pageimport="com.dao.BorrowDAO"%><%@pageimport="com.actionForm.BorrowForm"%><%@pageimport="java.util.*"%><%%><html><metahttp-equiv="Content-Type"content="text/html;charset=gb2312"><head><title>图书馆管理系统</title><linkhref="CSS/style.css"rel="stylesheet"></head><bodyonLoad="clockon(bgclock)"><%@includefile="banner.jsp"%><%@includefile="navigation.jsp"%><%BorrowDAOborrowDAO=newBorrowDAO();Collectioncoll_book=(Collection)borrowDAO.bookBorrowSort();%><tablewidth="778"height="510"border="0"align="center"cellpadding="0"cellspacing="0"bgcolor="#FFFFFF"class="tableBorder_gray"><tr><tdalign="center"valign="top"style="padding:5px;"><tablewidth="100%"border="0"cellpadding="0"cellspacing="0"><tr><tdheight="20"align="right"valign="middle"class="word_orange">当前位置:首页>>> </td></tr><tr><tdvalign="top"><tablewidth="100%"border="0"cellspacing="0"cellpadding="0"><tr><tdheight="57"background="Images/main_booksort.gif"> </td></tr><tr><tdheight="72"valign="top"><tablewidth="100%"height="63"bor
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 个人店面股权转让合同范本
- 中介劳务派遣合同范本
- 个人装修衣柜合同范本
- 公司解除股东合同范例
- 入股扶贫协议合同范本
- 共同付款合同范本
- 农机租赁企业市场营销策划考核试卷
- 2025-2030年微生物污染控制系统企业制定与实施新质生产力战略研究报告
- 2025-2030年地下管道防腐涂层修复机器人行业深度调研及发展战略咨询报告
- 文具批发商的市场营销策略调整与实施评估考核试卷
- GB/T 1095-2003平键键槽的剖面尺寸
- 胃食管反流病优质课件
- 格力GMV多联机安装及维修手册
- 农产品质量安全控制课件
- 尿失禁健康讲座(SUI)
- lovo操作手册中文翻译版-professorgong
- 南网5S管理、四步法、八步骤
- 管道工程污水管网监理规划(共44)
- 危货运输车辆日常维护检查及记录表
- excel表格水池侧壁及底板配筋计算程序(自动版)
- 公司生产报废单
评论
0/150
提交评论