JSP网上书店课程设计报告-副本(4)_第1页
JSP网上书店课程设计报告-副本(4)_第2页
JSP网上书店课程设计报告-副本(4)_第3页
JSP网上书店课程设计报告-副本(4)_第4页
JSP网上书店课程设计报告-副本(4)_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、网站设计与开发实验报告设计题目: 网上书城管理系统 专业班级:物流管理 13-2 班学 号: 2013218418 姓 名: 李金远 指导老师: 程浩、许君 2016年12月03日目录1系统分析21.1需求分析21.2数据流图31.3功能分析52数据库设计52.1.ER图52.2数据库逻辑结构设计63系统设计93.1搜索商品,订单生成,会员管理订单和管理员管理订单模块103.2商品管理模块143.3缺货管理及仓库管理模块163.4其他模块183.5数据库的连接204 系统实现214.1登陆模块214.2购物车以及订单模块234.3缺货登记模块304.4其他模块325总结及展望331. 系统分析

2、1-1需求分析 网上书城系统主要是实现网上选书、购书、产生订单等功能的系统。一个典型的网上商城一般都需要实现商品信息的动态提示、购物车管理、客户信息注册登录管理、订单处理等模块。根据网上书店的基本需求,本系统需要完成的具体任务如下:A. 书图查询: 当客户进入网上书店时,应该在主页面中分类显示最新的书目信息以及热卖的图书信息以供客户选择所需图书,同时也应该提供按照图书名称,或者类别查询所需书目信息的功能。B. 购物车管理:当客户选择购买某图书产品时,应该能够将对应图书信息,如:价格、数量记录到对应的购物车中,并允许客户返回书目查询页面,选择其他商品,并添加到购物车中,当对应的购物订单付款成功后

3、生成后,应该能够自动清除以生成订单的购物车中的信息。C. 订单处理:对应客户购买图书商品信息的需求,在确定了所购图书商品的价格、数量等信息后,提示用户选择对应的送货方式及付款方式,最终生成对应的订单记录,并通过后续的订单是否执行来进行后续的出货、送货的处理。D. 会员注册:为了能够实现图书商品的购买,需要管理客户相关的联系方式、送货地点等相关的信息。E. 留言回复:会员能给商城留言,商城的管理员能对未回复的留言进行回复,同时对于回复的内容相应的会员可以查看。F. 公告管理:管理员能够修改公告,并在首页可见G. 商品管理:管理员能够管理商品的上下架以及对商品的基本信息进行修改。H. 仓库管理:管

4、理员对已经付款的订单进行发货处理,并在仓库管理中对发货商品进行出库,同时也能够对缺货的商品进行出货。I. 缺货登记:会员在给相应缺货的商品登记后,管理员可以查看各个缺货信息,相应的货物入库后管理员能告知会员商品已经到货。J. 物流管理:管理员选择相应的物流公司进行配送,也可以更改对物流公司的选择。若单笔订单的价格超过了50元,可以免去物流配送费。1-2数据流图1-2-1顶层:1-2-2第一层: 1-2-3处理订单细化1-2-4发货处理细化1-2-5热卖统计细化1-2-6物流管理细化 1-2-7库存管理细化 1-2-7缺货登记细化1-2-8处理留言细化 1-2-9留言回复细化1-3功能分析1-3

5、-1前台部分1-3-1后台部分2. 数据库设计2-1 ER图2-1-1 总 ER图2-1-2 分ER图顾客,物流,留言,回复订单,订单详细商品,缺货商品 2-2数据库逻辑结构设计表1:会员信息表(member)字段名类型含义及注释usernamevarchar主码passwordvarcharemailvarcharzipcodevarcharaddressvarcharstateint默认为1,0为冻结表2:商品信息表(books)字段名类型含义及注释IDvarchar主码,自动获得picnamevarchar图片文件名superIDvarchar大类号,与supertype相关subIDv

