1、沈阳理工大学课程设计专用纸.1沈阳理工大学目录目录 11 问题定义 22 可行性研究 32.1 项目概述 .32.2 可行性分析的前提 .32.2.1 项目的目标 32.2.2 项目的环境 32.3 可选的方案 .32.3.1 方案一 32.3.2 方案二 32.4 所建议的系统 .32.4.1 系统说明 32.4.2 高层数据流图 42.5 经济可行性 .42.6 技术可行性 .42.7 操作可行性 .53 需求分析 63.1 需求概述 .63.2 需求模型 .63.2.1 数据模型 63.2.2 功能模型 73.2.3 行为模型 73.2.4 数据字典 84 总体设计 94.1 系统体系结
2、构 .94.2 模块详细说明 .94.3 数据库设计 .95 详细设计 125.1 人机界面设计 .125.2 过程设计 .136 测试 216.1 白盒测试 .216.2 黑盒测试 .217 结论 22参考文献 23沈阳理工大学课程设计专用纸.2沈阳理工大学1 问题定义人们传统的都在书城里寻找和购买自己所需要和喜欢的图书。但由于时间和精力的限制经常去书城是不太方便的。另外在书店中面对大量的图书也会有无从下手的感觉。人们更需要一种轻松、快捷的购物环境。而商家面对顾客的这种需求,为了保留现有的客源,同时扩大销售范围,降低广告成本,也需要采用一种新的运营方式,网上购书就是这样应运而生的。网上图书订
3、购系统本着让图书订购与管理做到快捷、方便、简单、摆脱用手工操作处理图书订购的问题,工作非常繁琐,需要大量的人力、物力和财力,极大的浪费了资源的劣势而设计,它可以使管理员从繁重的手工操作中解脱出来。网上图书订购系统是一项非常有意义的开发工作,其发展的潜力巨大,它的建立使顾客节省了大量的时间且给商家带来利益,实现通过互连网而进行的图书管理,其发展前景和影响意义也将是非常深远的。沈阳理工大学课程设计专用纸.3沈阳理工大学2 可行性研究2.1 项目概述人们传统的都在书城里寻找和购买自己所需要和喜欢的图书。但由于时间和精力的限制经常去书城是不太方便的。另外在书店中面对大量的图书也会有无从下手的感觉。人们
4、更需要一种轻松、快捷的购物环境。而商家面对顾客的这种需求,为了保留现有的客源,同时扩大销售范围,降低广告成本,也需要采用一种新的运营方式,网上购书就是这样应运而生的。2.2 可行性分析的前提2.2.1 项目的目标制作一个网上图书订购系统,能让商家将图书信息在网上进行展示,以供顾客选择。从而达到节省顾客购买、挑选图书的时间。2.2.2 项目的环境当今时代是飞速发展的信息时代。在各行各业中离不开信息处理,这正是计算机被广泛应用于信息管理系统的环境。计算机的最大好处在于利用它能够进行信息管理。使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性。尤其对于复杂的信息管理,计算机能够充分
5、发挥它的优越性。计算机进行信息管理与信息管理系统的开发密切相关,系统的开发是系统管理的前提。 本系统就是为了是购买图书变得快捷方便而设计的。2.3 可选的方案2.3.1 方案一使用数据库语言 MySQL 建图书信息表及会员信息表,连接至 VisualStudio2010 编写的网上书店中。2.3.2 方案二使用基于 JAVA 系统的开发软件 NetBeans 建立内置的数据库图书信息表为基础,再建立 J2EE 项目 bookstore。2.4 所建议的系统2.4.1 系统说明1.数据库本软件开发使用的数据库是 MySQL,MySQL 是一个小型关系型数据库管理系统,开发者为瑞典 MySQL A
6、B 公司。在 2008 年 1 月 16 号被 Sun 公司收购。目前 MySQL 被广泛地应用在 Internet 上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤沈阳理工大学课程设计专用纸.4沈阳理工大学其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了 MySQL作为网站数据库。2.JavaJava 是由 Sun Microsystems 公司推出的 Java 面向对象程序设计语言(以下简称Java 语言)和 Java 平台的总称。由 James Gosling 和同事们共同研发,并在 1995 年正式推出。Java 最初被称为 Oak,是 1991 年为消费
7、类电子产品的嵌入式芯片而设计的。1995 年更名为 Java,并重新设计用于开发 Internet 应用程序。用 Java 实现的HotJava 浏览器(支持 Java applet)显示了 Java 的魅力:跨平台、动态Web、Internet 计算。从此,Java 被广泛接受并推动了 Web 的迅速发展,常用的浏览器均支持 Javaapplet。另一方面,Java 技术也不断更新。Java 自面世后就非常流行,发展迅速,对 C+语言形成有力冲击。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。2.4.2 高层数据流图图 2.1 图书购买数据流图2.5 经济可行性开
8、发一个图书订购系统所需的人力和物力并不是很大。而一旦系统正常运行后,扩大了销售的范围,在销售量和经营利润上是无可估量的2.6 技术可行性构成 WEB 页面的主要工具是 HTML,以它作为 WEB 的基础。利用 ASP 技术,服务器可以执行用户为 VBScript 或 JavaSeript 编写的嵌入 HTML 文档总程序。WEB页面通过 ASP 可以访问数据库,存取服务器的有关资源,使得 Web 页面具有强大的交互能力。采用可直接插入到 HTML 文档中的 JavaSeript,它具有 Java 的许多特性,但比 Java更为简单有效,而且不需要编译。应用程序可通过调用 ODBC(开放式数据库
9、连接)这一数据库编程接口的接口函数来沈阳理工大学课程设计专用纸.5沈阳理工大学访问来自不同数据库管理系统的数据。以 ADO(ActiveX Date Objects)作为 Web 服务器端的内置组件,允许编写程序通过 Microsoft SQL Server 或 Microsoft Access 系统,访问并操纵数据库服务器中的数据。2.7 操作可行性本系统开发的开发宗旨是以便捷为中心。随着 internet 的普及和推广,上网对于大部分人已经不陌生,通过拨号或宽带人们可以轻松上网,简易的网上操作对于用户来说已不是件难事。沈阳理工大学课程设计专用纸.6沈阳理工大学3 需求分析3.1 需求概述1
10、.用户注册及登录2.用户查询图书3.提交订单4.确认支付5.网店管理员统计订单6.图书管理及会员管理3.2 需求模型3.2.1 数据模型图 3.1 总 ER 图图 3.2 图书信息 ER 图沈阳理工大学课程设计专用纸.7沈阳理工大学3.2.2 功能模型添加图书查看图书是否成功成功页面失败页面图书管理开始修改图书 删除图书失败页面失败页面成功页面成功页面YNYNYN结束图 3.3 P1:图书管理功能模型3.2.3 行为模型输入会员 选择注册 信息 账户账户未使用图 3.4 账户注册过程状态图主屏Do:要求事务类型等待输入信息检测账户提示已使用新开账户结束Do:提示成功沈阳理工大学课程设计专用纸.
11、8沈阳理工大学图 3.5 购书过程状态图3.2.4 数据字典表 3.1 图书数据字典图书信息=书籍编号+书籍类别+书籍名称+书籍价格+书籍简介+书籍折扣+库存数量书籍编号=0数字10书籍类别=0字母20书籍名称=0字母40书籍价格=0数字10书籍简介=0字母80书籍折扣=数字库存数量=0数字100沈阳理工大学课程设计专用纸.9沈阳理工大学4 总体设计4.1 系统体系结构 图 4.1 系统层次图4.2 模块详细说明表 4.1 查询图书的表(P1 图书管理中)系统名称:网上图书订阅系统 设计人:李芳慧、朱燕宇、孔繁鸶模块名:查询图书 日期:模块编号:1.3调用:用户 被调用:输入:用户查询的图书名
12、称 输出:用户查询的图书信息处理:输入用户所查询的图书名称,输出相对应的图书信息注释:表 4.2 网上书店的表(D1:图书信息存储)系统名称:网上图书订阅系统 设计人:李芳慧、朱燕宇、孔繁鸶模块名:图书管理 日期:模块编号:2.2调用:网店管理 被调用:输入:图书库存信息 输出:各类图书数量处理:统计所有卖出图书与剩余图书的数量,并进行统计处理注释:4.3 数据库设计 1.数据设计:(1)图书信息(数据库表、查询结果)网上图书订阅系统020406080100第 一 季 度 第 三 季 度东 部西 部北 部1.0 顾客 2.0 网店管理员2.1 统计订单2.2 图书管理2.3 会员管理1.5确认
13、支付1.4提交订单1.3查询图书1.2登录1.1注册沈阳理工大学课程设计专用纸.10沈阳理工大学表 4.3 图书信息数据库表列名 数据类型 可否为空 描述id varchar(40) NOT NULL 书籍 ID(主键)name varchar(100) NOT NULL 书籍名称author varchar(40) NOT NULL 作者price decimal(8,2) NOT NULL 售价edition varchar(40) NOT NULL 版次pubcom varchar(40) NOT NULL 出版社imagename varchar(100) NOT NULL 图片名称d
14、escription varchar(255) NULL 描述category_id varchar(40) NULL 分类 ID(外键)(2)共享数据a.查询结果和选中的图书信息b.作为 session 参数在 NetBeans7.3 版本中建立内置的数据库 BookStore,建立表 MYBOOKLIB,输入的测试数据如下:图 4.2 图书数据库表展示2、EJB 接口设计MybooklibFacade 管理图书信息(封装数据库)search(String key):根据关键字从数据库中查找出图书信息记录 (数组);条件:书名、作者、出版社名中包含关键字;根据书号,找出图书信息记录具体算法如
15、下:public ArrayList search(String key) List all = this.findAll();if(all.isEmpty() return null;ArrayList result=new ArrayList() ;沈阳理工大学课程设计专用纸.11沈阳理工大学for(Bookstore current : all) if(current.getTitle().toLowerCase().contains(key)|current.getAuthor().toLowerCase().contains(key)|current.getPress().toLow
16、erCase().contains(key) result.add(current);return result;沈阳理工大学课程设计专用纸.12沈阳理工大学5 详细设计5.1 人机界面设计图 5.1 首页界面展示输入 java 关键字,点击“查询”:图 5.2 图书目录页面如果还需要查询其他图书,点击“重新查询”便回到了查询页面,此时,输入关键字“李金明”并点击“查询”后,就会从数据库中查询所有书名、作者或者出版社名称中含有关键字的结果并显示在页面上:沈阳理工大学课程设计专用纸.13沈阳理工大学图 5.3 图书查询页面5.2 过程设计在 NetBeans7.3 中先建立数据库 Mybookl
17、ib,并且输入测试数据。单击“文件/新建项目/Java EE/ 企业应用程序” ,输入项目名称 bookstore,确定后会建立J2EE 项目 bookstore。在 bookstore-war 节点单击右键,新建 JSP 文件。1.图书查询页 search.jsp 代码:网上书店 欢迎来到网上书店 请输入您要查询图书的关键字(书名、作者或出版社)沈阳理工大学课程设计专用纸.14沈阳理工大学2.图书目录页 directory.jsp 代码:图书查询结果 查询结果 result = (ArrayList) session.getAttribute(“directory“);if (result
18、= null|result.isEmpty() %抱歉,目前没有您需要的图书符合查询关键字的图书如下书名作者出版社价格沈阳理工大学课程设计专用纸.15沈阳理工大学“ value=“ /如需更多图书3.在 bookstore-ejb 节点单击右键,新建“通过数据库生成实体类” ,选择数据源“新建数据源” ,将 Mybooklib 数据库添加到数据源中,选择表源 Mybooklib,点击下一步即可根据前面建立的数据库 Mybooklib 创建实体类,创建包 book,将实体类命名为Mybooklib。会自动生成实体类 Mybooklib.java,代码如下:/* To change this te
19、mplate, choose Tools | Templates* and open the template in the editor.*/package book;import java.io.Serializable;import javax.persistence.Basic;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.Id;import javax.persistence.NamedQueries;import javax.persistence.N
20、amedQuery;import javax.persistence.Table;import javax.validation.constraints.NotNull;import javax.validation.constraints.Size;import javax.xml.bind.annotation.XmlRootElement;/* author Administrator*/沈阳理工大学课程设计专用纸.16沈阳理工大学EntityTable(name = “MYBOOKLIB“)XmlRootElementNamedQueries(NamedQuery(name = “My
21、booklib.findAll“, query = “SELECT m FROM Mybooklib m“),NamedQuery(name = “Mybooklib.findByIsbn“, query = “SELECT m FROM Mybooklib m WHERE m.isbn = :isbn“),NamedQuery(name = “Mybooklib.findByTitle“, query = “SELECT m FROM Mybooklib m WHERE m.title = :title“),NamedQuery(name = “Mybooklib.findbymohu“,
22、query = “SELECT m FROM Mybooklib m WHERE m.title LIKE :key OR m.author LIKE :key OR m.press LIKE :key“),NamedQuery(name = “Mybooklib.findByAuthor“, query = “SELECT m FROM Mybooklib m WHERE m.author = :author“),NamedQuery(name = “Mybooklib.findByPress“, query = “SELECT m FROM Mybooklib m WHERE m.pres
23、s = :press“),NamedQuery(name = “Mybooklib.findByPrice“, query = “SELECT m FROM Mybooklib m WHERE m.price = :price“)public class Mybooklib implements Serializable private static final long serialVersionUID = 1L;IdBasic(optional = false)NotNullSize(min = 1, max = 100)Column(name = “ISBN“)private Strin
24、g isbn;Size(max = 100)Column(name = “TITLE“)private String title;Size(max = 100)Column(name = “AUTHOR“)private String author;Size(max = 100)Column(name = “PRESS“)private String press;/ Max(value=?) Min(value=?)/if you know range of your decimal fields consider using these annotations to enforce fiel
25、d validationColumn(name = “PRICE“)private Double price;public Mybooklib() public Mybooklib(String isbn) this.isbn = isbn;沈阳理工大学课程设计专用纸.17沈阳理工大学public String getIsbn() return isbn;public void setIsbn(String isbn) this.isbn = isbn;public String getTitle() return title;public void setTitle(String title
26、) this.title = title;public String getAuthor() return author;public void setAuthor(String author) this.author = author;public String getPress() return press;public void setPress(String press) this.press = press;public Double getPrice() return price;public void setPrice(Double price) this.price = pri
27、ce;Overridepublic int hashCode() int hash = 0;沈阳理工大学课程设计专用纸.18沈阳理工大学hash += (isbn != null ? isbn.hashCode() : 0);return hash;Overridepublic boolean equals(Object object) / TODO: Warning - this method wont work in the case the id fields are not setif (!(object instanceof Mybooklib) return false;Myboo
28、klib other = (Mybooklib) object;if (this.isbn = null return true;Overridepublic String toString() return “book.Mybooklib isbn=“ + isbn + “ “;4.在 bookstore-ejb 节点单击右键,选择新建“实体类的会话 Bean”并勾选“本地” ,即可自动建立实体类 Mybooklib.java 的会话 Bean:MybooklibFacade,代码如下:/* To change this template, choose Tools | Templates*
29、 and open the template in the editor.*/package book;import javax.ejb.Stateless;import javax.persistence.EntityManager;import javax.persistence.PersistenceContext;/* author Administrator*/Statelesspublic class MybooklibFacade extends AbstractFacade implements MybooklibFacadeLocal PersistenceContext(u
30、nitName = “bookstore-ejbPU“)private EntityManager em;沈阳理工大学课程设计专用纸.19沈阳理工大学Overrideprotected EntityManager getEntityManager() return em;public MybooklibFacade() super(Mybooklib.class);实现的远程接口代码如下:/* To change this template, choose Tools | Templates* and open the template in the editor.*/package book
31、;import java.util.ArrayList;import java.util.List;import javax.ejb.Local;/* author Administrator*/Localpublic interface MybooklibFacadeLocal void create(Mybooklib mybooklib);void edit(Mybooklib mybooklib);void remove(Mybooklib mybooklib);Mybooklib find(Object id);List findAll();ArrayList search(Stri
32、ng key);List findRange(int range);List findbymohu(Object a);int count();5.点击右键,选择“插入代码/business 方法” ,将方法名命名为 search,数据类型为沈阳理工大学课程设计专用纸.20沈阳理工大学ArrayList,参数名称为 key,数据类型为 String,此时便在 MybooklibFacade 和MybooklibFacadeLocal 中添加了方法 public ArrayList search(String key),在其中填入从数据库中根据关键字 key 模糊查找图书的方法,代码如下:pub
33、lic ArrayList search(String key) List all = (List) this.findAll();/ if(key.equals(“) / return null;/ ArrayList result=new ArrayList() ;for(Mybooklib current : all) if(current.getTitle().toLowerCase().contains(key)|current.getAuthor().toLowerCase().contains(key)|current.getPress().toLowerCase().conta
34、ins(key) result.add(current);return result;沈阳理工大学课程设计专用纸.21沈阳理工大学6 测试6.1 白盒测试利用条件覆盖将程序每个判定表达式的每个条件都去到各种可能的结果,按照程序内部的逻辑测试程序,检测程序中的每条通路是否都能按预定要求正确工作。以下三组测试数据即可做到判定覆盖:(1) 空查询:抱歉,目前没有您需要的图书(2) C#:抱歉,目前没有您需要的图书(3) Java:符合查询关键字的图书如下:书名:作者:出版社:价钱:6.2 黑盒测试利用等价划分法把程序的输入与划分成数据类,目的在于检查图书查询功能是否能按规格说明书的规定正常使用。据此
35、可以导出以下测试用例:表 6.1 测试方案编号 等价类 输入 预期的输出1 数据库中不存在的图书信息 C# 抱歉,目前没有您需要的图书2数据库中存在的书名 Java 符合查询关键字的图书如下:书名;作者;出版社;价格3数据库中存在的作者 李金明 符合查询关键字的图书如下:书名;作者;出版社;价格沈阳理工大学课程设计专用纸.22沈阳理工大学7 结论本系统具有如下特点:(1) 系统由 Java 语言开发,界面简洁,程序整齐,具有很好的可维护性和可重用性。(2) 后台采用的 MySql 数据库,拥有较高的插入,查询速度等特点。但因为本系统相对来说较大,而且在本项目开始的时候,在 C#和 Web 应用
36、程序设计方面不太熟悉,再加上课程设计的时间有限,许多方面在下一步的工作中还需要进一步改进和完善。主要针对以下几方面:(1)系统具有高的可重用性和适应性以及良好的可维护性。(2) 系统功能虽已基本实现,但仍有诸多地方需要修改。譬如,图书统计管理等功能。在本次设计中,因为设计的知识点太多,所以这几个部分做的不是太完美。在一些模块设计中,有的设计思路没有考虑进去,在以后的时间里还要加以补充;还有的细节的地方也需要进一步修改和完善。沈阳理工大学课程设计专用纸.23沈阳理工大学参考文献1 萨师煊,王珊. 数据库系统概论M.第三版. 北京:高等教育出版社,20022 张海藩. 软件工程导论M. 北京:清华大学出版社,20083 李红军,李冬梅. MySQL 核心技术手册M. 北京:机械工业出版社,20094 李春葆,喻丹丹,曾慧,曾平.ASP.NET 动态网站设计教程M. 北京:清华大学出版社,20115 张海藩,吕云翔.软件工程(第四版)M.北京:人民邮电出版社,20136 明日科技.Java 从入门到精通(第三版) M.北京:清华大学出版社 2012