当前位置:文档之家› 网上购物管理系统

网上购物管理系统

课程实践报告课程名称:软件工程实践II项目名称:网上购物系统专业班级:姓名:学号:指导教师: 成绩:______报告日期:2014年12月9日网上购物管理系统摘要随着计算机技术在各行各业日益广泛和深入的应用,网络的概念早已深入人心。

网络在各行各页的发展战略占据了重要的位置,成为了商家不可分割的一部分。

网络已经成为了商家展示自己的另一个舞台。

商家建立网站,通过网站可以实现,浏览商品,网上购物,结账本系统实现了网上购物商城的基本功能和购物流程。

主要模块有:商品查询、商品管理、商品显示、购物车、订单管理、用户管理等功能。

其开发主要包括:数据库的建立,前台Web页面设计,后台管理。

本系统采用MySql数据库和Tomcat服务器实现,并且使用HTML、JSP等技术来编辑网页,并运用Hibernate技术把数据库和动态网页相关联。

关键字关键词:网上商场,购物车,结账,Tomcat,Sevlet,JSP,MySql数据库目录摘要 (2)关键字 (2)1需求分析 (4)1.1背景 (4)1.2可行性分析 (4)1.3对性能的规定 (4)1.3.1时间特性要求 (4)1.3.2灵活性 (5)1.4其他专门要求 (5)1.5运行环境的规定 (5)1.6设备 (5)1.7支持软件 (5)2功能分析 (6)2.1功能分析的目的 (6)2.2业务描述 (6)2.3用例图 (8)2.4状态图 (10)3模块设计 (10)3.1系统功能模块 (10)3.2模块分析 (11)4数据库分析与设计 (18)4.1数据库分析 (18)4.2系统整体ER图的设计 (19)4.3数据库设计 (20)5编码,实现及测试 (22)5.1各功能源代码 (22)6 结论 (29)6.1系统优点 (29)6.2系统缺点 (29)6.3未来发展 (29)7实验小结 (30)7.1孙佳伟实验小结.................................................................................. 错误!未定义书签。

7.2喻道斌实验小结.................................................................................. 错误!未定义书签。

7.3金龙实验小结...................................................................................... 错误!未定义书签。

1需求分析1.1背景在发达国家,电子商务的发展非常迅速,通过Internet进行交易己成为一种潮流。

基于电子商务所连带出的商品交易方案、电子结账方案和信息安全方案等,已逐步成为国际信息技术市场竞争的焦点。

随着电子商务的日益发展,产生了网上购物、网络广告等新兴信息产业,从侧面反应了电子商务正在对社会和经济产生着深刻的影响。

在我国,网上购物从无到有也不过短短几年时间。

但是就在这几年时间,网络购物已经深入千家万户,普通的购物已经不能满足人们的消费。

网上购物以其诸多优势,获得人们的青睐。

它以其方便,快捷,高效,高选择性等优点,迅速得到了广大网友的喜爱与青睐,现在的网上购物已经非常普及。

本系统设计就是为了满足广大网友的这些需求,改变传统的交易模式,通过互联网完成查看商品,购买商品等完成网上交易。

方便消费者,同时对商家的商品信息进行管理,便于商家的商品数据分析。

截止2013年1月中国有网上购物的用户将近5000万人,这足以证明网上购物具有良好的群众基础,网上购物方式日趋被大家所接受。

因此我们小组致力于做一个基于B/S架构的网上购物管理系统,使广大用户可以享受网上购物的种种优势。

1.2可行性分析随着计算机的普及,Internet的发展,网购已经成为人们生活消费中一大部分。

一个网上购物系统可以为消费者提供软件条件,使其可以更加快捷,方便,实惠的选择商品,而商家也可以更好的管理商品,节约成本,两全其美。

所以构建一个网上购物商城在运行上是完全可行的。

此次开发使用JSP作为开发语言,采用Servlet技术,Tomcat7.0座位Web服务器,采用MySql作为数据库,这几种技术及工具的方便,快捷,免费大大的缩短了开发的时间,减少了开发的成本。

并且使得开发更方便安全,更利于后期的维护。

网上购物服务系统给人们带来了方便,成为一种全新的商务模式。

因此,不用出门就可以在家购物的新时尚已经到来,构建一个网上购物服务系统在经济上是完全可行的。

综上所述:开发本系统是完全可行的。

1.3对性能的规定1.3.1时间特性要求对于商品基本信息,订单信息管理的增加删除修改必须是实时响应,与客户端的交互响应时间不超过5s1.3.2灵活性操作方式的变化,可以直接从UI或从数据库输入行,对初始行进行增加,删除,删除等操作。

1.4其他专门要求文字描述必须准确,精炼,通俗易懂。

