J2EE架构与分析期末作业之图书管理系统

一 选题的背景及意义. 3

二 需求分析UML 3

三 总体设计及流程图. 13

四 详细设计. 15

五 软件测试. 26

六 总结与展望. 27

选题的背景及意义

随着计算机的广泛应用,其逐步成为现代化的标志。图书馆或者一些企业内部,甚至是书店,在正常运行过程中总是面对大量的读者信息,书籍信息以及两者相互作用产生的借书信息、还书信息。因此需要对读者资源、书籍资源、借书信息、还书信息进行管理,及时了解各个环节中信息的变更,要对因此而产生的单据进行及时的处理,为了提高图书馆或者企业内部对图书存销自动化的管理,能够更快速的满足读者的要求,提高各种工作的效率,现对其设计相应的系统,以达到上述的目的。

图书管理系统的主要功能是实现图书馆图书借阅和归还的管理的自动化。围绕这一主要功能,本系统涉及到以下核心功能:借阅管理,归还管理。除了这些核心功能外,还包括一些基本和辅助功能,它们是:用户管理、图书馆参数管理、图书管理、统计查询。

社会文化层面

文化传承:图书馆作为文化传承的重要场所,通过图书管理系统可以更好地保存和传播知识,促进文化的发展。

知识普及:图书管理系统可以提高图书的可获取性,使更多人能够方便地获取知识,促进知识普及。

教育支持:对于学校和教育机构,图书管理系统可以支持教学和研究活动,提供必要的学习资源。

经济发展层面

提高运营效率:自动化的图书管理系统可以显著提高图书管理的效率,降低运营成本。

促进产业发展:随着图书管理系统的需求增加,可以带动相关软件和硬件产业的发展。

创造就业机会:图书管理系统的研发、实施和维护可以创造新的就业机会。

二 需求分析UML

2.1 可行性分析

采用现代化统一的计算机信息网站系统,能够有效优化图书馆管理系统,使其高效的发挥最大作用,能够迅捷的为读者提供相应的服务。开发本系统的可行性研究如下:

2.1.1 技术可行性

技术上的可行性分析主要分析技术条件能否顺利完成开发工作,软、硬件能否满足需要。本系统采用JSP开发出友好美观的人机界面,便于用户理解、操作。数据库管理系统采用MySQL,它能够处理大量数据,同时保持数据的完整性、安全性。因此本系统的开发平台已成熟可行。硬件方面,在科技飞速发展的今天,硬件更新速度越来越快,容量越来越大,可靠性越来越高,价格越来越便宜,因此硬件平台也能够满足本系统所需。

2.1.2 经济可行性

鉴于计算机技术发展异常迅猛,在硬件软件配置以及开发技术均以可行的情况下开发这样一个管理系统成本不会很高,但其可以大大提高图书馆的工作效率,也是图书馆管理发展的必然趋势,其必将有比较宽阔的市场,因此该系统在经济可行性上是可行的。

2.1.3 操作可行性

本系统界面友好、操作简单、不受平台约束,而且采用B/S 结构,只需装有IE浏览器就可运行,十分节省资源。本系统性能稳定,即使是机器配置较低的老图书馆也可放心使用。所以能够给用户带来流畅舒适的体验,所以操作上是可行的。

2.2 图书借阅管理系统需求概述

2.2.1 系统目标

该系统主要建立一个基于B/S模式的图书馆借阅管理系统,面对当起很多小型图书管理仍是人工管理带来的检索速度慢,效率低,借阅归还图书量大,图书统计工作量大,藏书不能完成及时更新的问题,该系统可以对系统的三个用户类型的使用实现:

对于读者在本系统的应用下可实现按照各种方式(如:书名,编号,作者)查询图书馆的藏书请客,方便的借阅图书,续借图书,归还图书,能够查询自己的借阅图书情况。

对于图书馆工作人员能够实现方便的对图书进行查询,方便的进行读者借阅情况查询,方便的进行借书还书处理等,便捷的对图书信息进行添加、修改、删除,分类管理等操作,对读者信息进行相关添加,修改,分类管理等操作。

对于系统管理员可以对图书馆信息进行修改更新操作,对系统用户进行添加、修改、删除、权限设置等操作,对图书馆的办证参数进行修改维护等操作功能。

