1、企业项目综合实训报告目 录1.绪论11.1课题研究背景11.2课题研究意义11.3国内外的发展现状22.需求分析32.1 技术可行性分析32.2 操作可行性分析32.3 成本可行性分析33.总体设计44.详细设计64.1 数据库设计64.1.1 概念建模64.1.2 物理建模64.1.3数据库表结构84.2 功能设计124.3 代码设计144.3.1后台功能144.3.2前端功能185.结论27参考文献281.绪论1.1课题研究背景随着社会经济的发展和信息技术的高度发达,越来越多的企业和个人的购物方式和以前有了实质的改变,网上商店逐渐增多,交易的方式也从以前的网上发布,然后网下交易购买,发展到
2、了直接通过网络进行在线支付,随着物流的发展,交易的物品也从以前的大件物品,发展到现在几乎所有商品都能在网上购买。因此,为了更方便顾客购物,就需要有一个功能比较完善的网上商城系统来实现这个平台。网上商城系统是解决实体商城各种问题的一种方法。因此该课题具有一定的意义和研究价值。1.2课题研究意义相对于传统的实体商城,网上商城投资少,回收快。一项针对中国中小企业的情况调查显示,个人在网下启动销售公司的平均费用至少5万元,而网上开店建店成本非常小。一般说,筹办一家网上的商店投入很小,不用去办营业执照,不用去租门面,不用囤积货品,所需资金不过1500元左右;网上商店比同等规模的地面商店“租金”要低得多,
3、同时租金不会因为营业面积的增加而增加,投资者也不用为延长营业时间而增加额外的费用。基本不需要占压资金。传统商店的进货资金少则几千元,多则数万元,而网上商店则不需要压资金。24小时营业时间。网上商店延长了商店的营业时间,一天24小时、一年365天不停地运作,无须专人值班看店,都可照常营业。传统店铺的营业时间一般为8-12小时,遇上坏天气或者老板、店员有急事也不得不暂时休息。销售规模不受地盘限制。传统商店有多大就只能摆放多少商品,生意大小常常被小店面积限制。而在网上,即便在地面上只有一个小商店,或者干脆就没有门面,开店的生意却可以照样做得很大。不受店面空间的限制。哪怕只是街边小店,在网上却可以拥有
4、百货大楼那么大的店面,只要投资者愿意,可以摆上成千上万种商品。目前国内最大的专业拍卖网站同时在线的商品要超过10万件已超过一些大超市。不受地理位置影响。不管客户离店有多远,也不管顾客是国内还是国外,在网上,客户一样可以很方便地找到并购买商品。这令消费群体突破了地域的限制,变得无限广阔了。1.3国内外的发展现状伴随着Internet的蓬勃发展,网络购物中心作为电子商务的一种形式正以其高效、低成本的优势,逐步成为新兴的经营模式和理念,人们已不再满足于信息浏览和发布,而是渴望着能够充分享受网络所带来的更多的便利。客户足不出户便可以方便快捷的选购自己喜欢的商品,这正是网络购物中心为客户带来的好处。敏锐
5、的网络商家当然不会错过这样绝好的机会,越来越多的网站投身到提供网络购物服务的行列中来,一个基于Internet的全球电子商务框架正在形成。在我国,网上购物从无到有也不过短短几年时间。我国第一家网上购物发生在1996年,燕莎友谊商场首次通过网上商城售出一个景泰蓝,虽然货款的支付不是在网上进行的,但这毕竟为我国零售业奏出了网上购物的先声。根据CNNIC的统计结果,截止2004年1月中国有互联网用户7950万人,而又有40.7%以上的网民在过去的一年里有过网上购物经历,这就说明中国有网上购物的用户达是3235.7万人,并且这一数字还在以17%左右的速度增长,到2006年中国网上购物用户将达到6962
6、万人,这说明在中国发展网上购物具有良好的群众基础,网上购物方式日趋被大家所接受。因此,设计一个网上购物网站具有非常好的开发与应用前景。2.需求分析2.1 技术可行性分析本系统在前台用在前台用JSP进行页面开发和管理用户界面,提示信息完善,界面友好,具有较强的亲和力,后台采用MYSQL数据开发和管理数据库,对数据库操作采用事务处理机制,具有强大的错误处理功能。本系统的开发环境是使用现在非常流行的开源开发工具Eclipse和Tomcat服务器。使用的灵活、以及他们当前的广泛实际应用,充分说明本系统在技术方面可行。2.2 操作可行性分析本系统采用的是网上管理,非常简单、易懂,不需要具有非常高的计算机
7、专业知识,只需要管理员能够上网,就可对商城进行维护。2.3 成本可行性分析整个开发过程只需要一台装有上述所需求的各种软件的PC机就可以实现全部的开发任务。目前的计算机硬件市场竞争比较激烈,在价格上都出现了从没有过低廉;而所需要的各种软件,在相关产品的官方网站上都可以免费下载,而且还不断的有增加了最新功能的升级版的出现。因此,整个开发成本可以说是非常的低廉,这也为我进一步完善我的网站提供了更大的方便。在使用成本上,用户只需要拥有一台能够连接到国际互联网上的计算机,通过注册就可以在世界的任何一个角落使用网站的全部功能和服务。而且对计算机的硬件的需求也不是很高,软件方面也没有特殊的需求,极大了方便了
8、广大用的访问与使用。因此,从成本可行性分析来看,这个网站体现了经济实惠,但是功能强大的特点。3.总体设计网上商城系统又称在线商城系统,其功能主要包含商品的管理、会员的管理、订单的管理、在线支付等。本次实训将由指导老师带领学生有Java EE技术完成“网上商城系统”的设计与开发,主要开发的功能如图3-1所示。商城平台用户管理员注册下订单浏览商品搜索商品查看订单订单管理会员管理商品管理配送管理图3-1 功能图1)后台功能商品模块:包括后台商品库存管理、上货、出货、编辑管理和商品分类管理、商品品牌管理等。 订单模块:在线订单程序,使消费者能够顺利的通过Web在线的方式,直接生成购买订单。会员模块:在
9、购物系统中,集成会员注册是吸引会员进行二次购买和提升转换率最好的方式。配送模块:购物系统集成的物流配送方式,从而方便消费者对物流方式进行在线选择。如:EMS、顺风等等。2)前端功能商品搜索:通过前端界面,以标准的或者其他个性化的方式向用户展示商品各类信息,完成购物系统内信息流的传递。购物车:用户可对想要购买的商品进行网上订购,在购物过程中,随时增删商品。商品浏览:随着电子商务的发展商品图片成为吸引消费者的第一要素,多图展示即提供前台多张图片的展示,从而提升消费者的购物欲望。 用户管理模块:为了方便于网站的管理,必须由一套完整的用户管理体系。该网站用户管理模块主要实现用户的注册、登录、找回密码3
10、方面功能。 为了全面的了解前端功能,图3-2将前端的购物流程详细的展示。图3-2购物流程4.详细设计4.1 数据库设计4.1.1 概念建模本系统实体包括:管理员、网站、顾客、商品、购物车、订单。如图4-1所示:图4-1 E-R图4.1.2 物理建模数据库表之间关系如图4-1所示:图4-2数据库表关系图4.1.3数据库表结构整个购物系统能运行离不开数据库的支持,数据库在整个系统的最底部发挥着不可忽视的作用。没有了数据库的支撑,系统无法运行。由此可见,系统离不开数据库,在系统之前首先必须保证数据库的准备工作已经完成。本系统采用的是Mysql数据库,数据库的准备工作需要以下几个表来保存整个系统的重要
11、信息,它们分别是:商品表,用来存储购物系统的所有商品的信息,能够根据这个表来管理所有的商品信息,如表4-1所示。表4-1 商品表(product)字段类型长度备注productidint11商品表主键productnamevarchar200商品名categoryidint11分类ID(外键)storecountint11库存量marketpricefloat10市场价salepricefloat10销售价hitint11点击量addtimevarchar200上架时间isdelvarchar255是否下架contenttext商品详情商品图片表,用来存储购物系统的商品的所有图片信息,能够根据
12、这个表来管理商品所有的图片信息,如表4-2所示。表4-2 商品图片表(pic)字段类型长度备注picidint11主键picurlvachar200图片路径productidint11商品ID(外键)分类表,用来存储购物系统的所有商品的分类信息,能够根据这个表来管理所有的分类信息,如表4-3所示。表4-3 分类表(category)字段类型长度备注categoryidint11分类表主键categorynamevarchar100分类名parnetidint11父分类IDlevelint11分类的级商品属性名称表,用来存储购物系统的所有商品属性名称信息,能够根据这个表来管理所有商品属性名称信息
13、,如表4-4所示。表4-4 商品属性名称表(attribute) 字段类型长度备注attributeidint11主键namevarchar100商品属性名字商品属性值表,用来存储购物系统的所有商品属性值的信息,能够根据这个表来管理所有商品属性值的信息,如表4-5所示。表4-5 商品属性值表(value)字段类型长度备注valueidint11主键valuestrvarchar100商品属性值商品属性中间表,用来存储购物系统的所有商品的属性信息,能够根据这个表来管理所有商品的属性信息,如表4-6所示。表4-6 商品属性中间表(attrvalue)字段类型长度备注idint11主键attribu
14、teidint11商品属性名称ID(外键)valueidint11商品属性值ID(外键)productidint11商品ID(外键)发票表,用来存储购物系统的发票信息,能够根据这个表来管理发票,如表4-7所示。表4-7 发票表(invocie)字段类型长度备注invocieidint11主键titlevachar100发票类型contentvachar100明细orderidint11订单ID(外键)订单明细表,用来存储购物系统的所有订单详细信息,能够根据这个表来管理订单详细信息,如表4-8所示。表4-8 订单明细表(orderdetail)字段类型长度备注orderdetailidint11
15、主键productidint11商品表IDproductnamevarchar100商品名salepricefloat10销售价buycountint11购买数量orderidint11订单ID(外键)订单表,用来存储购物系统的所有订单信息,能够根据这个表来管理订单信息,如表4-9所示。表4-9 订单表(orders)字段类型长度备注orderidint11主键ordernovachar100订单编号useridint11用户ID(外键)bzvarchar100标志paywayidint11支付方式ID(外键)sendwayidint11配送方式ID(外键)totalfloat10总价支付方式
16、表,用来存储购物系统的支付信息,能够根据这个表来管理支付信息,如表4-10所示。表4-10 支付方式表(payway)字段类型长度备注paywayidint11主键titlevachar100支付方式收货人信息表,用来存储购物系统的收货人信息,能够根据这个表来管理收货人信息,如表4-11所示。表4-11 收货人信息表(receive)字段类型长度备注receiveidint11主键receivervarchar100收货人addressvarchar100地址mobilevarchar100手机phonevarchar100固话mailvarchar100邮件postcodevarchar25
17、5邮编 配送方式表,用来存储购物系统的配送方式,能够根据这个表来管理配送方式,如表4-12所示。表4-12 配送方式表(sendway)字段类型长度备注sendwayidint11主键sendwayvarchar100配送方式sendmoneyfloat10运费用户表,用来存储所有会员用户的信息,能够根据这个表管理所有用户,如表4-13所示。表4-13 用户表(user)字段类型长度备注useridint11主键usernamevarchar100用户名passwordvachar100密码realnamevarchar100真实姓名scoreint11积分amountfloat10余额que
18、stionvarchar100问题answervarchar100答案emailvarchar100邮箱telvarchar100电话4.2 功能设计网上商城系统又称在线商城系统,其功能主要包含商品的管理、会员的管理、订单的管理、在线支付等。1)后台功能商品模块:包括后台商品库存管理、上货、出货、编辑管理和商品分类管理、商品品牌管理等。 订单模块:在线订单程序,使消费者能够顺利的通过Web在线的方式,直接生成购买订单。 会员模块:在购物系统中,集成会员注册是吸引会员进行二次购买和提升转换率最好的方式。配送模块:购物系统集成的物流配送方式,从而方便消费者对物流方式进行在线选择。如:EMS、顺风等
19、等。2)前端功能商品搜索:通过前端界面,以标准的或者其他个性化的方式向用户展示商品各类信息,完成购物系统内信息流的传递。购物车:用户可对想要购买的商品进行网上订购,在购物过程中,随时增删商品。商品浏览:随着电子商务的发展商品图片成为吸引消费者的第一要素,多图展示即提供前台多张图片的展示,从而提升消费者的购物欲望。 用户管理模块:为了方便于网站的管理,必须由一套完整的用户管理体系。该网站用户管理模块主要实现用户的注册、登录、找回密码3方面功能。 该购物网站具体功能结构图如图4-3所示。商城平台用户管理员注册购物车浏览商品搜索商品查看订单订单管理会员管理商品管理配送管理图4-3 功能图4.3 代码
20、设计4.3.1后台功能1)添加或修改a.判断是添加还是修改代码/如果有商品ID,说明是编辑int productid=CommonUtil.getIntParameter(request, productid);BaseDAO dao=new BaseDAO();if(productid!=0)/说明是进入修改页面try Map record=dao.listWithPage(a.*,b.categoryname, product a,category b, and a.categoryid=b.categoryid and a.productid=+productid, a.producti
21、d desc, 1, 9999, false).getRecords().get(0); request.setAttribute(record, record); catch (Exception e) e.printStackTrace();String tree=CategoryUtil.makeTree(listcategory);request.setAttribute(tree, tree);request.getRequestDispatcher(addproduct.jsp).forward(request, response);b.添加或修改代码/接收参数String pro
22、ductname = request.getParameter(productname);String categoryid = request.getParameter(categoryid);String storecount = request.getParameter(storecount);String marketprice = request.getParameter(marketprice);String saleprice = request.getParameter(saleprice);String hit = request.getParameter(hit);Stri
23、ng picture = request.getParameter(picture);String addtime = request.getParameter(addtime);String isdel = request.getParameter(isdel);String content = request.getParameter(content);int productid=CommonUtil.getIntParameter(request, productid);try /调用DAOBaseDAO dao=new BaseDAO();int result=0;if(product
24、id!=0)/修改result=dao.update(product,productname=+productname+,categoryid=+categoryid+,storecount=+storecount+,marketprice=+marketprice+,saleprice=+saleprice+,hit=+hit+,picture=+picture+,addtime=+addtime+,isdel=+isdel+,content=+content+, and productid=+productid);else/添加result=dao.add(product,productn
25、ame=+productname+,categoryid=+categoryid+,storecount=+storecount+,marketprice=+marketprice+,saleprice=+saleprice+,hit=+hit+,picture=+picture+,addtime=+addtime+,isdel=+isdel+,content=+content+);String msg=;if(result0)msg=alert(操作成功);window.location.href=productServlet?action=list;elsemsg=alert(操作失败);
26、window.location.href=productServlet?action=list;/把提示信息放入requestrequest.setAttribute(msg, msg);request.getRequestDispatcher(msg.jsp).forward(request, response);c.商品的添加及修改公用一个页面,如图4-4所示。图4-4 添加或修改页面2)商品列表及删除a.列表代码String where= and a.categoryid=b.categoryid;String productname=CommonUtil.getStringParame
27、ter(request,productname);if(!productname.equals()where+= and a.productname like %+productname+%;int categoryid=CommonUtil.getIntParameter(request,categoryid);if(categoryid!=0)where+= and a.categoryid=+categoryid;CommonUtil.getIntParameter(request,categoryname);float startprice=CommonUtil.getFloatPar
28、ameter(request,startprice);float endprice=CommonUtil.getFloatParameter(request,endprice);if(startprice=0 & endprice=0)elsefloat temp=0;if(startpriceendprice)temp=startprice;startprice=endprice;endprice=temp;where+= and a.saleprice=+startprice+ and a.saleprice=+endprice;BaseDAO dao=new BaseDAO();Sear
29、chResult sr=dao.listWithPage(a.*,b.categoryname, product a,category b,where, a.addtime desc,CommonUtil.getPageNo(request), 2,true); request.setAttribute(records, sr.getRecords();request.setAttribute(pb, sr.getPb();List pagecode=new ArrayList();for(int i=1;i0)msg=alert(删除成功);window.location.href=prod
30、uctServlet?action=list;elsemsg=alert(删除失败);window.location.href=productServlet?action=list;request.setAttribute(msg, msg);request.getRequestDispatcher(msg.jsp).forward(request, response);c.列表部分适合删除在一起完成的,如列表图4-5、删除如图4-6所示。图4-5 列表图4-6 删除3)分类管理这一部分包括了分类的添加修改以及删除,基本实现方法与商品管理相同,不同的地方是:分类主要的视图是以分类树的形式出现。
31、如图4-7所示是分类的添加及修改所公用的页面,而图4-8则是分类的删除及列表的页面。图4-7添加修改公用页面 图4-8分类列表4.3.2前端功能1)主页在这部分比较重要的是主页的分类树的实现,如图4-9、4-10所示 。图4-9 主页代码图4-10 主页2)商品列表 在列表部分比较重要的是分页树的实现以及排序方式和分页功能,如图4-11、4-12所示。图4-11列表代码图4-12 列表3)登陆a.可以完成的功能是登陆之后才可以结算。/调用DAOBaseDAO dao=new BaseDAO();String username=CommonUtil.getStringParameter(requ
32、est, username);String password=MD5.md5(CommonUtil.getStringParameter(request, password);String checkcode=CommonUtil.getStringParameter(request, checkcode);/获取SESSIONHttpSession session=request.getSession();String msg=;String rightcode=session.getAttribute(checkcode).toString();/验证码正确if(checkcode.equ
33、als(rightcode)try ListMap records=dao.listWithPage(*, user, and username=+username+ and password=+password+, userid desc, 1, 1, false).getRecords();if(records.size()0) /当前登录用户的信息Map user=records.get(0);session.setAttribute(user, user);msg=alert(登录成功);window.location.href=frontServlet?action=ordercon
34、firm;elsemsg=alert(用户或密码错误);window.location.href=userlogin.jsp; catch (Exception e) e.printStackTrace();elsemsg=alert(验证码错误);window.location.href=userlogin.jsp;request.setAttribute(msg, msg);request.getRequestDispatcher(msg.jsp).forward(request, response);b.登陆如图4-13所示。图4-13 登陆4)将商品放入购物车a.这一部分需要完成的功能
35、是商品放入购物车,并且可以计算出价钱。/这是购买第一件产品,即现在没有车子,我们就创建一个车子if(session.getAttribute(cart)=null)cart=new ArrayListMap();/放入商品图片record.put(picurl, record.get(picurl);/设置商品数量(增加一列)record.put(buycount, buycount);/增加总价record.put(totalprice, BaseCalculate.round(buycount*Float.parseFloat(record.get(saleprice).toString(
36、), 1);/把产品放入车子就行了。cart.add(record);else /说明已经有车子了cart=(ListMap)session.getAttribute(cart);/判断该次购买的产品是否已在车中,默认不在车中boolean inCart=false;/循环车子,判断当前购买的产品是已经购买过(重复购买)for(int i=0;icart.size();i+)/获取每一条车子中已有的产品Map temprecord=cart.get(i);/是重复购买if(temprecord.get(productid).equals(productid)/取出之前购买的数量,加上本次的购买
37、数量temprecord.put(buycount, Integer.parseInt(temprecord.get(buycount).toString()+buycount);/重新计算总价temprecord.put(totalprice, BaseCalculate.round(BaseCalculate.add(Float.parseFloat(temprecord.get(totalprice).toString(), buycount*Float.parseFloat(record.get(saleprice).toString(), 1);/将更改的记录重新放入Cart(更改)
38、/cart.add(i, temprecord);inCart=true;break;/该产品不在车中if(inCart=false)System.out.println(buycount:+buycount);/放入商品图片record.put(picurl, record.get(picurl);/增加数量列record.put(buycount, buycount);/增加总价列record.put(totalprice, BaseCalculate.round(buycount*Float.parseFloat(record.get(saleprice).toString(),1);S
39、ystem.out.println(=+record);/把商品放入车子cart.add(record);/购物车中商品的总价float sum=0;/重新循环购物车,统计总价for(int i=0;icart.size();i+)Map temp=cart.get(i);/当前商品的总价sum=BaseCalculate.round(BaseCalculate.add(sum, Float.parseFloat(temp.get(totalprice).toString(), 1);/把总价放入Sessionsession.setAttribute(sum,sum);/将车子放入Sessio
40、nsession.setAttribute(cart, cart);response.sendRedirect(showCart.jsp);b.放入购物车如图4-14所示。图4-14 加入购物车5)订单确认 a. 订单确认页面进行订单确认。/调用DAOBaseDAO dao=new BaseDAO();/获取SESSIONHttpSession session=request.getSession();Mapuser=(Map)session.getAttribute(user)/当前登录用户的IDString userid=getUserid(request);/查询收货人的信息try ListMap receivelist=dao.listWithPage(*, receiv