安全性要得以保障,可移植性要高,为了适应不同系统,程序吞吐量必须要大,否则不能动态适应购物网站的需要。

1.5运行环境的规定1.6设备开发环境:操作系统:windows 7硬件环境:客户终端:pc机;服务器:Tomcat编译环境:Jdk 1.61.7支持软件操作系统:**开发软件:MyEclipse数据库: Mysql2功能分析2.1功能分析的目的从用户需求出发,对于网上购物系统做细致全面的功能分析,准确地定义网上购物系统的目标,确定系统必须做什么,再用UML建模,并以Rational Rose工具画出功能模型,以此形式分析确定此网上购物系统的功能。

2.2业务描述用户进入网站后,可以根据价格高低确定是否进行筛选,不筛选则进入所有的商品浏览界面,筛选则得出筛选后的浏览界面。

接着可以点击商品加入购物车,可以自己选择加入的数量。

加入购物车以后可以查看购物车,在购物策划模块中可以选择添加或删除购物车商品,接着用户可以自行判断是否继续购物,如果继续购物则返回首页,不购物则进行结账。

结账之后可以查看订单界面,这里有详细的订单信息。

,否则注销退出。

下图为网上购物系统的业务流程图。

图1-1 系统业务流程图2.3用例图用例图●浏览商品用例,可以实现浏览商品●搜索商品用例,可以根据商品的价格进行筛选查询商品。

●管理商品详情用例,可以实现对商品中所有信息的浏览。

●加入购物车用例,是用户才有的功能,能在浏览商品后把商品加入购物车●管理购物车用例,在加入购物车后扩展的功能,对于购物车内的商品可以增加删除●购买商品用例,用户可以对于商品显示页面的商品进行购买●管理自身订单,用户可以对自身的订单进行搜索,删除功能。

●清空购物车用例,用户对购物车中所有商品进行清空●浏览曾经的商品(历史记录)用例,用户可以在这里浏览曾经使用的商品●结账模块用例,用户可以在这里进行结账功能。

<<include>>加入购物车图1-2主用例图用户结账图1-3 购物车用例图查看订单信息图1-4 结账用例图2.4 状态图对于系统进行状态细节分析如下a)用户首页输入网址进入首页界面b)用户浏览商品进入商品展示界面c)浏览完之后可选择喜欢的商品进入购物车界面d)在购物车中可以添加或删除商品进入更改商品界面e)更改接受后确定是否继续购物,若继续择返回商品展示界面f)若不继续购物则进入结账界面g)在结账界面中进行查看订单,进入订单确认状态h)订单确认无误后,则系统提交,之后用户可以注销退出。

按价格筛选3模块设计3.1系统功能模块功能模块图:系统总体分为前台展示模块,购物车模块,结账模块。

前台展示模块包括:浏览商品模块,筛选商品模块,商品详情模块,历史纪录模块。

购物车模块包括:购物车展示模块,删除商品模块,清空购物车模块,继续购物模块。

结账模块包括:订单确认模块,提交订单模块,事务处理模块。

图3-1 功能模块图3.2模块分析1:商品展示模块这是网站的主页面,用户不登陆也可以进入该页面,登陆成功后,页面会显示用户的信息。

此页面主要是显示一些主要商品的图片、名称、价格等信息,用户可以输入商品名称,种类等进行搜索,也可以直接点击商品查看商品细节信息。

图3-2 商品展示模块在主界面中可以根据价格的高低排序2:商品详情模块当你点击一个商品的链接,可以进入商品的详情页面,这里会相识一个商品的所有具体信息,可以看到书名,作者,价格,出版日期图3-3 商品详情模块3:购物车模块用户喜欢的商品可以选择放进购物车里,可以在购物车里产看用户选择的商品的名称价格以及购物车商品的总价,用户可以对购物车中的商品进行操作,修改购买数量,删除商品,清空购物车,结账等。

图3-3 购物车前台模块图3-4购物车展示界面清空购物车图3-5清空购物车界面删除购物车中的某教材图3-6删除购物车某教材4:回顾商品模块当您想看曾经浏览过的商品时,可以点击查看浏览的历史记录,根据最近浏览的显示记录排序图3-7 回顾商品模块5:结账模块在购物车进行结算以后,会跳转至结账界面,系统会显示当前的信用卡姓名,信用卡帐号,当您提交时就会结算成功,并且通过事务管理防止重复提交图3-8 结账模块界面余额不足时提示图3-8 余额不足界面6:订单页面模块在购物车进行结算以后,就会生成订单,订单会显示订单号、收货人、地址、电话等信息。