2.2.2 用户类和用户特性

   读者是该系统的重要的使用角色,他们通过该系统查询自己需要的图书信息,并像图书管理员提出借阅图书的申请进而借阅自己所需的图书,还可以通过对自己借阅情况进行查询。

   图书管理员是该系统的另一个重要使用者,图书管理员通过该系统进行图书的增加,修改,删除,分类管理等操作,实现对读者借阅归还续接图书的方便操作,实现对系统中图书,读者,读者借阅情况的查询,信息更改维护等操作,管理读者类型,对不同类型读者可借阅的图书数量进行设置等图书馆的基本操作。

   系统管理员主要是图书管理系统中用户的管理,实现用户添加修改删除以及用户权限设置等操作,实现对图书馆基本信息的修改维护等操作,还包括对图书馆书架的设置操作,以及校外读者办证所需费用、证件有效期等参数的设置。

2.3 图书借阅管理系统需求模型

图书借阅管理系统的主要任务是实现读者迅速检索查询,方便借阅归还图书,图书管理员高效的完成系统的各项基本操作,系统管理员是管理用户设置权限等操作,从图可以看出图书借阅管理系统要完成一下功能:

登录:读者、图书管理员,系统管理员进入该系统必须登录,身份验证正确了才可以进入该系统,以不同身份进入该系统所对应的系统使用权限是不同的。

系统设置功能:系统管理员可以设置图书馆相关的参数信息。

用户管理功能:对系统用户进行添加,修改,删除,权限设置等操作。

查询功能:对图书馆的馆藏图书,借阅历史,读者用户等信息进行查询。

其他功能:系统管理员可以修改自己的密码,并且拥有其他用户所拥有的所有功能。

下面的系统用例图描述了整个系统用户之间的动作联系及功能模块的概述。

 

 

 

 

 

 

 

 

 

2.3.2 图书管理员详细功能描述

读者管理功能:对读者的类型和读者档案进行管理,包括添加,修改,删除读者类型和读者用户的相关信息,管理不同类型读者借阅图书的数量。

图书管理功能:包括对图书类型和具体图书信息的管理,可以增加,修改,删除图书,丰富具体图书的信息,对不同图书进行分类操作。

图书借阅功能:可以完成对读者借阅,续接和还书的操作。

系统查询功能:查询图书相关资料,借阅历史和借阅到期题型。

修改密码功能:可以修改自己的登录密码。

2.3.3 读者详细功能描述

修改登陆密码:修改自己的登录密码。

查询功能:对图书馆图书信息进行查询,对自己当前借阅书籍进行查询,对图书规划到期题型进行查看。

三 总体设计及流程图

根据需求分析的结果,按照“低耦合、高内聚”的原则,本系统将划分为以下主要功能模块:系统管理员功能模块,读者管理功能模块,图书管理功能模块,图书借还功能模块;系统查询功能模块。

3.2.2 系统管理员模块功能

该模块主要包括图书馆信息设置,用户管理,参数设置,书架设置。

图书馆信息设置:该功能选项用于系统管理员对图书馆名称,地址,联系方式,简介等信息的管理更新,以便于读者和外界人士对图书馆的了解。该功能是对td_library表进行维护修改等操作,修改后的信息将被保存在该表中。

用户设置:该功能子模块主要是系统管理员对系统用户的管理,通过此子模块的功能实现可以对用户进行添加、修改、删除、权限设置等操作,该子模块能将图书馆的不同工作细化到不同的相关人员,极大地提高了图书馆的工作效率。该操作是对tb_users表进行操作,在对用户进行了相关的操作后把操作后的最新信息存放在该表中。

图书馆参数设置:通过该子模块设置在图书馆办理临时读者证的费用及证件有效期限。该操作是对于tb_parameter表进行,并把操作后的最新数据存放在该表中。

3.2.3 读者管理模块功能

该模块主要包含读者类型管理和读者信息管理两个子模块:

读者类型管理:该子模块是对图书馆系统用户读者的类型进行维护,修改等操作,在此模块中主要设置不同类型读者一次性可借阅的图书的数量,该操作是对于tb_resderType表进行,并将操作结果保存在该表中。

