ASP在线花店系统(一)

时间:2017-08-13 我要投稿

一、在 线 花 店 1
二、特 色 突 破 2
三、 系 统 概 述 2
3.1系统设计 2
3.1.1 系统功能与应用背景 2
3.1.2 系统浏览 3
3.1.3 系统特点 3
3.2 系统设计和架构 4
3.2.1 系统设计思想 4
3.2.2 系统结构设计 4
系统功能模块细分 5
3.2.3服务器和ASP运作环境配置 5
3.3数据库的设计、生成与配置 7
3.3.1 数据库需求分析 8
3.3.2数据库概念结构设计 8
3.3.3数据库逻辑结构设计 11
3.4公用模块的编写 15
3.4.1数据库连接文件 15
3.4.2页面头文件 22
3.4.3页面尾文件 23
3.5前台界面设计与实现 27
3.5.1首页设计 27
3.5.2产品详细信息 32
3.5.3我的购物车页面设计 36
3.5.4结帐处理 39
3.5.5用户注册的设计与实现 47
3.5.6订单查询 48
四、 结    论 50
五、致    谢 51
六、 52
一、在 线 花 店
再线花店系统将传统的花店经营管理模式与计算机网络的综合经营管理模式结合在一
起。将人、机、物的需求、活动和运作进行系统分析、设计并管理,一实现现代高效、科学且安全的电子商务。
 本例通过一个在线花店的实例来介绍ASP与Access数据库结合开发的小型电子商务系统的过程。在系统设计时。从传统花店的经营模式,网上用户需求与业务经营模式,计算机网络管理、系统设计等几方面综合分析,定义系统的输入、输出、实现功能、系统运作能力、系统安全性、系统可维护性等各项需求。其中数据库采用Access,动态网页开发采用ASP,综合应用了ADO、数据库设计、密码、身份验证和缓存等技术。

二、特 色 突 破
 网上花店系统适合在线销售鲜花、礼品等,具有商品多属性检索(支持多重属性分类)、
 购物车、订单提交和查询等网上花店所需的基本功能。
   本系统采用ASP编写,在Windows的IIS的支持下运行。为了提高系统的效率,使用户浏览时候响应速度更快,本实例后台采用了缓存技术。

三、 系 统 概 述
3.1系统设计
3.1.1 系统功能与应用背景
 互联网以前所未有的速度发展,成为与报纸、广播、电视相比肩的第四媒体,同时正以其更捷的信息传输形式改变这人们的消费模式,利用简单、快界、低成本的电子通信方式,买卖双方不谋面就可以进行各种商贸活动,走向商业的互联网已经成为网络经济的大势所趋。
 眼下电子商务网站正如雨后春笋般大量涌现,企业网络化已经一种时尚。电子商务的发展可能大家都已经耳濡目染,上网的朋友对这已经不再陌生,电子商务确确实实出现在我们周围。本系统是一个在线花店系统,具有在线先手鲜花的基本功能。同过配置,可以作为一个实际应用的鲜花销售网站。本系统是为传统经营的花店构建网上销售渠道而开发的。
 本例中的在线花店重要完成的功能如下。
鲜花产品选购(可按分类方式查找鲜花种类或通过关键字进行查询)
购物车功能
查看鲜花详细情况
用户注册
用户登陆
查看用户的订单信息
用户评论
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”下,访问时从浏览器输入“https://localhost/Ivzhi/index.asp”,该访问“c:\\www”下的“index.asp”页面
                            
3.3数据库的设计、生成与配置
 信息管理系统离不开数据库,它保存系统用到的数据。本系统的数据库主要用来保存用户、订单、产品等信息,所以数据库主要用到的表有:用户表、订单表、产品表和分类导航4类表。
 设计数据库系统时应该先充分了解各个方面的需求,根据需求决定数据库结构。

3.3.1 数据库需求分析
 简单来说系统有3个对象:用户、消化产品和订单。用户浏览鲜花产品,并且在需要的时候下订单。各这些信息提供增加、修改、保存、更新和查询,这就要求数据库结构能从粉满足这些信息的输出和输入。收集基本数据、数据结构及数据处理的流程,组合一份尽的数据字典,为程序设计打下基础。
 系统需求积累用户资源,用用户表来记录用户的信息,具体包括用户的真名、地址、电话、邮编、身份证号、E-mail和密码等基本信息。
 网站要给用户展现产品,把鲜花产品的详细信息介绍给用户,需要产品信息表,具体包括产品名称、各类属性和所属分类等。
 网站是电子商务网站,最终目的是为用户服务,使用户浏览查后有购买的欲望,进行购买行为。订单类表格记录用户的购买行为,需要记录购买的产品信息,付款人的信息,收款人的信息,下单时间等。
 为了方便用户的查找,提高网站的服务质量,对产品进行不同的属性导航,一个鲜花产品分可以包含不同的属性,方便用户的查找,促进用户的消费,实现网站的价值,对具体查的属性进行分类,实现属性导航表,包括产品属性分类,产品对应产品属性的对应表。
 通过上述系统功能分析,针对一般的在线花店的需求,包括如下数据表。
