Java web课程设计-购物系统
题目:网上购物系统
网上购物商店的分析与实现
一.实验目的
二.实验平台
服务器:Tomcat集成开发环境:java EE版本的eclipse数据库:Mysql 使用户语言:java jsp HTML CSS jQuery框架
三.实验内容
四.实验要求
电子商务网站的 功能主要包括用户的注册、登录、购物和新闻发布这几个主要方面,还包括所售商品的维护。
1.用户登录、注册功能
(1)、注册功能。这是用于第一次进入网站,并有兴趣在本网站购买东西的顾客而设的,具有提醒第一次进入本站的用户注册的功能。另外用户注册页面应有一个介绍和解释本站详细功能的说明,并附上同意与否的按钮和一个用于提示用户填写详细资料的表,并划分出是否为必填或其他。同时还需要有基本的判断功能,对用户填写的资料的正确与否进行判断,然后返回相应的信息,还能够把用户提供的信息返回,建立一个数据库,并把这些信息写入数据库。
(2)、登录功能。这是为老顾客而设的,其目的是为顾客创造一个友好的环境,并且让他知道自己上次离站的时间等信息,是一个简单用于登录、判断用户填写正确与否的程序。如果登录成功,则再把这次信息写入数据库,重新更新数据库信息,并启动其他线程以便于用户购物。
(3)、查看、修改用户信息功能。当用户对自己注册的信息不满意时,系统必须有对此项的支持。
(4)、修改密码。这是出于对安全型的考虑,经常地更换密码可以提高安全性。
2.购物功能
(1)、物品浏览:当顾客进入网站,首先应当看到推荐商品或最近更新的商品,同时对商品的类型进行适当的划分。对商品还要有详细的介绍,对大类中的小类也应当把它们的属性特点向顾客介绍清楚。
(2)、商品购买:当顾客看中某样商品时,就应当启动购买功能,在小类型下所属的商品列表中应当有购买功能,购买完所有商品后,系统应当给出购物清单,在清单中应列出所购物品及数量,没见物品的价格和购物总价格,还应当有完整的确认系统,不仅包括放入购物车的确认,而且还包括购物与否的确认。
(3)、动态新闻发布功能:动态新闻发布功能和商品最近更新的发布是类似的,它们构建数据库的形式和程序的实现大致相同。
(4)、商品管理:管理网站所出售的商品。
五.实验内容
1.结构设计
2.系统整体介绍网上购物系统整体上模拟实现了一般的购物网站那的各项功能。包括购物网站的用户的注册与登录模块、首页个人信息的展示与修改、购物商品的分类浏览、商品添加到购物车、商品的购买以及历历史记录的查询、购物车信息的查询。同时也包括对于数据库中商品信息的添加修改删除。在商品的查询中使用了精确查询和模糊查询两种查询方式。在商品信息的排序方面还在做进一步的努力。到目前为止,整体已经完成了各项功能,但是在细节以及有些功能上还有一些小的错误和bug,正在做进一步的完善
3.数据库中主要信息表(1)用户user表:用于存储用户的用户名、密码、邮箱等各项信息。字段数据类型是否为空解释uidint不为空用户IDunamevarchar不为空用户名emailvarchar不为空邮箱passwdvarchar不为空密码lastlogindatetime不为空上次登录时间 (2) 商品信息goods表:用于存储购物商品的各项信息,方便用户查询修改商品的各项功能。字段数据类型是否为空解释gidInt否商品IDgnamevarchar否商品名numberint否商品编号gphotovarchar否商品描述照片typesvarchar否商品分类producervarchar否商品制造商pricefloat否价格carriagefloat否库存pdatedate否生产日期paddressvarchar否发货地址describedvarchar否商品描述 (3)购物车显示信息shoppingcart表:用于存储用商品的ID、用户ID、商品名等信息。字段数据类型是否为空解释sidInt否商品iduidInt否用户idgidInt否商品idnumberInt否商品编号sdateDatatime否生产日期4.各个模块实现介绍(1)用户登录注册模块:用于实现用户的登录,从数据库中查询用户的信息与前端用户输入的个人信息核对,若是正确,则进行登录提交,进入购物的首页,若是与数据库中个人信息提交有误,进行重新的提交,若说是不存在此用户,则转入注册页面,用户填写个人信息进行提交,将信息存入后天数据库,在根据自己注册的信息进行登录
购买历史浏览: (5)商品的操作模块:商品的操作包括对于数据库中商品的一般浏览、商品的分类浏览、查询和模糊查询、新商品的插入到数据库中等操作,这一部分的操作有一部分是涉及的是数据库中管理员的操作,但是没有对其单独的设计新的界面用于管理。但是基本的各项功能都已经基本实现。用户查询操作: 用户添加商品操作: 5.代码功能模块详解1、购物网站的数据采用了MySQL来存储数据,数据库连接代码如下所示:
public class DBConnection {
private final String Driver = "com.mysql.jdbc.Driver";private final String URL = "jdbc:mysql://localhost:3306/onlineshopping?characterEncoding=utf8&useSSL=true"; private final String USER = "root"; private final String PASSWORD = "mzc277171"; private Connection conn = null; public DBConnection() throws SQLException { try { Class.forName(Driver); } catch (ClassNotFoundException e) { e.printStackTrace(); } this.conn = DriverManager.getConnection(URL, USER, PASSWORD); } public Connection getConnection() { return conn; } public void close() { if (this.conn != null) { try { this.conn.close(); } catch (SQLException e) { e.printStackTrace(); }} }}
当中,数据库用户名为root,密码为19950724,数据库驱动Driver需要下载到本地然后导入工程中。这样,所有的数据库操作就可以通过getConnection()函数来获得同一个链接对象了。2、为了方便传输数据以及数据存储,需要为各对象建立实体。如已购买商品AlreadyBuy,包含如下五个属性,以及相应的get和set方法。// 主键 private int aid; // 用户id private int uid; // 商品id private int gid; // 购买的商品数量 private int number; // 购买时间 private String buyTime;相应的还有:商品Goods,购物车Shoppingcart,已购买AlreadyBuy,拥有的属性与数据库中相应表的元素相同,可参考下边对数据库的介绍。3、每个实体都有相应的数据库操作类,用来向数据库进行增删查改操作,限于篇幅,以下只列出购物车ShoppingCart的操作类
- 1
public class ShoppingCartDaoImpl implements ShoppingCartDao {
private Connection conn = null; private PreparedStatement pstmt = null; public ShoppingCartDaoImpl(Connection conn) { this.conn = conn; } //向购物车添加商品 @Override public boolean addGoods(int uid, int gid, int number) throws Exception {//实现部分} //删除购物车中的商品 @Override public boolean deleteGoods(int uid, int gid, int number) throws Exception {if (!"".equals(message)) { int sid = Integer.valueOf(message.split("&")[0]); int goodsCount = Integer.valueOf(message.split("&")[1]); if (goodsCount < number) { return false; } else if (goodsCount == number) { String sql = “delete from shoppingcart where sid=?”; pstmt = this.conn.prepareStatement(sql); pstmt.setInt(1, sid); } else { String sql = “update shoppingcart set number=? where sid=?”; pstmt = this.conn.prepareStatement(sql); pstmt.setInt(1, goodsCount - number); pstmt.setInt(2, sid); } result = pstmt.executeUpdate(); pstmt.close(); } if (result == 1) { return true; } return false; } } //获取购物车中的所有商品 @Override public List getAllGoods(int uid) throws Exception { pstmt = null; ResultSet rs = null; List scList = null; String sql = “select * from shoppingcart where uid=?”; pstmt = this.conn.prepareStatement(sql); pstmt.setInt(1, uid); rs = pstmt.executeQuery(); ShoppingCart sc; scList = new ArrayList(); //检查指定用户购物车中是否含有指定商品,如果有则返回购物车id和商品数量,否则返回空 @Override public String getDesignateGoodsMs(int uid, int gid) throws Exception { ResultSet rs = null; String sql = “select * from shoppingcart where uid =? and gid=?”; pstmt = this.conn.prepareStatement(sql); pstmt.setInt(1, uid); pstmt.setInt(2, gid); rs = pstmt.executeQuery(); if (rs.next()) { return rs.getString(“sid”) + “&” + rs.getInt(“number”); } return “”; } 通过该类的中介操作,就可以很简单地完成数据库中购物车表的各种操作。当中,为了让编程更趋于规范化,ShoppingCartDaoImpl是继承于自定义接口ShoppingCartDao的。public interface ShoppingCartDao { // 为指定id用户添加购物车内商品 public boolean addGoods(int uid, int gid, int number) throws Exception; // 为指定id用户删除购物车内商品 public boolean deleteGoods(int uid, int gid, int number) throws Exception; // 为指定id用户查询购物车所有商品 public List getAllGoods(int uid) throws Exception; // 为指定id用户查询指定商品的数量 public String getDesignateGoodsMs(int uid, int gid) throws Exception; // 为指定id用户支付商品 public boolean payGoods(int uid, int gid, int number) throws Exception; // 位指定id用户支付所有商品 public boolean payAllGoods(int uid) throws Exception;}
4、有了前面的基础后,首页index.jsp就可以方便地呈现商品列表了。通过向GoodsDao调用getAllGoods()函数查询所有商品,实际是向数据库中的Goods表查询数据。此外,因为在很多页面中页面头部head是不变的,所以可以将头部信息单独写成一个head.jsp文件,在需要的地方再通过<jsp:include page=“jsp/head.jsp”></jsp:include> 语句导入即可,这样可以增强系统复用性与可维护性。5、head.jsp页面的bdoy部分代码如下所示。因为当用户登录时,会向session中写入用户名与用户编号,已此来识别用户。所以head.jsp页面会去检测当前session中是否含有用户名uname与用户编号uid,如果有,头部将显示用户名,否则将显示“登录或注册”等字样。 5、商品详情页goodsDescribed.jsp的body部分代码如下所示。可以看到,当用户提交订单时,页面是将所要购买商品的gid和购买数量buyNumber传向jsp/addToCart.jsp页面处理的,这样就将数据呈现与数据处理两项操作分隔开了。而addToCart.jsp再来调用ShoppingCartDao类来进行数据处理。其他的页面,比如购物车列表,已购买商品等页面,也是通过调用相应的dao类来进行数据呈现的,限于篇幅后边就不再赘述。6、用户注册页面login.jsp的body部分如下所示。可以看到表单中每一项信息都需要通过合法性验证,比如用户名字符类型,密码位数,邮箱地址格式等。而表单信息是传向LoginServlet类的,由其再来数据处理,如果注册成功,就将页面重定向到首页,否则再返回注册页面提示注册失败。 7、通过JSP技术的Filter过滤器技术,可以对每一个ServletRequest请求进行过滤。所以,我建立了一个登陆过滤器类LoginFilter,对用户的每一个请求进行检测。这样,当用户未登录或者登陆了不过session过期两种情况下,如果用户想访问个人信息页面、购物车页面、已购买历史页面等敏感信息,都会将请求拦截,提示用户需要先登录。如果用户已登录,则不会有任何影响。@WebFilter(description = “登录过滤器”, filterName = “loginFilter”, urlPatterns = { “/" }, initParams = { @WebInitParam(name = “loginPage”, value = “login.jsp”) })public class LoginFilter implements Filter {//过滤部分}此外,我们知道,并不是每种字符编码都支持中文字符,所以有时候就会造成页面乱码现象。所以一般来说,都需要将页面格式设为支持中文字符的UTF-8格式,所以也需要建立一个字符过滤器类EncodingFilter类,将请求request与响应response设为UTF-8格式@WebFilter(description = “字符编码过滤器”, filterName = “encodingFilter”, urlPatterns = { "/” }, initParams = { @WebInitParam(name = “ENCODING”, value = “UTF-8”) })public class EncodingFilter implements Filter {//编码过滤部分}8、为了保护用户信息,需要为用户的Session设定一个过期时间。在配置页面Web.Jsp中,将Session过期时间设为了三十分钟。 30
六.实验心得
本次课程设计是关于前端的java web,相比较与之前的各项课程设计的内容大有不同。Java web的课程设计更加注重对于整体项目的布局认识,前端的静态的HTML的布局到Css的修饰再到配合javascript实现诸多的校验功能,再到使用jsp连接后端,以及数据库的设计连接与使用。虽然是一次简单的课程设计,却又将java web的基本的简单框框架都予以实现,从整体上更加契合项目的开发。是一次综合性的考验
部分页面展示
引导页面
首页
购物
登录
Java web课程设计-购物系统相关推荐
- 大学生课程设计 ------ Java Web课程设计(学生成绩管理系统01)
大学生课程设计 ------ Java Web课程设计(学生成绩管理系统01) Java Web课程设计(代码+课程报告) 课程作业效果如下: 学生1:后台实现.数据库设计.前端后台整合 学生2:前端 ...
- 大学生课程设计 ------ Java Web课程设计(学生成绩管理系统03)
大学生课程设计 ------ Java Web课程设计(学生成绩管理系统03) Java Web课程设计(代码+课程报告) ---------------------我是分割线------------ ...
- 大学生课程设计 ------ Java Web课程设计(图书馆管理系统02)
大学生课程设计 ------ Java Web课程设计(图书馆管理系统02) Java Web课程设计(代码+课程报告) 项目分工情况(每个人完成那些功能或任务) 同学A:数据库设计,后台实现,前端与 ...
- 毕业设计 课程设计 大作业 基于JAVA WEB的网上购物系统的设计与实现
文章目录 前言 1 运行效果 2 系统设计说明 2.1 整体设计 2.1.1 实现的功能: 2.1.2 系统工作流程: 2.2 总体设计功能图 2.3 数据库设计 3 项目 前言 随着计算机网络技术的 ...
- Java Web课程设计
最近做java web的课程设计,因为某些原因没有用框架,但是用了commons-dbutils组件来简化数据操作,下面这个链接非常好的讲解了commons-dbutils,代码看源码就行,很容易看懂 ...
- Java web 课程设计——图书馆管理系统(SSM)
题目要求 本网上图书馆系统应实现图书网上检索.预约和续借功能: 系统管理:定义读者类别并设置参数,添加.修改和删除读者信息. 图书续借和预约:实现图书的续借.预约等功能. 图书检索:按书名或作者等信息 ...
- java web课程设计之图书管理系统
水了一学期的java web,终于在课设付出了代价,真是平时幼儿园,期末似高三做完课程设计,老师不让用框架,只能用HTML+CSS+JavaScript+JSP+Servlet+JavaBean+JD ...
- java web 课程设计_关于Javaweb课程设计的心得体会.doc
关于Javaweb课程设计的心得体会 ----在线测试系统 这次课程设计我做的是章节自测系统, 主要是服务于学生进行阶段性自测和练习.系统分为练习和测试两部分,每一部分又各分若干专题.系统中采用的技术 ...
- java web课程设计(简单商城的前后端双系统,基于maven三模块开发)
1.系统分析 1.1需求分析 实现一个简单但功能完整的商城项目,从设计到实现,规范化完成该项目,锻炼javaweb项目的编写能力,理解软件工程的软件设计思想 1.2编程技术简介 本次课程主要使用的软件 ...
最新文章
- 怎样处理重命名系列案例代码
- itertools中常用的工具(chain,islice)
- 用 FileZilla 连接 Amazon 的aws的主机
- ios滚动条影响父页面 vue_父元素设置overflow:scroll时vuedraggable组件出现奇怪效果的解决方案...
- JDBC连接Oracle数据库的参数配置
- html启动word程序,Word工具栏直接启动外部程序
- linux python命令无反应_Python学习第164课--Linux命令行特殊符号的意义及命令的语法规则...
- android基础入门思考题答案,《Android移动应用基础教程》中国铁道出版社课后习题(附答案)...
- linux ext3 大文件,Linux下Ext2与Ext3文件系统
- mysql中的索引什么意思_索引是什么意思(数据库中的索引是什么)
- 本人复习总结全部资料及其简历供大家參考
- 13.python中web框架概念的引入。
- 多个notification引发的问题
- 金融产品经理的能力修炼精进指南
- 联发科mt8516价格_揭秘联发科MT8516单颗芯片破千万背后的故事
- stm32定时器的ETR、CH1N、CH2N、CH3N
- Erlang和Elixir,第5部分:Phoenix框架
- 测试设计点-pc端和移动端微信加入群聊
- matlab 数理统计,概率论和数理统计(matlab应用)1
- java组织树级结构