摘 要
本系统是基于ASP的订单管理系统,利用因特网的方便快捷等优点,使我们的客户能在第一时间内订购到自己需要的产品。ASP结构主要是利用了不断成熟的WWW浏览器技术,结合浏览器的多种脚本语言(VBScript、JavaScript等)和ActiveX技术,通用的浏览器就实现了原来需要专用软件才能实现的强大功能,并节约了开发成本,是一种全新的软件系统构造技术。并且,基于ASP技术开发的订单管理系统,系统只需要运行在服务器上,操作管理上没有特定的区域限制,只要有因特网的地方都可以对系统进行维护管理。本订单管理系统分为客户订购系统和管理员管理系统两大部分。客户订购系统支持一般的用户登陆,用户可以选择自己需要的产品,并可进行网络交易。管理员管理系统,是系统的后台管理,可以对产品进行更新维护等操作。
关键词:ASP;IIS5.0;浏览器/服务器;HTML语言;脚本语言(VBScript)
1.1 用户需求分析
进行社会需求调查后发现,对本考试试题订单管理系统的要求是订购者能在全国任何一个地方登录注册到本系统并且进行商品的选择和购买,能随时查看自己的购物车中的物品,对公司服务不满意时能进行投诉,和查看公告等操作。而管理员不仅可以查看用户资料和产品信息,并且能修改,删除,添加新的产品信息等更新产品的操作。根据公司的需要,分析后得到具体的系统功能如下所述:
(1)用户订购系统的主要功能要求
a、用户可以随时登录或注册,购物车中的商品不会丢失。
b、用户可以随时找回密码,密码将发送到其注册时候填写的信箱。
c、用户申诉功能,如果用户定单未被处理,可以随时提出申诉(需要提供订单号和用户帐号)。
d、用户最后支付时,可选择不同的支付方式,将看到不同的信息。
e、用户可以随时查看站务公告(站务公告将公布最新信息)。
(2)管理员管理系统的主要功能要求
a、用户管理(查询/编辑/修改帐号)。
b、订单管理(批量查看所有订单,根据订单号查询,查看用户投诉)。
c、邮件管理(发送邮件,设置邮件默认标题/内容)。
d、商品管理(批量查看所有商品,添加商品,查看/修改/删除商品)。
e、其他管理部分(添加公告,浏览/删除公告,设置用户折扣比例,设置用户级别,设置积分和级别的关系,添加支付方式,浏览和删除支付方式)。
f、超级管理员可以添加普通管理员
3.1 系统功能模块的设计
本订单管理系统构建于B/S结构基础之上,系统能通过因特网实现连接访问,并且能对数据库进行一定的操作。系统用两个界面进行操控,一个是用户登陆界面,一个是管理员登陆界面。管理员登陆界面包括用户管理页面(批量查看用户资料,查询/编辑/修改帐号),订单管理页面(批量查看所有订单,根据订单号查询,查看用户投诉),邮件管理页面(发送邮件,设置邮件默认标题/内容),商品管理页面(批量查看所有商品,添加商品,查看/修改/删除商品),其他管理部分(添加公告,浏览/删除公告,设置用户折扣比例,设置用户级别,设置积分和级别的关系,添加支付方式,浏览和删除支付方式),超级管理员可以添加普通管理员等页面。一般用户登陆界面包括用户可以随时登录或注册,购物车中的商品不会丢失 ,用户可以随时找回密码,密码将发送到其注册时候填写的信箱,用户申诉功能,如果用户定单未被处理,可以随时提出申诉(需要提供订单号和用户帐号),用户最后支付时,可选择不同的支付方式,将看到不同的信息,用户可以随时查看站务公告(站务公告将公布最新信息)。
3.1.1 订单管理系统功能模块结构图
由上述功能可得到下面的各个功能模块的关系图:
4.3 系统功能模块描述
4.3.1客户端首页(Home.asp)
(1)页面示例
图4-2是订单管理系统的客户端首页。整个页面分为frame,左边的frame提供用户的操作选项,右边的frame显示系统的帮助信息。当用户单击某个选项时,右边的转到相应的asp页面。
图4-2 在线订购首页
(2)实现方法:所实现的页面分为两个子页面left.asp和main.asp,只要在一个页面中用两个frame就可以,主要的代码如下:
<html>
<head>
<title>在线购物系统</title>
<meta http-equiv=”Content-Type” content=”text/html,charsct=gb2312”>
</head>
<frameset frameborder=”NO” border=”0” framespacing=”0” rows=”*”>
<frame name=”leftFrame” scrolling=”yes” src=”left.asp”>
<frame name=”mainFrame” src=”main.asp”>
</frameset>
<noframes><body bgcolor=”#ffffff”>
</body></noframes>
</html>
4.3.2 新用户注册页面(newuser.asp)
(1)页面示例:
新用户注册页面提供用户注册功能,当用户在订单系统客户端首页选中“新用户注册”一项时,进如该页面。如图4-3所示。
图4-3 新用户注册页面
(2实现方法:
当用户填写表单完成后,首先把填写的结果交给指定程序检查,如果填写结果合法,则将表单内容交给adduser.asp页面,负责将用户信息写入数据库中。
在代码段newuser.asp中,描述了一个form,名称是ADDUser,根据语句“form name= “ADDUser” method=”POST” action=”adduser.asp” onSubmit=”return CheckForm();””可以得到,当用户单击“注册”按钮时首先由Vbscript的过程checkForm()检查用户输入是否合法,如果合法,则将输入结果提交到adduser.asp页面处理。
在adduser.asp页面中,首先进行安全监测,看数据来源是否是本服务器页面。接下来要做的就是从调教表单返回值,如下语句所示:
username=request.form("username")
Password=request.form("Password")
Email=request.form("Email")
Oicq=request.form("Oicq")
userfrom=request.form("userfrom")
telphone=request.form("telphone")
然后开始向数据库写入数据,并检测是否已经有该用户。这里利用ADO组件访问数据库,首先用“set rs=Server.CreateObject("ADODB.Recordset")” 创建数据库对象,然后用“sql="SELECT*FROM user wher username='" & username & "'"检查用户是否存在。注册通过后,根据用户所在页面不同有两种情况:
a、用户在订单系统首页注册,则将SESSION导至main.asp。
b、未登陆用户在购物完成后提示进行注册,如图4-4所示,则将SESSION导至 check.asp,即查看购物清单。
图4-4 未登陆用户在购物完成之后被提示进行注册页面
newuser.asp和adduser.asp的代码见附录。
4.3.3 用户登录页面(userlogin.asp)
(1)页面示例:
当用户在系统首页上单击“用户登录”,出现如图4-5所示的页面。
图4-5 用户登录页面
(2)实现方法:
用户登录界面的主要功能是:
a、已注册用户输入用户名和密码,转入到userlogin.asp.
b、未注册用户单击“您没有注册?”,转入到newuser.asp.
Userlogin.asp的功能是检查用户和密码,如果都是合法则通过登录验证,否则转到错误输出页面error.asp.
Userlogin.asp的代码首先建立数据库组件对象,然后根据用户名查询,主要语句:
sql = "SELECT top 1 username,password,sumjifen FROM user where Username='" & Username & "'"
如果遍历整个用户信息数据表(user表)都找不到与用户名相对的行,说明该用户不存在,如语句:
Set rs=Server.CreateObject("ADODB.RecordSet")
rs.open sql,conn,1,1
if rs.bof or rs.eof then
response.redirect "error.asp?error=003"
所示,转到error.asp页面,如图4-6所示:
图4-6 用户不存在时提示页面
userlogin.asp的代码见附录。
4.3.4 购物页面(main.asp)
(1)页面示例:
当用户在系统首页上单击任何一种商品,都会出现如图4-7所示的购物页面.购物页面的功能是用户选择想要订购的商品,并能随时查看购物车。当用户“查看购物车”或“放入购物车”按钮时,进入如图4-8所示的商品清单页面(check.asp).当用户确认订购信息后,单击“开始支付”按钮,进入如图4-9所示的支付订单提交页面(payment.asp).最后出现的 是执行支付的页面(dopayment.asp),如图4-10所示。
图4-7 购物页面
图4-8 商品清单
图4-9 支付订单提交页面
图4-10执行网上支付的页面
(2)实现方法:
当用户开始购物时,就进入了main.asp。main.asp 实现的主要功能是显示用户所选择商品的信息,我采用的方法是数据库的遍历。如main.asp代码所示,首先查看所选的商品类型在商品明细数据表(subs表)中是否存在,如果存在则遍历所有类型为此的商品,这里采用循环的方式遍历数据库。由于ADO数据库组件所生成的数据集SET对象r记录了所得数据行的数目,所以可以使用for循环的方式(for ii=1 to rs1.recordcount)顺序显示出每条商品记录的属性名称、价格、货号和用户购物标记等。
在显示商品记录的过程中,用r.movenext得到下一条数据记录。当用户单击货号或名称时进入showsub.asp页面,显示该商品的一些属性,如下面的代码所示:
<a href=”showsubs.asp?subsid=<%=rs1(“subs”)%>”target=”target”>
main.asp的代码见附录。
当用户在main.asp页面中单击“查看购物车”按钮,进入check.asp页面。显示用户选购的所有商品。
在check.asp代码中,这里用productList来记录当前用户所选购的所有商品。ProductList是一个字符串,其中依次存放每个商品名称。在check.asp开头的一段Vbscript实现的功能就是把商品加入到 ProductList中:
<%
Sub PutToShopBag( bookbm, ProductList )
If Len(ProductList) = 0 Then
ProductList = "'" & bookbm & "'"
ElseIf InStr( ProductList, bookbm ) <= 0 Then
ProductList = ProductList & ", '" & bookbm & "'"
End If
End Sub
%>
在check.asp中的遍历数据库方式是while循环:“While Not rs.EOF”。循环体中,首先判断用户的商品数量是否正确,如果小于0,则默认数量为1;然后,根据商品单价和数量计算所选商品的总金额(“sum=sum+csng(rs(“price”))*quatity”);最后显示商品信息。
Check.asp的代码见附录 。
如果用户想进行订单填写,单击“开始支付”进入payment.asp.payment.asp功能就是显示最终购物清单,并要求用户填写定单表格。显示部分与check.asp里的完全相同。另外,还需要一个VBScript来检查填写的格式是否正确。当用户单击“确定”按钮后,进入支付最后一个环节——dopayment.asp页面。
Dopayment.asp的代码见附录。
4.3.5 管理员登录页面(adminlogin.asp)
(1)、页面示例
出于安全方面的考虑,本系统没有把管理员登录界面放到系统的首页,而是放在admin子目录中。图4-11所示的是管理员登录页面。
图4-11 管理员登录页面
(2)实现方法:
adminlogin.asp所实现的功能仅仅是判断用户名和密码是否正确,实现的方法是查询数据表adminuser,具体的实现与3.3.2中所述的用户登录页面实现完全相同。
Adminlogin.asp的代码见附录。
当系统管理员输入正确的用户名和密码后,立刻转入管理员操作页面(default.asp).default.asp也是由两个frame组成,左边是管理员操作(left.asp),右边是用户登录(adminlogin.asp).实现方法和3.3.1中所述一 致。
4.3.6 用户管理部分的一些重要页面
(1)页面示例:
当管理员单击left.asp页面中的“查询/编辑/修改帐号”后,出现如图4-12所示的页面(search.asp)。功能是读取欲查询帐号的用户。
图4-12 帐号查询页面
单击帐号查询页面中的“查找”按钮后,通过POST方法,向服务器提交所读取的用户,然后转向edituser.asp页面,如图4-13所示:
(2)实现方法:
根据上面的功能可知,edituser.asp的实现流程是首先根据search.asp页面传来的username查询数据表User,如果没有这个用户,则用一个VBScript 显示警告信息,否则,利用数据集SET对象得到此用户的一些信息,并显示在页面里面的表格中。
在表格下面显示的3个按钮的功能分别是:修改、删除、查看交易资料。他们的实现方法基本类似,下面是删除用户资料的主要代码:
<form name="deluser" method="post" action="edituser.asp">
<div align="center">
<input type="submit" name="Submit" value="删除此帐号" class="Tips_bo">
<input type="hidden" name="action" value="deluser">
<input type="hidden" name="killusername" value="<%=request("searchuser")%>">
</div>
</form>
根据以上代码看出,单击“删除此帐号”按钮后,向edituser.asp页面提交一个deluser的action,同时也将要删除的用户名killusername作为参数一起提交,转到在edituser.asp文件中定义的asp代码:
<%
if request("action")="deluser" then
killusername=request("killusername")
conn.execute "delete * from user where username='"&killusername&"'"
response.write"<SCRIPT language=JavaScript>alert('你已删除了此帐号!');"
response.write"javascript:history.go(-2)</SCRIPT>"
rseponse.end
end if
%>
上面的asp代码,首先根据action的值得知是要做删除操作,然后通过killusername 得到用户名,最后通过执行SQL语句完成删除功能,并用一个js 提示管理员删除操作已经完成。
Edituser.asp的代码见附录。
4.3.7 订单管理部分的一些重要页面
a、页面示例:
当单击“订单管理”栏里面的“批量查看所有订单”时,出现如图4-15所示的页面(userorderlog.asp),功能是查看订单信息数据表orders表中所有订单信息。
图4-15 批量查看所有订单
b、实现方法:
此页面主要是用到分页技术。利用recordset对象的一些属性:
(1)rsTest.PageSize: PageSize属性用来设置一页记录的多少;
(2)rsTest.AbsolutePage: AbsolutePage属性设置当前数据在 Recordset对象中的绝对页数;
(3)rsTest.PageCount:PageCount属性用来获得记录集的总页数。
C、主要代码:
<%
set rs=server.createobject("adodb.recordset")
if not isempty(request("page")) then
pagecount=cint(request("page"))
else
pagecount=1
end if
if request("viewcomp")="" then
'是否查看未交易订单
if request("viewf")="" then
'是否是个人定单
if request("username")<>"" then
sql="select * from orders where username='"&request("username")&"' order by id desc"
else
sql="select * from orders order by id desc"
end if
else
'查看所有订单
if request("username")<>"" then
sql="select * from orders where username='"&request("username")&"' and comp=false order by id desc"
else
sql="select * from orders where comp=false order by id desc"
end if
end if
else
'已交易
if request("username")<>"" then
sql="select * from orders where username='"&request("username")&"' and comp=true order by id desc"
else
sql="select * from orders where comp=true order by id desc"
end if
end if
rs.open sql,conn,1,1
if rs.eof and rs.bof then
response.write"<BR>"
response.write"=== 暂无符合条件之订单 ==="
response.write"<BR><BR>"
response.end
end if
rs.pagesize=10
if pagecount>rs.pagecount or pagecount<=0 then
pagecount=1
end if
rs.AbsolutePage=pagecount %>
4.3.8 商品管理部分的重要页面
a、页面示例
当单击“批量查看所有商品”时,出现如图4-16所示页面(viewsubs.asp):
图4-16 批量查看所有商品
由于查询全部商品太过缓慢,所以本系统要求选择商品的主分类和分类别,作为二级查询以加快查询速度。当选择主分类和分类别后,点击“查询”按钮进入商品列表页面(doviewsubs.asp)。如图4-17:
图4-17 商品列表页面
单击操作栏里的连接,进入图4-18的editsub.asp页面,用来编辑商品信息。
图4-18 商品编辑页面
b、实现方法
商品管理的实现方法与订单管理的实现方法一样。主要也是用到分页技术。
editsub.asp的代码见附录。