6、archar小类号,与subtype相关namevarcharintrovarcharauthorvarcharpublishmentvarcharsupplyintpriceintnewgoodsint是否新品,1是0否stateint是否发布中,1是0否buysnumberint购买人数,默认为0表3:订单信息表(book)字段名类型含义及注释orderIDvarchar主码,自动获得usernamevarchar用户名truenamevarchar收件人姓名addressvarchar收件人地址postcodevarchar收件人邮编telvarchar收件人电话wlpriceint物流

7、价格payint总价(含物流)enforceint是否付款,1为已付,0为未付stateint发货状态,1为已发,0为未发表4:留言信息表(note)字段名类型含义及注释noteIDvarchar主码,自动获得usernamevarchar用户名headvarchar留言标题contentvarchar留言内容statevarchar是否回复,1已回0为回表5:回复信息表(reply)字段名类型含义及注释noteIDvarchar与note表相关contentvarchar回复内容表6:订单明细信息表(detail)字段名类型含义及注释orderIDvarchar与book订单表相关bookI

8、Dvarcharbookpricevarcharbooknamevarcharqtyint数量表7:物流信息表(wuliu)字段名类型含义及注释wlIDvarchar主码,自动获得wlnamevarchar公司名wlpriceint价格wlstateint是否选择,1为选中,仅有一个选中表8:大类信息表(supertype)字段名类型含义及注释superIDvarchar主码,自动获得supernamevarchar大类名表9:小类信息表(subtype)字段名类型含义及注释subIDvarchar主码,自动获得subnamevarchar小类名表10:缺货信息表(lack)字段名类型含义及注

9、释usernamevarchar用户名bookIDvarchar书号booknamevarchar书名stateint管理员是否查看表10:公告信息表(bbs)字段名类型含义及注释contentvarchar公告内容(仅更新)3. 系统设计总体设计图用户表示层(视图)控制处理层(控制器)业务逻辑层(模型) jspActionFormActionDAO VO3-1搜索商品,订单生成,会员管理订单和管理员管理订单模块3-1-1流程图3-1-2系统调用图 购物模块 个人订单和后台订单模块3-1-3用到的视图,重要的类及控制器说明jsp页面列表如下表所示:JSP文件名说明bookshow.jsp搜索显

10、示bookinfo.jsp书的详细显示cart.jsp购物车界面order.jsp输入订单信息ordercomfirm.jsp订单确认bgordermange.jsp后台订单管理memorder.jsp个人订单管理memorderdetail.jsp订单详细信息数据封装类包括:编号类名功能说明1BookVO封装书的信息类2CartVO封装购物车的信息3 OrderVO封装订单的信息4DetailVO封装订单条目信息控制器类包括:编号类名包含DAO及功能返回值1ShoppingCartAction2OrderAction OrderDAO 插入订单 OrderVO3 OrderComfirmAc

11、tionOrderComfirmDAO 执行订单无4memOrderActionmemOrderDAO 显示用户订单OrderVO5 EnpayActionOrderComfirmDAO 执行订单无6 bgOrderMangAction1,show ShowAllOrderDAO 显示2,del DelOrderDAO 删除distribute DisOrderDAO发货HashMap OrderVOHashMap OrderVO3-1-4视图页面的详细说明搜索出的商品bookshow.jsp页面详细功能及描述l 获取搜索的关键字l 分页显示符合关键字并且在发布中的商品l 商品缺货(数量不足)

12、则提供用户缺货登记的超级链接l 提供将选中的商品加入购物车的超级链接l 点击商品图标可以详细查看商品本界面显示了搜索出符合关键字的并且在发布中的商品,您可以点击加入购物车将该商品直接加入购物车,也可以点击图标进行商品信息的详细查看,如果该商品数量不足,可以使用“缺货登记的超级链接进行缺货登记。首先需要登录才能完成。显示购物车信息cart.jsp页面详细功能及描述l 获取该用户购物车信息的集合l 提交更新数量的表单l 循环显示每一条购物信息l 设置购买数量的文本框l 显示总价l 显示每本图书的书名,数量,单价l 对在购物车中的图书删除l 提交更新的按钮l 提交继续购买的超级链接l 提交生成订单的

