软件工程实验报告 三
一、实验名称
网站详细设计
二、实验目的
根据需求分析、概要设计,完成网站的详细设计
三、实验主要内容
详细设计的主要任务是设计每个模块的实现算法、所需的局部数据结构。详细设计的目标有两个:实现模块功能的算法要逻辑上正确和算法描述要简明易懂。
四、实验原理
1、模块说明。说明该模块需要实现什么功能,还有设计要点。
2、流程逻辑。用流程图说明该模块的处理过程。
3、算法。不一定有,如果涉及一些比较特殊的算法或关键模块,就写一下算法的伪代码或用流程图说明。
4、限制条件。该模块的功能有哪些限制,比如用户ID不能重复,只能查询自己权限范围内的用户。
5、输入项。每个子模块可以看做一个”方法“,我传给你什么,你给我输出什么。比如删除用户,输入项就是用户ID。
6、输出项。删除用户的输出项,就是不能在查询模块里查询到已删除的用户
7、界面设计。用visio或者其他工具画一些界面图
8、需要操作的数据表。
五、实验结果
详细设计
目录
一、数据库设计
二、用户界面设计
三、系统实现.
3.1通用功能类的实现
3.2申报开票模块的实现
四、总结和展望
4.1总结
4.2展望
一、数据库设计
为了实现数据持久化,必须在数据库中建立一些对应特定功能的数据表作为存储。主要有用户信息表、图书记录表、订单表。用户信息表将以注册的用户信息储存在数据库中,以便管理员操作。图书记录表是将会员永辉已发布的书的详细信息储存在数据库中。订单表将每个用户的订单星系信息储存。利于管理。
1、用户信息表
用户名:用户自定义,保证唯一性(必填)
密码:用户自行设定(必填)
email:正确的邮箱格式(必填)
性别:男/女(必填)
联系电话、密保问题、密保答案、兴趣爱好(皆为选填)
2、图书记录表
图书名:会员自定
作者:图书的作者
内容简介:对书本的内容做简单的介绍
图书分类:1 为计算机类、2 为英语类 3、为其他类
出版社名称:具体出版社
价格:图书价格
热卖时间:销售时间
打折:0为打折图书、1为非打折图书
库存:图书剩余数量
3、订单列表
主要字段为:用户名,价格,图书名称、收货地址、电话号码。
主要是为了将用户所需的信息填满,以便第三方的支付及发货提供信息。
在数据库设计中,我们采用分层设计来实现用户从注册到下订单这一整个过程。通过用户的操作,传值给相应的属性。使网站服务器响应,与数据库交互。完成各个功能。
二、用户界面设计
本网站的设计思路主要是实用、简便、灵活、稳定。整个网站有完整的组织框架和模块分工,但由于涉及篇幅限制,这里我着重介绍下注册及发布新书页面。因为这两个页面是整个征收管理系统运行的核心页面
三、系统实现
本项目在开发过程中,针对所有包、类、对象的命名都有明确规定,为了减少工作量,保证程序的一致性,我们建立了多个公共父类,父类对象主要用来实现基本操作和基本功能函数,本网站中所有功能子类都是以从父类中继承并添加新代码实现的,同时我们也大量使用了面向对象的新技术。
我们根据用例的设计分别进行了实现,车船税征收管理系统下的大类和用例对应关系分别为:
· cc_main.pbl为整个车船税征收管理系统的主要调用模块实现;
· cc_dj.pbl对应单位车辆登记和个人车辆登记用例的实现;
· cc_sbkp.pbl对应申报开票用例的实现;
· cc_kpgl.pbl对应开票管理的实现,如减免、欠税、汇缴等等;
· cc_zxdj.pbl对应停复业注销、非正常户管理用例的实现;
· cc_dj_rd_xdh.pbl对应纳税人管理用例的实现;
· cc_xtwh.pbl对应数据维护用例的实现;
· cc_cxtj.pbl对应为查询统计用例的实现;
· data_base.pbl、data_base2.pbl、cc_database.pbl对应通用功能类的实现;
由于本系统包含内容很多,不能展现全部实现过程,这里仅拿申报开票模块中代表性较强的通用功能类data_base.pbl、data_base2.pbl、cc_sbkp.pbl和功能相对独立的存储过程展开介绍。
3.1通用功能类的实现
通用功能类主要由book、Member、Order三个子类组成,之所以分成三个类是因为通用功能提供的公共函数、类、程序很多,为了便于管理和识别,按照不同功能和作用范围进行了划分。
下面就以book用户对象中部分代码为例展示如何进行代码实现。
package com.sunday.bean;
import java.text.SimpleDateFormat; import java.util.Date;
/** * 图书信息类 * */
public class Book { private String id;
private String name;
private String author;
private String content;
private int category;
private String strCategory;
private String publish_name;
private double price;
private Date on_sale_time;
private String str_on_sale_time;
private int discount;
private String strDiscount;
private int stock;
public String getId() { return id; }
public void setId(String id) { this.id = id; }
public String getAuthor() { return author; }
public void setAuthor(String author) { this.author = author; }
public int getCategory() { return category; }
public void setCategory(int category) { this.category = category; }
public String getContent() { return content; }
public void setContent(String content) { this.content = content; }
public int getDiscount() { return discount; }
public void setDiscount(int discount) { this.discount = discount; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public Date getOn_sale_time() { return on_sale_time; }
public void setOn_sale_time(Date on_sale_time) { this.on_sale_time = on_sale_time; }
public double getPrice() { return price; }
public void setPrice(double price) { this.price = price; }
public String getPublish_name() { return publish_name; }
public void setPublish_name(String publish_name) { this.publish_name = publish_name; }
public int getStock() { return stock; }
public void setStock(int stock) { this.stock = stock; }
public String getStr_on_sale_time() { if (getOn_sale_time() != null) { SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
str_on_sale_time = formatter.format(getOn_sale_time()); } return str_on_sale_time; }
public void setStr_on_sale_time(String str_on_sale_time) { this.str_on_sale_time = str_on_sale_time; }
public String getStrCategory() { switch (category) { case 1: return "计算机类"; case 2: return "英语类"; default: return "其他类 "; } }
public String getStrDiscount() { switch (discount) { case 1: return "是"; default: return "否 "; } } }
|
控制book的Servlet代码如下: package com.sunday.servlet;
import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Collection; import java.util.Date;
import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
import com.sunday.bean.Book; import com.sunday.bean.BookMgr; import com.sunday.util.Encoder;
/** * Servlet implementation class for Servlet: ComposeServlet */ public class ComposeServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
public ComposeServlet() { super(); }
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String name,author,content,category,publish_name,price,stock,discount; response.setContentType("text/html; charset=GB2312"); name = request.getParameter("name"); author = request.getParameter("author"); content = request.getParameter("content"); category = request.getParameter("category"); publish_name = request.getParameter("publish_name"); price = request.getParameter("price"); stock = request.getParameter("stock"); discount=request.getParameter("discount"); BookMgr mgr = new BookMgr(); Book book = new Book(); book.setAuthor(author); book.setCategory(Integer.parseInt(category)); book.setContent(content); book.setDiscount(1); book.setName(name); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); book.setStr_on_sale_time(formatter.format(new Date())); book.setPrice(Double.parseDouble(price)); book.setPublish_name(publish_name); book.setStock(Integer.parseInt(stock)); int i = mgr.add(book); if (i == 1) { int pagesize = 5; int count = mgr.getCount(); // int totalPageNum = count / pagesize;// if ((count % pagesize) > 0) { totalPageNum += 1; }
request.setAttribute("totalPageNum", new Integer(totalPageNum)); Collection c = mgr.getAll(pagesize, 1); request.setAttribute("c", c); try { request.getRequestDispatcher("/book/index.jsp").forward( request, response); } catch (Throwable t) { getServletContext().log(t.getMessage()); } } } } |
ComposeServlet
通过ComposeServlet将用户传入的参数储存到数据库中,且传入../book/index.jsp中,由此页面显示出来。
四、总结和展望
4.1总结
分析方法与设计模式因需求的不同而多种多样。不同的方法,有的可能带来非常明显的优点,而有的可能带来不利的因素。在本次项目的开发过程中,分析与设计的全阶段均完全采用了UML面向对象的先进建模方法,使系统在遵循面向对象原理与软件工程学的基础上,还具有一些使用其它面向对象方法时所不具备的优点。
本论文研究的目标是在MVC设计模式的指导下开发管理平台,使得网上购书系统的实现,解决在开发过程中涉及的问题。
在本论文的理论研究过程中,经过了大量网络资料、文献的阅读和分析研究,主要有如下收获:
(1)从理论上了解了什么是MVC模式,对其进行了分析。
(2)对网站设计模式方面的经典理论进行了学习和探讨,并着重对经典的MVC设计模式进行了研究。
(4)认真学习了编写网站相关知识,对网站的开发的步骤有了完整的认识。
(5)对选用的软件开发工具进行了学习,结合现有SaaS模式下的应用对.NET相关技术进行了学习和研究。
经过充分的理论研究后,在本论文的实践过程主要有如下收获:
(1)严格按照网站开发理念对网站进行了初期开发,在开发过程中对网站的开发理念实施的各个阶段形成了具体的认识,并在实施过程中体会到其益处。
(2)对网站系统进行了需求分析,对网站功能需求、客户需求、接口需求、性能需求作出了分析研究,在需求分析过程中掌握了各种需求分析工具的应用。
(2)将MVC的软件设计模式应用到本论文最终平台的设计中,并将其与java中经典的三层架构进行了对应,在此基础上给出了系统架构图,在eclipse环境中使用相关技术进行了实现
(3)对多用户数据库的设计进行了研究,并在本论文最终平台中采用合适的多用户数据库设计方法对数据库进行了设计实现,解决了多用户数据库设计和实现过程中碰到的疑难问题。
(4)对面向对象的方法论进行了研究,并将其应用到本论文最终平台中各功能模块的实现,认识并掌握了面向对象的实现方法。
4.2展望
本次研究主要针对JSP+Javabean+Servlet网站开发模式进行了分析和研究,并在此基础上作出了系统实现。但由于自身知识及经验的局限性、主课题的研究性特性、本论文研究内容在主课题中的位置特点,使得整个研究过程仍不够完美,以理论性研究为主,最终的平台功能实现并不完善。还需作更进一步的研究:
(1)任何网站运行环境中安全性都是至关重要的,目前本网站中所提供的安全性仍需要进一步提高,对数据库表字段内容、cookie信息、备份数据库文件等的安全保障机制还需进一步研究,总之,如何提供一个安全可靠值得用户信任的网站应用平台是一个值得深入研究的方向。
(2)多用户的并发访问响应速度是JSP+Javabean+Servlet开发的网站成功运行的一个重要要素,今后的研究中需对该模式下系统如何优化提高多用户的并发访问进行进一步的探讨。同时,需是一步研究提高用户并发访问的前题下对多用户数据库设计的改进。
(3)本网站的开发基于其运行环境及开发目的和成本的限制,虽在开发中以克服了大量的困难,但在体现不同用户提供不同处理逻辑方面仍需进一步研究。