读者信息管理:该子模块是对读者的基本信息进行管理,可以对读者的基本信息进行添加,修改,删除操作,这下操作均是对tb_resder表进行的,并将操作后的结果保存在该表中。

3.2.4 图书管理模块功能

图书类型管理:对图书进行类型设置分类,并对不同类型图书可被借阅天数进行设置。

操作:添加、修改、删除图书类型,对不同类型图书可被借阅的天数进行设置。

图书信息管理:对图书进行基本操作和信息管理。

操作:添加、修改、删除图书,对图书的编号、所在书架、价格、出版社等基本信息进行管理。

四 详细设计

4.1 数据库设计概述

数据库是整个系统的基石,数据库的设计优劣直接影响到整个系统的设计成败,本节对数据库的设计进行专门阐述。

数据库是数据管理的最新技术。十多年来数据库管理系统已从专用的应用程序发展成为通用的系统软件。由于数据库具有数据结构化,最低冗余度,较高的程序与数据独立性,易于扩充,易于编制应用程序等优点,较大的信息系统都是建立在数据库设计之上的。因此不仅大型计算机及中小型计算机,甚至微型机都配有数据库管理系统。

数据库系统的出现使信息系统从以加工数据的程序为中心转向围绕共享的数据库为中心的新阶段。这样既便于数据的集中管理,又有利于应用程序的研制和维护,提高了数据的利用性和相容性,提高了决策的可靠性。目前,数据库已经成为现代信息系统不可分割的重要组成部分。数据库技术也是计算机领域中发展最快的技术之一。

数据库设计是把现实世界的实体模型与需求转换成数据库的模型的过程,它是建立数据库应用系统的核心问题。数据库及其应用的性能都建立在良好的数据库设计的基础之上,数据库的数据是一切操作的基础,如果数据库设计不好,那么其它一切用于提高数据库性能的方法收效都是有限的。数据库设计的关键是如何使设计的数据库能合理地存储用户的数据,方便用户进行数据处理。

设计数据库必须遵循一定的规则,在关系型数据库中,这种规则就是范式,范式是符合某一种级别的关系模式的集合。一般人们设计数据库遵循第三范式。即:数据库表中不包含已在其他表中包含的非主关键字信息。采用范式减少了数据冗余,节约了存储空间,同时加快了增、删、改的速度。

整个系统所包括的信息有图书信息、读者信息、留言信息、图书借阅信息、图书归还信息、系统用户信息、读者类型信息。可将这些信息抽象为下列系统所需要的数据项和数据结构:

图书信息(编号,图书名称,图书类型,作者,译者,ISBN号,价格,出版社,所在书架,入库时间,操作员)

图书类型(编号,名称,可借阅天数)

读者信息(编号,姓名,性别,条形码,读者类型,出生年月,有效证件,证件号码,登记日期,电话,邮箱,操作员)

读者类型(名称,可借阅图书本数)

图书借阅信息(图书编号,读者ID,借出时间,应还时间,是否归还,操作员)

图书归还信息(图书编号,读者ID,归还时间,操作员)

用户(编号,用户名称,密码)

图书馆信息(编号,名称,馆长,电话,地址,邮箱,创建日期,简介)

图书馆参数信息(编号,办证费用,有效期限)

在这里使用E-R图描述了图书借阅管理系统的数据模型。图3.1图书借阅管理系统E-R图描述了该系统所涉及到的实体以及他们之间的关系。具体结构如下图所示:

图书信息表tb_bookinfo:

图书类型信息表tb_booktype:

读者信息表tb_reader:

读者类型信息表tb_readertype:

图书借阅信息表 tb_borrow:

图书归还信息表tb_giveback:

系统用户信息表tb_user:

图书馆信息表 tb_library:

4.2数据库连接:

