1、 卡片管理3、用户留言管理如下图所示: 留言管理附:鲜花网店系统的数据流图(DFD,非UML),如下图所示: 浏览鲜花 购物车 订单 鲜花信息表 订单信息表三、课题系统设计1、系统架构设计(MVC)系统采用MVC(Model-View-Controller)架构。MVC应用程序由模型、视图、控制器这三个部分组成。Event(事件)导致控制器改变模型或视图,或者同时改变两者。只要控制器改变了模型的数据或者属性,所有依赖的视图都会自动更新。类似的,只要控制器改变了视图,视图会从潜在的模型中获取数据来刷新自己。MVC把一个应用的输入、处理、输出流程按照模型、视图、控制器的方式进行分离,这样一个应用被
2、分成三个层模型层、视图层、控制层。视图代表用户交互界面,对于网络应用来说,可以概括为HTML界面,但有可能为XML和APPLET,一个应用可能有很多不同的视图。模型:就是业务流程/状态的处理以及业务规则的制定,是MVC最主要的核心。控制器可以理解为从用户接收请求, 将模型与视图匹配在一起,共同完成用户请求。 更新 更新 获得数据 获得数据 改变 改变 改变2、用户界面提前预览在Windows XP下用IE浏览器测试。2.1系统前台2.1.1前台预览左侧是会员登陆界面和鲜花导购信息,用户可以按照用途、材料和节日等分类导航找到所需的鲜花;右侧是各种商品的详细信息,显示了最新的鲜花商品。录入商品类别
3、和商品信息及上传图片后,以yaodi登陆,如下图所示:前台主页(welcome.jsp)2.1.2用户充值充值功能是采用充值卡形式,充值卡在有效期内只能使用一次,不允许被次充值。此功能的实现是在数据库的卡片表内设置了一个“是否有效”字段,每当用户进行充值,用户的账户余额改变的同时,数据库中此卡片信息中“是否有效”字段也被从“有效”改成“无效”。这种同时操作数据库,是采用了事务(原子性操作)。用户充值2.1.3购物车选择鲜花商品-订购-放入购物车-查看购物车,确定后就能填写订单了,购物车界面如下图所示:购物车2.2系统后台后台包括:用户信息管理、鲜花信息管理、订单管理、留言管理、充值卡管理五大模
4、块。具体又分为普通用户管理和管理员信息管理,鲜花的增删改查,订单的处理,生成充值卡,删除无效的充值卡,回复留言等功能。2.2.1后台预览管理员从左边导航进行花店的各项管理工作(部分功能待完善),包括:用户信息管理、鲜花信息管理、订单管理、留言管理、充值卡管理。以yingying登陆,如下图所示:后台主页2、页面迁移图 4、数据库设计(1)用户信息表字段名称数据类型长度允许为空是否为主键含义user_idint10否是用户IDusernamevarchar40用户名truename真实姓名password密码address200地址telephone电话postalcode邮编userrole1
5、1权限zhuce_timedate注册时间advancePaymentfloat(8,2)账户余额(2)鲜花信息表id鲜花IDflowerName20鲜花名称cailiao材料yongtu用途xingshi形式jieri适合节日briefInfo100简介ifPreference是否优惠price(5,2)价格preferencePrice优惠价格pictureSRC图片路径storeCount库存量createDate创建日期(3)卡片信息表卡片IDcardNumber50卡片账号生成日期deadline截止日期金额sfyx2是否有效(4)订单信息表订单IDorderNumber订单号无re
6、ceivePersonName接收人姓名receiveAddress接收人地址receivePostalcode接收地邮编receiveTel接收人电话bz备注ifConfirm是否确认confirmDate确认时间status5状态totalPrice总价格(5)订单详细内容表IDflowerid 鲜花IDdiscount数量oneprice单价(6)留言信息表liuyanTime留言时间content500留言内容huifu回复内容四、核心代码1生成卡片的servlet:CreateCardServlet.java中的doPost()方法: public void doPost(HttpS
7、ervletRequest request, HttpServletResponse response) throws ServletException, IOException request.setCharacterEncoding(UTF-8); String price1=request.getParameter(price int shuliang=Integer.parseInt (request.getParameter (shuliang); Card cardlist=new Cardshuliang; for(int i=0;ishuliang;i+) Card card=
8、new Card(); String cardNumber=; String password= String createDate= String deadline= int sfyx; float price; long first=(long)(Math.random()*Math.pow(10, 5); long timeMillis=System.currentTimeMillis(); Date today=new Date(timeMillis); long last=(long)(Math.random()*1000);cardNumber=Long.toString(firs
9、t) +Long.toString(timeMillis)+Long.toString(last); long password1=(long) (Math.random()*Math.pow(10, 9); password=Long.toString(password1); createDate=today.toString(); int deadlineyear=today.getYear()+1903; int deadlinemonth=today.getMonth()+1; int deadlineday=today.getDate(); deadline=Integer.toSt
10、ring(deadlineyear)+-+Integer.toString(deadlinemonth)+Integer.toString(deadlineday); sfyx=1; price=Float.parseFloat(price1); card.setCardNumber(cardNumber); card.setPassword(password); card.setCreateDate(createDate); card.setDeadline(deadline); card.setPrice(price); card.setSfyx(sfyx); cardlisti=card
11、; CardDAO dao=new CardDAO(); boolean flag=dao.insertCard(cardlist); if(flag=true) request.setAttribute(cardinfo, cardlist);request.getRequestDispatcher(common/successpage/insertCard.jsp).forward(request, response); else request.getRequestDispatcher(common/errorpage/insert.jsp 2删除选择的所有用户的函数deleteUser
12、(String) public boolean deleteUser(String userstr) boolean result = false; Connection conn = null; PreparedStatement psmt = null; ResultSet rs = null; String username = userstr.split( try conn = DBConnection.getConnection(); conn.setAutoCommit(false); String sql = delete from user where username= ?
13、psmt = conn.prepareStatement(sql); for (int i = 0; i username.length; i+) psmt.setString(1, usernamei); psmt.addBatch(); int flag = psmt.executeBatch(); for (int j = 0; j flag.length; j+) if (flagj = 0) result = false; break; result = true; catch (SQLException e) try conn.rollback(); catch (SQLExcep
14、tion e1) e1.printStackTrace(); e.printStackTrace(); finally conn.setAutoCommit(true); catch (SQLException e) e.printStackTrace(); DBConnection.close(rs, psmt, conn); return result;3根据不同的条件查询鲜花信息的函数selectFlowersByTJpublic List selectFlowersByTJ(Flower flower) List list=new ArrayList(); Connection con
15、n=null; PreparedStatement psmt=null; ResultSet rs=null; try conn=DBConnection.getConnection(); StringBuffer sql=new StringBuffer(); sql.append(select * from flower where 1=1 if(flower.getFlowerName()!=null&!flower.getFlowerName().trim().equals() sql.append( and flowerName=+flower.getFlowerName()+ if
16、(flower.getXingshi()!flower.getXingshi().trim().equals( and xingshi=+flower.getXingshi()+ if(flower.getCreateDate()!flower.getCreateDate().trim().equals( and createDate=+flower.getCreateDate()+if(flower.getCailiao()!flower.getCailiao().trim().equals( and cailiao=+flower.getCailiao()+if(flower.getYon
17、gtu()!flower.getYongtu().trim().equals( and yongtu=+flower.getYongtu()+if(flower.getJieri()!flower.getJieri().trim().equals( and jieri=+flower.getJieri()+ sql.append( order by id; psmt=conn.prepareStatement(sql.toString(); rs=psmt.executeQuery(); while(rs.next() Flower flower1=new Flower(); FlowerDA
18、O dao=new FlowerDAO(); flower1=dao.selectFlowerByID(rs.getInt(id list.add(flower1); catch (SQLException e) e.printStackTrace(); return list;五、经验总结通过自己近一个月的动手操作,已基本实现了一个鲜花网店的各项功能,应该说收获了很多很实际的经验,融合了Java Web课本上的知识,对以后的学习和工作都挺有帮助。而且体会到,任何网店的体系和功能都是差不多的,无论是做书店、水果店还是本报告中的鲜花店。由于本人水平有限,WEB中的许多安全与效率的问题,并没有考虑到。希望在以后的学习中,可以弥补这方面的缺陷。其次,需要改进的地方,一个是UML,在报告里只用Word画了3个用例图,复杂的时序图没有画,今后需要进一步学习Retional Rose来辅助建模;再就是MVC架构,只是画了解释性的示意图,没有真正用来开发程序,所以还是得继续体会学习MVC,特别是Struts这个框架,为以后的团队开发做好准备。数据库的设计也还不够熟练,这里借用了MySQL的UI管理工具。感谢老师的悉心教导,感谢自己终于把课程做出来了。6、原创性声明本web应用参考了“中国鲜花礼品网”,鲜花图片都是来源于此。数据库的设计部分参考于网络资源,前台界面和后台界面系作者原创。特此声明。
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2