网站用户信息表,包括数据项、用户ID、用户代号等。
采购订单表,包括数据项、订单ID、付款人姓名、付款人电话等。
订单明细表,包括数据项、订单明细编号、产品ID、订单ID等。
产品表,包括数据项、产品ID、产品代码、产品名称等。
用户评论表,包括数据项、ID评论内容、用户名称等。
目录属性表,包括数据项、目录编号名字、目录编号等。
导航属性字典表,包括数据项、导航ID数字类型ID、文本类型ID。
产品导航属性对应表,包括数据项、导航类型ID、导航名称等。

3.3.2数据库概念结构设计
 得到上面的数据项和数据结构以后,就可以设计出能够满足用户需求的各种实体,以及它们之间的关系,为后面的逻辑结构设计打下基础。这些实体包括各种具体信息,通过相互之间的作用形成数据的流动。
 本实例设计规划出的实体包括网站用户实体、采购订单明细实体、产品实体、用户评论实体、目录信息实体、目录属性实体、导航属性实体、查导航属性对应关系实体。图3-6为实体间关系的E-R图
 
 图3-6 实体关系E-R图

图3-7为网络用户实体E-R图。图3-8为采购订单的实体E-R图。

        图3-7网站用户实体E-R图        图3-8采购订单实体E-R图

图3-9为订单明细实体E-R图。图3-10为产品实体E-R图。

        图3-9订单明细实体E-R图                 图3-10产品实体E-R图

图3-11为用户评论实体E-R图。 图3-12为目录信息实体E-R图

 图3-11 用户评论实体E-R图           图3-12目录信息实体E-R图
 
图3-13为目录属性实体E-R图。    图3-14为导航属性字典实体E-R图。

图3-13 目录属性实体E-R图                   图3-14导航属性字典实体E-R图

图3-15为产品导航属性对应关系E-R图
 
                 图3-15  产品导航属性对应关系E-R图
 
3.3.3数据库逻辑结构设计
 数据库的概念结构设计完毕后,现在可以将上面的数据库概念结构转化为某种数据库系统所支持的实际数据模型,也就是数据库的逻辑结构。本章实例系统采用Access数据库,因此在设计本章实例系统数据库概念结构时,需要遵循Access数据库的语法结构。
 在线花店系统中各个表的设计结果如下面表格所示。每个表格表示在数据库中的一个表,
 表3-1为用户表,记录某个用户的信息。
 
字段名称 数据类型 说明
autoid 自动编码 主键,递增,用户在网站的标识
userid 文本类型 用户ID
pwd 文本类型 用户口令
sex 文本类型 性别:1男,0女
realname 文本类型 真实姓名
personid 文本类型 用户身份怔
mobile 文本类型 手机号码
phone 文本类型 固定电话
lasttime 日期类型 修改时间:第一次就是注册时间
adrress 文本类型 用户地址
email 文本类型 邮编
 表3-1中autoid是用户网站惟一标识,Useid是在用户注册时自己选择的名字,其他是拥护需要的属性。
 表3-2为产品信息列表,记录花店现有的产品信息。
 
字段名称 数据类型 说明
autoid 自动编写 主键,递增,产品在网站的标识
code 文本类型 产品代码,惟一标识,网站自己定义的字符串
name 文本类型 产品名称
description 备注类型 产品描述
marketprice 货币类型 市场价格
saleprice 货币类型 销售价格
myimageurl 文本类型 图片地址
status 数字类型 产品状态,是不销售:0销售,1停止销售
category 文本类型 产品种类
lasttime 日期类型 修改时间:第一次就是增加时间
priority 数字类型 排序用的优先级别
memberprice 货币类型 会员价格
netimageurlsmall 文本类型 网络小图片地址
netimageurlmid 文本类型 网络中图片地址
netimageurlbigsign 文本类型 网络大图片地址
sign 数字类型 标志是否特价产品

 表3-2中Autoid是产品在网站的惟一标识,在数据增加是自动生成,category是对应目录表的分类字符串。
表3-3中目录信息表,记录花店的分类信息。
                            
                             表3-3  directory目录信息表

字段名称 数据类型 说明
code 文本类型 目录代码,惟一标识一个目录
name 文本类型 目录名称
memo 文本类型 备注

表3-3中目录用字符串分级表示,产品的种类对应目录代码。
表3-4为订单信息表,记录花店的订单信息。

                              表3-4  myorder订单信息表