13、超级链接本界面是用户选择购买某种图书后,想对购物车进行查看访问的界面,界面提供了现有的购买记录,也能对数量进行修改和对相应的物品进行删除。单击“更新”按钮后,将提交给“cart.do?method = update”请求,进行更新处理,也可以单击“继续购书”,提交给“bookSearch.do”请求返回主页面继续购书。同时,单击“生成订单”进行订单的生成操作。填写订单信息order.jsp页面的详细功及描述l 获取用户登录用户名l 填写收件人姓名,地址,联系电话,邮编l 提交给订单生成的超级链接 本界面是用户在购物车点击生成订单的超级链接后进入的页面,首先对登录的该用户进行用户名读取和Emai

14、l的读取,同时,由于收件人可能课注册人不一样,所以需要重新对收件人姓名,地址,联系电话,邮编进行输入,当点击确认后,将提交给“order.do”进行订单号的获取以及对订单表及订单条目表进行数据插入。订单信息确认ordercomfirm.jsp页面的详细功及描述l 订单信息及商品信息的输出l 返回继续购书的超级链接l 确认付款的超级链接本界面是刚才进行订单填写的订单的输出,能够显示出订单的信息及购买商品的信息,特别能输出订单号,由于涉及免运费,则提供继续返回购书的超级链接,当点击“确认付款”的超级链接后,系统将数据库中订单表中的执行状态置为“已执行”。然后自动返回首页。个人订单信息查看memor

15、der.jsp页面的详细功及描述l 不同的用户根据登陆的用户名查看个人的订单信息l 订单号显示为超级链接,点击进入相应的订单详情查看l 未付款的超级链接,点击进行付款操作l 已经付款的订单可以显示是否发货本界面是不同的用户查看自己订单信息,初步显示订单号,收件人姓名,订单价格以及订单执行状态,每个订单号是超级链接,点击进入查看订单详情及相应的商品购买信息。在“订单状态”,未付款为超级链接,点击即可进行付款。若已经付款的订单,可以看见是否发货后台订单信息管理bgordermange.jsp页面的详细功及描述l 显示所有的订单信息l 已经付款的订单若未发货可以直接发货l 点击相应的订单号查看订单详

16、细信息l 未付款的订单可以直接删除3-2商品管理模块3-2-1流程图3-2-2系统调用图3-1-3用到的视图,重要的类及控制器说明jsp页面列表如下表所示:JSP文件名说明addbook.jsp发布商品bgtype.jsp添加第二类别bookmangjsp商品管理updatebookinfo.jsp更新商品信息数据封装类包括:编号类名功能说明1BookVO封装书的信息类2SuperTypeVO封装大类的信息3 SubTyeVO封装小类的信息控制器类包括:编号类名包含DAO及功能返回值1addBookAction addBookDAO2bgBookMangAction1. show ShowAl

17、lBookDAO 显示所有商品2. statebookstateDAO 上下架3. delDelbookDAO 删除 Hashmap BookVOHashmap BookVO3 bgTypeAction1. show ShowTypeDAO 显示大类2. showsubShowSubTypeDAO 显示对应大类的小类3. updateUpdateSubTypeDAO 添加小类ArrayList SuperTypeVOArrayList SubTypeVO3-2-4视图页面的详细说明商品发布页面addbook.jsp详细功能及描述l 提供一些基本信息的文本框进行商品基本信息的输入 本界面提供了商

18、品的基本信息的输入,将输入的基本信息传给控制器“addbook.do”,调用相应的类插入数据库,商品ID号是自动生成的。商品管理页面bookmang.jsp详细功能及描述l 显示所有商品的基本信息l 点击对应的商品ID可以查看详细的信息l 提供商品的状态,并可以根据超级链接进行相应的商品上下架的操作l 可以删除指定的商品 本界面通过先调用”bookmang.do”中的show控制器从数据库中读取所有商品的信息。在该界面中,点击对应的ID号可以查看商品的全部信息。后面的商品状态时看商品是否在架上,商品STATE字段如果是1,显示已发布,点击对应的超链接则下架,同理STATE字段是0,则未发布,点

