资源描述
软件工程课程设计汇报
( -- 年 第二学期)
课程名称: 软件工程课程设计
题 目: 网上购物系统
院 系:控制和计算机工程学院
班 级: 软件1002班
组 号:
组 长: 艾君伟
组 员:陈肖成、汪豪、李崧榕
指导老师:
设计周数: 两周
小组成绩:
日期: 年 7月 12日
《软件工程》课程设计
任 务 书
一、 目标、要求
经过软件开发实践训练,深入掌握软件工程方法和技术,提升软件开发实际能力,培养工程设计能力和综合分析、处理问题能力。
具体以下:
1. 学习和实践在分析和设计计算机应用系统所需要知识,包含面向对象系统分析和设计,编码和测试方面知识;
2. 熟悉自动化软件开发工具Rational Rose,并将其利用于软件开发全过程;
3. 深入加强和提升软件工程文档编写能力;
4. 培养协作能力和团体精神。
二、 关键内容
1. 利用面向对象技术、UML进行网上购物系统需求分析和设计;
2. 使用Rational Rose作为需求分析和设计建模工具,进行静态建模和动态建模;
3. 利用对象模型自动生成数据模型,自动建立数据库;
4. 使用J2EE、HTML、CSS、Javascript语言对购物模块进行界面层设计并给出实现;
5. 撰写课程设计汇报。
三、任务分配
任务
责任人
参与人
备注
小组讨论:需求分析(用例图、类图)
艾俊伟、陈肖成、汪豪、李崧榕
用例图绘制、类图绘制、数据流分析、数据库设计
汪豪
汪豪
次序图、系统结构分析、状态图测试
陈肖成
陈肖成
需求分析、编码、具体设计
艾君伟
艾君伟
绘制部分次序图、协作图、汇报处理
李崧榕
李崧榕
四、 进度计划
序号
设计内容名称
完成时间
备注
1
分组及确定题目
1个工作日
2
初步需求分析和设计建模, 确定实现平台,并搭建环境
2个工作日
3
具体需求分析和设计建模
2个工作日
进行中期检验
4
关键模块实现和测试
3个工作日
5
编写课程设计汇报
1个工作日
6
验收检验及评定成绩
1个工作日
五、 设计结果要求
1. 建立系统分析和设计模型;
2. 初步建立系统原型,实现关键功效;
3. 编写课程设计汇报。
六、 考评方法
1. 系统演示及讲解
占50%。
2. 设计汇报
占50%。
指导老师:
日 期: 6 月 28 日
《软件工程》课程设计
成 绩 评定
一、 指导老师评语
二、 成绩
学号
姓名
成绩
备注
艾君伟
陈肖成
李崧榕
汪豪
指导老师:
日期: 年 7 月 12 日
摘要:
当今社会,伴随计算机应用和Internet普及, Internet网络给人类社会带来了巨大改变,网络在我们生活中几乎无处不在。所以,建立网上物品销售管理系统是时代时尚。因为JSP能够在85%以上服务器上运行,而且JSP技术应用程序比ASP应用程序易于维护和管理。所以,经过采取JSP技术设计开发在线购物系统符合时代时尚、含有主动进步意义。
网上购物系统能够实现大家远程逛逛商店和购置商品愿望。本系统功效是实现网上购物,关键包含商品信息管理、购物车订单管理、用户管理、商品评价管理、商品库存管理等模块,关键以对数据库增删改查来实现这些功效。本系统依据模拟现行B2C网站需求而设计,利用Rational Rose、Myeclipse等软件开发工具实现系统分析、设计和实现,最终设计出来系统基础满足能网上购物功效需求。
关键词:网上购物,面向对象,Rational Rose,J2EE
一、课程设计目标和要求
经过软件开发实践训练,深入掌握软件工程方法和技术,提升软件开发实际能力,培养工程设计能力和综合分析、处理问题能力。
具体以下:
1. 学习和实践在分析和设计计算机应用系统所需要知识,包含面向对象系统分析和设计,编码和测试方面知识;
2. 熟悉自动化软件开发工具Rational Rose,并将其利用于软件开发全过程;
3. 深入加强和提升软件工程文档编写能力;
4. 培养协作能力和团体精神。
二、设计正文
1 概述
1.1 设计课题
该系统为网上购物系统。
1.2 系统目标
调研现在现有网上购物系统,如当当网,亚马逊商城,京东商城等大型电子商务系统,设计出一个更适适用户使用,有更多用户交互,更人性化购物系统。
1.3 系统开发和运行环境
(1)数据库管理软件:MySQL
(2)建模工具:Rational Rose
(3)编程工具:MyEclipse、DreamWeaver
(4)操作系统:Windows系列、Tomcat系统
(5)开发语言:J2EE
2 系统需求分析
2.1 系统需求概述
关键从用户、管理员两方面进行需求分析。
1
2
2.1
2.1.1 用户功效分析:
(1)购物车:
关键功效包含将商品加入购物车——>提交订单——>支付——>将订单信息存档
(2)个人中心:功效关键包含四部分:
1)查询自己购置商品统计,经过人员id在数据库中查找。
2)商品列表:能够查询用户本人在使用,想购置,和购置过商品。
3)推荐商品:本用例中,推荐商品和新商品经过控制类中方法实现,偏好是商品经过人员个性分析方法实现。
4)商品评价:能够查询自己评论过商品商品信息和评论信息
(3)账户管理:
关键包含登录,注册,修改个人资料功效
(4)商品搜索:
1)字节搜索:能够经过商品名称,商品序列号正确搜索
2)分类搜索:经过各个分类进行搜索。
2.1.2 管理员功效分析:
(1)商品信息管理:功效关键包含四部分:
1)增加商品信息
2)删除商品信息
3)修改商品信息
4)查看商品信息
(2)库存管理:
关键功效包含:修改商品存货数量
(3)用户管理:
1)将不良交易次数用户较多用户加入黑名单
2)商品评价管理:将被人气较高书评放入首页推荐书评模块
(4)商品评评管理:
关键功效为将违禁商品评价删除
(5)销量统计:
关键功效包含:查看营业额,查看销售排行,查看利润。
2.2 用例图
对于整个用例图,外部角色有管理员、一般用户即用户。
管理员关键有书籍增、删、改,一般用户信息管理,订单管理。
一般用户关键有在线交易、搜索、结算、加入购物车、加入收藏、结算、评价、账户管理等用例。
图2.2-1 总用例图用例图
图2.2-2 店铺管理用例图
图2.2-3 购物用例图
关键用例正常事件流和异常事件流描述以下表:
用例规格说明:内容管理员注册
超级管理员
说明
内容管理员注册B2C购物系统
前提条件
超级管理员(最高权限)登录
后置条件
内容管理员注册成功
基础事件流
确定B2C购物系统已打开→确定超级管理员已登录→确定打开注册页面→确定用户名输入正确,两次密码相同且正确→内容管理员成功注册
异常事件流
第一异常事件流
两次密码不相同
第二异常事件流
用户名已注
用例规格说明:内容管理员登录
全部用户
说明
内容管理员登录B2C购物系统
前提条件
无
后置条件
内容管理员登录成功
基础事件流
确定B2C购物系统登录界面已打开→ 确定用户名和密码已输入 →验证经过→用户成功登陆系统
异常事件流
第一异常事件流
用户名或密码错误
用例规格说明:新增商品
内容管理员
说明
内容管理员新增一条商品信息
前提条件
内容管理员已登录,已输入新增商品信息
后置条件
系统中增加一条商品信息
基础事件流
确定已输入商品信息→增加商品
异常事件流
第一异常事件流
商品信息错误
第二异常事件流
商品信息已存在
用例规格说明:修改商品
内容管理员
说明
内容管理员修改商品信息
前提条件
内容管理员已登录,修改商品信息存在
后置条件
系统中修改一条商品信息
基础事件流
确定商品信息已修改→修改商品信息
异常事件流
第一异常事件流
修改信息错误
第二异常事件流
修改信息无改变
第三异常事件流
修改信息不存在
用例规格说明:删除商品
内容管理员
说明
内容管理员删除一条商品信息
前提条件
内容管理员已登录,删除商品信息存在
后置条件
系统中删除一条商品信息
基础事件流
确定已选择商品信息→删除商品
异常事件流
第一异常事件流
删除商品不存在
用例规格说明:修改订单
内容管理员
说明
内容管理员修改一条订单信息
前提条件
内容管理员已登录,修改订单存在
后置条件
系统中修改一条订单信息
基础事件流
确定已选择订单信息→修改商品
异常事件流
第一异常事件流
要修改订单不存在
第二异常事件流
修改订单信息错误
用例规格说明:取消订单
内容管理员
说明
内容管理员取消一个订单
前提条件
内容管理员已登录,取消订单存在
后置条件
系统中一条订单取消
基础事件流
确定已选择订单信息→取消订单
异常事件流
第一异常事件流
要取消订单不存在
用例规格说明:退货
内容管理员
说明
管理员管理退货
前提条件
内容管理员已登录,用户申请符合要求,收到退回来货物,检验完好
后置条件
用户退货成功
基础事件流
登录→查看退货申请→符合退货条件→收到退回来货物→退货成功
异常事件流
第一异常事件流
未登录
第二异常事件流
退货申请不存在
第三异常事件流
商品已过保质期
第四异常事件流
商品未寄回
用例规格说明:用户信息修改
内容管理员
说明
修改用户信息
前提条件
用户存在,管理员已登录
后置条件
修改用户信息成功
基础事件流
选择用户→确定修改信息→用户信息修改成功
异常事件流
第一异常事件流
管理员未登录
第二异常事件流
用户不存在
第三异常事件流
输入信息错误
和用户相关用例规格说明
用例规格说明:用户注册
用户
说明
用户注册B2C购物系统
前提条件
无
后置条件
用户注册成功
基础事件流
确定打开注册页面→确定用户名输入正确,两次密码相同且正确→用户注册成功
异常事件流
第一异常事件流
用户名存在
第二异常事件流
用户名或密码输入错误
用例规格说明:用户登录
用户
说明
用户登录B2C购物系统
前提条件
无
后置条件
用户登录成功
基础事件流
确定打开登录页面→确定登录名、密码→用户注册成功
异常事件流
第一异常事件流
用户名不存在
第二异常事件流
用户名或密码错误
用例规格说明:浏览
用户
说明
用户浏览商品
前提条件
无
后置条件
商品页面打开成功
基础事件流
确定打开链接→商品页面打开成功
异常事件流
第一异常事件流
商品已下架
用例规格说明:搜索
用户
说明
用户搜索商品
前提条件
无
后置条件
显示搜索结果
基础事件流
确定搜索内容→显示搜索结构
异常事件流
第一异常事件流
输入搜索内容错误
用例规格说明:加入购物车
用户
说明
用户将商品加入购物车
前提条件
商品存在,购物车未满
后置条件
用户注册成功
基础事件流
确定加入购物车商品和购物车→商品成功加入购物车
异常事件流
第一异常事件流
商品已下架
第二异常事件流
购物车已满
用例规格说明:加入收藏
用户
说明
用户将商品加入收藏夹
前提条件
商品存在,用户已登录,收藏夹未满
后置条件
商品加入收藏夹成功
基础事件流
确定加入收藏夹商品和收藏夹→商品加入收藏夹成功
异常事件流
第一异常事件流
商品已下架
第二异常事件流
用户未登录
第三异常事件流
收藏夹已满
用例规格说明:结算
用户
说明
用户对购物车中商品进行结算
前提条件
用户已登录,购物车中有商品,余额充足
后置条件
结算成功
基础事件流
确定结算信息→确定余额充足→结算成功
异常事件流
第一异常事件流
购物车为空
第二异常事件流
未登录
第三异常事件流
余额不足
用例规格说明:退货
用户
说明
用户申请退货
前提条件
购置商品未过保质期,用户已登录
后置条件
用户退货成功
基础事件流
登录→勾选商品→确定未过保质期→寄回商品→退货成功
异常事件流
第一异常事件流
未登录
第二异常事件流
商品不存在
第三异常事件流
商品已过保质期
第四异常事件流
商品未寄回
用例规格说明:用户信息修
用户
说明
修改用户信息
前提条件
用户已登录
后置条件
修改用户信息成功
基础事件流
确定修改信息→用户信息修改成功
异常事件流
第一异常事件流
用户未登录
第二异常事件流
输入信息不正当
2.3 类图
图2.3-1 类图
类描述以下:
(1) coustomer
用户能够更改自己姓名、密码和其它个人信息,也能够查看自己购物车并在其上添加删除商品,其后对购物车中产品进行结算。用户还能够对订单中已付款商品根据要求进行退货操作。用户还能够发表商品评价和查看商品来自其它人评价。
(2) Manager
管理员所含有属性并不多,管理员关键实现对商品增、删、改,对用户个人信息管理,对订单处理帮助用户退货。
(3) good
描述商品对象抽象。商品唯一标识是商品ID,商品还有品名、价格、类型编号、图片、描述、数量、评价。
(4) shoppingcart
用户购物车类,在用户进行网上浏览和准备交易时,可将商品加入购物车,查看购物车,删除或取消交易。进行交易时会将交易信息入时间、金额、商品列表、优惠方法等统计为购物历史。购物车对象自带了计算优惠方法,同时购物车要统计用户购置商品时运输信息。
(5) Order
订单统计了订单编号,订单生成时间和用户ID,订单经过一个LIST类型统计了购置商品。
类之间关系:
Coustomer 和shoppingcart 为聚合关系,manger和order是聚合关系;manger、coustomer类同good类是关联关系,其中coustomer和good关联类是shoppingcart类;shoopingcart和order为关联类。
2.4 次序图
支付次序图以下图所表示,首先是用户登录系统,然后用户经过界面在商品类中查看到自己想要买商品,然后将商品加入购物车,然后提交订单,支付订单,最终进行存档。
图2.4-1 用户支付次序图
图2.4-2 新增商品次序图
图2.4-3 删除商品次序图
图2.4-4 修改商品次序图
退货次序图以下图所表示,首先是用户登录系统,然后用户经过界面在订单中查看到自己已买商品,然后申请退货,最终进行退货。
2.4-5 用户退货次序图
2.5 协作图
依据次序图取得协作图以下:
图2.5-1 用户支付协作图
图2.5-2 新增商品协作图
图2.5-3 删除商品协作图
图2.5-4 修改商品协作图
图2.5-5 用户退货协作图
2.6 状态图
订单状态图。关键包含订单为空状态、订单处理状态、增加完成状态、删除完成状态、修改完成状态,支付订单状态,订单存档状态。
图2.6-1 订单状态图
3. 系统总体设计
3.1 系统体系结构设计
3.3 设计数据管理子系统
表3.3-1用户表
表3.3-2 管理员表
表3.3-3商品表
表3.3-4订单表
表3.3-5商品类型表
图3.3-1 数据表关系图
3.4 设计人机交互子系统
图3.4-1 注册界面
图3.4-2 注册成功界面
图3.4-3 登陆界面
图3.4-4 主页界面
图3.4-5 购物车界面
图3.4-6 提交订单界面
图3.4-7 提交订单成功界面
4. 具体设计
提醒: 对于复杂方法给出具体设计,能够使用伪代码描述, 也能够使用程序步骤图来描述。
4.1.1商品查询方法
goodsearch()
{
创建一个List类型和标志位flg=false;
获取搜索类型
If(按名字查询)
{
获取窗口中关键字;
创建数据库查询语句sql;
创建SQLBean对象bean;
Rs=bean.exacuteQuery(sql);
Try{
将rs中信息存入到List中;
}
Catch(SQLException e)
{
输出异常信息;
}
}
If(按分类查询)
{
获取商品类型;
创建数据库查询语句sql;
创建SQLBean对象bean;
Rs=bean.exacuteQuery(sql);
Try{
将rs中信息存入到List中;
}
Catch(SQLException e)
{
输出异常信息;
}
}
返回List
}
4.1.2登录界面代码实现
package Servlet_Contorlller;
//登录
public class loginCheck extends HttpServlet
{
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
response.setContentType("text/html");
String username = request.getParameter("username");
String password = request.getParameter("password");
System.out.println("输入密码:" + password);
String radio = request.getParameter("logintype");
// username=new String(username.getBytes(),"gb2312");
int reginfo = -1;
if ("".equals(username) || username == null) {
reginfo = 4;// 用户名不能为空
System.out.println("用户名为空");
} else {
if (radio.equals("0"))// 个人登录
{
String sqlString = "select password from customer where username='"
+ username + "'";
List<String> list = null;
SQLBean search = new SQLBean();
try {
search.executeQuery(sqlString);
System.out.println(sqlString);
list = search.getSelectRt();
search.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (list.size() == 0) {
reginfo = 3;// 用户不存在
response.sendRedirect("index.jsp?reginfo=3");
} else {
for (String item : list) {
if (item.equals(password)) {
System.out.println("sadasdsa");
reginfo = 1;// 登录成功
HttpSession session = request.getSession(true);
session.setAttribute("user", username);
response.sendRedirect("pagedivide");
}
}
}
}
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
this.doGet(request, response);
}
}
4.1.3 注册界面代码实现
package Servlet_Contorlller;
public class registerCheck extends HttpServlet
{
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
this.rtcheck(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
//response.sendRedirect("registerCheck.jsp");
this.rtcheck(request, response);
}
public void rtcheck(HttpServletRequest request, HttpServletResponse response)
{
try {
request.setCharacterEncoding("utf-8");
} catch (UnsupportedEncodingException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
response.setCharacterEncoding("utf-8");
String name=request.getParameter("cuserid");
String password=request.getParameter("cpassword");
String tel=request.getParameter("ctel");
String email=request.getParameter("cemail");
String sex=request.getParameter("select");
String age=request.getParameter("cage");
String repeatpassword=request.getParameter("repeatpassword");
int reg=0;//0--注册成功 1--注册失败
if("".equals(name)||name==null)
{
reg=0;
try
{
System.out.println("跳转");
response.sendRedirect("register.jsp");
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("重定向异常");
}
}
else if("".equals(password)||password==null)
{
reg=0;
try
{
response.sendRedirect("register.jsp");
System.out.println("跳转2");
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("重定向异常");
}
}
else if("".equals(tel)||tel==null)
{
reg=0;
try
{
System.out.println("跳转3");
response.sendRedirect("register.jsp");
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("重定向异常");
}
}
else if("".equals(email)||email==null)
{
reg=0;
try
{
System.out.println("跳转4");
response.sendRedirect("register.jsp");
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("重定向异常");
}
}
else if("".equals(age)||age==null)
{
reg=0;
try
{
System.out.println("跳转5");
response.sendRedirect("register.jsp");
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("重定向异常");
}
}
else if("".equals(repeatpassword)||repeatpassword==null)
{
reg=0;
try
{
System.out.println("跳转6");
response.sendRedirect("register.jsp");
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("重定向异常");
}
}
else if(!repeatpassword.equals(password))
{
reg=0;
try
{
System.out.println("跳转7");
response.sendRedirect("register.jsp");
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("重定向异常");
}
}
else
{
String sqlstr="select username from customer";
SQLBean bean=new SQLBean();
List<String> list=new ArrayList();
try
{
bean.executeQuery(sqlstr);
list=bean.getSelectRt();
bean.close();
}
catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("数据库查询错误");
}
for(String li:list)
{
if(li.equals(name))
{
reg=1;//用户名反复
try
{
System.out.println("跳转");
response.sendRedirect("register.jsp");
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("重定向异常");
}
}
}
sqlstr="insert into customer(userid,username,password,tel,email,sex,age) values(null,'"+name+"','"+password+"','"+tel+"','"+email+"','"+sex+"',"+age+")";
System.out.println(sqlstr);
SQLBean bean2=new SQLBean();
try
{
bean2.executeUpdate(sqlstr);
bean2.close();
}
catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
try
{
response.sendRedirect("success.jsp");
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
4.1.4 购物车处理代码实现
if(action.equals("buy"))//加入购物车
{
CarBean mycart = (CarBean)session.getAttribute("mycart");
if(mycart==null)
{
mycart = new CarBean();
}
//得到要购置东西ID
String gid = request.getParameter("gid");
mycart.buy(gid,Integer.parseInt(num));
response.sendRedirect("cart.jsp");
}
else if(action.equals("changeNum"))
{
String gnum = request.getParameter(
展开阅读全文