public ConnDB(){

        try {

          InputStream in=getClass().getResourceAsStream(propFileName);

          prop.load(in);                                 Properties文件

          dbClassName = prop.getProperty("DB_CLASS_NAME"); //获取数据库驱动

          dbUrl = prop.getProperty("DB_URL",

                                   "jdbc:mysql://127.0.0.1:3306/db_librarySys?user=root&password=123&useUnicode=true");

        }

        catch (Exception e) {

          e.printStackTrace();   

        }

      }

      public static Connection getConnection() {

        Connection conn = null;

        try {

          Class.forName(dbClassName).newInstance();

          conn = DriverManager.getConnection(dbUrl);

        }

        catch (Exception ee) {

          ee.printStackTrace();

        }

        if (conn == null) {

          System.err.println(

              "警告: DbConnectionManager.getConnection() 获得数据库链接失败.\r\n\r\n链接类型:" +

              dbClassName + "\r\n链接位置:" + dbUrl);

        }

        return conn;

      }

    /*

     * 功能:执行查询语句

     */

    public ResultSet executeQuery(String sql) {

        try {

           conn = getConnection();

           stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,

                   ResultSet.CONCUR_READ_ONLY);

           rs = stmt.executeQuery(sql);

        } catch (SQLException ex) {

           System.err.println(ex.getMessage());

        }

        return rs;

    }

    /*

     * 功能:执行更新操作

     */

    public int executeUpdate(String sql) {

        int result = 0;

        try {

           conn = getConnection();                   //调用getConnection()方法构造Connection对象的一个实例conn

           stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,

                   ResultSet.CONCUR_READ_ONLY);

           result = stmt.executeUpdate(sql);     //执行更新操作

        } catch (SQLException ex) {

           result = 0;

        }

        return result;

    }

    /*

     * 功能:关闭数据库的连接

     */

    public void close() {

        try {

           if (rs != null) {

               rs.close();

           }

           if (stmt != null) {

               stmt.close();

           }

           if (conn != null) {

               conn.close();

           }

        } catch (Exception e) {

           e.printStackTrace(System.err);

        }

    }

}

4.3登录模块程序设计

本模块主要是用户通过图书管理系统的首页登录进入该系统。用户输入正确的用户名和密码,系统会根据用户的身份进行相应权限划分;如果登录信息有错误,则系统提示登入错误的信息,并且禁止系统用户进行任何操作。图书借阅管理系统的登录主页面如图所示。

4.4系统管理员功能模块设计

private ActionForward managerModify(ActionMapping mapping, ActionForm form,

           HttpServletRequest request, HttpServletResponse response) {

    ManagerForm = (ManagerForm) form;

    managerForm.setId(managerForm.getId());     

    managerForm.setName(managerForm.getName());

    managerForm.setPwd(managerForm.getPwd());   

managerForm.setSysset(managerForm.getSysset());   

managerForm.setReaderset(managerForm.getReaderset());

managerForm.setBookset(managerForm.getBookset()); 

managerForm.setBorrowback(managerForm.getBorrowback());   

managerForm.setSysquery(managerForm.getSysquery());

        int ret = managerDAO.update(managerForm);          //调用设置管理员权限的方法

        if (ret == 0) {

           request.setAttribute("error", "设置管理员权限失败!");//保存错误提示信息到error参数中

           return mapping.findForward("error");            //转到错误提示页面

        } else {

           return mapping.findForward("managerModify"); //转到权限设置成功页面

        }

    }

4.5查询功能模块的实现

public Collection query(String strif){

BookForm bookForm=null;

Collection bookColl=new ArrayList();

String sql="";

if(strif!="all" && strif!=null && strif!=""){

    sql="select * from (select b.*,c.name as bookcaseName,p.pubname as publishing,t.typename from tb_bookinfo b left join tb_bookcase c on b.bookcase=c.id join tb_publishing p on b.ISBN=p.ISBN join tb_booktype t on b.typeid=t.id where b.del=0)  as book where book."+strif+"'";

}else{

    sql="select b.*,c.name as bookcaseName,p.pubname as publishing,t.typename from tb_bookinfo b left join tb_bookcase c on b.bookcase=c.id join tb_publishing p on b.ISBN=p.ISBN join tb_booktype t on b.typeid=t.id where b.del=0";

}

System.out.println("图书查询时的SQL:"+sql);

ResultSet rs=conn.executeQuery(sql);

try {

    while (rs.next()) {

        bookForm=new BookForm();

        bookForm.setBarcode(rs.getString(1));      

        bookForm.setBookName(rs.getString(2));

        bookForm.setTypeId(rs.getInt(3));

        bookForm.setAuthor(rs.getString(4));

        bookForm.setTranslator(rs.getString(5));

        bookForm.setIsbn(rs.getString(6));

        bookForm.setPrice(Float.valueOf(rs.getString(7)));  //此处必须进行类型转换

        bookForm.setPage(rs.getInt(8));

        bookForm.setBookcaseid(rs.getInt(9));

        bookForm.setInTime(rs.getString(10));

        bookForm.setOperator(rs.getString(11));       

        bookForm.setDel(rs.getInt(12));    

        bookForm.setId(Integer.valueOf(rs.getString(13)));

        bookForm.setBookcaseName(rs.getString(14));

        bookForm.setPublishing(rs.getString(15));

        bookForm.setTypeName(rs.getString(16));

        bookColl.add(bookForm);

    }

} catch (SQLException ex) {

    ex.printStackTrace();

}

conn.close();

return bookColl;

}

