软件工程需求分析 - 范文中心

软件工程需求分析

02/26

《软件工程需求分析》

小型在线购物系统

小组成员:许冰玉

李世杰 刘祥宇

1 引言

1.1 编写目的 1.2 背景

随着计算机和网络的日趋普及,越来越多的商家在网上升起商店,向消费者展示出一片新鲜的购物大地。在美、日等信息化程度较高的国家和地区,网络商店发展速度迅猛,美国的世界级超一流的零售商,如沃尔玛凯玛特,家庭仓储、科罗格、J.C培尼等纷纷脐身于网络经商的行列。调查表明:美国的家庭已越来越习惯于在家中从网上购物。

在我国,网上购物从无到有也不过短短几年时间。我国第一家网上购物发生在1996年,燕莎友谊商场首次通过网上商城售出一个景泰蓝,虽然货款的支付不是在网上进行的,但这毕竟为我国零售业奏出了网上购物的先声。如今,在北京、上海、深圳等大城市,已有200多家商场,专卖店开设了网上商店,还有一些正处在观望阶段。真正意义上的网上购物,即货款的结算在网上进行,已在国内实现。深圳无虹商场去年5月开办了我国第一家实行计单和支付一体上的网上商店,上网的消费者只要拥有一张招商银行的“一卡通”,便可轻松购物, 24小时内商家送货上门。商家投资网上商店目的是赚钱。

小型软件购物系统构建初始目标主要是面向广大消费者,由于不同人群对商品的需求不同,因而购物网站应在具有自己特色的同时应适合不同人士的需要。因此,小型软件购物系统定位于面向广大消费者,并突出完善售前、售中、售后客户服务与安全保障方面的特色。售前服务提供详细的商品信息、简便快捷的操作过程;售中服务通过采取安全措施为用户提供网上订购服务安全保障与实时支付;售后服务对用户订购的商品提供快速物流配送,并对用户所购商品提供质量保证

说明

a.待开发的软件系统的名称:小型在线购物系统

b.本项目的任务提出者、开发者、用户及实现该软件的计算中心或计算机网络 由郑延斌老师提出

二 任务概述

针对“购物网站”进行浏览和购物,了解系统的功能,为自己的系统设计进行需求分析的准备。

1、进行系统的需求分析,一般使用“用例图”,即针对系统,以不同角色的用户的身份,看到的功能是不同的,这样一个系统的用户群类别以及每种类别用户群所看到的大致功能模块就可以画出来。

2、用例图出来以来,最终把系统的功能模块,以功能模块图的方式制作出来,这样系统的功能就一目了然了。

3、E-R图设计。

根据系统的需求分析和系统功能模块图,找出系统中的实体,然后分析这些实体,并找出实体与实体之间的联系,最终得到E-R图。

然后把初步的E-R图进行优化,去除冗余的属性,联系等,得到最终的E-R图。

4、E-R图向关系模型的转换。

按照E-R图向关系模型的转换原则,把优化后的E-R图,转换成我们进行系统开发所需要的关系模型,最终得到系统开发所需要的数据库的逻辑结构。

5、在具体的数据库管理系统,根据关系模型的逻辑结构建立具体的数据库表。 确定自己的实训周设计题目,进行需求分析、概念设计(E-R图)、数据库逻辑设计和数据库物理设计。

需求分析

网上购物系统,包括两方面的需求,分别是顾客的需求、后台管理人员的需求。顾客的需求是查询商品、个人购买情况及个人信息的修改;管理人员的功能最为复杂,包括对顾客、商品、订单进行管理和维护,及系统状态的查看。

顾客可直接查看商品情况,如果想购买商品,要先注册一个帐号,然后根据本人用户名和密码登录系统,此时可以分类查看商品,如需购买,输入购买数量放入购物车,购物车中的商品数量可以修改,也可以删除购物车中的商品,最后对购物车中的商品进行购买确认,此时将产生一个订单,订单一旦生成便不可以再修改,只能查看。