字段名称 数据类型 说明
autoid 自动编码 主键,递增,订单在网站的标识
payname 文本类型 付款人姓名
payphone 文本类型 付款人电话
payemail 文本类型 付款人E-mail
payaddress 货币类型 付款人地址
senddate 日期类型 送货时间
paymemo 文本类型 付款人备注
paytime 日期类型 支付时间
lasttime 日期类型 修改时间:第一次就是增加时间
recname 文本类型 收款人姓名
recnick 文本类型 收款人称呼
recphone 文本类型 收款人电话
recaddress 文本类型 收款人地址
recmemo 文本类型 收款人备注
recemaie 文本类型 收款人邮编
recsay 文本类型 留言
sendfee 货币类型 送货费
sendarea 数字类型 送货地区
totalpay 货币类型 总价
realpay 货币类型 实际价格
orderpass 文本类型 订单密码
userid 文本类型 用户ID
orderstatus 文本类型 订单状态
comefrom 数字类型 来源,是否从合作网站来的

 表3-4中的autoid是订单在网站的惟一表识,数据增加是自动生成,category是对应目录表的分类字符串。订单的付款人一般是网站的会员,收款人可以是自己,也可以是自己的朋友,所以对这两方面信息分开进行记录。
 表3-5为订单名细表,极力花店定单具体购买的产品信息。
                              表3-5  orderitem订单明细表
字段名称 数据类型 说明
autoid 自动编码 惟一标识用户采购的一个产品
productid 数字类型 产品ID
productname 文本类型 产品名称
productprice 货币类型 成品价格
quantity 数字类型 数量
orderid 数字类型 订单ID
 
 订单明细表和订单表是多对一的关系,就是一张订单可以有多个产品。
 表3-6为目录性表,记录花店目录的属性。
                              表3-6  directoryproperty目录属性表
 
字段名称 数据类型 说明
autoid 自动编码 目录属性代码,惟一标识一个目录属性
name 文本类型 目录属性名字
directorycode 文本类型 属于那个目录
 目录属性是为了更好的导航产品,目录的产品有不同的属性,比如鲜花的用途、花材、对象等属性。
 表3-7为导航属性字典表,记录花店目录的属性值。
                               表3-7  navigationdict导航属性字典表
 
字段名称 数据类型 说明
autoid 自动编码 惟一标识一个导航属性
directoryproperty 数字类型 对应目录属性的ID
directoryvalue 文本类型 导航属性名称
 导航属性字典对应表3-6目录属性表的auotid字段,换种说法就是目录有什么属性,属性具体对应什么值。比如鲜花目录的用途属性有恋情、生日、友情、祝福、婚庆、商务等不同的用途。
 表3-8为产品导航属性对应表,记录花店产品对应的不同属性。
 
                                表3-8 navigationrelation 产品导航属性对应表
字段名称 数据类型 说明
productid 数字类型 产品ID
navigationid 数字类型 对应目录属性的ID
 一个产品可以对应多个导航属性,最终用户可以根据不同的属性浏览产品,方便用户查找产品。
 表3-9为用户评论表,记录用户对产品的评论。
 
                             表3-9comment 用户评论表
字段名称 数据类型 说明
autoid 自动编码 评论ID
comment 备注类型 评论内容
nckname 文本类型 用户名称
repiy 备注类型 管理答复内容
status 识字类型 是否显示
email 文本类型 邮件
userautoid 数字类型 用户ID
productid 数字类型 产品ID
lasttime 数字类型 对应目录属性ID
 表3-9记录用户对查的评论,userautoid为0客人,不是网站用户。
 
3.4公用模块的编写
3.4.1数据库连接文件

 把数据库连接操作作封状在一个页面Commondb.asp中,以方便其他页面调用。例程3-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为这些函数定义的参考代码。
 
                       例呈3-2 allcommon.asp定义的数据库公用函数代码
                                                                                    
打开数据库  最顶级函数
<%
' 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所示。
 
用户登录判断

 用户登录判定一般由两个页面组成,页面login.asp提供表单让用户输入用户名和密码,当用户单击页面中【登录】按钮时,把用户名、密码提交到另一个页面userlogindo.asp,由userlogindo.asp页面作具体的登录处理。
 Login.asp就是一个简单的包含表单的HTML页面,并引入公用头尾文件,不过login.asp需要用到javascipt验证表单,防止用户输入空信息。图3-18为网站登录页面login.asp.的预览效果。
 
 例程3-3为login.asp页面中表单验证的java script代码。
                     
                          例程3-3 java script校验代码
                                                                             
 <script language="java script">
             function userloginsubmit()
             {
             var flag=

ASP在线花店系统(一)相关推荐
最新推荐
热门推荐