信息系统工程与实践
---- Java Web图书管理系统
班级:文计081-2
姓名:邓森
学号:
一、题目的选择
● Java Web图书管理系统
二、系统分析
2.1 系统的可行性分析
可行性分析是在进行初步调查后所进行的对系统开发必要性和可能性的研究,所以也称为可行性研究。信息系统也应从技术可行性,经济可行性和社会可行性三方面来论证。通过长时间的观察与实践,我认为图书馆管理系统的可行性分析如下:
2.1.1经济可行性分析
作为图书馆这样的商业性质较小的场所,其经济成分比重相对较少,主要是支出的费用:其中包括设备购置费、软件开发费用、管理和维护费、人员工资和培训费等。由于各个图书馆实行统一操作,系统共享,其设备购置,人员工资,维护费用相对较少,前期的资金投入主要集中于购置图书上。建立信息中心,可将来自各方面的信息集中管理,提高图书管理的计划性和预见性,快速地反馈市场信息。
2.1.2技术可行性分析
技术上的可行性分析主要分析现有技术条件能否顺利完成开发工作,硬件、软件配置能否满足开发者的需要,各类技术人员的数量,水平,来源等。图书馆管理系统的工作主要是在读者和图书馆之间架起一座桥梁,能相互沟通信息和处理信息。这一特点非常适合计算机特点,通过网络internet技术,发挥计算机的信息传输速度快、准确度高的优势。计算机硬件和软件技术的飞速发展,为系统的建设提供了技术条件。
2.1.3社会可行性分析
社会可行性有时也称为操作可行性,主要论证新系统在企业或机构开发和运行的可能性以及运行后可能一起的对企业或机构的影响,即组织内外是否具备接受和使用新系统的条件。在当前信息技术飞速发展的大环境下,计算机技术和软件技术的更新是图书馆完全有可能也有能力采用这样先进的管理技术。它对图书馆带来的影响可以看到:
(a)对传统管理理念的冲击,可能引起管理层的变动和人员的调整。
(b)对图书馆工作人员的要求提高,使图书馆在一定的可能下进行机构精简,迫使工作人员继续学习新知识,拓宽图书馆在市场环境下的生存空间。
(c)对图书馆与读者之间业务方式的转变和扩充。
最后,针对用户对图书资源进行有效利用和管理的功能需求,用建模技术对图书管理资源采用面向对象的描述方式,在具体系统功能实现之前,建立起系统模型是很必要的,这里采用具有可视化、能够柔性实现分析、设计和开发系统的统一建模语言实现系统模型构建。同时,结合最流行的基于浏览器的数据管理模式,建议采用基于组件技术的BS(browerserver)系统结构。
从技术的角度来考虑,随着计算机技术的深入发展,相关的应用软件、技术已经很成熟了,各种信息系统的开发工具也很完善了。运用现在软件行业中流行的开发工具JAVA以及MySQL,借鉴别人成功开发的宝贵经验,可成功开发一个功能基本完善的、符合中小型生产企业生产管理所需的生产管理信息系统。
综上所述,实施生产管理系统在技术上、经济上、运行上以及社会环境上都是可行的,因此,开发生产管理信息系统是可行的。
2.2 系统的需求分析
公司的图书管理涉及图书信息、系统用户信息、读者信息、图书借阅等多种数据管理。从管理的角度可将图书分为三类:图书信息管理、系统用户管理、读者数据管理。图书信息管理包括图书征定、借还、查询等操作,系统用户管理包括系统用户类别和用户数据管理,读者数据管理包括读者类别管理和个人数据的录入、修改和删除。
图书借阅者的需求是查询图书室所存的图书、个人借阅情况及个人信息的修改;图书馆工作人员对图书借阅者的借阅及还书要求进行操作,同时形成借书或还书报表给借阅者查看确认;图书馆管理人员的功能最为复杂,包括对工作人员、图书借阅者、图书进行管理和维护,及系统状态的查看、维护等。图书借阅者可直接查看图书馆图书情况,如果图书借阅者根据本人借书证号和密码登录系统,还可以进行本人借书情况的查询和维护部分个人信息。一般情况下,图书借阅者只应该查询和维护本人的借书情况和个人信息,若查询和维护其他借阅者的借书情况和个人信息,就要知道其他图书借阅者的借书证号和密码。这些是很难得到的,特别是密码,所以不但满足了图书借阅者的要求,还保护了图书借阅者的个人隐私。图书馆工作人员有修改图书借阅者借书和还书记录的权限,所以需对工作人员登陆本模块进行更多的考虑。在此模块中,图书馆工作人员可以为图书借阅者加入借书记录或是还书记录,并打印生成相应的报表给用户查看和确认。图书馆管理人员功能的信息量大,数据安全性和保密性要求最高。本功能实现对图书信息、借阅者信息、总体借阅情况信息的管理和统计、工作人员和管理人员信息查看及维护。图书馆管理员可以浏览、查询、添加、删除、修改、统计图书的基本信息;浏览、查询、统计、添加、删除和修改图书借阅者的基本信息,浏览、查询、统计图书馆的借阅信息,但不能添加、删除和修改借阅信息,这部分功能应该由图书馆工作人员执行,但是,删除某条图书借阅者基本信息记录时,应实现对该图书借阅者借阅记录的级联删除。并且还应具有生成催还图书报表,并打印输出的功能。
2.3系统的功能需求
在本系统中,对读者来说,他们关心的问题其实是如何方便的查询到图书馆中的书籍以及自己正在借阅或是已经借阅过些什么书,所借的书是否到期等。[3]由此可以得出系统在面向读者方面应该至少做到如下几点:
1.图书查询。
2.读者信息查询,读者信息的查询内容应包括下面的几个方面:
读者信息——对读者的基本信息进行显示。
书刊借阅——对该读者借阅过的所有书籍进行查询。
借阅历史——查询该读者借阅过的所有书籍。
违章信息——该读者的违章信息。
读者规则——该读者所应用的规则。
对系统的管理员来说,应该注意的是:
1.图书馆中有些什么书,它们都存放在那里,是不是可以被借阅;
2.本图书馆发放的读者证有那些,如何管理这些读者证;
3.这些读者证都借阅着那些书;
4.如何来确定这些读者证是否可用,以及借书的还期等。
从以上问题出发,可以得出本系统应该具有的功能:
1.图书查询——对馆内的图书进行查询。
2.借阅管理——对读者的每一次借阅,还书进进登记和管理。
3.图书管理——对图书馆的书籍进行管理。
4.借阅证管理——对读者的借阅证进行管理。
5.读者规则管理——设置和管理读者规则。
2.4设计模式
设计模式是面向对象的程序设计人员用来解决编程问题的一种形式化表示。本系统开发采用目前一种目前广泛流行的软件设计模式MVC。MVC(Model-View - Controller)应用程序结构被用来分析分布式应用程序的特征。这种抽象结构能有助于将应用程序分割成若干逻辑部件,使程序设计变得更加容易。把一个应用的输入、处理、输出流程按照Model、View、Controller的方式进行分离,这样一个应用被分成三个层——模型层、视图层、控制层。如下图2.1所示:
图2.1 MVC模式
三、系统设计
3.1 系统概要
本图书管理系统总体上分为前台页面显示和后台管理。前台页面(即本书图书管理系统的首页)实现了公告的显示图书查询,留言建议三大功能。而后台的页面则集成了图书管理中所需的功能和录入新书到库,办公图书,借还手续,查询图书等等。平时图书管理人员的工作都是在后台中完成的。前台是为了师生显示的。师生们可以看到图书管理人员发布的最新公告信息;并可以查询自己感兴趣的图书,也可以给学校的图书管理人员留言提议。相对应的后台是针对学校图书管理人员,后台的页面都加密,如果不正常登录是进入不了后台管理页面的,后台功能具体包括:发布首页公告,添加新书到库等等。
3.2功能模块
本系统的功能模块的设计如图3.1所示,整个系统包含基本信息设置,图书信息管理,查询图书管理,添加图书管理,修改图书管理和用户借阅管理。
图3.1功能结构图
3.3设计思想
利用软件开发现有软硬件环境,及先进的管理系统开发方案,从而达到充分利用现在资源提高系统开发水平和应用效果的目的。
系统应该符合软件工程开发的理论,开发方法等开发依据。
系统应满足图书馆管理工作需要,到操作过程中的直观,方便,实用,安全等要求。
系统具备数据库维护功能,及时根据用户需求进行数据库的各种操作。
系统采用原型,使用模块化程序设计方法,便于系统功能的各种组合和修改,以及系统的测试与维护。
3.4模块设计及功能
3.4.1图书查询
读者可以通过网络访问学校图书馆管理系统,并对馆内的图书进行查询,对查到的在馆图书可以进行借阅,如图3.2所示:
图3.2 图书查询流程图
3.4.2借阅管理
这一部分是对书籍借阅、书籍归还的管理,当读者借书的时候,图书馆管理员把书籍的编号和读者的借阅证号输入系统,当此次借阅符合借阅规则的时候,借阅成功。并将结果写入到数据库中。读者归还书籍时,将图书交给图书管理员,管理员把书籍的编号和读者的借阅证号输入系统,系统核对借阅规则,对违规(如超期)的读者进行罚款之类。如图3.3所示:
图3.3借阅管理流程图
3.4.3图书管理
图书管理主要实现的功能是对新购的图书进行入库和废书记录从库中删除。当新书被放入图书馆时,管理员登录进入系统,把图书的信息添加到图书馆管理系统中,并指定是放到哪一个藏书馆中。这时图书可以被读者查询到,并可以借阅。当要把一本废书删除时,图书管理员登录进入系统,查找到这一本书,并将其删除。这时,这一本图书将不再能被查询到。如图3.4所示:
图3.4图书管理流程图
3.4.4借书证管理
本部分是对借阅证进行管理,并对读者的一些基本的信息进行维护,提供增、删、改等功能。每一个借阅证都要以某一个读者规则相应,读者规则决定读者可以借阅书籍的等级,如借书时间、借书种类等。当读者借阅证丢失时,可以进行挂失处理。持失之后借阅证失效。如图4.5所示:
图3.5借书证管理流程图
3.4.5读者规则管理
读者规则包括借阅时间,可借阅的图书数目,可借阅图书的书馆等。这一部分可以对读者规则进行管理,主要是增、删、改操作。如图3.6所示:
图3.6 读者规则管理流程图
3.4.6借还图书功能流程图
图3.7 借还书流程图
3.5数据库设计
设计两个表:
a) 书籍信息autos(id,category类别,model型号,no书籍编号,price租书价格),如表3.8所示:
表3.8书籍信息表
b) 租书信息leases(id,autoId书籍id,customer客户名称,leaseDate租书日期,returned是否还书?,returnDate还书日期),如表3.9所示:
表3.9租书信息表
3.5.1创建数据库的代码
代码1:
create database bookmanage;
use bookmanage;
create table autos
(id int primary key auto_increment,
category varchar(50) not null,
model varchar(50) not null,
no varchar(50) not null,
price double
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
代码2:
create table leases
(
id int primary key auto_increment,
autoId int not null,
customer varchar(20) not null,
leasedate date,
returned int default 0,
returndate date
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
四、程序设计与编码
4.1 系统登录界面
当系统登陆时,首先出现的是一个用户权限登陆的界面, 权限设置主要是维护系统的安全性和完整性。拥有管理员权限的操作员能对其他操作员进行相应的权限设置,没有权限的操作员不能对相应的窗口进行操作。如下图4.1所示:
图4.1 管理员登入界面
这是进入系统时的身份验证,用户首先要从软件开发者那里申请用户名和密码,才可以进入。该过程的流程图如下图4.2所示:
图4.2系统登入流程图
核心代码如下:
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType(Constant.CONTENTTYPE);
request.setCharacterEncoding(Constant.CHARACTERENCODING);
try{
String method=request.getParameter("method").trim();
AdminBean loginbean = new AdminBean();
HttpSession session = request.getSession();
session.setMaxInactiveInterval(1200);
SystemBean systembean = new SystemBean();
String sysdir = systembean.getDir();
if(method.equals("one")){admin登录
String username = request.getParameter("username");
String password = request.getParameter("password");
if(username == null||username.trim().equals("")){
request.setAttribute("message", "请正确输入用户名!");
request.getRequestDispatcher("index.jsp").forward(request, response);
return ;
}
else if(password == null||password.trim().equals("")){
request.setAttribute("message", "请输入密码!");
request.getRequestDispatcher("index.jsp").forward(request, response);
return ;
}
DBO dao = new DBO();
String realPassword ="";
dao.open();
java.util.List list = new java.util.List();
ResultSet rs = dao.executeQuery("select * from admin where username='"+username+"'");
Date date = new Date();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String logintime = format.format(date);
if(rs.next()){
realPassword = rs.getString("password").trim();
String userName = rs.getString("username").trim();
String right = rs.getString("quanxian").trim();
Integer logintimes = Integer.valueOf(rs.getInt("logintimes"));
list.add(userName);
list.add(right);
list.add(logintimes);
list.add(logintime);
}
String pwd = MD5.MD5(password.trim());
if(!pwd.equals(realPassword)){
request.setAttribute("message", "密码错误!");
request.getRequestDispatcher("index.jsp").forward(request, response);
}else{
session.setAttribute("list",list);
session.setAttribute("user",username);
request.getRequestDispatcher("adminindex.jsp").forward(request, response);
}
4.2 添加图书信息
身份验证通过以后,点击可以使用系统的基本信息管理界面,这是管理员主要的输入信息部分,它即可以对数据进行输入包括图书类别,图书名称,图书作者等。填写好各项信息后,单击保存按钮,系统将对这些信息进行处理。界面见下图5.3所示:
图4.3 添加图书信息界面
核心代码如下:
public int addBOOK(String booktype,String name,String author,String cbs,String isbn,String price,String num,String intro,String jyjg){
String sql="insert into book(booktype,name,author,cbs,isbn,price,num,intro,jyjg,addtime) " +
"values('"+booktype+"','"+name+"','"+author+"','"+cbs+"','"+isbn+"','"+price+"','"+num+"','"+intro+"','"+jyjg+"','"+date+"')";
DBO dbo = new DBO();
dbo.open();
try{
int i = dbo.executeUpdate(sql);
if(i == 1)
return Constant.SUCCESS;
else
return Constant.SYSTEM_ERROR;
}catch(Exception e){
e.printStackTrace();
return Constant.SYSTEM_ERROR;
}finally{
dbo.close();
}
}
public int upBOOK(String id,String booktype,String name,String author,String cbs,String isbn,String price,String num,String intro,String jyjg){
String sql="update book set booktype='"+booktype+"',name='"+name+"',author='"+author+"',cbs='"+cbs+"',isbn='"+isbn+"'," +
"price='"+price+"',num='"+num+"',intro='"+intro+"',jyjg='"+jyjg+"' where id='"+id+"'";
DBO dbo = new DBO();
dbo.open();
try{
int i = dbo.executeUpdate(sql);
if(i == 1)
return Constant.SUCCESS;
else
return Constant.SYSTEM_ERROR;
}catch(Exception e){
e.printStackTrace();
return Constant.SYSTEM_ERROR;
}finally{
dbo.close();
}
}
4.3 图书类别管理
点击可以使用系统的基本信息管理界面,这是管理员主要的输入信息部分,它即可以对数据进行输入,可以添加图书的类别。填写好各项信息后,单击保存按钮,系统将对这些信息进行处理。界面见下图4.4所示:
图4.4图书管理类别管理
核心代码如下:
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("");
response.setContentType(Constant.CONTENTTYPE);
request.setCharacterEncoding(Constant.CHARACTERENCODING);
PayBean pb=new PayBean();
String method=request.getParameter("method").trim();
图书类型
if(method.equals("addTYPE")){
String name=request.getParameter("booktype");
int flag=pb.addTYPE(name);
if(flag==Constant.SUCCESS){
request.setAttribute("message", "操作成功!");
request.getRequestDispatcher("admintypeindex.jsp").forward(request, response);
}
else{
request.setAttribute("message", "系统维护中,请稍后再试!");
request.getRequestDispatcher("admintypeindex.jsp").forward(request, response);
}
}
else if(method.equals("addBOOK")){
String booktype=request.getParameter("booktype");
String name=request.getParameter("name");
String author=request.getParameter("author");
String cbs=request.getParameter("cbs");
String isbn=request.getParameter("isbn");
String price=request.getParameter("price");
String num=request.getParameter("num");
String intro=request.getParameter("intro");
String jyjg=request.getParameter("jyjg");
int flag=pb.addBOOK(booktype, name, author, cbs, isbn, price, num, intro, jyjg);
if(flag==Constant.SUCCESS){
request.setAttribute("message", "操作成功!");
request.getRequestDispatcher("adminbookindex.jsp").forward(request, response);
}
else{
request.setAttribute("message", "系统维护中,请稍后再试!");
request.getRequestDispatcher("adminbookindex.jsp").forward(request, response);
}
}
4.4 管理员设置
增加系统管理员。管理员可以添加新的管理员,包括为管理员设置一个密码。管理员登入后,可以自己修改密码。同样,总管理员可以删除管理员。管理员还可以将状态设置成当前在用和关闭状态。如下图4.5所示:
图4.5管理员设置界面
核心代码如下:
String username2 = (String)session.getAttribute("user");
if(username2 == null){
request.getRequestDispatcher("error.jsp").forward(request, response);
}
else{
session.removeAttribute("user");
session.removeAttribute("list");
System.gc();
request.getRequestDispatcher("index.jsp").forward(request, response);
}
}
else if(method.equals("manager")){添加修改管理员
String username2 = (String)session.getAttribute("user");
if(username2 == null){
request.getRequestDispatcher("error.jsp").forward(request, response);
}
else{
String ra = request.getParameter("ra").trim();
if(ra.equals("add")){
String username = request.getParameter("username").trim();
String password = MD5.MD5(request.getParameter("password").trim());
String isuse = request.getParameter("isuse").trim();
if(isuse.equals("在用"))
isuse = "1";
else
isuse = "2";
int flag = loginbean.addManager(username, password, "2", isuse);
if(flag == Constant.SUCCESS){
request.setAttribute("message", "增加管理员成功!");
request.getRequestDispatcher(sysdir+"systemuser.jsp").forward(request, response);
}
else if(flag == Constant.SAME_NAME){
request.setAttribute("username", username);
request.setAttribute("message", "该用户名已经存在!");
request.getRequestDispatcher(sysdir+"systemuser.jsp").forward(request, response);
}
else{
request.setAttribute("message", "系统维护中,请稍后再试!"); request.getRequestDispatcher(sysdir+"systemuser.jsp").forward(request, response);
}
}
else if(ra.equals("update")){
String username = request.getParameter("username").trim();
String password = request.getParameter("password").trim();
String isuse = request.getParameter("isuse").trim();
if(!password.equals("")){
password = MD5.MD5(password);
}
if(isuse.equals("在用"))
isuse = "1";
else
isuse = "2";
int flag = loginbean.updateManager(username, password, "2", isuse);
if(flag == Constant.SUCCESS){
request.setAttribute("message", "修改管理员信息成功!");
request.getRequestDispatcher(sysdir+"systemuser.jsp").forward(request, response);
}
else{
request.setAttribute("message", "系统维护中,请稍后再试!");
request.getRequestDispatcher(sysdir+"systemuser.jsp").forward(request, response);
}
}
}
4.5 图书借阅管理
点击图书借阅界面,管理员可以查看到图书的借阅情况,包括借阅者,图书名称,借出的时间,归还的时间,图书的状态,借阅图书的价格等。管理员同样可以修改和删除图书借阅的内容。操作成功后,点击保存退出。如图4.6所示:
图4.6图书借阅管理界面
核心代码如下:
String card=request.getParameter("card");
String bookid=request.getParameter("bookid");
String stime=request.getParameter("stime");
String etime=request.getParameter("etime");
int flag=pb.addJY(card, bookid, stime, etime);
if(flag==Constant.SUCCESS){
request.setAttribute("message", "操作成功!");
request.getRequestDispatcher("adminjyindex.jsp").forward(request, response);
}
else{
request.setAttribute("message", "系统维护中,请稍后再试!");
request.getRequestDispatcher("adminjyindex.jsp").forward(request, response);
}
}
else if(method.equals("upJY")){
String id=request.getParameter("id");
String card=request.getParameter("card");
String bookid=request.getParameter("bookid");
String stime=request.getParameter("stime");
String etime=request.getParameter("etime");
int flag=pb.upJY(id, card, bookid, stime, etime);
if(flag==Constant.SUCCESS){
request.setAttribute("message", "操作成功!");
request.getRequestDispatcher("adminjyindex.jsp").forward(request, response);
}
else{
request.setAttribute("message", "系统维护中,请稍后再试!");
request.getRequestDispatcher("adminjyindex.jsp").forward(request, response);
}
}
else if(method.equals("delJY")){
String id=request.getParameter("id");
int flag=pb.delJY(id);
if(flag==Constant.SUCCESS){
request.setAttribute("message", "操作成功!");
request.getRequestDispatcher("adminjyindex.jsp").forward(request, response);
}
else{
request.setAttribute("message", "系统维护中,请稍后再试!");
request.getRequestDispatcher("adminjyindex.jsp").forward(request, response);
}
}
5.4设计测试用例
基于测试原则,本系统在设计测试用例时采用了黑盒测试技术中的划分等价类方案,其测试用例设计如下:
1、 划分等价类
2、 合理类测试用例
3、 不合理类测试用例
通过以上的测试用例,系统在运行合理的测试用例都能正常运行,系统的稳定性良好。在输入不合理的测试用例数据后,系统不能正常运行,提示输入有误。
五、经验与总结
本文提出的基于WEB的图书管理系统完成了借书,还书,查询图书,管理借书证和管理员帐户设置等主要功能,本系统是基于BS模式,其后台部分完全实现借书与还书的手续操作与对图书和人员的管理功能,系统界面简单、易用,任何人都可以在短时间内学会使用该系统,在前台部分,创新设计的WAP图书查询部分,不仅大大方便了同学们查询图书,而且使得系统多样化,多元化,具有有很强的扩展性。
在技术方面,通过此项目的开发,对基于BS模式的多层体系结构的JSP技术有了一定的实战经验,同时对JavaBean的使用有了深刻的理解。将不同复杂的数据库操作划分为独立的模块封装于Bean中,提高了系统的安全性和可移植性。
通过对基于JSP的图书馆管理系统的设计与实现,感受颇深,获益匪浅,同时获得了许多项目设计与开发的方法和经验。
1.合理的开发原则
2.科学的开发过程
3.良好的编程习惯
4.全面有效的测试
但是由于个人水平有限,导致该系统还有许多不尽人意的地方,比方说所实现的功能还不够强大、完全和实用,仍然存在着许多漏洞。在做此系统时也不规范,先考虑功能的实现,没有综合考虑文档、规范、性能、效率等等,总之还存在着许多的问题。我将不断改进系统的不足之处,完善系统功能,使之能更好地实现Web应用。我也将从这次的毕业设计中总结经验,学习规范化的软件开发流程,形成良好的开发习惯,为以后的软件开发打下更坚实的基础。
五、自主创新比例声明
此次设计中,个人自主创新比例为50%,在此感谢平时老师的悉心教导以及身边同学在设计期间给予的帮助。
本文来源:https://www.2haoxitong.net/k/doc/c1bdee6e7ed5360cba1aa8114431b90d6c85896d.html
文档为doc格式