Java web课程设计-购物系统

题目:网上购物系统
学 号:1705010323
姓 名: 马 志 成
指导老师: 陶 洁
完成时间:2019年6月14日
网上购物商店的分析与实现
一.实验目的
Java web课程设计是为了是计算机学院的学子深入学习java web应用开发设置的一门实验性的动手性的实践课程。是计算机科学与技术、 网络工程、信息安全、物联网工程、软件工程等专业集中实践的教学环节,是将关java web开发理论知识转化为解决实际问题能力的重要环节。Java web课程设计联系了前端的HTML、CSS、JAVASCRIPT、JSP等各项语言,同时紧密的将后台开发的java语言和数据库联系在一起,从整体上实现了java web项目的认识与实践。本次课程设计不仅仅是让同学们对于java web开发的前后端知识有一定的了解,同时使得学生们对于java web的服务器例如tomcat等有一定的了解和使用,在有能力和有余力的情况下,在开发中可以使用jQuery等框架在减轻开发难度的同时深入了解java web的开发。同时,本次课程设计也是对于本学期学生的java web课程的一个良好的检测,在应用本学期所学知识的同时,能够对于自己在这门课程中的疑惑与困难进行集中性的解决。学会开发java web项目的精髓,利用开发的项目解决实际问题。
二.实验平台
服务器:Tomcat集成开发环境:java EE版本的eclipse数据库:Mysql 使用户语言:java jsp HTML CSS jQuery框架
三.实验内容
利用所学java web开发有关的知识,开发一个功能较为齐全、页面较为精美、能够连接数据库的网上购物系统。本次课程设计的购物网站系统模拟实现了用户注册、用户登录、个人信息修改、商品浏览、提交订单、支付、购买历史浏览等多项功能,满足了基本的购物流程需求。网络技术提供了实现电子商务的技术平台,而电子商务是网络技术的最新应用和最终目标。本系统正是电子商务的典型例子,通过实现本系统,除了能够锻炼Web开发技术的能力、也能够更好地理解电子商务的含义,并加深对当今“互联网联通世界”现象的理解。
四.实验要求
电子商务网站的 功能主要包括用户的注册、登录、购物和新闻发布这几个主要方面,还包括所售商品的维护。
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)用户登录注册模块:用于实现用户的登录,从数据库中查询用户的信息与前端用户输入的个人信息核对,若是正确,则进行登录提交,进入购物的首页,若是与数据库中个人信息提交有误,进行重新的提交,若说是不存在此用户,则转入注册页面,用户填写个人信息进行提交,将信息存入后天数据库,在根据自己注册的信息进行登录。
用户登录界面
用户注册界面: (2)用户信息修改模块:用户在登录成功后可以对自己的各项信息进行修改,包括用户的邮箱、密码等个人信息。从而更好地保护用户的信息。同样修改的信息提交到数据库进行存储。用户信息修改: (3)首页模块:在登录成功之后首页显示用户的简单个人信息,例如欢迎XXX等,同时利用session创建对象查看当前登录网页的人数。在首页显示各类的功能按钮,包括用户对于个人信息的修改、用户的退出登录、用户购物、用户进入购物车、用户查询购物历史、哟用户购物以及支付、用户通过分类的方式查询系统中的商品的各项信息。首页部分展示: (4)购物模块:前端页面显示后台数据库中的商品的各项信息。展示在页面上面,用户通过点击了解商品的详情,通过了解商品的详细情况,可以选择将浏览的商品加入到购物车中,购物车就有了商品的信息。用户在浏览完毕之后可以跳转到购物车里面查看购物车中的商品。同时选择购买商品的数量进行购买。最后进行付款。对于付款之后的各项商品,用户可以查看购买历史,了解自己买过的东西。购物车浏览:购物网显示:

购买历史浏览: (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的操作类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的基本的简单框框架都予以实现,从整体上更加契合项目的开发。是一次综合性的考验。从专业知识的角度:首先我学会对于整体项目的开发的完整控制。前后端的合理搭配。在开发的过程中我使用软件开发过程中的增量模型。首先以登录注册模块开始。把他当做一个基础和突破。先做登录注册的前端页面以及jsp的控制,之后写了有关登录注册的数据库部分和javabean部分。最后将前端的登录注册页面也后端的数据库部分连接起来。实现了从前端控制后端的数据库。在打通了登录注册的前后端的逻辑之后。在此之上进行了增量开发。实现了系统中的购物模块,信息的管理模块,以及购物车,购物历史等部分的内容。从认知方面:在开发过程中也深刻的认识到了自己的不足,看到了自己与诸多同学之间的差距。在专业知识方面,对于jsp获取前端的数据的部分知识的掌握还有欠缺。在使用java代码处理数据库的时候很多的代码是类似的,但是没有对其进行代码的抽象与多次调用。在系统代码的冗余上有较大的的进步空间。其次,在开发中由于自己的审美不是那么的好,虽然前端的页面和后端的连接已经数据的处理都已经基本完后了。但是,界面的美观度和使用舒适度还有很大的进步空间。同时,课程设计的过程不单单是一个检验学习成果的过程,更是一个利用两周的时间对于相应课程的知识查漏补缺,以及知识的深化升华的过程。课设查阅资料的时候也更加全面广泛的了解了java web的诸多的知识。之前的课本知识总是给人一种碎片化的感觉,诸多的知识都是学了基础,但是又没有将其升华起来。但是课程设计正好弥补了这个问题。将所有知识进行了串接。在查询资料的同时也深感计算机java web知识的更新换代速度之快。很多的知识在一出现的一段时间内可能很火,但是在经过一段不长的时间之后就立马会有更加新的,前沿的知识出现。因此,在计算机前端的学习中我们不仅仅是要学习基本知识,更要懂得时刻追溯技术的前沿,时刻学习,不能止步。在掌握java web基础的知识之后,更多的尝试学习前沿的知识。注重开发的实践。总体来说本次的java web程设计从整体上独立完成了一个系统的开发。为之后多项专业课的学习打下了坚实的基础,也是一个检验自己前端HTML、CSS、javasvript 后台的java与数据库知识掌握程度的机会,在此次课程设计中收获颇丰,希望自己能够在之后的更多的课程设计中吸取本次课设的经验和教训。珍惜每一次课设的机会。

发布了43 篇原创文章 · 获赞 45 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/mzc_love/article/details/100005344