java web课程设计说明书
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
长沙学院课程设计说明书
题目Web应用程序设计
系(部) 数学与计算机科学系
专业(班级)
姓名
学号
指导教师
起止日期2015.11.30~2015.12.11
课程设计任务书
课程名称:Web应用程序课程设计
设计题目:网上商店前台功能的设计与实现
已知技术参数和设计要求:
1. 问题描述(功能要求):
(1)分析设计一个网上商店的前台功能部分。
完成本系统的如下功能:
●用户注册和登陆
●展示特定的某类商品:展示的方式有多种,可以按类别、按销售排行榜、按上架时间等,
有层次的展示商品,提高用户的购买兴趣。
对于某种商品,除显示商品信息以外,还可以
附加评论、推荐相关类型商品。
●商品查询:根据多种条件来查询,比如商品名称、价格、颜色等特征信息。
能进行模糊匹
配,包含关键字的商品都能查到。
●购物车:只有注册用户才能购买。
为用户提供购物车,购物车内同类商品的数量可以修改,
也可以删除购物车里已有的商品。
购物车信息保存,便于下次购物时继续选购商品。
2. 运行环境要求:
正确安装、配置和运行Tomcat。
正确安装、配置和运行MyEclipse。
正确安装、配置和运行MySQL数据库和JDBC驱动程序。
3. 技术要求:
要求使用Java语言,利用面向对象的方法、编程思想来完成系统的设计;在设计的过程中,建立清晰的类层次;在系统设计中要分析和定义各个类,每个类中要有各自的属性和方法。
写出需求分析,UML设计图,数据库设计图。
设计工作量:
40课时
工作计划:
1.班级
13计科1、2班、13信息1、2班
2.课时及教室安排
4课时:相关知识介绍。
机房内多媒体教室10课时:设计。
普通教室。
24~26课时:上机、调试。
计算机系机房4~6课时:调试答辩。
计算机系机房
长沙学院课程设计鉴定表
摘要
为了更好的巩固和加强本学期所学的知识,把所学的东西转化为实际应用。
我们学习了MyEclipse、Dreamweaver、Tomcat等应用程序的使用。
并应用了SQL语言。
对数据库的创建、修改、删除方法有了一定的了解。
通过导入表和删除表、更改表学会了对表的一些操作。
为了建立一个好的合理的网上商店,我们必须经过需求分析、数据逻辑分析、用户接口类设计及界面布局的设计。
最后编码实现,调试及系统维护的一般过程,为毕业设计打下基础。
需求分析阶段,建立UML用例图,并给出复杂用例(如“展示商品”)的功能说明。
数据逻辑分析阶段,建立数据存储结构,类图,ER图。
用户接口类设计阶段,并建立实体类之间的关系,界面布局的设计阶段,使用Dreamweaver应用程序进行设计,使用CSS、HTML语言进行实现。
通过网上书店的构造以及用户的信息、购物车的信息、还有商品的相关信息制成表格,输入到数据库中,使之能够进行查询、修改、删除、插入并且与网上商店执行相同的操作。
关键词:MyEclipse、Dreamweaver、SQL语言、数据存储结构、UML用例图、CSS、HT M
目录
1 需求分析 (1)
1.1UML用例图 (1)
1.2ER图 (3)
2程序设计 (4)
2.1实体类 (4)
2.2用户接口类 (5)
2.2.1登录界面 (5)
2.2.2注册界面 (6)
2.2.3主界面 (7)
2.2.4商品详情页面 (8)
2.2.5购物车界面 (9)
3编码 (10)
3.1程序流程图 (10)
3.2模块列表 (11)
4 测试 (11)
4.1用户登录 (12)
4.2用户注册 (14)
4.3用户注销 (16)
4.5商品浏览 (17)
4.6商品搜索 (18)
4.7商品购买 (20)
4.8从购物车中删除 (25)
5 总结 (26)
参考文献 (27)
附录 (28)
附录A 部分程序源代码 (28)
1 需求分析
1.1 UML用例图
图1-1 用例图
用例说明:
用例:商品查询
参与者:游客或者用户
说明:
1.游客或者用户进入主页,用例开始。
2.游客或者用户在搜索框输入搜索关键字。
3.SearchServlet接收到关键字,调用SearchDAO的相关方法,找出与之相关的商品。
4.SearchServlet将SearchDAO获得的商品信息保存到request中,并且转发到jsp页面。
5.Jsp将搜索到的商品显示出来。
用例:查看购物车
参与者:游客或者用户
说明:
1. 游客或用户在主页点击商品进入商品详情页面。
2. 游客或者用户在商品详情点击查看购物车图标。
3. CartServlet判断用户是否已经登录,若用户还没有登录,则提示用户先去登录。
4. 用户去登录后,在Login这个Servlet中调用CartDAO中相应的代码将数据库cart表中该用户对应的记录,读取出来存入session中。
执行步骤5。
5. 若用户已经登录,则跳转到cart.jsp将session中该用户所有的购买信息读取,并显示出来。
用例:购买商品
参与者:用户
说明:
1. 用户在主页点击商品进入商品详情页面。
2. 游客或者用户在商品详情点击加入购物车图标。
3. CartServlet将购买记录存入session中。
同时,调用CartDAO的相关方法,将该记录插入数据库cart 表中。
4. 弹出窗口显示购物信息。
5. 回到商品详情页面,点击查看购物车就可以查看相关的购物记录。
1.2 ER图
图1-2 ER图
2 程序设计2.1 实体类
图2-1 实体类图
2.2 用户接口类
2.2.1 登录界面
图2-2 登录界面关联的实体类:user(用户)类
2.2.2 注册界面
图2-3 注册界面关联实体类:user(用户)类
2.2.3 主界面
图2-4 主界面关联实体类:category(类别)类,goods(商品)类
2.2.4 商品详情页面
图2-5 商品详情界面
关联的实体类:category(类别)类,goods(商品)类
,goods(商品)类,discuss(评价)类
2.2.5 购物车界面
图2-6 购物车界面
关联实体类:category(类别)类,goods(商品)类
,cartitem(购物车项)类。
3编码
3.1 程序流程图
入口
图3-1 程序流程图
3.2 模块列表
表3-1 模块列表
4 测试
4.1 用户登录
数据库中的用户信息
图4-1 用户信息图
已有用户登录
测试数据:用户名:Alice 密码:123
图4-2 用户登录1
测试结果:
图4-3 登录成功
不存在的用户登录
测试数据:用户名:Alice 密码:12
测试结果:
图4-3 登录失败
4.2 用户注册
不重名用户注册
测试数据:用户名:what 密码:123 确认密码:123
图4-4 用户注册1
注册结果:(跳转到登录页面进行登录)
图4-5 注册成功
重名用户注册
测试数据:用户名:what 密码:12 确认密码:12
图4-6 用户注册2
注册结果:
图4-5 注册成功4.3 用户注销
注销前:
图4-6 注销前注销后:
图4-7 注销后
图4-8 商品浏览(文艺)图4-9 商品浏览2(科教)
测试数据:不畏
图4-10 商品搜索1
测试结果:
图4-11 商品搜索2
4.7 商品购买
测试数据:库存不足
图4-11 商品购买1
图4-12 商品购买2
图4-12 商品购买3(查看购物车)
图4-12 商品购买4(库存不足)测试数据:库存充足
图4-13 商品购买5
图4-14 商品购买6 图4-15 商品购买7
图4-16 商品购买8
4.8 从购物车中删除
图4-17 删除前
图4-18 删除后
5 总结
这次实训我用了MyEclipse、Dreamweaver、Tomcat、Navicat等开发软件,通过自己的努力和老师、同学的指导我完成了本次实训。
系统设计了用户模块,实现了用户注册、登录,注销一系列功能;系统设计了商品模块实现了商品分类浏览、详情展示、模糊搜索以及显示商品评价和对特定商品进行评价、以及显示最近浏览过的商品一系列功能;系统还设计了购物车模块,实现了为每个用户分配购物车、将商品加入购物车、将商品从购物车中删除、查看购物车(重启浏览器后查看上次加入购物车的商品)、提交订单(当库存不足时,提示用户)。
我觉得性能是还不错的。
至少在自己测试过程中没有出现异常,能够达到预期的效果。
当然,系统也还存在一些不足的地方。
在用户模块。
用户登录时,我觉得可以设置一个30天免登陆的选项,这样可以提高用户体验。
用户注册时,让用户提供更加详细的信息并且编写js代码对用户输入的信息做一些正确或错误的提示。
在商品模块。
在进行模糊搜索时,可以设计不同的选项,例如,根据商品的价格进行模糊搜索等。
在显示最近浏览过的商品时也存在不足,没有将浏览记录存入数据库导致关闭浏览器再次登录的时候,无法看到上次的浏览记录。
在评价商品时,无法显示对商品的全部评价而只能显示最近两条评价。
在购物车页面无法对购物项的数量进行修改,我觉得这是一个很大的不足之处。
通过本次实训,我掌握了简单的动态网页设计及制作基础技术,通过对网上书店程序的编写和对网页的设计,熟悉掌握了设计和编写网页。
尤其是在设计主页时,我学会了iframe的使用。
通过使用iframe我实现了在保持页面框架不变的基础上,实现对不同数据的加载,从而实现点击不同分类显示不同商品的效果。
另外一个在页面设计上的收获就是,实现了对商品的分页显示。
当然这并不仅仅是通过页面布局实现的,也牵扯到了后台的逻辑。
商品分页的实现,很大程度的提高了用户体验,如果商品太多用户不再需要拖动滚动条,而只要点击链接就能看到后续的商品。
不过,这次实训最大的收获是在后台逻辑,在页面的跳转,数据的传递。
让我感受最深的就是在商品分类展示时,再点击某一个书的种类时,我让它跳转到了一个servlet,servlet将该类的所有商品查找出来,转发到一个页面显示出来。
这里面有一个技巧就是利用target属性设置显示页面的窗口,从而实现了在同一个页面显示不同分类的商品的效果。
在编写商品评价时,也利用了这种技巧。
例外,在算法上的收获,就是在显示最近浏览的商品是使用的一个算法,这个算法实现了一个删选,实现了将相同的商品筛选掉。
这次实验最大的一个收获,就是体会到,前期的需求分析,数据库设计,概要设计,页面设计真的很重要。
在编码前,履清自己的思路。
不要急于编码,另外,在每编写一段代码后,检验代码的正确性,
这样可以缩小出现错误时查找错误的范围,提高编码的效率。
一定要养成一个编写注释习惯。
否则,会增加测试,维护的难度。
我想这些经验都会成为我以后一笔宝贵的财富。
最后,我要感谢老师对我课程设计的指导,使我能够顺利完成这次课程设计的内容,以及在这期间无私帮助过我的同学。
从他们身上,我学到了专业、先进的开发技术,使我的软件开发水平有了提高。
同时,他们开阔的视野,严谨的态度深深地影响了我。
这对于我的将来,无论在学习上,还是工作中,都是一笔宝贵的财富。
参考文献
[1] 赵俊峰. Java Web应用开发案例教程. 北京:清华大学出版社,2012.
[2] 白灵. . Java Web应用开发给力起飞. 北京:电子工业出版社, 2011.
附录
附录A 部分程序源代码
Main.jsp
<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%> <%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %>
<!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN">
<html xmlns="/1999/xhtml">
<head>
<base href="<%=basePath%>">
<title>My JSP 'MyJsp.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<link href="${pageContext.request.contextPath}/css/css.css" rel="stylesheet" type="text/css" /> <link href="${pageContext.request.contextPath}/css/div.css" rel="stylesheet" type="text/css" /> <style type="text/css">
<!--
.STYLE3 {font-size: 14px}
-->
</style>
</head>
<body>
<div id="box">
<div id="top">
<div id="top-right"><a href="${pageContext.request.contextPath}/servlet/CartServlet?method=show"
target="goodslist"><img src="${pageContext.request.contextPath}/image/cart.png"/>购物车</a> <img src="${pageContext.request.contextPath}/image/user.png"/><a href="${pageContext.request.contextPath}/jsp/regist.jsp">注册</a>|<a href="${pageContext.request.contextPath}/jsp/login.jsp">登陆</a>|<a href="${pageContext.request.contextPath}/servlet/LoginOut" >退出</a></div> ${curuser!=null?ername:"游客"},欢迎来到书房斋! </div>
<div id="top2">
<div id="top2-right">
<form method="post" action="${pageContext.request.contextPath}/servlet/GoodsServlet?method=search"
target="goodslist">
<input type="text" name="search" id="search"/>
<input type="submit" name="Submit" id="submit" value="搜索" />
</form>
</div>
</div>
<div id="top3">
<%--<ul>
<li><a href="" class="STYLE3">程序设计</a></li>
<li><a href="" class="STYLE3">办公室用书</a></li>
<li><a href="" class="STYLE3">多媒体</a></li>
<li><a href="" class="STYLE3">操作系统/系统开发</a></li>
<li><a href="" class="STYLE3">数据库</a></li>
</ul> --%>
<iframe width="100%"height="70px"frameborder="0" src="${pageContext.request.contextPath}/servlet/CategoryServlet?method=findAll"
name="catelist"></iframe>
</div>
<div id="body">
<iframe width="100%"height="600px"frameborder="0" src="${pageContext.request.contextPath}/servlet/GoodsServlet?method=displayGoods"
name="goodslist"></iframe>
</div>
</div>
</body>
</html>
GoodsServlet
package servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javabean.Category;
import javabean.Goods;
import javabean.Page;
import javax.servlet.ServletException; import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession;
import service.PageService;
import dao.GoodsDAO;
public class GoodsServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
String method = request.getParameter("method");
// 根据选择的分类来显示商品
if (method.equals("findByCategory")) {
int cid = Integer.parseInt(request.getParameter("cid"));
String pagenum = request.getParameter("pagenum");
Page page = PageService.findPageRecords(pagenum, cid);
page.setUrl("/servlet/GoodsServlet?method=findByCategory&cid="
+ cid);
request.getSession().setAttribute("page", page);
request.getSession().setAttribute("goodslist", page.getRecords());
// 判断请求的来源,如果来自于导航栏转发到导航栏,如果来自分页则转发到goodslist.jsp
request.getRequestDispatcher("/jsp/goodslist.jsp").forward(request,
response);
}
// 展示商品
if (method.equals("displayGoods")) {
String pagenum = request.getParameter("pagenum");
Page page = PageService.findPageRecords(pagenum);
page.setUrl("/servlet/GoodsServlet?method=displayGoods&flag=1");// 此处逻辑差点没发现,细节写法
request.getSession().setAttribute("goodslist", page.getRecords());
request.getSession().setAttribute("page", page);
request.getRequestDispatcher("/jsp/goodslist.jsp").forward(request,
response);
}
if (method.equals("search")) {
request.setCharacterEncoding("utf-8");
String search = null;
if (request.getParameter("flag") == null) {
search = new String(request.getParameter("search"));
HttpSession session = request.getSession();
session.setAttribute("search", search);
System.out.println("goodservletsearch1:" + search);
} else {
HttpSession session = request.getSession();
search = (String) session.getAttribute("search");
System.out.println("goodservletsearch2:" + search);
}
if (search != null)// 防止传入空字符串
{
String pagenum = request.getParameter("pagenum");
Page page = PageService.getSearchPage(pagenum, search);
page.setUrl("/servlet/GoodsServlet?method=search&flag=1&search1="
+ search);// 此处逻辑差点没发现,细节写法System.out.println("goodservletsearch2:" + page.getUrl());
request.getSession().setAttribute("goodslist",
page.getRecords());
request.getSession().setAttribute("page", page);
request.getRequestDispatcher("/jsp/goodslist.jsp").forward(
request, response);
} else// 如果传入空字符串则返回首页
{
request.setAttribute("errorinfo", "您还没说要找什么呢!亲~");
request.getRequestDispatcher("/jsp/error.jsp").forward(request,
response);
}
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
35。