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;iCardcard=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;ipsmt.setString(1,username[i]);
psmt.addBatch();
}
int[]flag=psmt.executeBatch();
for(intj=0;jif(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
publicListselectFlowersByTJ(Flowerflower){
Listlist=newArrayList();
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应用参考了“中国鲜花礼品网”,鲜花图片都是来源于此。
数据库的设计部分参考于网络资源,前台界面和后台界面系作者原创。
特此声明。