软件工程课程设计报告
( 2012 -- 2013 学年 第二学期)
课程名称: 软件工程课程设计
题 目: 网上购物系统
院 系:控制与计算机工程学院
班 级: 软件1002班
组 号:
组 长: 艾君伟
组 员:陈肖成、汪豪、李崧榕
指导教师:
设计周数: 两周
小组成绩:
日期:2013 年 7月 12日
《软件工程》课程设计
任 务 书
一、 目的、要求
通过软件开发的实践训练,进一步掌握软件工程的方法和技术,提高软件开发的实际能力,培养工程设计能力和综合分析、解决问题的能力。
具体如下:
1. 学习和实践在分析和设计计算机应用系统所需要的知识,包括面向对象的系统分析与设计,编码和测试方面的知识;
2. 熟悉自动化的软件开发工具Rational Rose,并将其运用于软件开发的全过程;
3. 进一步加强和提高软件工程文档的编写能力;
4. 培养协作能力和团队精神。
二、 主要内容
1. 运用面向对象技术、UML进行网上购物系统的需求分析与设计;
2. 使用Rational Rose作为需求分析与设计的建模工具,进行静态建模和动态建模;
3. 利用对象模型自动生成数据模型,自动建立数据库;
4. 使用J2EE、HTML、CSS、Javascript语言对购物模块进行界面层的设计并给出实现;
5. 撰写课程设计报告。
三、任务分配 任务 负责人 参与人 艾俊伟、陈肖成、汪豪、李崧榕 汪豪 汪豪 陈肖成 艾君伟 李崧榕 备注 小组讨论:需求分析(用例图、类图) 用例图绘制、类图绘制、数据流分析、数据库设计 顺序图、系统结构分析、状态图测试 陈肖成 需求分析、编码、详细设计 艾君伟 绘制部分顺序图、协作图、报告处理
四、 进度计划 序号 1 设计内容名称 李崧榕 完成时间 备注 1个工作日 进行中期检查 分组及确定题目 2 初步的需求分析与设计建模, 确定实现平台,并搭建2个工作环境 详细的需求分析与设计建模 日 2个工作日 3 4 关键模块的实现与测试 3个工作日 1个工作日 1个工作日 5 编写课程设计报告 6 验收检查及评定成绩 五、 设计成果要求
1. 建立系统分析与设计模型;
2. 初步建立系统原型,实现关键的功能;
3. 编写课程设计报告。
六、 考核方式
1. 系统演示及讲解
占50%。
2. 设计报告
占50%。
指导教师:
日 期:2013年 6 月 28 日
《软件工程》课程设计
成 绩 评定
一、 指导教师评语
二、 成绩 学号 1101250201 1101250202 1101250210 1101250220
日期: 2013 年 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 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\ 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 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(\"gnum\"); String gid = request.getParameter(\"gid\"); int number = 0; try { number = Integer.parseInt(gnum); } catch(Exception e) { //修改的数量不合法时 String msg = \"对不起,数量修改错误!!!\"; //pageForward(msg,request,response); } int id = Integer.parseInt(gid); int count=0; //得到库存数量 String sql = \"select goodnum from goods where goodId=\"+id; SQLBean bean=new SQLBean(); try { bean.executeQuery(sql); ResultSet st=bean.getRs(); if(st!=null) { st.next(); count =st.getInt(1); bean.close(); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } if(count String msg = \"对不起,库存不够,库存数量只有 \"+count; out.println(\" msg out.println(\"返回购物车\"); } else {//当库存够时 CarBean mycart = (CarBean)session.getAttribute(\"mycart\"); if(mycart==null) { mycart = new CarBean(); } //得到用户的购物车 Map //修改商品数量 cart.put(gid,number); session.setAttribute(\"mycart\ response.sendRedirect(\"cart.jsp\"); } } else if(action.equals(\"delete\")) { String gid = request.getParameter(\"gid\").trim(); //得到javaBean对象 CarBean mycart = (CarBean)session.getAttribute(\"mycart\"); if(mycart==null) { mycart = new CarBean(); } mycart.removeItem(gid); session.setAttribute(\"mycart\ response.sendRedirect(\"cart.jsp\"); } 5. 测试 本系统在进行功能测试时,着重从链接和表单两个方面进行测试: 5.1注册页测试 (1)测试数据:输入账户名ajw 密码11111111,手机号180******** 邮箱:aa@qq.com 性别:男 年龄:21 测试结果:注册成功 (2)测试数据:输入账户名ajw 密码11111111,手机号180******** 邮箱: 性别:男 年龄:21 测试结果:提示未注册该成功,邮箱为空。 图5.1-1 注册成功图 图5.1-2 注册未成功图 5.2登录页测试 (1)测试数据:输入账户名ajw 密码11111111 测试结果:登陆成功 (2)测试数据:输入账户名ajw 密码 测试结果:登陆不成功,未填密码 图5.2-1 登陆成功,进入主页面 图5.2-3 登陆不成功 5.3购物主页测试 (1)测试数据:登陆后进入购物主页 测试结果:进入购物主页查看商品 (2)测试操作:点击首页 测试结果:回到购物首页 (3)测试操作:点击购物车 测试结果:跳到购物车页面 图5.3-1 购物主页 图5.3-1 购物车 5.4购物测试 (1)测试操作:点击购买按钮 测试结果:商品加入购物车并跳到购物车页面 (2)测试操作:点击结算按钮 测试结果:跳到结算页面 (3)测试操作:填写收货人信息点击确认 测试结果:显示提交成功 图5.4-1 结算页面 图5.4-2 提交成功 三、课程设计总结或结论 在本次课程设计期间,我们进行了一个小型网站的构建并应用了软件工程中的面向对象建模的方法。首先是需求分析这块,它很重要。我们根据老师给的要求,结合在网上查的一些资料,做了初步的需求分析,本系统的主要功能是实现网站信息的发布和管理,涉及到前台用户对商品信息的浏览和后台管理。在前台的用户浏览模块里,一般需要对商品进行分类展示,并需要通过栏目导航进入特定的商品信息模块。在后台的管理方面。需要由合法的管理者来管理商品的添加、修改、删除等,以及管理登录、注销的模块。最重要的是管理网上交易。从后台管理大体来看,系统实际分为,商品管理、网上购物管理及模块管理。 现在我们谈一下做系统总体设计的体会。系统总体设计的好坏直接影响后面的编码过程。刚开始我们的总体设计不是很完善,导致在具体实现时,我们的模块划分的不是很好,数据表的设计也不能很好的反映现实情况。后来我们又完善了系统的总体设计,对各个模块进行了详细的规划,系统层次显得分明,编码也相对容易一些。还有很重要的一个环节是数据库的设计与实现。在设计一个数据库时,首先应该仔细研究业务需求。用户需求将直接决定表的设计。 理论知识很必要,实践也不可缺少,只有在实践中才能更清楚的了解自己对理论知识的掌握程度,才能学以致用,把所学的知识运用到实践中去。这次课程设计极大地提高了我们的团队合作能力和动手能力。 四、参考文献 [1] 郑人杰.马素霞.软件工程概论.北京:机械工业出版社,2009.11 [2] 张海藩.软件工程导论.北京:清华大学出版社,2006.11 [3] 吕云祥.软件工程课程设计.北京:机械工业出版社,2009.1 [4] (美)步吕格,(美)迪图瓦.面向对象软件工程.北京:机械工业出版社,2009.12 [5] 朱少民.软件工程测试方法与技术.北京:清华大学出版社,2010.3 附录(设计流程图、程序、表格、数据等) 因篇幅问题不能全部显示,请点此查看更多更全内容