19、击上架。最后面有商品的删除超级链接,可以删除指定的商品。商品类别管理页面bgbooktype.jsp详细功能及描述l 在这页显示所有的大类l 点击进入对应的大类显示的小类页面l 提供添加小类的文本框 本界面首先调用”bgtype.do”的“show”显示所有的大类,并在其后跟上超级练级,点击对应的超级链接则调用”bgtype.do”的“subshow”显示相应的小类,提供了添加小类的文本框,输入则小类添加成功,调用”bgtype.do”的“update”传入数据库插入。3-3缺货管理及仓库管理模块3-3-1流程图3-3-2系统调用图3-3-3用到的视图,重要的类及控制器说明jsp页面列表如下表

20、所示:JSP文件名说明memlack.jsp个人缺货商品查看bglack.jsp后台缺货商品查看stock.jsp仓库显示outsupply,jsp insupply.jsp出/入库填写数据封装类包括:编号类名功能说明1LackVO封装缺货信息类控制器类包括:编号类名包含DAO及功能返回值1bgLackAction1. show ShowAllLackDAO 显示所有的缺货物品2. addaddLackDAO插入缺货物品信息3. membershowmemLackDAO个人缺货查看ArrayList LackVOArrayList LackVO2WarehouseAction1. show S

21、howStockDAO 显示所有商品库存2. out OutDAO出库 3. in inDAO入库ArrayList BookVO3-3-4视图页面的详细说明个人缺货查看页面memlack.jsp详细功能及描述l 提供了个人已经登记的缺货信息显示,l 显示商家是否回复 本界面首先调用”bglack.do”中的”membershow”显示个人已经登记的缺货信息,并且能看到商家对缺货信息是否回复。后台缺货管理页面bglack.jsp详细功能及描述l 显示所有登记了缺货的用户及对应商品的信息l 能够对没有回复用户的缺货信息进行缺货回复本界面首先调用”bglack.do”中的” show”显示所有缺货

22、信息,并且对没有回复的信息进行回复(回复即代表对应的商品到货).后台库存管理页面stock.jsp详细功能及描述l 显示所有商品的库存量l 手动设置出库l 手动设置入库本界面首先调用”stock.do”中的” show”显示所有商品的库存量,并且设置了相应的出库,入库的超级链接,点击则进入相应的页面进行出入可的操作。3-4其他模块由于其他模快功能性与前面大部分一致,故在此略述,给出相应的系统调用图,相应的类和控制器通过系统调用图给出,对重要的类做说明。3-4-1留言回复模块系统调用图重要的类:NoteVO 封装留言的类 ReplyVO 封装回复的类memReplyDAO 管理员回复3-4-2会

23、员管理模块系统调用图重要的类:MemVO 封装会员信息的类 memsateDAO 对会员的状态进行改变,冻结/解冻3-4-3登陆注册模块 3-4-4物流模块系统调用图重要的类:WLVO 封装物流的类 3-5数据库的链接 本次实验依然采用了JDBCODBC桥的方式进行数据库的链接,但是链接过程用类名为Db的JAVABEAN封装,返回一个返回值是Connection的方法,以后的DAO需要进行数据库的链接操作时,只要调用该方法即可。4. 系统实现4-1登陆模块效果图:(效果图借鉴互联网) 首先输入用户名和密码,若其中有一为空值则返回提示,返回重新输入(图一),将不为空的用户名和密码传给LoginA