后台管理人员功能的信息量大,数据安全性和保密性要求最高。本功能实现对商品信息、购买者信息管理(增、删、查、改)和统计查看及维护。管理员可以浏览、查询、添加、删除、修改、统计商品的基本信息;浏览、查询、统计、添加、删除和修改商品购买的基本信息(即订单信息),浏览、查询、统计商店信息。但不能添加、删除和修改购买信息,只能对是否付款、是否发货等状态进行修改。

基本功能:

(1) 注册管理:能够对用户名,密码的简单验证;能够对电子邮箱,Email

进行有效性验证;能够防止利用页面刷新重复注册,以及已经注册的用户不能重复注册。

(2)商品浏览:分类显示商品;显示商品详情,提供购买链接;可以对商品进行模糊查询;显示当前用户的浏览记录。浏览商品时不要求用户登录,但下订单前用户必须登录,对于浏览过的商品有历史记录。

三总体设计

1.实现功能  系统用例图

用例说明  [用例1]

用例图

描述

参与者

 [用例2]

用例图

描述

参与者

 [用例3]

用例图

描述

参与者

 [用例6

用例图

描述

参与者

 [用例7]

用例图

描述

参与者

 [用例8]

用例图

描述

参与者

 [

用例9]

描述

参与者

 [用例10]

用例图

描述

参与者

 [用例11]

用例图

描述

参与者

 [用例12]

用例图

3.1总体结构和模块设计

(1)前台部分由用户使用,包括用户注册,购物车,我的订单,商品浏览,

个人管理等几个部分。

(2)后台部分由用户管理,订单管理,商品管理等几个部分。 功能结构图如下:

3.2处理流程 业务

流程

如下:

四系统详细设计 前台设计 前台总体模块

[7]

(1)前台部分由用户使用,包括用户注册,购物车管理,我的订单,商品浏览,个人管理等几个部分。

模块功能介绍:

用户注册:能够提供用户的注册,并且对用户的注册进行以下验证:用户名非空;密码不小于6位;邮箱Email的有效性;防止通过刷新重复提交.

购物车管理:所选商品须通过购物车进行保存;对于相同的商品,在

再次购买的时候,在购物车中相应的商品上增加数量;在购物车中修改订单数量的时候防止输入非数字;在购物车然后生成订单。

我的订单:用户可以查看自己所有的订单,以及查看具体某一张订单,通过查看订单,用户可以查看订单现在的状态,查看订单的具体详情:收货人地址,收货方式,付款方式,具体商品,小计,总计等等。

商品浏览:用户可以通过商品的id或者商品的名称进行查找商品,并且对于浏览过的商品存在浏览历史,对于登陆后的用户可以对商品进行留言。

个人管理:用户可以管理自己账号的相关信息,比如:修改个人的基本信息,修改自己的密码。

前台文件架构:

前台文件架构

用户注册模块:

用户可以通过注册评论商品

代码实现:

1. 有效性验证[8]: 通过js 对客户端的提交数据进行有效性验证.关键

代码如下:

检查邮箱的有效性:

function chkEmail(str)

{

return

str.search(/[\w\-]{1,}@[\w\-]{1,}\.[\w\-]{1,}/)==0?true:false;

} function check() { if(myform.userName.value=="") { alert("请填写用户名"); return false; } else if(!IsValid()) { alert("用户名只能使用字母和数字"); return false; } else if(myform.psw.value=="") { alert("请填写密码"); return false; } else if(myform.psw.value != myform.conpsw.value) { alert("两次密码不一致"); return false; } else if(myform.trueName.value =="") { alert("请填写姓名"); return false; } else if(myform.email.value =="") { alert("请填写邮箱"); return false;

else if(!chkEmail(myform.email.value)) { alert("请填写有效的Email地址"); return false; }else if(myform.address.value =="") { alert("地址必须填写!"); return false; alert("请输入验证码"); }else if(myform.nam.value=="") { }else if(myform.nam.value!=myform.con.value){ alert("两次验证码不一样!"); }else { document.myform.submit(); }

}

2. 防止通过刷新重复提交[9]:当提交完注册信息后,要求输入验证码,防止重复提交数据到数据库,通过image.jsp写出一个随机数,与注册jsp页面相匹配,关键代码如下:

Jsp页面验证码:

换一张

Image.jsp代码如下:

try{

BufferedImage bf=new

BufferedImage(70,25,BufferedImage.TYPE_INT_RGB);

Graphics2D g2=bf.createGraphics(); g2.setPaint(new Color(0,0,255)); g2.fillRect(0,0,70,25);

String str=request.getParameter("num"); session.setAttribute("num",str); g2.setFont(new Font("Arial",Font.BOLD,24)); g2.drawString(str,7,20); for(int i=0;i

%>

3.防止相同用户名用户注册:当提交数据后,为了防止出现相同的用户,在进行注册的时候,通过相应的DAO中的exsitOne方法先检查用户名是否存在,存在不允许注册,关键代码如下:

public Boolean exsitOne(String userName) {

String sql = "select uName from RegUser";

try {

stat = conn.createStatement();

rs = stat.executeQuery(sql); while(rs.next()) { String exsit = rs.getString("uName"); if(userName.equals(exsit)) { return true; } }

} catch (SQLException e) { // TODO Auto-generated catch block } e.printStackTrace();

} return false; 对于购买了商品的用户,在产生订单后,可以通过双击查看订单,在查看订单的时候,可以查看到订单的当前状态,以及订单的总金额,和订单的一些基本信息。

1.显示所有订单:读取数据库中指定用户的所有订单,将结果集存取到一个ArrayList中,再返回显示页面,关键代码如下:

response.setContentType("text/html");

String id = request.getParameter("uid"); String sql = "select * from bookOrder where uid = "+id; DAO dao = new DAO(); ResultSet rs = dao.getOrderInfo(sql); ArrayList mylist = new ArrayList(); try { while(rs.next()) { int oid = Integer.parseInt(rs.getString("oId")); String receiver = rs.getString("oReceiveName"); String oPayType = rs.getString("oPayType"); float total = dao.getTotal("select sum(oAmount*oPrice) from orderInfo where oId ="+oid ); String oStatus = rs.getString("oStatus"); String date = rs.getString("oTime"); MyOrderBean one = new MyOrderBean(oid,date,receiver,total,oPayType,oStatus); mylist.add(one); }

} catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }

2.显示某个订单:当用户双击某个订单的时候,通过订单的id,以及用户id,联合查询出指定的订单,再返回到显示页面,关键代码如下:

String id = request.getParameter("id");

String sql = "select * from bookOrder,orderInfo,book where

bookOrder.oId = orderInfo.oId and book.bId = orderInfo.bId and bookOrder.oId = "

+ id + "";

DAO dao = new DAO(); ResultSet rs = dao.getOrderInfo(sql);

ArrayList onelist = new

ArrayList();

String receiver = ""; String address = ""; String phone = ""; String sendType = ""; String payType = ""; try { while (rs.next()) { receiver = rs.getString("oReceiveName"); address = rs.getString("oReceiveAddress"); phone = rs.getString("oReceivePhone"); sendType = rs.getString("oSendType"); payType = rs.getString("oPayType"); String bookname = rs.getString("bName"); int count = rs.getInt("oAmount"); float price = rs.getFloat("oPrice"); AllbookInOneOrder one = new AllbookInOneOrder(bookname, count,price); onelist.add(one); } com.with.javabean.MyOneOrderBean oneorder = new com.with.javabean.MyOneOrderBean( receiver, address, phone, sendType, payType, onelist); request.setAttribute("order", oneorder); request.setAttribute("id", id); request.getRequestDispatcher("../MyOneOrder.jsp") .include(request, response); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }

商品浏览模块:

用户可以通过商品的分类查找到相应类别的商品,也可以通过输入相应商品的名称,找到相应的商品:

1.商品分类:读取数据库中的制定类别,将所有类别显示在首页的商品类别导航上面,关键代码如下:

booktype = (ArrayList) request

.getAttribute("bookTypeInfos1"); if (null != booktype) { for (int i = 0; i

BookType bookTypeInfo = booktype.get(i); %>

}

}

%>

" href="/BookShopping/servlet.user/ListOneBookType?bid=">

color=#9e0b0e>

2.商品查找:用户可以通过输入商品名称,查找出自己要找的商品,关键代码如下:

Servlet:

DAO dao = new DAO();

String sql ="select * from book where bName like '%"+what+"%'"; ArrayList arraylist = new ArrayList(); ResultSet rs = dao.getOrderInfo(sql);//得到所查的书

DAO:

public ResultSet getOrderInfo(String sql) {

try { stat = conn.createStatement(); rs = stat.executeQuery(sql); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return rs;

}

3. 浏览历史:用浏览历史是为了方便用户查找自己浏览过的商品,当用户点击了一件商品的购买链接的时候,就会在浏览历史中保存该商品,并创建一个相应的链接,方便下次查看. 关键代码如下:

点击链接产生Cookie:

"

href="/BookShopping/servlet.user/ListOneBook?id="

onclick="setCookies('history','');">

color=#9e0b0e>

在指定区域读取Cookie:

Cookie cook[] = request.getCookies();

if (cook != null) {

for (int i = 0; i

if(cook[i].getName().indexOf("history") != -1)

{%>

cook[i].getName().substring(7)%>"

target="_blank">

document.write(unescape(""));

4. 商品评论[13]:对于登陆后的用户,可以对商品进行相应的评论,如果没有登陆跳转到登录页面:关键代码如下:

1.检查是否登录:对于没有登陆的用户,不允许对商品进行评论,跳转到登陆页面,关键代码如下:

function check(){

if(""!="null") { document.myform.submit(); }else { window.alert("请登陆");

} } window.location.href="../index.jsp";

2.商品留言:对于登陆后的用户,可以对商品进行评论,关键代码如下:

request.setCharacterEncoding("gbk"); response.setContentType("text/html;chartset=gbk"); PrintWriter out = response.getWriter(); String bookId1 = request.getParameter("bookid"); String username = request.getParameter("username"); String date = request.getParameter("date"); String describle1 = request.getParameter("body"); String describle = new

String(describle1.getBytes("ISO-8859-1"),"GBK");

String sql = "insert into comment

values('"+username+"','"+bookId1+"','"+date+"','"+describle+"')";

DAO dao = new DAO(); if(dao.insert(sql)) {

response.sendRedirect("/BookShopping/servlet.user/ListOneBook?id="+bookId1+"");

}

个人管理模块:

用户可以查看自己的个人信息,可以修改自己的个人信息,但是用户名不允许修改,以及修改密码,来保证用户的安全性。

1. 查看个人信息:通过链接查看自己的个人信息。关键代码如下:

String sql = "select * from RegUser where uId="+id+"";

UserBean one = null;

try {

stat = conn.createStatement();

rs = stat.executeQuery(sql); while(rs.next()) { String username = rs.getString("uName"); String truename = rs.getString("uRealname"); String sex = rs.getString("uSex"); String mail = rs.getString("uEmail"); String phone = rs.getString("uPhone");

String address = rs.getString("uAddress");

one = new

UserBean(username,truename,sex,mail,phone,address);

2. 修改个人信息:通过链接可以修改个人信息,但是用户名不能修改。关

键代码如下: request.setCharacterEncoding("GBK"); response.setContentType("text/html;charset=GBK"); String userName = request.getParameter("userName"); String psw = request.getParameter("psw"); String trueName = request.getParameter("trueName");

String trueName1 = new

String(trueName.getBytes("ISO-8859-1"),"GBK");

System.out.println("ModifyMyInfoOk:"+trueName); String sex = request.getParameter("sexradiobutton"); String sex1 = new String(sex.getBytes("ISO-8859-1"),"GBK"); String email = request.getParameter("email"); String phone = request.getParameter("phone"); String address = request.getParameter("address"); String address1 = new String(address.getBytes("ISO-8859-1"),"GBK"); DAO dao = new DAO(); String sql = "update RegUser set uPassword =

'"+psw+"',uRealname='"+trueName1+"',uEmail='"+email+"',uSex='"+sex1+"',uPhone='"+phone+"',uAddress='"+address1+"' where uName='"+userName+"'";

if(dao.ModifyMyInfo(sql)) { request.getRequestDispatcher("../SuccessOrder.jsp"). include(request, response); }else { request.getRequestDispatcher("../error.jsp"). include( request, response); }

5.2 后台设计

5.2.1后台总体模块:

后台部分由用户管理,订单管理,商品管理等几个部分。

模块功能介绍:

用户管理:能够通过用户的姓名和用户的id查询到指定的用户,并且能够对指定的用户进行冻结,被冻结的用户不能登录自己的账号,无法购买商品,可以对冻结的用户进行启用,对于忘记自己密码的用户,管理员

可以进行密码的重置。

订单管理:能够通过订单的id,或者根据时间段来查询指定的订单,可以对指定的订单修改订单的状态。

商品管理:可以增添商品的分类,可以对现有的分类进行修改,对于分类中存在商品的,不允许删除;以增添新的商品,对原有的商品进行修改。

订单管理模块:

管理员能够通过时间段,订单状态来查询订单,并且可以修改订单的状态,关键代码如下:

String list = request.getParameter("order");

selection = new String(selection.getBytes("ISO-8859-1"),"GBK");

if(null == list) {

arrayList =

DaoImp.Dao.getDao().ListOrder(page,"oStatus='"+selection+"'");

}else {

String startTime = request.getParameter("begin"); String endTime = request.getParameter("end");

arrayList = DaoImp.Dao.getDao().ListOrder(page," and oStatus='"+selection+"' or(oTime >='"+startTime+"' and oTime

}

商品管理模块:

管理员可以对商品分类信息进行增添,修改,删除,但是存在商品的分类不能够被删除,可以通过商品编号和商品名称来查询指定的商品,并且可以修改和删除商品,主要代码如下:

if (selection == null)// 查找全部 {

arrayList = DaoImp.Dao.getDao().ListBook(page,""); }

if ("all".equals(selection))// 查找全部 {

arrayList = DaoImp.Dao.getDao().ListBook(page,""); }

String input = request.getParameter("input");

if ("id".equals(selection))// 按照id

{

arrayList = DaoImp.Dao.getDao().ListBook(page,"and bId ='"+input+"'"); }

if ("name".equals(selection))// 按照名字 {

input = new String(input.getBytes("ISO-8859-1"),"GBK"); arrayList = DaoImp.Dao.getDao().ListBook(page,"and bName like '%"+input+"%'"); }

用户管理模块:

注册用户管理是为了方便管理系统,能够对恶意用户进行冻结,能够启用用户,对于忘记密码的用户可以进行密码的重置。关键代码如下:

if("inUse".equals(flag))//冻结

{

sql= "update RegUser set uUseful= 0 where uId = "+id; DaoImp.Dao.getDao().updateUser(sql); }

else if("unUse".equals(flag))//解冻

{

sql= "update RegUser set uUseful= 1 where uId = "+id; DaoImp.Dao.getDao().updateUser(sql); }

else if("reSetPwd".equals(flag))//重设密码 {

sql= "update RegUser set uPassword= '123456' where uId =

"+id;

DaoImp.Dao.getDao().updateUser(sql);

五 测试

1测试方式[14]:

由于本系统主要针对于网上用户,所以我选择从输入数据和输出数据的对应关系来进行测试,也就是进行黑盒测试来检测每个功能是否都能正常使用。 2 测试步骤[15]: (1)首页测试 (2)登录,注册测试 (3)商品浏览测试 (4)商品管理测试 (5)订单管理测试

(6)用户管理测试 3 测试结果评价:

软件基本达到设计要求,功能基本完整,用户界面良好,错误处理正确,且能正确提示错误种类。

但是存在以下一些需要改进的地方,比如:在注册相同用户的时候,应该先给个注册失败的提示,并提示失败原因,提交系统的操作性。还有对于商品浏览,查找类型太少,希望能增添高级查找,或多增添几种查找类型。希望以后能加以改进

项目进度安排表模板

[系统名称]开发进度表

说明:

 进度表用于进度汇报,并且为进度控制提供依据。

 以上的进度,是项目里程碑和关键路径上主要控制点的进度情况汇报,也可

以根据项目计划中工作分解结构的工作包进行更加细致的控制。

 专门用于编码过程中的进度汇报,可以按照功能、模块、子系统的完成情况

来进行汇报,进度控制的力度因不同的情况和要求而有差异。  若关键路径发生更改,需要在进度报告中说明。

可用灰色的进度表示项目的里程碑。


onclick="check()">


相关内容

  • 软件需求分析模板
    项目名称 (The English Name) 软件需求分析报告 XXX项目组 修订表 审批记录 目 录 1. 引言.............................................................. ...
  • 需求分析报告文档模板
    需求分析报告模板 目录 1. 引言 ...................................................................................................... ...
  • 现代软件工程作业
    (一)名词解释 1. 软件: 软件是计算机程序.数据以及相关的各种文档的集合. 2. 软件危机 软件危机是在软件发展第二阶段末期的规模较大的项目开发中,出现了与当初的计划推迟交工.费用比预算大幅度上升.不能满足用户要求.可靠性低.维护困难等 ...
  • 软件工程方法学的学习总结
    软件工程方法学学习总结 • 软件工程方法学是研究软件设计方法论及工程开发技术的一门学科,主要研究的是:模型.方法.过程.工具.理念/原则.文档, 甚至相应的开发语言.随着软件工程的发展,形成了不同的软件工程方法:结构化.面向对象.敏捷方法. ...
  • 软件公司各岗位职责
    岗位:项目经理 主要职责: 1. 计划: a)项目范围.项目质量.项目时间.项目成本的确认. b)项目过程/活动的标准化.规范化. c)根据项目范围.质量.时间与成本的综合因素的考虑,进行项目的总体规划与阶段计划. d)各项计划得到上级领导 ...
  • CRM 客户关系管理系统需求规格说明书
    CRM 客户关系管理系统 产品需求规格说明书 Alpha Team 第六组 2015-10-13 CRM 客户关系管理系统 产品需求规格说明书 版本修订记录 目 录 0 文档介绍............................... ...
  • 软件测试试题库
    一.单选题(2分/题,共30分) 二.多选题(1分/题,共10分) 三.名字解释题(3分/题,共9个) 试题一 (http://xiaolifang84.blog.163.com/blog/#m=0) 一.判断正误题 1. 测试是调试的一个 ...
  • 软件技术的经济理论分析
    IndustryDiscussion|行业探讨 软件技术的经济理论分析 □张才明 [摘 王烨 要]随着信息技术的不断发展,软件技术已经渗透到社会的各行各业,对社会经济的影响也越来越大,有必要对软件技术 做深入的研究.本文探讨了软件技术作为软 ...
  • [统一软件开发过程]试卷A
    4.下列关于构架的说法,不正确的是( D ) (D)构架描述包括测试用例和测试规程. 5.分析阶段的基本任务是完成系统的( A ) (A)逻辑模型 6.选购软件开发工具首先应考虑的是( B) (B)明确目的与要求 7.用户界面设计的任务不包 ...
  • 暑期社会实践调研报告
    南昌航空大学 题 目 学 院 专 业 班 级 学生姓名 指导教师 职 称 暑假社会调研报告 关于"十二五"规划IT 行业发展趋势及未来软件行业人才需求的调研报告 软件学院 软件工程 102011 许可 胡媛媛 软件学院团 ...