一个在线交易市场方案的设计与实现
徐鹏民 盖凌云 李常先
本文设计了一个网上商品交易系统。作为虚拟社区的一部分,系统模拟现实生活中人们的市场行为,为社区用户提供购销服务。利用该系统,用户既可发布和查询供求信息,又可实时在线交流,表达购销意向,从事购销活动,从而实现在线交易。
系统以Windows NT 4.0为平台,采用IIS 4.0做Web服务器,MS SQL Server 7.0做数据库服务器,数据库中设有用户表、供求信息表和成交记录表,三个数据表记录有关的交易数据,开发工具采用HTML、ASP和JavaScript,部分程序如下。
用户身份认证子系统
系统采用会员制,所有用户必须首先注册,才能进入市场。对用户进行分级管理,根据不同的用户级别决定用户所登记的供求信息发布时间的长短。通过用户名和密码控制用户的登记行为和交易行为。该子系统主要由程序LOGIN.HTM、 CHECK.ASP完成。
提供用户登录界面
LOGIN.HTM
……
< FORM action=“check.asp" method=
“post" name=“form1" target=“_top" >
用户:< INPUT name=“username" size=“16" >< br >
密码:< INPUT name=“userpd" type=
“password" size=“16" >< br >
< INPUT type=“submit" value=“进入" >&nbsp;&nbsp;
< INPUT type=“reset" value=“重写" >
……
对用户登录信息进行合法性验证并自动登记新用户
CHECK.ASP
……
’处理已经注册用户的操作
if not rs.eof then
’密码不正确
if userpd#trim(rs(1).value) then
response.write “< title >登录出错提示< /title >< br >"
response.write “< center >“用户名”和
“密码”不匹配!< /center >< br >"
response.write “原因与处理办法:< br >
1.如果您是第一次登录,则是该用户名已经被他人注册过!
您只能换其他名字注册;< br >"
response.write “2.如果您以前曾经用该名字注册成功,
那么是密码错误;< br >"
response.write “3.如果密码没有问题,
则可能是您的用户名已经被别人盗用,
并且盗用者更改了密码"
response.write
“请与< a [url=mailto:nicstaff@lyac.edu.cn]href=mailto:nicstaff@lyac.edu.cn >
管理员< /a >联系。"
response.write “< a href=‘javascript:history.go
(-1);' >点击这里进行修改< /a >< /body >"
response.end
else '登录正确,进入市场
response.redirect “market.htm"
end if
'处理未注册的新用户
else
sql1=“insert park_users values
(‘“&username&"',‘“&userpd&"',
getdate(),getdate(),1)"
sql2=“insert park_online values
(‘“&username&"',‘“&ip&"',getdate())"
conn.execute(sql1)
conn.execute(sql2)
response.write “< center >
!!!欢迎您光临!!!< /center >< br >"
response.write “< center >您的用户名是:”
&request.form(“username")&“ ”&
“密码是:”&request.form(“userpd")&“< br >"
response.write “再次光临您可继续使用以上数据!
< br >< /center >"
end if
……
供求信息查询子系统
用户通过本子系统可得到详细的供求信息,包括供求的商品名称、价格、数量、联系方法以及有关描述,甚至图片、音频和视频。用户可采用分类浏览和关键词查询两种方式,对于关键词查询,只要输入商品名称或表示商品用途、形状等的单词或短语,系统即可通过专门的查询算法,对数据库进行准全文式的模糊查询。本子系统主要由程序SEARCH1.ASP、SEARCH2.ASP和LINK.ASP完成。
接受并完成用户查询请求
SEARCH1.ASP
……
’来自查询界面的数据
c_type=request.querystring(“c_type")
goods_class=request.form(“D1")
s=request.form(“T1")
set conn= server.createobject(“adodb.connection")
’打开数据库
conn.connectionstring=“driver={sql server};
server=;uid=;pwd=;database="
conn.open
set session(“rs")=server.createobject
(“adodb.recordset")
’构造检索算法
if goods_class=“全部" then
sql=“select goods_name,goods_class,
description,publisher,contact,pub_date from market_goods
where client_type=‘“&c_type&"' and
goods_name like ‘%“&s&"%'"
else
sql=“select goods_name,goods_class,
description,publisher,contact,pub_date from market_goods
where client_type=‘“&c_type&"' and goods_class=
‘“&goods_class&"' and goods_name like ‘%“&s&"%'"
end if
……
if c_type=“s" then
response.write “< center >卖方市场< /center >"
else
response.write “< center >买方市场< /center >"
end if
……
< !--#include file=“link.asp"-- >
当检索结果超过一屏时,完成其他屏的显示
SEARCH2.ASP
……
for j=1 to session(“rs").pagesize
response.write“< tr >"
response.write “< td >”&session
(“rs").absoluteposition&“< /td >"
for i=0 to session(“rs").fields.count-1
response.write “< td >”&session
(“rs")(i).value&“< /td >"
next
response.write “< /tr >"
session(“rs").movenext
if session(“rs").eof then
exit for
end if
next
……
< !--#include file=“link.asp"-- >
辅助完成多屏显示检索结果
LINK.ASP
< %
if session(“rs").absolutepage >0 then
nowpage=session(“rs").absolutepage-1
else
nowpage=session(“rs").pagecount
end if
response.write “< font size=2 >
|当前页数:”&nowpage&“ "
response.write “|总页数:”&session
(“rs").pagecount&“ "
response.write “|总记录数:”&session
(“rs").recordcount&“ "
response.write “|每页记录数:”&session
(“rs").pagesize&“< /font >< br >"
for i=1 to session(“rs").pagecount
if i< >nowpage then
response.write “< a href=”“search2.asp?page=
”&i&“ ”“ >”&i&“< /a >"&“ "
else
response.write i&“ "
end if
next
% >
供求信息登记子系统
用户可以及时地将自己的商品或需求信息发布到网上。用户供求信息由后台数据库通过触发器,根据用户级别自动管理,定时删除。本子系统主要由程序GOODS_ADD.ASP完成。
接受来自用户的登记信息并完成登记
GOODS_ADD.ASP
< %
’接受来自商品登记界面的数据
username=request.cookies(“username")
……
set conn= server.createobject
(“adodb.connection")
conn.connectionstring=“driver=
{sql server};server=;uid=;pwd=;database="
conn.open
’进行用户身份验证
sql1=“select * from park_online where name=
‘“&username&"' order by name"
set rs1=conn.execute(sql1)
if rs1.eof then response.write
“拒绝访问" : response.end
sql=“insert into market_goods values
(‘“&client_type&"',‘“&goods_name&"',
‘“&goods_class&"',‘“&description&"',
‘“&publisher&"',‘“&contact&"',getdate())"
conn.execute (sql)
set conn=nothing
response.redirect “../log.htm"
% >
在线用户交谈子系统
系统模仿现实生活中的市场,在线的供求双方可以直接交流商品的有关信息,确定商品的交易价格,以决定成交与否。 主要由程序ADDSAY.ASP、 SAY.ASP完成。
ADDSAY.ASP
< %
……
says=request.form(“says")
says=server.HTMLEncode(says)
sql=“insert into park_says values(‘“&username&"',
‘“&towho&"',‘“&towhoway&"',‘“&subject&"',
‘“&says&"',getdate(),‘ ')"
conn.execute sql
set conn=nothing
response.redirect “say.asp"
……
SAY.ASP
< %
username=request.cookies(“username")
subject=request.cookies(“subject")
set conn=server.createobject (“adodb.connection")
conn.connectionstring=“driver=
{sql server};server=ntd0;uid=xpm;pwd=xpm123;database=park"
conn.open
set rs=conn.execute(“select name from park_online
where name=‘“&username&"'")
if rs.eof then
% >
< html >< head >
'对于不遵守市场规则的用户,禁止其继续留在市场
< script language=“JavaScript" >
window.open(‘kick.asp',‘market',‘resizable=no')
< /script >
< %
end if
% >
< meta http-equiv=‘content-type' content=
‘text/html; charset=gb2312' >
< title >对话区< /title >
< meta http-equiv=refresh content=
‘10;url=say.asp' >< /head >
< %
set rs=server.createobject (“adodb.recordset")
sql=“select name,towho,towhoway,contents,
time from park_saysrs.open sql,conn,3,1”
if not rs.eof then
line=1
rs.movelast
do while not rs.bof
if line >15 then
exit do
end if
if trim(rs(1))< >“全部" and trim(rs(2))=“1" then
if username=trim(rs(0)) or username=trim(rs(1)) then
response.write “< font size=2 color=
#FF0000 >”&trim(rs(0))&“只对”&trim
(rs(1))&“说 > >< /font >< font color=#0000FF >”
&rs(3)&“< font size=1 >(”&timevalue(rs(4))&“)
< /font >< /font >< br >"
line=line+1
end if
else
response.write “< font size=2 color=#FF0000 >”
&trim(rs(0))&“对”&trim(rs(1))&“说 > >
< /font >< font color=#0000FF >”&rs(3)&“
< font size=1 >(”&timevalue(rs(4))&“)< /font >
< /font >< br >"
line=line+1
end if
rs.moveprevious
loop
if rs.bof then
rs.movefirst
end if
end if
rs.close
conn.close
% >
成交记录子系统
本子系统主要是为在线用户而设,当在线用户通过交谈决定成交后,由本系统对此做详细的成交记录,包括交易双方的名字、成交商品的名称、数量、价格、要求和所提供的服务等项目。当交易产生争执时可提供证据,从而在一定程度上解决交易过程中的违规行为,以保证在线交易的信誉。本子系统通过发送COOKIES进行用户身份验证,以确保用户的真实身份,避免冒充他人从事交易的欺骗行为。系统主要由程序 AGREE.ASP完成。
记录用户交易过程,以备查询
AGREE.ASP
< %
'接受来自用户同意界面的数据
username=request.cookies(“username")
client_type=request.form(“jy1")
object=trim(request.form(“jy2"))
goods=request.form(“jy3")
amount=request.form(“jy4")
price=request.form(“jy5")
description=request.form(“jy6")
writer=trim(request.form(“jy7"))
says=writer+client_type+object+
goods+amount+price+description
set conn= server.createobject(“adodb.connection")
conn.connectionstring=“driver=
{sql server};server=;uid=;pwd=;database="
conn.open
sql1=“select * from park_online where name=
‘“&username&"' order by name"
set rs1=conn.execute(sql1)
if rs1.eof then response.write “拒绝访问" :
response.end
sql=“insert into park_says values(‘“&writer&"',
‘“&object&"',‘1',‘“&says&"',getdate(),‘1')"
'对交易用户进行身份验证,以防冒充他人
if writer=username then
conn.execute (sql)
set conn=nothing
response.write “< html >< body >< center >
< font face=黑体 size=6 >< br >OK!< /font >"
response.write “< br >< br >< a href=”
“javascript:window.close()"“ >关闭窗口< /a >
< /center >< /body >< /html >"
else
response.write “< html >< body bgcolor=
#ff0000 text=#ffffff >< center >< font face=
黑体 size=10 >< br >您不能冒充别人的名字从事交易!
< /font >"
response.write “< br >< br ><
a href=”“javascript:window.close()"“ >关闭窗口
< /a >< /center >< /body >< /html >"
end if
% >