




已阅读5页,还剩32页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
华科学院华科学院 HUAKE INSTITUTE OF TAIYUAN UNIVERSITY OF SCIENCE int pageNumber = list.size(); /计算出有多少条记录 int maxPage = pageNumber; /计算有多少页数 String number = request.getParameter(i); if (maxPage % 7 = 0) maxPage = maxPage / 7; 太原科技大学华科学院毕业设计(论文) - 15 - else maxPage = maxPage / 7 + 1; if (number = null) number = 0; request.setAttribute(number, String.valueOf(number); request.setAttribute(maxPage, String.valueOf(maxPage); request.setAttribute(pageNumber, String.valueOf(pageNumber); request.setAttribute(list, list); return mapping.findForward(linkSelect); 4.1.1 用户登录页面设计 用于用户登陆进入系统的界面,用户需要建立一个账号和密码才能进入使用系统,当用 户输入自己的账号和密码时,系统进行验证,如果正确,进入系统;如果错误,则提示用户输入 的信息不正确,重新输入信息。该界面还为新用户设置了专门的注册链接,通过点击注册按 钮直接进入新用户的注册界面。在登陆的时候,密码框采用密文形式输入,保护用户登陆的 安全性。界面如图 4.2 所示: 图 4.2 用户登录页面 登录的主要实现代码如下: / 会员登录 public ActionForward checkMember(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) String name = request.getParameter(name); MemberForm memberForm = dao.selectMemberForm(name); if (memberForm=null|memberForm.equals() request.setAttribute(result, 不存在此会员,请重新登录!);elseif (!memberForm.getPassword().equals(request.getParameter(password).trim() request.setAttribute(result, 密码错误,请重新登录!); else request.setAttribute(memberForm, memberForm); 太原科技大学华科学院毕业设计(论文) - 16 - return mapping.findForward(checkMember); 4.1.2 用户注册页面设计 用户必须先通过注册才能进入网站,注册页面如图 4.3: 图 4.3 用户登录页面 注册的主要实现代码如下: / 添加员工信息 public ActionForward insertMember(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) MemberForm memberForm=(MemberForm)form; MemberForm formSelect=dao.selectMemberForm(memberForm.getName(); if (formSelect = null | formSelect.equals() dao.insertMember(memberForm); request.setAttribute(success, 注册成功); else request.setAttribute(success, 该会员名称已经存在!); return mapping.findForward(operationMember); 4.1.3 查看销售排行页面设计 用户登录后可以查看销售排行,里面有相关详细信息介绍和预定按钮,实现界面如 图 4.4 所示: 太原科技大学华科学院毕业设计(论文) - 17 - 图 4.4 销售排行页面 查看排行的主要实现代码如下: /查询排行的详细信息 String memberlink=connection.jsp; String orderlink=connection.jsp; String shoppinglink=connection.jsp; MemberForm form=null; if(session.getAttribute(form)!=null) form=(MemberForm)session.getAttribute(form); memberlink=memberAction.do?action=5 orderlink=cart_detail.jsp; shoppinglink=cart_see.jsp; 4.1.4 查看订单页面设计 用户在预定之后可以查看自己所预定的茶叶,点击查看订单即可知道明细或是是否 发货,页面如图 4.5 所示: 图 4.5 查看订单页面 查询订单的主要实现代码如下: /查询订单的详细信息 public ActionForward selectOneOrder(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) String number=request.getParameter(number); request.setAttribute(orderForm,order.selectOrderNumber(number); 太原科技大学华科学院毕业设计(论文) - 18 - request.setAttribute(orderDetailList, orderDetail.selectOrderDetailNumber(number); 4.1.5 查看我的销售页面设计 用户在预定后可以在查看预定的页面修改数量,选择继续预定、确认预定、清空预 定等操作,如图 4.6 所示: 图 4.6 查看预定页面 查看预定的主要实现代码如下: public ActionForward goodSelect(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) List list = null; list = dao.selectGoods(); int pageNumber = list.size(); / 计算出有多少条记录 int maxPage = pageNumber; / 计算有多少页数 String number = request.getParameter(i); if (maxPage % 6 = 0) maxPage = maxPage / 6; else maxPage = maxPage / 6 + 1; if (number = null) number = 0; 太原科技大学华科学院毕业设计(论文) - 19 - request.setAttribute(number, String.valueOf(number); request.setAttribute(maxPage, String.valueOf(maxPage); request.setAttribute(pageNumber, String.valueOf(pageNumber); request.setAttribute(list, list); return mapping.findForward(goodSelect); 4.2 后台功能的实现 后台首页通前台类似使用 Javascript 制作的导航栏,管理员登陆后可通过上面的导 航进行各种模块的管理以及对系统各类数据的增删改查,包括用户管理,会员管理,订 单管理,公告管理,友情管理等。由于只是一些简单传输,故采用 iframe 实现当点击导 航栏按钮时,在网页的基本框架不变的前提下实现右侧自动刷新并显示对应栏目的内容 信息。具体后台页面布局如图 4.7 所示: 图 4.7 后台登陆页面 后台首页的主要实现代码如下: /判断管理员登录后台 public ActionForward managerCheck(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) 太原科技大学华科学院毕业设计(论文) - 20 - String account =request.getParameter(account); ManagerForm managerForm= dao.selectOne(account); if (managerForm = null) request.setAttribute(result, 您输入的账号不存在!); return mapping.findForward(checkResult); else if (!managerForm.getPassword().equals(request.getParameter(password) request.setAttribute(result, 您输入的密码不存在!); return mapping.findForward(checkResult); else request.setAttribute(manager, managerForm); return mapping.findForward(checkResult); 4.2.1 用品设置页面设计 管理员可以对茶叶进行添加、删除、查看详情等的操作,如图 4.8 所示: 图 4.8 茶叶设置页面 用品设置的主要实现代码如下: public ActionForward goodSelectMark(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) List list = null; list = dao.selectMark(Integer.valueOf(request.getParameter(mark); int pageNumber = list.size(); / 计算出有多少条记录 int maxPage = pageNumber; / 计算有多少页数 太原科技大学华科学院毕业设计(论文) - 21 - String number = request.getParameter(i); if (maxPage % 6 = 0) maxPage = maxPage / 6; else maxPage = maxPage / 6 + 1; if (number = null) number = 0; request.setAttribute(number, String.valueOf(number); request.setAttribute(maxPage, String.valueOf(maxPage); request.setAttribute(pageNumber, String.valueOf(pageNumber); request.setAttribute(list, list); return mapping.findForward(goodSelectMark); 4.2.2 订单设置页面设计 管理员可以查看信息、出货或是删除订单,如图 4.9 所示: 图 4.9 订单设置页面 订单设置的主要实现代码如下: /订货查看 public List selectOrderHead(String name) tryps=connection.prepareStatement(select*from tb_order where name=?); ps.setString(1, name); ResultSet rs = ps.executeQuery(); while (rs.next() order = new OrderForm(); order.setId(Integer.valueOf(rs.getString(1); order.setNumber(rs.getString(2); order.setName(rs.getString(3); order.setReallyName(rs.getString(4); order.setAddress(rs.getString(5); order.setTel(rs.getString(6); list.add(order); 太原科技大学华科学院毕业设计(论文) - 22 - return list; 4.3 数据库的实现 本系统采用 JDBC-ODBC 的驱动程序连接数据库,并使用 JavaBean 组件,有效的避 免了代码的重复。JDBC 技术是 Java DataBase Connectivity 的缩写,它是 SUN 公司提供的 一种支持基本 SQL 功能的通用的应用程序接口(Application Programming Interface)12。它 由一组用 Java 语言编写的类和接口组成。通过这些类和接口,程序开发人员可以在 Java 语言中方便地建立与数据库的链接,通过执行相应 SQL 语句,完成对不同数据库的访问。 因此,开发人员使用 JDBC API 可以不必编写一个应用程序来访问 Sybase 数据库,又另 外编写一个应用程序去访问 Oracle 数据库,再写一个应用程序访问 Microsoft 的 SQL Server。不但如此,使用 Java 语言编写的应用程序可以在任何支持 Java 的平台上运行, 不必在不同的平台上开发不同的应用程序。 简单地说,JDBC 能完成下列三件事: 同一个数据库建立连接; 向数据库建立连接; 处理数据库返回的结果。 JDBC 是一种通用低层的应用程序编程接口,它在不同的数据库功能模块的层次上提 供一个统一的用户界面。说 JDBC 是一处低级的 API,是指它直接调用 SQL 命令,它比 其他的一些数据库连接 API 要容易使用些,但它有同样可以作为更高级的,用户办面更 友好的 API 或开发工具基础13。 数据库访问的三层结构如图 4.10 所示,浏览器端程序要访问数据库,首先通过中间 件,然后由中间件对数据库操作权限进行认证,认证通过才能对数据库进行操作。 图 4.10 使用中间件的数据库访问三层结构 用户对数据库的存取权限认证是中间件中完成,对数据库的查询、插入、更新和删 除操作等都封装在中间件中,该中间件位于服务器端,中间件对数据库进行操作后,再 将处理结果通过 Web 服务器返回到浏览器端用户。这样,在用户端输入的用户名和密码, 太原科技大学华科学院毕业设计(论文) - 23 - 可以通过加密算法进行加密后在网络上传输,在中间件中进行解密认证,然后再进行数 据库的存取操作,数据库存取权限的用户名和密码出现在位于服务器端的中间件中,这 样就更加安全。本系统采用的正是这样的三层结构的数据库访问模式。 在三层模型中,命令将被发送到服务的”中间层” ,而”中间层”将 SQL 语句发送到 数据库。数据库处理 SQL 语句并将结果返回”中间层” ,然后”中间层”将它们返回用户。 其模型如图 4.11 所示。 图 4.11 JDBC 的三层模型 因为“中间层”可以进行对访问的控制并协同数据库的更新,并且可以使用一个易 用的高层 API,这个 API 可以由“中间层”进行转换,转换成低层的调用。所以在许多种 情况下,三层模型可以提供更好的性能,本系统中所采用的就是此种模型。 JDBC 是 JAVA 应用程序与数据库的沟通桥梁。它提供了三项服务功能:一、与数据 库建立连接。二、将 SQL 语句传递给数据库。三、从数据库取得 SQL 语句的执行结果。 当 JDBC 要与数据库建立连接前,首先,它必须先取得连接此数据库的 JDBC 驱动程序, Class.forName()即是在执行此项工作。建立数据库连接的第一步骤就是将 JDBC 驱动程序 的类载入至 JVM(Java VirtualL Machine)中,本系统中利用 java.lang.Class 类内的 forName()静态函数依据指定的类名称,将 JDBC 驱动程序载入进来。完成载入驱动程 序的步骤后,必须使用 java.sal.DriverManager 类所提供的 getConnection()静态函数, 取得与数据库间的连接对象。此连接对象的类型为 java.sal.Connection,必须通过它才能 将 SQL 指令传递给数据库,而执行结果也需要通过连接对象来取得。当取得连接对象后, 还必须取得 Statement 对象才能对数据库执行 SQL 指令。Statement 主要实现两个功能: 太原科技大学华科学院毕业设计(论文) - 24 - 执行 SQL 语句以及取得执行结果。在 java.sql.Statement 的 sql 对象中执行查询或修改命令 的函数后传回的是一个 ResultSet 对象,这个对象提供了一个存取 SQL 执行结果的管道, 以便通过它将表格数据从数据库中取出14。每个 Statement 对象只能产生一个 ResultSet 对 象。 JDBC 访问数据库的应用步骤如图 4.12: 图 4.12 图形演绎编写 JDBC 程序的一般过程 有了 JDBC,向各种关系数据发送 SQL 语句就是一件很容易的事。同时,将 Java 语 言和 JDBC 结合起来使程序员不必为不同的平台编写不同的应用程序,只须写一遍程序就 可以让它在任何平台上运行,这也是 Java 语言“编写一次,处处运行”的优势15。 下列代码段给出了以上三步的基本示例,对基于 JDBC 的数据库访问做了经典的总结: Connection con = DriverManager.getConnection(jdbc:odbc:wombat,login, password) ; Statement stmt = con.createStatement() ; ResultSet rs = stmt.executeQuery(SELECT a, b, c FROM Table1) ; while (rs.next() ) int x = rs.getInt(a) ; String s = rs.getString(b) ; float f = rs.getFloat(c) ; 太原科技大学华科学院毕业设计(论文) - 25 - 第 5 章 系统测试 由于软件开发复杂性的原因,软件开发过程中不可避免的会产生各种错误。为了在 软件开发的顺利完成以及在软件投入实际运营之前,尽可能多地发现软件当中的错误, 需要尽可能全面地对软件进行测试。目前软件测试仍然是保证软件质量的关键步骤,它 是对软件需求分析、设计以及编码的最后的检查。 对应于软件开发的各个过程,软件测试也分为几种不同的层次。每一个层次都是下 一层次的继续。 (1) 单元测试,单元测试对应于详细设计部分,从软件的详细设计中导出。软件的独 立单元将在与程序的其他部分相隔离的情况下进行测试。 (2) 集成测试,集成测试对应于系统的概要设计,主要用来的是各个模块之间的接口 的正确性。 (3) 系统测试,系统测试的目的是通过测试发现是否需求分析中的功能相符。 5.1 单元测试 单元测试是在软件开发过程中要进行的最低级别的测试活动,在单元测试活动中, 软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。 本系统中采用 JUnit 对每个类进行单元测试。JUnit 是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架。JUnit 测试属于白盒测试,因为程序员知道被测试的软件如何 完成功能和完成什么样的功能。JUnit 是一套框架,实际应用中只要继承 TestCase 类,就 可以用 Junit 进行自动测试了。它包括以下特性:用于测试期望结果的断言(Assertion) 、 用于共享共同测试数据的测试工具、用于方便的组织和运行测试的测试套件、图形和文 本的测试运行器 。 在 Eclipse 中的 java build path 下的 libraries 中添加上 JUnit 就可以使用了,在项目中 专门设置测试包,用来保存测试类。测试类都是继承自 TestCase,运行顺序为:测试开始, setUp 方法, testXXX 方法, tearDown 方法,测试结束,其中 setUp 与 tearDown,这两 个函数是 JUnit 框架中提供初始化和反初始化每个测试方法的。setUp 在每个测试方法调 用前被调用,负责初始化测试方法所需要的测试环境;tearDown 在每个测试方法被调用 之后被调用,负责撤销测试环境。testXXX 方法是用来测试相关类的自定义方法。利用 JUnit 进行单元测试需要注意的几点为: (1) 测试的独立性:一个 TestCase 只测试一个对象,同时一个 TestMethod 只测试这 太原科技大学华科学院毕业设计(论文) - 26 - 个对象中的一个方法。 (2) 测试所有可能引起失败的地方,对于类中频繁改动的函数以及仅仅包含 getter/setter 的类,如果不是由 IDE 自动生成,都要进行测试。 (3) 在 setUp 和 tearDown 中的代码不应该是与测试方法相关的,而应该是全局相关的。 如针对与测试方法 A 和 B,在 setUp 和 tearDown 中的代码应该是 A 和 B 都需要的代码。 在 Eclipse 中运行指定的测试用例,会自动显示出各个测试方法的结果,对于没有通 过的用例给出错误代码。在单元测试的中,发现了一些问题。其中比较重要的是在测试 数据访问层时,发现从数据库返回的对象有时为空,对对象没有进行 null 检测而直接使 用的话会出现错误。 解决方法:参考敏捷开发中的 NULL 模式,为关键实体类定义 NULL 对象。NULL 模式中的 NULL 对象的行为要完全继承自所属的对象,但是对于可以改变自身的方法进 行“空化”处理。从数据库中检索对象时,如果为空则返回此 NULL 对象。这样在其他 地方进行调用时,即使没有进行 null 判定也不会出现错误。 5.2 集成测试 集成测试,也叫组装测试或联合测试。它是在单元测试的基础上,将所有模块按照 设计要求组装成为子系统或系统,进行的测试。集成测试应该考虑以下问题有:数据在 模块接口之间穿越时是否会丢失;各个子功能组合起来,能否达到预计要求的父功能; 模块之间是否会有不良的影响;单个模块中的误差是否会在其他模块中进行放大。合理 地组织集成测试,直接影响到模块测试用例的形式、所用测试工具的类型、模块编号和 测试的次序、生成测试用例和调试的费用。通常,有两种不同的组装方式:一次性组装 方式和增量式组装方式。 本系统中采用 Spring 框架的 IOC 功能,对相关的模块进行增量式的组装,进行集成 测试。首先利用能够实现简单功能的替代类对主流程进行测试,然后用已经开发和测试 完成的每一个实际类将替代类替换掉。看看新开发的类是否能够达到预期的目的,有没 有什么冲突。对于客户端的 Javascript 页面的测试,采用 Firefox 浏览器所带的 JavaScript 调试器 Firebug 完成。 本系统中将利用 Spring 启动消息队列模块、消息 Log 模块和消息处理模块,对与车 辆交互的 Socket 模块进行测试。发现车辆的数据能够通过 Socket 传递回来,本地的数据 也能发送出去。但是当车辆处于掉线状态时,Socket 模块不能及时发送车辆掉线消息。 分析:通过对代码的详细检查,发现这是因为对车辆在线状况进行监控的类在数据 太原科技大学华科学院毕业设计(论文) - 27 - 量大时发生阻塞和数据丢失现象。 解决方法:在相关类中设置一个消息队列进行消息的缓冲,并且将类设置为线程类, 这样即使在繁忙时也不会影响到其他操作。 5.3 系统测试 系统测试是将已经确认的软件、计算机硬件、外设、网络等其他元素结合在一起, 进行信息系统的各种组装测试和确认测试,其目的是通过与系统的需求相比较,发现所 开发的系统与用户需求不符或矛盾的地方。 系统测试的过程中,由于使用实际车辆进行测试的费用很大,所以利用模拟软件根 据通信协议与系统进行通信。这种情况还可以测试大通信量情况下的系统的稳定性。客 户端在 IE 和 Firefox 下进行分别测试。其测试内容如表 6.1 所示。 输入服务器的 URL 地址,自动返回了登录界面。根据测试,利用不同公司账号登录 系统,Web 客户端只显示和处理被授权管理的资源。图 6.1 所示为用户进入页面以后的截 图。页面的左边显示的是当前能看到的系统资源,其中有背景图、车辆的图像、站点图 像等。页面右边利用 JavaScript 生成了几个内置窗口来显示系统信息,当前显示的是一个 站点信息。页面右下角有操作的按钮,这里没有显示出来。 表 5.1 系统测试记录 操作名称操作流程操作结果和输出 登录系统 打开登录页面,输入 用户名和密码,点击 登录按钮 从登录系统到系统信息显示完成,花费 1 秒时间。基本满足了系统显示要求。 查询相关 信息 输入检索项目(产品名 称)和检索条件,点击 检索 用列表的方式显示出了符合条件的记录。 从服务器端返回信息,花费 100 毫秒- 350 毫秒。满足要求 商品管理 点击添加商品信息添 加商品;点击修改按 钮修改商品详细;点 击删除按钮删除商品 信息 添加和修改商品信息为跳转到添加修改 的页面进而对之进行操作,从服务器返 回信息花费 100 毫秒-350 毫秒,满足要 求;删除商品信息弹出小窗口进行操作, 从服务器返回信息花费 70 毫秒-250 毫 秒,满足要求 太原科技大学华科学院毕业设计(论文) - 28 - 会员管理 点击注册进行会员信 息添加,点击修改会 员信息进行会员信息 的修改,点击冻结/解 冻按钮进行会员信息 的冻结/解冻操作,点 击会员管理按钮显示 所有会员的信息 对会员信息的操作点击按钮分别进入相 应操作界面,从服务器返回信息花费 100 毫秒-350 毫秒,满足要求 订单管理 点击订单管理按钮显 示所有订单信息,点 击执行按钮进行发货 操作,点击订单号查 看订单详情,点击结 账生成订单 对订单信息的操作点击按钮分别进入相 应操作界面,从服务器返回信息花费 100 毫秒-350 毫秒,满足要求 公告管理 点击公告管理显示公 告信息,点击添加公 告信息进行公告信息 添加操作,点击删除 按钮删除公告信息点 击公告名查看公告详 情 对公告信息的操作点击按钮分别进入相 应操作界面,从服务器返回信息花费 100 毫秒-350 毫秒,满足要求 5.4 本章小结 本章主要介绍了软件测试的知识和对系统进行测试的信息。随着系统的开发,分别 系统进行了单元测试、集成测试和系统测试。通过表格和相关截图展示了
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 教师招聘之《幼儿教师招聘》练习题库有答案详解
- 渔业养殖水产品与健康饮食书籍出版创新创业项目商业计划书
- 教师招聘之《小学教师招聘》题库检测模拟题【模拟题】附答案详解
- 教师招聘之《幼儿教师招聘》考试综合练习完整参考答案详解
- 教师招聘之《幼儿教师招聘》强化训练含答案详解(模拟题)
- 教师招聘之《小学教师招聘》高分题库附答案详解【满分必刷】
- 2025年呼伦贝尔莫力达瓦达斡尔族自治旗内蒙古大学校园引才笔试备考附答案详解(突破训练)
- 患者隐私保护-医疗机构医疗质量安全专项整治行动方案
- 2025年美妆行业个性化定制服务模式在短视频平台中的应用报告
- 2025年私募股权投资基金行业投资热点:生物制药生产与质量控制退出策略深度分析
- 2025年北京市水务局所属事业单位招聘工作人员101人笔试高频重点提升(共500题)附带答案详解
- 红光治疗仪的使用
- 高教版2023年中职教科书《语文》(基础模块)上册教案全册
- 湖北省武汉市汉阳区2024-2025 学年上学期期中质量检测八年级英语试卷(含笔试答案无听力原文及音频)
- DB11T 1649-2019 建设工程规划核验测量成果检查验收技术规程
- 幼儿园大班幼儿拼音字母表幼儿拼音字母表
- 《吴文化教程(活页版)》 课件全套 模块1-12 历史特征- 吴地产业经济
- 三级筑路工(高级)职业技能鉴定考试题库(含答案)
- 大学新生见面会初见欢共进步启新程模板
- 2024年全国期货从业资格之期货投资分析考试高频题(附答案)
- 光伏项目施工总进度计划表(含三级)
评论
0/150
提交评论