一个在线交易市场方案的设计与实现
徐鹏民 盖凌云 李常先
本文设计了一个网上商品交易系统。作为虚拟社区的一部分,系统模拟现实生活中人们的市场行为,为社区用户提供购销服务。利用该系统,用户既可发布和查询供求信息,又可实时在线交流,表达购销意向,从事购销活动,从而实现在线交易。 系统以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 href=mailto:[email protected] > 管理员< /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 % >

|