一、在 线 花 店
再线花店系统将传统的花店经营管理模式与计算机网络的综合经营管理模式结合在一
起。将人、机、物的需求、活动和运作进行系统分析、设计并管理,一实现现代高效、科学且安全的电子商务。
本例通过一个在线花店的实例来介绍ASP与Access数据库结合开发的小型电子商务系统的过程。在系统设计时。从传统花店的经营模式,网上用户需求与业务经营模式,计算机网络管理、系统设计等几方面综合分析,定义系统的输入、输出、实现功能、系统运作能力、系统安全性、系统可维护性等各项需求。其中数据库采用Access,动态网页开发采用ASP,综合应用了ADO、数据库设计、密码、身份验证和缓存等技术。
二、特 色 突 破
网上花店系统适合在线销售鲜花、礼品等,具有商品多属性检索(支持多重属性分类)、
购物车、订单提交和查询等网上花店所需的基本功能。
本系统采用ASP编写,在Windows的IIS的支持下运行。为了提高系统的效率,使用户浏览时候响应速度更快,本实例后台采用了缓存技术。
三、 系 统 概 述
3.1系统设计
3.1.1 系统功能与应用背景
互联网以前所未有的速度发展,成为与报纸、广播、电视相比肩的第四媒体,同时正以其更捷的信息传输形式改变这人们的消费模式,利用简单、快界、低成本的电子通信方式,买卖双方不谋面就可以进行各种商贸活动,走向商业的互联网已经成为网络经济的大势所趋。
眼下电子商务网站正如雨后春笋般大量涌现,企业网络化已经一种时尚。电子商务的发展可能大家都已经耳濡目染,上网的朋友对这已经不再陌生,电子商务确确实实出现在我们周围。本系统是一个在线花店系统,具有在线先手鲜花的基本功能。同过配置,可以作为一个实际应用的鲜花销售网站。本系统是为传统经营的花店构建网上销售渠道而开发的。
本例中的在线花店重要完成的功能如下。
l鲜花产品选购(可按分类方式查找鲜花种类或通过关键字进行查询)
l购物车功能
l查看鲜花详细情况
l用户注册
l用户登陆
l查看用户的订单信息
l用户评论
3.1.2 系统浏览
图 3-1 是用户访问网站的第一个界面,也是本系统的主界面。用户通过这个主界面可以浏览网站各个分类页面,浏览推荐商品和查看分类属性页等。
图 3-1 网站的首页
3.1.3 系统特点
本章所介绍的实例具有以下特点。
(1)页面模块化
本系统在界面设计上都采用了模块化处理思想,把很多页面功用部分集成一个模块,例如页面的头、尾和导航条,这样在开发是遇到这些相似的页面部分,就不需要重新编写,只要重用这部分即可,大大提高了开发效率。
(2)缓存技术
把产品导航信息放到内存中缓存起来,大大提高了网站效率和响应速度。
3.2 系统设计和架构
3.2.1 系统设计思想
电子上午发展已经有10多年的历史了,在中国很多人对电子商务也逐渐接受和认可。网上购物作为依仗时尚很多人去体会,更有部分人把购物同逛商场等显示社会服务一样作为生活的一部分。鲜花作为生活的点缀,也越来越为生活所需要。这种网上买卖鲜花的交易越来越多,也逐渐被广大消费者所接受。
本系统是一个相对简单的基本应用系统,主要满足传统的花店运营需要,将自己的销售渠道扩展到网上,通过简单的管理,提供给最终消费者产品的展现、购物、订单处理等一实现鲜花在线销售。
通过本系统可以管理简单的在线销售模式、满足用户随时查询产品信息,随时下单购物的应用需求。由于本系统考虑到产品的适应性、安全性和访问效率,所以,在系统平台多样性、技术先进性、功能适应性和灵活性等方面都有考虑,使系统相对完善,具有更好的学习价值。
本实例把页面中一些常用的部分集成为模块,例如页面的头和尾部,这样设计新的页面如果有重复出现的部分,只需要那现成的模块来组装就可以了。
3.2.2 系统结构设计
本实例由Web服务器为最终用户提供展现服务和为管理员提供管理服务;用数据库保存产品、用户和订单等信息。系统结构如图3-2所示
图 3-2 系统结构图
系统功能模块细分
(1)用户管理模块
管理用户登录、用户注册和用户修改等用户信息的基本功能,与一般电子商务的用户管理系统基本相同。
(2)产品信息模块
陈列产品的详细信息
(3)导航分类检索模块
按不同分类和不同应用导航产品,把相关产品列出。
(4)购物车处理模块
通过cookie技术实现购物车。用户选者产品后,点击“购买”进入购物页面,陈列要购买的产品明细项。
(5)用户选择产品完毕,通过购物页面到订单结帐页面,填写必要的信息,产生最终订单;还提供订单查询功能。
3.2.3服务器和ASP运作环境配置
1.软件准备
本章实例的数据库管理软件采用Access,安装Office的时候便会附带安装Access如果读者机器上没有安装Access,请准备Office软件;Web服务采用IIS,IIS的安装请参考1.3.4节。
2.IIS的配置
IIS默认的Web(主页)文件存放于系统根区的“%system%inetpu/wwwroot”中。
这里简单介绍IIS配置虚拟目录的过程。在“控制面板”,双击“管理工具”,在“管人站点”,然后用鼠标右键单击“默认网站”。从弹出的快捷菜单中选择【新建】→【虚拟目录】,如图3-3所示
弹出如图3-4所示的“虚拟目录别名”对话框。
图3-4指定虚拟目录别名
在如图3-4所示对话框中填写虚拟目录别名,例如“Ivzhi”然后单击【下一步】按钮,弹出如图3-5所示的“网站内容目录”对话框。
图3-5 选择实际目录
在图3-5所示对话框中,单击【浏览】按钮为该虚拟目录选择一个实际目录(例如)“c:\\www”),然后单击【下一步】按钮,最后单击【完成】按钮,这样名为“Ivzhii”的虚拟目录就创建好了。在实际开发时,所有页面都放到“c:\\www”下,访问时从浏览器输入“http://localhost/Ivzhi/index.asp”,该访问“c:\\www”下的“index.asp”页面
3.3数据库的设计、生成与配置
信息管理系统离不开数据库,它保存系统用到的数据。本系统的数据库主要用来保存用户、订单、产品等信息,所以数据库主要用到的表有:用户表、订单表、产品表和分类导航4类表。
设计数据库系统时应该先充分了解各个方面的需求,根据需求决定数据库结构。
3.3.1 数据库需求分析
简单来说系统有3个对象:用户、消化产品和订单。用户浏览鲜花产品,并且在需要的时候下订单。各这些信息提供增加、修改、保存、更新和查询,这就要求数据库结构能从粉满足这些信息的输出和输入。收集基本数据、数据结构及数据处理的流程,组合一份尽的数据字典,为程序设计打下基础。
系统需求积累用户资源,用用户表来记录用户的信息,具体包括用户的真名、地址、电话、邮编、身份证号、E-mail和密码等基本信息。
网站要给用户展现产品,把鲜花产品的详细信息介绍给用户,需要产品信息表,具体包括产品名称、各类属性和所属分类等。
网站是电子商务网站,最终目的是为用户服务,使用户浏览查后有购买的欲望,进行购买行为。订单类表格记录用户的购买行为,需要记录购买的产品信息,付款人的信息,收款人的信息,下单时间等。
为了方便用户的查找,提高网站的服务质量,对产品进行不同的属性导航,一个鲜花产品分可以包含不同的属性,方便用户的查找,促进用户的消费,实现网站的价值,对具体查的属性进行分类,实现属性导航表,包括产品属性分类,产品对应产品属性的对应表。
3.4公用模块的编写
3.4.1数据库连接文件
把数据库连接操作作封状在一个页面Commondb.asp中,以方便其他页面调用。例程3-1为Commondb.asp页面的参考代码。
<%
const myDatabase="lvzhi" 'Database name
const mydblocation="db/"'location of database relative to
%>
例程3-1定义了两个常量myDatabase和mydblocation,其中m,yDatabase为数据库名称,mydblocation为数据库存放位置,如果需要修改数据库存放位置和名称,就修改myDatabase和mydblocation这2个变量的值。
例程3-1中引入了页面allcommon,asp,allcommon,asp页面中定义了数据库连接的操作函数,例程3-2为这些函数定义的参考
打开数据库 最顶级函数
<%
' Debug Message
Sub Debug (msg)
response.write msg & "<br>"
end sub
' get ComeFrom Cookie
function getComeFromCookie()
dim ret
ret=Request.Cookies("comefrom")
if (comefrom=null) then
ret=""
end if
getComeFromCookie=ret
end function
const myCookieKey="lvzhi"
const myUseCookies="no"
Sub SetSess (field, value)
If myUseCookies<>"Yes" then
Session(field)=value
else
Response.cookies(myCookiekey) (field)=value
end if
end sub
Sub ProcessAccessOpen(connection)
dim strconn
strconn = "provider=microsoft.jet.oledb.4.0;persist security info=false;data source=" & Server.MapPath( mydblocation & myDatabase & ".mdb")
Set connection = Server.CreateObject("ADODB.Connection")
on error resume next
connection.open strConn
If connection.errors.count> 0 then
SetSess "Openerror", "Open Messages<br>" & connection.errors(0).description & " <br>" & GetSess("dbc")
else
SetSess "Openerror",""
end if
End Sub
' main database open for shop
Sub ShopOpenDataBase (connection)
ProcessAccessOpen connection
end sub
' close database
Sub CloseRecordSet (irs)
irs.close
set irs=nothing
end sub
'***************
Sub ShopCloseDatabase (connection)
on error resume next
connection.close
set connection=nothing
End sub
'disable property 对应的产品列表
sub disableListFlower(property,value)
dim ret
dim myname
if (property="0") then
myname="List" &property & "F"
else
myname="List" &property & "F" &value
end if
Application(myname)=""
end sub
'List property 对应的产品列表
function GetListFlower(property,value)
dim ret
dim myname
if (property="0") then
myname="List" &property & "F"
else
myname="List" &property & "F" &value
end if
ret=Application(myname)
if (ret="") then
ret=GetListFlowerFromDB(property,value)
Application(myname)=ret
end if
GetListFlower=ret
end function
'List property 对应的产品列表 从数据库
function GetListFlowerFromDb(property,value)
Dim ret,dbc,query,rs,mycondition
shopopendatabase dbc
query = "select result from navigateresult "
mycondition="where sort=0 and property="&property &" and value="&value
query=query & mycondition
set rs = dbc.execute(query)
ret=""
if not rs.EOF then
ret=CStr(rs("result"))
end if
closerecordset rs
shopclosedatabase dbc
GetListFlowerFromDb=ret
end function
'dir 对应的产品列表
function GetDirProduct(dir)
dim ret
if (dir =null or dir="") then
dir=""
end if
dim dirname
dirname="dir" & dir
ret=Application(dirname)
if (ret="") then
ret=GetDirProductFromDB(dir)
Application(dirname)=ret
end if
GetDirProduct=ret
end function
'dir 对应的产品列表,从数据库读出
function GetDirProductFromDB(dir)
dim ret
Dim dbc,query,rs
shopopendatabase dbc
if (dir="") then '读出所有产品
query = "select autoid from product order by priority"
else
query = "select autoid from product where Left(category,"+Cstr(len(dir))+")='"&dir&"'"
end if
set rs = dbc.execute(query)
ret=""
Do WHILE not rs.EOF
if (ret="") then
ret=CStr(rs("autoid"))
else
ret=ret+","+CStr(rs("autoid"))
end if
rs.movenext
Loop
closerecordset rs
shopclosedatabase dbc
GetDirProductFromDb=ret
end function
产品类定义
'Class Product
'public name,autoid,saleprice,Desc,marketPrice,vipPrice,netImageSmall,netImageMid,netImageBig
'End Class
'得到对应的产品
function GetProduct(ID)
dim ret
if (ID =null or ID="") then
ID="1"
end if
dim productname
productname="P" & ID
ret=Application(productname)
if ( not IsArray(ret)) then
ret=GetProductFromDB(ID)
Application(productname)=ret
end if
GetProduct=Application(productname)
end function
'得到对应的产品
sub disableProduct(ID)
dim ret
if (ID =null or ID="") then
ID="1"
end if
dim productname
productname="P" & ID
Application(productname)=""
end sub
'对应的产品,从数据库读出
dim FIELDAUTOID,FIELDNAME,FIELDSALEPRICE,FIELDDESC,FIELDMARKETPRICE
dim FIELDVIPPRICE,FIELDNETIMAGESMALL,FIELDNETIMAGEMID,FIELDNETIMAGEBIG,FIELDCODE
FIELDAUTOID=0
FIELDNAME=1
FIELDSALEPRICE=2
FIELDDESC=3
FIELDMARKETPRICE=4
FIELDVIPPRICE=5
FIELDNETIMAGESMALL=6
FIELDNETIMAGEMID=7
FIELDNETIMAGEBIG=8
FIELDCODE=9
function GetProductFromDB(ID)
dim ret(10)
Dim dbc,query,rs
shopopendatabase dbc
query = "select * from product where autoid="&ID
set rs = dbc.execute(query)
if not rs.EOF then
ret(FIELDAUTOID)=rs("autoid")
ret(FIELDNAME)=rs("name")
ret(FIELDSALEPRICE)=rs("saleprice")
ret(FIELDDESC)=rs("description")
ret(FIELDMARKETPRICE)=rs("marketprice")
ret(FIELDVIPPRICE)=rs("memberprice")
ret(FIELDNETIMAGESMALL)=rs("myimageurl")
ret(FIELDNETIMAGEMID)=rs("myimageurl")
ret(FIELDNETIMAGEBIG)=rs("myimageurl")
ret(FIELDNETIMAGESMALL)=rs("netimageurlsmall")
'ret(FIELDNETIMAGEMID)=rs("netimageurlmid")
'ret(FIELDNETIMAGEBIG)=rs("netimageurlbig")
'ret(FIELDCODE)=rs("code")
else
ret(FIELDAUTOID)=-1
end if
closerecordset rs
shopclosedatabase dbc
GetProductFromDB=ret
end function
%>
3.4.2页面头文件
为了实现代码复用,把头文件设计成公用模块,单独保存为一个文件,其他页面应用的时候只要包含这个头文件就可以了。
头文件中主要放置网站标志和各个2级频道,保存成HTML文件格式,放置到文件夹inc/下,文件名称为top.html.这样其他页面只要应用<!_ _#include file=”inc/top.html”_ _>,就可以使其他页面具有风格统一的“头”。
图3-16 网站头文件预览果图
3.4.3页面尾文件
和页头一样,我们把版权声明等信息保存在尾文件bottom.html中,本实例的尾部文件预览果如图3-17所示。
例程3-3 javascript校验代码
图3-19 鲜花分类的目录式检索浏览页面
图3-20 产品信息页面
图3-21 购物车页面
图3-22 网站结帐页面
如果您在计算机领域有任何疑虑或不确定的地方,请毫不犹豫地与老师交流噢,我们期待着为您提供有针对性的建议和指导。您的问题和讨论对我们来说都非常重要。