软件工程需求分析Word格式.docx
《软件工程需求分析Word格式.docx》由会员分享,可在线阅读,更多相关《软件工程需求分析Word格式.docx(33页珍藏版)》请在冰点文库上搜索。
顾客可直接查看商品情况,如果想购买商品,要先注册一个帐号,然后根据本人用户名和密码登录系统,此时可以分类查看商品,如需购买,输入购买数量放入购物车,购物车中的商品数量可以修改,也可以删除购物车中的商品,最后对购物车中的商品进行购买确认,此时将产生一个订单,订单一旦生成便不可以再修改,只能查看。
后台管理人员功能的信息量大,数据安全性和保密性要求最高。
本功能实现对商品信息、购买者信息管理(增、删、查、改)和统计查看及维护。
管理员可以浏览、查询、添加、删除、修改、统计商品的基本信息;
浏览、查询、统计、添加、删除和修改商品购买的基本信息(即订单信息),浏览、查询、统计商店信息。
但不能添加、删除和修改购买信息,只能对是否付款、是否发货等状态进行修改。
基本功能:
(1)注册管理:
能够对用户名,密码的简单验证;
能够对电子邮箱,Email进行有效性验证;
能够防止利用页面刷新重复注册,以及已经注册的用户不能重复注册。
(2)商品浏览:
分类显示商品;
显示商品详情,提供购买链接;
可以对商品进行模糊查询;
显示当前用户的浏览记录。
浏览商品时不要求用户登录,但下订单前用户必须登录,对于浏览过的商品有历史记录。
三总体设计
1.实现功能
Ø
系统用例图
管理员和会员业务逻辑如下图所示:
用例说明
[用例1]
●用例图
●描述
该模块主要包括:
修改个人资料和审核操作。
修改个人资料与会员注册所需资料完全一致,主要有:
登录号、密码、真实姓名、性别、密码问题、密码答案、Email、地址、电话、身份证。
审核操作:
主要是对新注册的会员和会员的汇款信息进行审核,可以把新会员设置成为正式会员,根据会员汇款的数额,对会员的个人帐户充值。
●参与者
//*参与者,参与用例的对象*//
[用例2]
用户管理:
(1)选择不同类型用户可以用GridView自动绑定该类型所有用户信息。
(2)把选中的用户设置为“普通会员”,“vip会员”,“管理员”。
(3)删除选中用户。
[用例3]
角色管理:
主要包括添加角色、修改角色、删除角色、分配角色功能、浏览所有角色功能、设置会员优惠价。
添加角色:
包括角色名称、角色描述。
分配角色功能:
用CheckBoxList列出所有功能菜单,菜单分为两级,只列出子菜单,把选中的菜单id及菜单的父菜单id添加到指定的角色下,可以随时修改角色对应的功能菜单。
浏览所有角色功能:
按角色分别列出这些角色对应的权限菜单。
设置会员优惠价:
设置不同角色的优惠比例。
[用例6
汇款审核主要包括:
显示汇款信息、通过审核、撤回审核和删除汇款记录几个功能。
用GridView显示汇款信息。
显示汇款信息:
用DropDownList绑定不同的汇款类型,根据选择的汇款类型自动绑定该汇款类型对应的汇款信息。
“通过审核”将把选中的会员汇款金额追加到该用户的帐户下,“撤回审核”将不追加金额,让系统以消息的形式通知该会员汇款失败信息,并提醒重新填写邮寄信息。
删除汇款记录:
把选定的汇款记录删除。
[用例7]
公告管理主要包括:
显示公告信息、添加公告、修改公告、发布公告、删除公告。
添加公告:
主要包括公告标题和公告内容两个字段信息。
发布公告前可以修改公告,当发布公告后不可以修改公告。
[用例8]
销售统计:
用GridView显示销售统计信息,主要包括商品名称、单价、总量、售出量、剩余量。
[用例9]
浏览投诉:
用DataList显示信息,主要包括投诉人和投诉内容。
[用例10]
商品列表主要包括:
显示所有商品、按商品名称模糊查询、放入购物车、我的购物车几个部分。
显示所有商品:
用DataList显示所有商品,具体内容如下图所示:
图:
所有商品列表
“我的购物车”和“放入购物车”共用同一个弹出窗口,当选择新的商品点“放入购物车”后,打开的购物车自动刷新。
选好的商品中,购买数量默认为1,当超过库存量结算时就报告库存不足错误。
推荐的商品:
根据会员选好的商品提供相关的商品推荐,
循环“您选好的商品”,根据会员已经选择的每一个商品,查找选择了该商品的所有其他会员;
查找这些会员所购买过的商品中,尚有库存的,并且被购买次数最多的2种商品,如果商品不在“您选好的商品”列表中,并且不在“相关推荐表”中,则添加到推荐的相关信息表中。
[用例11]
投诉建议:
默认投诉用户为登录用户,填写投诉或建议内容提交即可。
[用例12]
●
用例图
3.1总体结构和模块设计
(1)前台部分由用户使用,包括用户注册,购物车,我的订单,商品浏览,个人管理等几个部分。
(2)后台部分由用户管理,订单管理,商品管理等几个部分。
功能结构图如下:
3.2处理流程
业务流程如下:
四系统详细设计
前台设计
前台总体模块[7]:
(1)前台部分由用户使用,包括用户注册,购物车管理,我的订单,商品浏览,个人管理等几个部分。
模块功能介绍:
用户注册:
能够提供用户的注册,并且对用户的注册进行以下验证:
用户名非空;
密码不小于6位;
邮箱Email的有效性;
防止通过刷新重复提交.
购物车管理:
所选商品须通过购物车进行保存;
对于相同的商品,在再次购买的时候,在购物车中相应的商品上增加数量;
在购物车中修改订单数量的时候防止输入非数字;
在购物车然后生成订单。
我的订单:
用户可以查看自己所有的订单,以及查看具体某一张订单,通过查看订单,用户可以查看订单现在的状态,查看订单的具体详情:
收货人地址,收货方式,付款方式,具体商品,小计,总计等等。
商品浏览:
用户可以通过商品的id或者商品的名称进行查找商品,并且对于浏览过的商品存在浏览历史,对于登陆后的用户可以对商品进行留言。
个人管理:
用户可以管理自己账号的相关信息,比如:
修改个人的基本信息,修改自己的密码。
前台文件架构:
前台文件架构
用户注册模块:
用户可以通过注册评论商品
代码实现:
1.有效性验证[8]:
通过js对客户端的提交数据进行有效性验证.关键代码如下:
检查邮箱的有效性:
functionchkEmail(str)
{
returnstr.search(/[\w\-]{1,}@[\w\-]{1,}\.[\w\-]{1,}/)==0?
true:
false;
}
functioncheck(){
if(myform.userName.value=="
"
)
{
alert("
请填写用户名"
);
returnfalse;
}
elseif(!
IsValid())
alert("
用户名只能使用字母和数字"
returnfalse;
elseif(myform.psw.value=="
请填写密码"
elseif(myform.psw.value!
=myform.conpsw.value)
两次密码不一致"
elseif(myform.trueName.value=="
请填写姓名"
}
elseif(myform.email.value=="
请填写邮箱"
chkEmail(myform.email.value))
请填写有效的Email地址"
}elseif(myform.address.value=="
地址必须填写!
}elseif(myform.nam.value=="
){
请输入验证码"
}elseif(myform.nam.value!
=myform.con.value){
两次验证码不一样!
}else{
document.myform.submit();
}
}
2.防止通过刷新重复提交[9]:
当提交完注册信息后,要求输入验证码,防止重复提交数据到数据库,通过image.jsp写出一个随机数,与注册jsp页面相匹配,关键代码如下:
Jsp页面验证码:
<
scriptlanguage="
javascript"
runat=client>
varn=parseInt(Math.random()*8999+1000);
myform.con.value=n;
document.write("
imgid=mksrc=/BookShopping/image.jsp?
num="
+n+"
>
functionnextImage(){
n=parseInt(Math.random()*8999+1000);
document.all("
mk"
).src="
/BookShopping/image.jsp?
+n;
}
<
/script>
ahref="
javascript:
nextImage();
换一张<
/a>
Image.jsp代码如下:
%
try{
BufferedImagebf=newBufferedImage(70,25,BufferedImage.TYPE_INT_RGB);
Graphics2Dg2=bf.createGraphics();
g2.setPaint(newColor(0,0,255));
g2.fillRect(0,0,70,25);
g2.setPaint(newColor(255,255,255));
Stringstr=request.getParameter("
num"
session.setAttribute("
str);
g2.setFont(newFont("
Arial"
Font.BOLD,24));
g2.drawString(str,7,20);
for(inti=0;
i<
10;
i++){
intr=(int)(Math.random()*255);
intg=(int)(Math.random()*255);
intb=(int)(Math.random()*255);
g2.setPaint(newColor(r,g,b));
intx1=(int)(Math.random()*80);
inty1=(int)(Math.random()*30);
intx2=(int)(Math.random()*80);
inty2=(int)(Math.random()*30);
g2.drawLine(x1,y1,x2,y2);
g2.dispose();
ImageIO.write(bf,"
jpg"
response.getOutputStream());
out.clear();
out=pageContext.pushBody();
}catch(Exceptione){
System.out.println(e);
%>
3.防止相同用户名用户注册:
当提交数据后,为了防止出现相同的用户,在进行注册的时候,通过相应的DAO中的exsitOne方法先检查用户名是否存在,存在不允许注册,关键代码如下:
publicBooleanexsitOne(StringuserName){
Stringsql="
selectuNamefromRegUser"
;
try{
stat=conn.createStatement();
rs=stat.executeQuery(sql);
while(rs.next()){
Stringexsit=rs.getString("
uName"
if(userName.equals(exsit)){
returntrue;
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
对于购买了商品的用户,在产生订单后,可以通过双击查看订单,在查看订单的时候,可以查看到订单的当前状态,以及订单的总金额,和订单的一些基本信息。
1.显示所有订单:
读取数据库中指定用户的所有订单,将结果集存取到一个ArrayList中,再返回显示页面,关键代码如下:
response.setContentType("
text/html"
Stringid=request.getParameter("
uid"
select*frombookOrderwhereuid="
+id;
DAOdao=newDAO();
ResultSetrs=dao.getOrderInfo(sql);
ArrayList<
MyOrderBean>
mylist=newArrayList<
();
intoid=Integer.parseInt(rs.getString("
oId"
));
Stringreceiver=rs.getString("
oReceiveName"
StringoPayType=rs.getString("
oPayType"
floattotal=dao.getTotal("
selectsum(oAmount*oPrice)fromorderInfowhereoId="
+oid);
StringoStatus=rs.getString("
oStatus"
Stringdate=rs.getString("
oTime"
MyOrderBeanone=newMyOrderBean(oid,date,receiver,total,oPayType,oStatus);
mylist.add(one);
}catch(SQLExceptione){
2.显示某个订单:
当用户双击某个订单的时候,通过订单的id,以及用户id,联合查询出指定的订单,再返回到显示页面,关键代码如下:
Stringid=request.getParameter("
id"
Stringsql="
select*frombookOrder,orderInfo,bookwherebookOrder.oId=orderInfo.oIdandbook.bId=orderInfo.bIdandbookOrder.oId="
+id+"
ArrayList<
AllbookInOneOrder>
onelist=newArrayList<
Stringreceiver="
Stringaddress="
Stringphone="
StringsendType="
StringpayType="
while(rs.next()){
receiver=rs.getString("
address=rs.getString("
oReceiveAddress"
phone=rs.getString("
oReceivePhone"
sendType=rs.getString("
oSendType"
payType=rs.getString("
Stringbookname=rs.getString("
bName"
intcount=rs.getInt("
oAmount"
floatprice=rs.getFloat("
oPrice"
AllbookInOneOrderone=newAllbookInOneOrder(bookname,count,price);
onelist.add(one);
com.with.javabean.MyOneOrderBeanoneorder=newcom.with.javabean.MyOneOrderBean(
receiver,address,phone,sendType,payType,onelist);
request.setAttribute("
order"
oneorder);
id);
request.getRequestDispatcher("
../MyOneOrder.jsp"
.include(request,response);
商品浏览模块:
用户可以通过商品的分类查找到相应类别的商品,也可以通过输入相应商品的名称,找到相应的商品:
1.商品分类:
读取数据库中的制定类别,将所有类别显示在首页的商品类别导航上面,关键代码如下:
tableborder=0width=100%cellspacing=0cellpadding=0>
%ArrayList<
BookType>
booktype=(ArrayList<
)request
.getAttribute("
bookTypeInfos1"
if(null!
=booktype){
for(inti=0;
i<
booktype.size();
i++){
BookTypebookTypeInfo=booktype.get(i);
%>
tr>
<
tdalign=centerwidth=26class=class_td>
<
imgborder=0src=ima