五 软件测试

 软件测试的方法与步骤

该系统在本地服务器上进行运行和调试,鉴于对系统的内部结构和处理算法的完全了解以及对系统功能的全面掌握对系统进行白盒测试和黑盒测试。

在开发软件系统的过程中,需要面对错综复杂的问题,因此,在软件生存周期的每个阶段都不可避免地会产生错误。测试目的在于:发现错误而执行一个程序的过程,测试重要发现一个发现其中尚未发现的错误。

本系统的测试阶段信息流程下图所示。

为了设计出有效地测试方案按照下面准则进行测试:所有测试都应追溯到用户需求;在完成了需求模型就要着手制定测试计划,在编码之前最所有测试工作进行计划和设计;运用Pareto原理着重对占出现错误80%的容易出错的20%的模块进行测试,从小规模开始逐步进行大规模测试,通常先重点测试单个程序模块再转向集成的模块簇;精心设计测试方案,尽可能充分覆盖程序逻辑使之达到要求的可靠性。

按照软件工程的观点,软件测试(主要是指多模块程序的测试)共包括4个层次。

单元测试。单元测试的用例从单元详细设计中导出。在单元测试中可以采用功能性测试和结构性测试两种

集成测试和确认测试。这一阶段的任务,是通过了单元测试的模块逐步组装起来,通过测试与纠错,最终得到一个满足需求的目标软件

验证测试。在这个测试步骤中所发现的往往是需求规格说明的错误。一般来说,系统测试是功能性测试,不是结构性测试。

在整个测试中,采用了白盒测试和黑盒测试相结合的方法。

测试过程严格按照测试的流程,经过单元测试、子系统测试和系统测试。在进行了以上的测试工作后,将整个软件系统作为单一的实体进行测试,测试内容与系统测试基本类似,但它是在用户积极参与下进行的,此测试过程主要使用实际数据,进行测试,验证测试的目的是验证系统确实能够满足用户的需求,经过这个环节的实际数据测试,系统的各个功能实现都达到了系统需求设计的要求。

总结与展望

本系统基本完成了图书管理全部过程并详细的分析了本系统主要功能。技术采用面向对象语言Java, 遵循MVC设计模式,后台数据库设计采用MySQL语言。界面设计友好、美观,数据库存储安全、可靠;系统提供灵活、方便的权限设置功能,使整个系统的管理分工明确;而且还采用人机对话的操作方式,方便用户的日常操作。

学习过程中也遇到了一些问题,比如图书的出版日期的向数据库存储问题。在管理图书信息时,图书的出版日期是date类型的数据,系统获取出版日期数据时是string类型的数据,Servlet从页面获取string类型的日期后,在后台转换为date类型的数据,再传入数据库中,实现在数据库中存储日期类型的数据。

总的来说,这次的课程设计为我提供了一次锻炼的机会。这不仅仅是一次课程设计,不仅仅是学会了一一种开发技术,更重要的是在学习的过程中,所有的问题要自己去面对,有问题也只有靠自己去解决,在学习和解决这些困难的过程中提高了我学习的能力、解决问题的能力和实际工作的能力,学到了许多书本以外的知识,我相信会给我在以后的人生道路上带来很多的帮助。

  • 43
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LucianaiB

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值