软件工程——网上购物系统课程设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

软件工程课程设计报告
( 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.建立系统分析与设计模型;
2.初步建立系统原型,实现关键的功能;3.编写课程设计报告。

六、考核方式
1.系统演示及讲解
占50%。

2.设计报告
占50%。

指导教师:
日期:2013年 6 月 28 日
《软件工程》课程设计
成绩评定
一、指导教师评语
二、成绩
指导教师:
日期: 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 购物用例图
关键用例正常事件流和异常事件流的描述如下表:用例规格说明:内容管理员注册
超级管理员
用例规格说明:内容管理员登录
所有用户
用例规格说明:新增商品
内容管理员
用例规格说明:修改商品
内容管理员
用例规格说明:删除商品
内容管理员
用例规格说明:修改订单
内容管理员
用例规格说明:取消订单内容管理员
用例规格说明:退货
内容管理员
用例规格说明:顾客信息修改
内容管理员
与顾客有关的用例规格说明
用例规格说明:顾客注册
顾客
用例规格说明:顾客登录顾客
用例规格说明:浏览
顾客
用例规格说明:搜索
顾客
用例规格说明:加入购物车
顾客
用例规格说明:加入收藏
顾客
用例规格说明:结算顾客
用例规格说明:退货顾客
用例规格说明:顾客信息修
顾客
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("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<number)
{//当库存少于修改的值时
String msg = "对不起,库存不够,库存数量只有 "+count; out.println("<p>msg</p>");
out.println("<a href='cart.jsp'>返回购物车</a>");
}
else
{//当库存够时
CarBean mycart = (CarBean)session.getAttribute("mycart"); if(mycart==null)
{
mycart = new CarBean();
}
//得到用户的购物车
Map<String,Integer> cart = mycart.getCart();
//修改商品数量
cart.put(gid,number);
session.setAttribute("mycart",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",mycart);
response.sendRedirect("cart.jsp");
}
5. 测试
本系统在进行功能测试时,着重从链接和表单两个方面进行测试:
5.1注册页测试
(1)测试数据:输入账户名ajw 密码11111111,手机号180******** 邮箱:aa@ 性别:男年龄:21
测试结果:注册成功
(2)测试数据:输入账户名ajw 密码11111111,手机号180******** 邮箱:性别:男年龄:21
测试结果:提示未注册该成功,邮箱为空。

图5.1-1 注册成功图图5.1-2 注册未成功图
5.2登录页测试
(1)测试数据:输入账户名ajw 密码11111111
测试结果:登陆成功
(2)测试数据:输入账户名ajw 密码
测试结果:登陆不成功,未填密码。

相关文档
最新文档