24、ction,首先根据保存在session变量中的login值进行判断,是从订单转过来的登陆还是正常的登陆,login!=null,则为订单传递过来的登陆,否则为正常的登陆,调用LoginDAO对传入的值进行判断,返回不同的返回值对对应用户,管理员,密码为错,账户冻结四种情况,(图二,三,四,五)。图二 图三 图四 图五关键代码:LoginAction String password = request.getParameter("password");String username = request.getParameter("username");

25、if(username=""|password="") request.setAttribute("info", "d");return mapping.findForward("info"); String login = (String)session.getAttribute("login");username=Chinese.convert(username);int i = 0;if (login!=null) /由订单页面转来的登陆 LoginDAO logind

26、ao = new LoginDAO();i = logindao.loginselect(username,password);if (i=1) request.setAttribute("login","4"); /跳转到订单生成session.setAttribute("username", username);return mapping.findForward("show");else request.setAttribute("login","3");return

27、mapping.findForward("show"); else /正常的登陆 if (username.equals("weizenan")&&(password.equals("123456") request.setAttribute("login","1"); return mapping.findForward("show"); else LoginDAO dao = new LoginDAO(); i = dao.loginselect(user

28、name,password);if (i=1) request.setAttribute("login","2")/登陆成功,返回首页session.setAttribute("username", username);return mapping.findForward("show");if (i=2) request.setAttribute("login","5"); /账户冻结中return mapping.findForward("show");

29、 else request.setAttribute("login","3"); /用户名或密码错误 return mapping.findForward("show"); LoginDAOsql = "select * from member where username=? "pre = con.prepareStatement(sql);pre.setString(1,username);ResultSet rs = pre.executeQuery();while (rs.next()String pw =

30、 rs.getString("password");int state= rs.getInt("state");if (password.equals(pw)&&state!=0)return 1; 用户名密码符合if (password.equals(pw)&&state=0) return 2; 账户冻结 . return 0; 用户名或密码错误4-2购物车以及订单模块4-2-1购物车:效果图: 搜索图 详情查看购物车图搜索采用分页搜索,将搜索出的商品可以加入购物车,也可以点击书名进行详情查看。提供加入购物车的超级链接

31、。关键代码:ShoppingCartAction:/添加模块public ActionForward add( int qty=0; cart=(Map)session.getAttribute("cart"); if(cart=null) cart=new HashMap(); if(cart.containsKey(bookID) CartVO tmp=(CartVO)cart.get(bookID); qty=Integer.parseInt(tmp.getQty(); qty+; tmp.setQty(String.valueOf(qty); cart.put(bo

32、okID,tmp); else CartVO vo=new CartVO(); vo.setBookID(bookID); vo.setBookName(bookName); vo.setBookPrice(bookPrice); vo.setQty("1"); cart.put(bookID,vo); session.setAttribute("cart",cart); return mapping.findForward("show");说明:当点击“加至购物车”的超级连接后,传给add模块,如果原来封装购物车信息的CartVO没

33、有该商品,则自动生成一个,否则商品数量自动加“1”,保存在CartVO中然后掉给购物车页面显示/删除模块 public ActionForward del( String bookID=request.getParameter("bookID"); cart=(Map)session.getAttribute("cart"); if(cart.containsKey(bookID) cart.remove(bookID); session.setAttribute("cart",cart); return mapping.findFo

34、rward("show");说明:当点击每个商品后面的“删除”的超级链接后,根据传入的”bookID”,从购物车中删除相应的商品/查看模块 public ActionForward list( return mapping.findForward("show"); 说明:查看购物车 /更新模块 public ActionForward update( CartQtyForm qtyForm = (CartQtyForm)form; Map qtyMap=qtyForm.getMap(); Set idSet=qtyMap.keySet(); Iterat

35、or it=idSet.iterator(); HttpSession session=request.getSession(); Map cart=(Map)session.getAttribute("cart"); while(it.hasNext() String bookID=(String)it.next(); String newQty=(String)qtyMap.get(bookID); if(cart.containsKey(bookID) CartVO vo=(CartVO)cart.get(bookID); vo.setQty(newQty); car

36、t.put(bookID,vo); session.setAttribute("cart",cart); return mapping.findForward("show"); 说明:当在购物车的数量文本框输入新的值后,首先自动进行表单校验,然后提交给当前页面,并在CartVO进行保存。相应的,总计金额SUM也要进行自动更新。效果图: 4-2-2订单模块:最终订单效果图:关键代码:sql = "call calculate_id(?)"proc = con.prepareCall(sql);proc.registerOutParame

37、ter(1, java.sql.Types.VARCHAR);proc.execute();orderID = proc.getString(1);/生成唯一订单号sql = "insert into detail values(?,?,?,?)"pre = con.prepareStatement(sql);Set keySet = cart.keySet();Iterator it = keySet.iterator(); /进行对商品明细的插入while(it.hasNext()String bookID = (String)it.next();CartVO vo =

38、 (CartVO)cart.get(bookID);pre.setString(1, orderID);pre.setString(2,vo.getBookID();Double price = Double.parseDouble(vo.getBookPrice();pre.setDouble(3, price);int qty = Integer.parseInt(vo.getQty();pre.setInt(4, qty);pre.executeUpdate();String sq = "select buysnumber from books where ID =?"

39、;/每商品后买数加一,多个数量更新pre2 = con.prepareStatement(sq);pre2.setString(1, vo.getBookID();ResultSet rs = pre2.executeQuery();int buys = 0;while(rs.next()buys = rs.getInt("buysnumber");rs.close();String s = "update books set buysnumber = ? where ID = ?"pre2 = con.prepareStatement(s);buys

40、= buys + qty;pre2.setInt(1, buys);pre2.setString(2,vo.getBookID();pre2.executeUpdate();pre.executeUpdate(); /对订单的插入sql = "insert into book(orderID,userName,email,trueName,address,postcode,tel,wlprice,pay,enforce) values(?,?,?,?,?,?,?,?,?,?)"pre = con.prepareStatement(sql);pre.setString(1,

41、orderID);pre.setString(2, username);pre.setString(3, rname);pre.setString(4, raddress);pre.setString(5, rcode);pre.setString(6, rphone);pre.setDouble(7, wlprice);pre.setDouble(8,sum);/总价pre.setInt(9,0);pre.setInt(10, 0); /vo类封装 ordervo.setOrderID(orderID); ordervo.setEmail(email); ordervo.setUsernam

42、e(username); ordervo.setRename(rname); ordervo.setReaddress(raddress); ordervo.setRephone(rphone); ordervo.setRepostcode(rcode); ordervo.setPay(sum); pre.executeUpdate();说明:当向数据库插入订单及订单条目明细后,将订单的所有内容重新封装到OrderVO类中,以便后续的使用,并且在订单表将付款状态置为“未付款”最终的订单界面效果:此时订单为未付款点击后订单状态改变(未付款-已付款),处于未发货状态管理员对已经付款的订单进行发货处

43、理发货关键代码: bgOrderAction show( Map order =null; order = new HashMap(); ShowAllOrderDAO showall = new ShowAllOrderDAO(); order = showall.showallorder(); session.setAttribute("order",order); 说明:读取所有的订单信息,并存入 hashmap中,然后显示给管理员 del( String orderID=request.getParameter("orderID"); Map o

44、rder = null; DelOrderDAO delorder = new DelOrderDAO(); delorder.delorder(orderID); order = (Map)session.getAttribute("order"); if (order.containsKey(orderID) order.remove(orderID); session.setAttribute("order", order); 说明:对未付款的订单进行删除,首先在hashmap表中删除,最后从数据库删除,这样避免了多次访问数据库,保证了数据库的稳定性,以后每次读订单信息都是读hash表。distribute( String orderID=request.getParameter("orderID"); DisOrderDAO dao = new DisOrderDAO(); dao.disorder(orderID);说明:对已经付款的订单进行发货处理DisOrderDAOpublic class DisOrderDAO public void disorder(String orderID)Connection con = null;Pre

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论