web课程设计报告.docx
- 文档编号:12850876
- 上传时间:2023-04-22
- 格式:DOCX
- 页数:19
- 大小:633.59KB
web课程设计报告.docx
《web课程设计报告.docx》由会员分享,可在线阅读,更多相关《web课程设计报告.docx(19页珍藏版)》请在冰豆网上搜索。
web课程设计报告
鲜花网店课程设计
课程:
信息系统工程与实践
班级:
姓名:
学号:
指导教师:
目录
一、设计平台-3-
二、课程设计详细-3-
1、课题用户管理-3-
2、用户卡片管理-3-
3、用户留言管理-4-
三、课题系统设计-5-
1、系统架构设计(MVC)-5-
2、用户界面提前预览-6-
2.1系统前台-6-
2.2系统后台-8-
3、页面迁移图-8-
4、数据库设计-8-
四、核心代码-10-
五、经验总结-13-
六、原创性声明-13-
设计平台
Jsp/Servlet、MySQL、Tomcat、MyEclipse
二、课程设计详细
课题目标很明确,就是要鲜花店的online化,通过网上销售鲜花。
主要采用UML建模,这里只用Word画出用例图,而没有画类图、包图和动态图。
1、课题用户管理
如下图所示,管理员可以注册新的管理员、查询用户的信息、删除用户信息。
而普通用户可以注册为网站会员、修改用户信息和删除(也就是注销)用户。
管理员用户
用户管理
2、用户卡片管理
如下图所示:
管理员用户
卡片管理
3、用户留言管理
如下图所示:
管理员用户
留言管理
附:
鲜花网店系统的数据流图(DFD,非UML),如下图所示:
浏览鲜花购物车订单
鲜花信息表订单信息表
三、课题系统设计
1、系统架构设计(MVC)
系统采用MVC(Model-View-Controller)架构。
MVC应用程序由模型、视图、控制器这三个部分组成。
Event(事件)导致控制器改变模型或视图,或者同时改变两者。
只要控制器改变了模型的数据或者属性,所有依赖的视图都会自动更新。
类似的,只要控制器改变了视图,视图会从潜在的模型中获取数据来刷新自己。
MVC把一个应用的输入、处理、输出流程按照模型、视图、控制器的方式进行分离,这样一个应用被分成三个层——模型层、视图层、控制层。
视图代表用户交互界面,对于网络应用来说,可以概括为HTML界面,但有可能为XML和APPLET,一个应用可能有很多不同的视图。
模型:
就是业务流程/状态的处理以及业务规则的制定,是MVC最主要的核心。
控制器可以理解为从用户接收请求,将模型与视图匹配在一起,共同完成用户请求。
如下图所示:
更新更新
获得数据获得数据
改变
改变改变
2、用户界面提前预览
在WindowsXP下用IE浏览器测试。
2.1系统前台
2.1.1前台预览
左侧是会员登陆界面和鲜花导购信息,用户可以按照用途、材料和节日等分类导航找到所需的鲜花;右侧是各种商品的详细信息,显示了最新的鲜花商品。
录入商品类别和商品信息及上传图片后,以yaodi登陆,如下图所示:
前台主页(welcome.jsp)
2.1.2用户充值
充值功能是采用充值卡形式,充值卡在有效期内只能使用一次,不允许被次充值。
此功能的实现是在数据库的卡片表内设置了一个“是否有效”字段,每当用户进行充值,用户的账户余额改变的同时,数据库中此卡片信息中“是否有效”字段也被从“有效”改成“无效”。
这种同时操作数据库,是采用了事务(原子性操作)。
如下图所示:
用户充值
2.1.3购物车
选择鲜花商品--->订购--->放入购物车--->查看购物车,确定后就能填写订单了,购物车界面如下图所示:
购物车
2.2系统后台
后台包括:
用户信息管理、鲜花信息管理、订单管理、留言管理、充值卡管理五大模块。
具体又分为普通用户管理和管理员信息管理,鲜花的增删改查,订单的处理,生成充值卡,删除无效的充值卡,回复留言等功能。
2.2.1后台预览
管理员从左边导航进行花店的各项管理工作(部分功能待完善),包括:
用户信息管理、鲜花信息管理、订单管理、留言管理、充值卡管理。
以yingying登陆,如下图所示:
后台主页
2、页面迁移图
4、数据库设计
(1)用户信息表
字段名称
数据类型
长度
允许为空
是否为主键
含义
user_id
int
10
否
是
用户ID
username
varchar
40
否
否
用户名
truename
varchar
40
是
否
真实姓名
password
varchar
40
否
否
密码
address
varchar
200
是
否
地址
telephone
varchar
40
是
否
电话
postalcode
varchar
40
是
否
邮编
userrole
int
11
是
否
权限
zhuce_time
date
是
否
注册时间
advancePayment
float
(8,2)
是
否
账户余额
(2)鲜花信息表
字段名称
数据类型
长度
允许为空
是否为主键
含义
id
int
11
否
是
鲜花ID
flowerName
varchar
20
是
否
鲜花名称
cailiao
varchar
20
是
否
材料
yongtu
varchar
20
是
否
用途
xingshi
varchar
20
是
否
形式
jieri
varchar
20
是
否
适合节日
briefInfo
varchar
100
是
否
简介
ifPreference
int
11
是
否
是否优惠
price
float
(5,2)
是
否
价格
preferencePrice
float
(5,2)
是
否
优惠价格
pictureSRC
varchar
200
是
否
图片路径
storeCount
int
11
是
否
库存量
createDate
date
是
否
创建日期
(3)卡片信息表
字段名称
数据类型
长度
允许为空
是否为主键
含义
id
int
11
否
是
卡片ID
cardNumber
varchar
50
否
否
卡片账号
password
varchar
20
否
否
密码
createDate
date
否
否
生成日期
deadline
date
否
否
截止日期
price
float
否
否
金额
sfyx
int
2
否
否
是否有效
(4)订单信息表
字段名称
数据类型
长度
允许为空
是否为主键
含义
id
int
11
否
是
订单ID
orderNumber
varchar
50
否
否
订单号
username
varchar
20
否
否
用户名
createDate
date
无
是
否
创建日期
receivePersonName
varchar
20
是
否
接收人姓名
receiveAddress
varchar
100
是
否
接收人地址
receivePostalcode
varchar
20
是
否
接收地邮编
receiveTel
varchar
20
是
否
接收人电话
bz
varchar
200
是
否
备注
ifConfirm
int
2
是
否
是否确认
confirmDate
date
无
是
否
确认时间
status
int
5
是
否
状态
totalPrice
float
(8,2)
是
否
总价格
sfyx
varchar
20
是
否
是否有效
(5)订单详细内容表
字段名称
数据类型
长度
允许为空
是否为主键
含义
id
int
11
否
是
ID
orderNumber
varchar
50
否
否
订单号
flowerid
int
11
否
否
鲜花ID
discount
int
11
否
否
数量
oneprice
float
(8,2)
否
否
单价
(6)留言信息表
字段名称
数据类型
长度
允许为空
是否为主键
含义
id
int
11
否
是
ID
username
varchar
20
否
否
用户名
liuyanTime
varchar
20
否
否
留言时间
content
varchar
500
否
否
留言内容
huifu
varchar
500
是
否
回复内容
四、核心代码
1.生成卡片的servlet:
CreateCardServlet.java中的doPost()方法:
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
request.setCharacterEncoding("UTF-8");
Stringprice1=request.getParameter("price");
intshuliang=Integer.parseInt(request.getParameter("shuliang"));
Card[]cardlist=newCard[shuliang];
for(inti=0;i Cardcard=newCard(); StringcardNumber=""; Stringpassword=""; StringcreateDate=""; Stringdeadline=""; intsfyx; floatprice; longfirst=(long)(Math.random()*Math.pow(10,5)); longtimeMillis=System.currentTimeMillis(); Datetoday=newDate(timeMillis); longlast=(long)(Math.random()*1000); cardNumber=Long.toString(first)+Long.toString(timeMillis)+Long.toString(last); longpassword1=(long)(Math.random()*Math.pow(10,9)); password=Long.toString(password1); createDate=today.toString(); intdeadlineyear=today.getYear()+1903; intdeadlinemonth=today.getMonth()+1; intdeadlineday=today.getDate(); deadline=Integer.toString(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); cardlist[i]=card; } CardDAOdao=newCardDAO(); booleanflag=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").forward(request,response); } } 2.删除选择的所有用户的函数deleteUser(String) publicbooleandeleteUser(Stringuserstr){ booleanresult=false; Connectionconn=null; PreparedStatementpsmt=null; ResultSetrs=null; String[]username=userstr.split("'"); try{ conn=DBConnection.getConnection(); conn.setAutoCommit(false); Stringsql="deletefromuserwhereusername=? "; psmt=conn.prepareStatement(sql); for(inti=0;i psmt.setString(1,username[i]); psmt.addBatch(); } int[]flag=psmt.executeBatch(); for(intj=0;j if(flag[j]==0){ result=false; break; } result=true; } }catch(SQLExceptione){ try{ conn.rollback(); }catch(SQLExceptione1){ e1.printStackTrace(); } e.printStackTrace(); }finally{ try{ conn.setAutoCommit(true); }catch(SQLExceptione){ e.printStackTrace();} DBConnection.close(rs,psmt,conn);} returnresult;} 3.根据不同的条件查询鲜花信息的函数selectFlowersByTJ publicList List Connectionconn=null; PreparedStatementpsmt=null; ResultSetrs=null; try{ conn=DBConnection.getConnection(); StringBuffersql=newStringBuffer(); sql.append("select*fromflowerwhere1=1"); if(flower.getFlowerName()! =null&&! flower.getFlowerName().trim().equals("")){ sql.append("andflowerName='"+flower.getFlowerName()+"'");} if(flower.getXingshi()! =null&&! flower.getXingshi().trim().equals("")){ sql.append("andxingshi='"+flower.getXingshi()+"'");} if(flower.getCreateDate()! =null&&! flower.getCreateDate().trim().equals("")){ sql.append("andcreateDate='"+flower.getCreateDate()+"'"); } if(flower.getCailiao()! =null&&! flower.getCailiao().trim().equals("")){ sql.append("andcailiao='"+flower.getCailiao()+"'"); } if(flower.getYongtu()! =null&&! flower.getYongtu().trim().equals("")){ sql.append("andyongtu='"+flower.getYongtu()+"'"); } if(flower.getJieri()! =null&&! flower.getJieri().trim().equals("")){ sql.append("andjieri='"+flower.getJieri()+"'"); } sql.append("orderbyid;"); psmt=conn.prepareStatement(sql.toString()); rs=psmt.executeQuery(); while(rs.next()){ Flowerflower1=newFlower(); FlowerDAOdao=newFlowerDAO(); flower1=dao.selectFlowerByID(rs.getInt("id")); list.add(flower1); } }catch(SQLExceptione){ e.printStackTrace();} returnlist;} 五、经验总结 通过自己近一个月的动手操作,已基本实现了一个鲜花网店的各项功能,应该说收获了很多很实际的经验,融合了JavaWeb课本上的知识,对以后的学习和工作都挺有帮助。 而且体会到,任何网店的体系和功能都是差不多的,无论是做书店、水果店还是本报告中的鲜花店。 由于本人水平有限,WEB中的许多安全与效率的问题,并没有考虑到。 希望在以后的学习中,可以弥补这方面的缺陷。 其次,需要改进的地方,一个是UML,在报告里只用Word画了3个用例图,复杂的时序图没有画,今后需要进一步学习RetionalRose来辅助建模;再就是MVC架构,只是画了解释性的示意图,没有真正用来开发程序,所以还是得继续体会学习MVC,特别是Struts这个框架,为以后的团队开发做好准备。 数据库的设计也还不够熟练,这里借用了MySQL的UI管理工具。 感谢老师的悉心教导,感谢自己终于把课程做出来了。 6、原创性声明 本web应用参考了“中国鲜花礼品网”,鲜花图片都是来源于此。 数据库的设计部分参考于网络资源,前台界面和后台界面系作者原创。 特此声明。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- web 课程设计 报告