点击查看详情就可以进入订单详情页面图3-9 订单页面模块4数据库分析与设计4.1数据库分析对于以上模块的划分以及分析我们建立网上购物管理系统数据库,建了5个表,分别是帐户表(account),书籍信息表(mybooks),订单表(trade),订单项目表(tradeItem),用户信息管理(usersInfo),各表的实现的功能在上述模块设计中已经指出,此刻不再赘述。

帐户表(account)中的各列分别为:帐户编号(accounted)主码,帐户余额balance书籍信息表(mybooks)中的各列分别为:书籍(Id)主码,作者(Author),标题(Title),价格(Price),出版日期(Publishingdate),车辆类型(Salesamount),车辆规格(Storenumber),单价预算(Remark)订单表(trade)中的各列分别为:订单编号(tradeid)主码,用户编号(userid)外码,订单日期(tradetime)订单项目表(tradeItem)中的各列分别为:订单编号(itemid)主码,书籍编号(bookid)外码,(quantity),使用年限(tradeid)用户信息管理(usersInfo)中的各列分别为:用户编号(userid),用户名(username),帐户编号(accountid)4.2系统整体ER图的设计图4-1 系统整体ER图设计4.3数据库设计帐户表(account)设计图4-2帐户表(account)设计书籍信息表(mybooks)设计图4-3书籍信息表(mybooks)设计订单表(trade)设计图4-4订单表(trade)设计订单项目表(tradeItem)设计图4-5订单项目表(tradeItem)设计用户信息表(userinfo)设计图4-6 用户信息表(userinfo)设计5编码,实现及测试5.1各功能源代码5.1.1 分页的实现public List<MyBook>getPageList(CriteriaBookcb, int pageSize,String method) { String sql=null;System.out.println(" method------------>"+method);if(method.equals("price")){sql="SELECT id, author, title, price, publishingDate, " +"salesAmount, storeNumber, remark FROM mybooks " +"WHERE price >= ? AND price <= ?order by price desc "+"LIMIT ?, ?";}elseif(method.equals("salesamount")){sql="SELECT id, author, title, price, publishingDate, " +"salesAmount, storeNumber, remark FROM mybooks " +"WHERE price >= ? AND price <= ?order by salesamount "+"LIMIT ?, ?";}elseif(method.equals("publishingdate")){sql="SELECT id, author, title, price, publishingDate, " +"salesAmount, storeNumber, remark FROM mybooks " +"WHERE price >= ? AND price <= ?order by publishingdate "+"LIMIT ?, ?";}else{sql="SELECT id, author, title, price, publishingDate, " +"salesAmount, storeNumber, remark FROM mybooks " +"WHERE price >= ? AND price <= ?order by price "+"LIMIT ?, ?";}return getForList(sql,cb.getMinPrice(),cb.getMaxPrice(),(cb.getPageNo()-1)*pageSize,pageSize); 5.1.2:运用ajax技术实现页面的局部刷新//ajax修改单个商品的数量//1.获取页面中所有的text,并为其添加onclick事件$(":text").change(function(){var quantityVal = $.trim(this.value);var reg=/^\d+$/g;var quantity=-1;var flag=false;if(reg.test(quantityVal)){quantity=parseInt(quantityVal);if(quantity>=0)flag=true;}if(!flag){alert('输入的数量不合法');$(this).val($(this).attr("class"));return ;}var$tr = $(this).parent().parent();var title = $.trim($tr.find("td:first").text());if(quantity==0){var flag2=confirm("确定要删除"+title+"吗?");if(flag2){var serializeVal = $(":hidden").serialize();var href=$tr.find("td:last").find("a").attr("href");window.location.href=href+ "&" + serializeVal;;return ;}}var flag = confirm("确定要修改" + title + "的数量吗?");if(!flag){$(this).val($(this).attr("class"));return;}//2. 请求地址为: bookServletvar url = "Books";//3. 请求参数为: method:updateItemQuantity, id:name属性值, quantity:val, time:new Date()var idVal = $.trim();var args = {"method":"updateItemQuantity", "id":idVal, "quantity":quantityVal, "time":new Date()};//4. 在updateItemQuantity方法中, 获取quanity, id, 再获取购物车对象, 调用 service 的方法做修改//5. 传回 JSON 数据: bookNumber:xx, totalMoney//6. 更新当前页面的bookNumber和totalMoney$.post(url, args, function(data){var bookNumber = data.bookNumber;var totalMoney = data.totalMoney;$("#totalMoney").text("总金额: ¥" + totalMoney);$("#bookNumber").text("您的购物车中共有"+ bookNumber + "本书");},"JSON");});5.1.3:运用ThreadLocal类实现数据库的连接与当前线程绑定,实现结账的事务操作publicvoid doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {Connection connection = null;try {connection = DBUtils.getConnection();connection.setAutoCommit(false);ConnectionContext.getInstance().bind(connection);chain.doFilter(request, response);mit();} catch (Exception e) {e.printStackTrace();try {connection.rollback();} catch (SQLException e1) {e1.printStackTrace();}HttpServletResponseresp = (HttpServletResponse) response;HttpServletRequestreq = (HttpServletRequest) request;resp.sendRedirect(req.getContextPath() + "/error-1.jsp");} finally{ConnectionContext.getInstance().remove();DBUtils.Release(connection);}}5.1.4:使用过滤器实现页面的编码publicvoid doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {String encoding =filterConfig.getServletContext().getInitParameter("encoding");request.setCharacterEncoding(encoding);chain.doFilter(request, response);}5.1.5:数据库底层操作,运用泛型技术和反射技术public class BaseDao<T> implements DAO<T> {privateQueryRunnerqueryRunner=new QueryRunner();private Class<T>clazz;publicBaseDao() {clazz = ReflectionUtils.getSuperGenericType(getClass());System.out.println(clazz);}@Overridepublic long insert(String sql, Object... args) {long id=0;Connection conn=ConnectionContext.getInstance().get();try {PreparedStatementprepareStatement=conn.prepareStatement(sql,java.sql.Statement.RETURN_GENERA TED_KEYS );for(inti=0;i<args.length;i++){prepareStatement.setObject(i+1, args[i]);}prepareStatement.executeUpdate();ResultSetresultSet=prepareStatement.getGeneratedKeys();if(resultSet.next())id=resultSet.getLong(1);}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return id;}@Overridepublic void update(String sql, Object... args) {Connection conn=ConnectionContext.getInstance().get();try {queryRunner.update(conn, sql, args);} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}@Overridepublic T query(String sql, Object... args) {Connection conn=ConnectionContext.getInstance().get();try {return (T)queryRunner.query(conn, sql, new BeanHandler<T>(clazz), args);} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return null;}@SuppressWarnings("unchecked")@Overridepublic<V> V getSingleValue(String sql, Object... args) {Connection conn=ConnectionContext.getInstance().get();try {return (V) queryRunner.query(conn, sql, new ScalarHandler(), args);} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return null;}@Overridepublic void batch(String sql, Object[]... args) {Connection conn=ConnectionContext.getInstance().get();try {queryRunner.batch(conn, sql, args);} catch (SQLException e) {e.printStackTrace();}}@Overridepublic List<T>getForList(String sql, Object... args) {Connection conn=ConnectionContext.getInstance().get();try {System.out.println("sql-----------"+sql);returnqueryRunner.query(conn, sql, new BeanListHandler<T>(clazz),args);} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return null;}}5.1.6:使用session防止表单重复提交publicvoid cash(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, InterruptedException {HttpSession session=request.getSession();Thread.sleep(5000);String username=request.getParameter("username");String accountId=request.getParameter("accountId");StringBuffer errors=validateFormField(username, accountId);if(errors.toString().equals("")){errors=validateUser(username, accountId);if(errors.toString().equals("")){errors=validateBookStoreNumber(request);if(errors.toString().equals("")){errors=validateBalance(request,accountId);}}}String code=(String) session.getAttribute("code");System.out.println(code+"---------");String codeRe=request.getParameter("checkCode");if(!code.equals(codeRe)){errors.append("验证码输入不正确");}if(!errors.toString().equals("")){request.setAttribute("errors", errors);request.getRequestDispatcher("/WEB-INF/pages/cash.jsp").forward(request, response);return ;}String val=request.getParameter("date");String valS=(String) session.getAttribute("date");if(valS!=null&&valS.equals(val)){service.cash(BookStoreWebUtils.getShopCart(request),username,accountId) ;request.setAttribute("username", username);request.getRequestDispatcher("/success.jsp").forward(request, response);session.removeAttribute("date");}if(valS==null){request.getRequestDispatcher("/WEB-INF/pages/error.jsp").forward(reques t, response);}}5.1.7:使用数据库连接池<?xml version="1.0"encoding="UTF-8"?><c3p0-config><named-config name="javawebapp"><property name="user">root</property><property name="password">123456</property><property name="jdbcUrl">jdbc:mysql:///bookstore</property><property name="driverClass">com.mysql.jdbc.Driver</property><property name="acquireIncrement">2</property><property name="initialPoolSize">5</property><property name="minPoolSize">5</property><property name="maxPoolSize">10</property><property name="maxStatements">20</property><property name="maxStatementsPerConnection">5</property></named-config></c3p0-config>6 结论6.1系统优点系统实现了网上购物商城的基本功能,可以很好的完成网上购物的一系列流程。

相关主题