#网上购物系统毕业设计论文

#网上购物系统毕业设计论文
#网上购物系统毕业设计论文

一、设计思想

在Internet飞速发展的今天,互联网成为人们快速获取、发布和传递信息的重要渠道,它在人们政治、经济、生活等各个方面发挥着重要的作用。Internet上发布信息主要是通过网站来实现的,获取信息也是要在Internet“海洋”中按照一定的检索方式将所需要的信息从网站上下载下来。因此网站建设在Internet使用上的地位显而易见,它已成为政府、企事业单位信息化建设中的重要组成部分,从而倍受人们的重视。

随着,人们生活水平的不断提高。人们的消费理念也随着发生了根本性的变化。传统的购物方式将不能满足人们日益增长的物质文化需要。一种新型的便捷的购物方式呼之欲出,它就是“网上购物”。由于网上购物本身所具有的方便快捷的特点,因而它对传统的购物理念本身造成了巨大的冲击并越来越受到人们的关注。网上购物的出现由开始的不为人知而逐渐的被人们所接受并熟悉。依仗其自身的特点从而使人们足不出户就可以进行商品的选购。方便了用户并节省了大量的因为购物所花费的时间,正是因为这种鲜明的特点使它将成为未来人们选购商品的主要途径之一。那么随着这种依托于网络上的区别于传统经营模式的购物方式的诞生,也就成就了另一种类型的网站的出现──电子商务网站。

由于计算机的使用普及,通讯的发展越来越迅速。网络也越来越受到人们的喜爱。在网络技术水平不断完善和发展的今天。网络使用变得越来越广泛。各行各业各个领域已经很大程度上依赖网络来完成诸如:生产、销售等业务。

网络商店是在Internet 上开一家虚拟店面销售商品。网络商店和一般商店的目的是一样的,都是开店做生意,只不过商家无需付租金和给雇员的酬劳,并且是24小时不停业的。基本上网络商店是模拟现实生活中的商场,让顾客使用购物车,轻松地采购商品。网络商店的商品不是放在货架上,而是存放在数据库中。该种网络的优点在于让你足不出户,就能买到自己所需要的东西,而且物美价廉.随着物流和支付系统完善,现在的网上购物既能够方便付款,又能够快速送达,真正体现了网络实时购物的优势.

计算机网络作为一种先进的信息传输媒体,其特点就是信息传送速度快、信息覆盖面广而且成本低,因此可以利用网络开展商务活动。电子商务的网上实践,是从网上销售开始的,“网上商店”打破了传统的销售形式—商店,将商店和网络结合。网上购物自身具备的即时互动方式已经吸引了很多购物者的注意力。这类购物网站能够随时让顾客参和购买,更方便,更详细,更安全。网络的优点在于让你足不出户,就能买到自己所需要的东西,而且物美价廉.随着物流和支付系统完善,现在的网上购物既能够方便付款,又能够快速送达,真正体现了网络实时购物的优势.网上购物的现状网上连锁商城的成功之为客户提供24小时方便快捷的在线订购服务。

1、市场调研和可行性分析

1.1市场调查的对象

(1)同类产品市场的大小

天津地区的超市主要包括:华润,经工,家乐,屈臣式,等,主要的销售形式是采用被动式的网站形式为主,由于原本的超市的规模的问题,因此还是要以实体为主的,以网站的形式来宣传企业的形象的功能,很少有直接的网上销售的形式,因此还存在着相当的市场,而这一部分的时常也是没有完全的被开发出来,只有少数的企业有直接的销售。

(2)不同地区的销售商机和潜在市场

据天津市城市社会经济调查队抽样调查,2000年天津城镇居民家庭人均可支配收入为8140.55元,比上年增长6.4%。扣除物价因素,实际增长6.8%。工资性收入增幅加快,重新成为家庭增收主渠道。2000年,天津城镇居民家庭人均消费性支出6121.07元,同比增长4.6%。扣除物价因素,实际增长5.0%,比上年回落3.1个百分点。虽然居民消费性支出的增长幅度低于上年,但相对于当年收入居

民的购买力来说,则继续保持了上升势头。从居民消费投向变化看,消费热点主要集中在部分家电产品、自费负担的医药费、电讯费、交通费、旅游、住房装饰和文化教育支出上。全年消费主要特点是:医疗保健和交通通讯消费继续保持快速增长。全年家庭人均医疗保健支出407.76元,增长34.6%。其中医药费支出328.21元,增长41.2%;医疗保健用品及服务人均支出79.55元,增长13.0%。家庭人均交通通讯支出348.92元,增长22.8%。交通方面,人均用于交通支出133.75元,增长23.5%,其中人均交通费支出增长32.4%。通讯方面,人均用于通讯支出215.17元,增长22.4%。家庭设备用品及服务支出稳步增加。全年家庭人均设备用品及服务支出722.25元,增长3.6%。其中住房装饰人均支出149.41元,增长28.9%;家庭设备人均支出296.40元,增长9.1%。年初以来,天津居民对家庭设备类大件家电需求势头不减,成为消费热点。全年百户购买冰箱(柜)6.8台、空调14台、微波炉10.2台、淋浴热水器7台,需求量大幅增加,分别增长17.2%、70.7%、15.9%和75%,到2000年末百户拥有量分别为119.2台、65.6台、30.8台和70.2台。

服装消费增幅加快,食品消费平稳。衣着消费支出改变了近三年由于价格持续走低而下降的局面,呈现量增价升势头,服装价格和上年相比上升了11.0%。全年家庭人均衣着支出544.36元,增长9.9%。全年家庭人均用于食品消费支出2454.81元,同上年基本持平。居民在外用餐人均支出410.36元,增长18.8%,占食品支出的16.7%。人均在外购买熟主食38.9公斤,增长8.3%。

教育投入加大、文化娱乐内容更加丰富多彩,旅游消费增加。天津居民人均文教娱乐消费787.66元,增长7.0%。其中家庭人均教育支出393.82元,增长9.3%,主要是成人教育升温。文娱机电耐用品在上年大幅增加后,增幅有所减缓,彩电、影碟机、照相机需求量明显减少,但冷中也有热,电脑需求量增加。根据这份调查的内容来看可以确定天津地区市场的主要方面是服装,教育方面的图书,及一些家电为主的市场,应把重点放在着方面

1.2分析特定市场的特征

可以根据不同的消费人群及消费层次来确定不同的方向,象对成人和儿童的商品就不相同成人有能力购买一些比较贵商品而儿童就不会有这样的能力,因此对儿童就要以小的商品为主,价格应以能承受的范围为好,同时还可以宣传我们超市购物。

1.3不同的商品市场的规模和发展方向

可以通过对不同的商品的点击率,来确定用户对不同商品的喜好,这样可以从一个侧面反映消费者的爱好,也可以更好的来完善网站的销售结构,从而减少库存量,增加销售额1.4网站定位和收益

网络公司利用网络市场的功能主要体现在利用它实现公司多元化的目标价值链:树立先锋形象、发展公共关系、和投资者保持良好关系、选择最合格的顾客群体、和客户及时的在线交流、让客户记住公司的网络通道。

(1)树立公司先锋形象

利用互联网(Internet)改善公司形象,使其成为一个先锋的、高科技型的公司,是现代企业开拓网络市场最具有说服力的理由。在网络市场竞争中,作为一个拥有实力可以在竞争中制胜的公司,必须率先进入WWW系统,以先入为主的资格去迎合普通计算机使用者的需求,满足他们追求个性化产品及服务的欲望;先锋者形象赋予公司一种财力充足、不断创新的表象,这是公司最稀缺的、最珍贵的无形资产。4先锋者形象对于提高公司的人力资本的效用有着巨大的作用,它对于想成为先锋成员的雇员来说具有莫大的吸引力,也有利于公司在

网上公开招聘第一流的人才,使公司的人力资源更加雄厚。一个顽强的、机敏的、能力值高的、热情值高的员工队伍,将大大增强公司在网络市场和现实市场这双重市场上的开拓力。

(2)发展公共关系

网络公司必须在网络空间的公共关系网中占有绝对的优势。在具体的作法上,一是公司可以在电子广告栏目中描述公司发展的历史、公司的目标价值、公司的管理队伍、公司的社会责任及其对社区发展的贡献,以提高公司的社会知名度;二是公司能够利用多媒体技术(如图片、文件、音像、数字等)提供一种更为独特的服务,为顾客提供有价值的咨询信息,使访问者主动地进入你的网址,并进一步详细地阅读所有新近的资料。对于访问者来说,能获得有价值的信息是令人兴奋的事,获得一些有价值的信息越多,访问的次数也越多,访问的频率也随之提高,被访问的网络公司在访问者心目中知名度也随之提高,访问者对被访问的网络公司的忠诚度也随之增强。总之,网络公司通过不断地向顾客提供有价值的咨询信息来吸引访问者的注意力,来提高访问者对网络公司的忠诚程度。

(3)和投资者保持良好的关系

对于现代公司来讲,和投资者关系的好坏对公司的发展至关重要。公司可以利用WWW网址来建立和投资者保持良好的信息沟通的渠道,最大限度地降低信息的不对称性,从

而降低投资者对公司可能存在的“道德风险”、“机会主义行为”的担心,提高公司和投资者之间的信用度,保持长期的、双向的合作关系。

(4)选择最合格的顾客群体

对于一个网络公司来讲,选择最合格的顾客群体是公司实现网络营销战略的关键。公司通过WWW网,可以大大地缩小销售的范围,而以特色的产品和特色的服务来选择最合格的、最忠实的目标顾客群体,从而实现优良的客户服务。首先在于选择了最合格的顾客群体;其次在于优良的客户服务,这种服务是一对一式的,在顾客收到货品之后,公司通常会发出电子邮件来询问顾客是否满意;其二在于保证产品的质量和随时保持有新的商品供顾客挑选。

(5)和客户及时的在线交流

公司的WWW网址中包括了许多可以填写的表格,以解答顾客的疑问并进行有效的建议。它们就象电子邮件,沟通公司和客户。同时顾客也可以向公司的网址发来他们的忠告和建议,供公司及其他所有客户阅读。通过这种方式,公司可以同所有的顾客共同分享有关产品的有效信息。在线上,公司可以和顾客更为自由地进行信息往来,并允许目标顾客发出更多的反馈意见。第一件产品的发展、定位和提高全依赖于那些聪明的、有经验的顾客们的往来信息,这是公司不可或缺的一个强大的推动力。更重要的是,顾客在网络上完成互动,如果他觉得很满意,就会和好朋友分享。

(6)让客户记住您的网络通道产品销售中的宣传效应告诉我们,应尽可能地使我们的名字醒目地出现于人们面前。产品给人们留下的印象越深,人们越有可能记住他们,进而考虑、信任,并最终买下。一些设计很好的网址能使自己的通信管道深深地嵌入人们的记忆之中。

1.5开发工具的选用及介绍

随着Internet的普及,越来越多的企业建立了自己的WWW网站,企业通过网站可以展示产品,发布最新动态,和用户进行交流和沟通,和合作伙伴建立联系,以及开展电子商务等。其中新闻管理系统是构成企业网站的一个重要组成部分,它担负着双层作用,一方面可以用来动态发布有关新产品或新开发项目,另一方面又可以及时向顾客公告企业经营业绩、技术和研发进展、特别推荐或优惠的工程项目、产品和服务,从而吸引顾客,扩大顾客群。传统的网站新闻管理方式有两种,一是静态HTML页面,更新信息时需要重新制作页面然后上传页面并修改相应链接,这种方式因为效率太低已不多用。二是基于ASP和脚本语言,将动态网页和数据库结合,通过使用程序来处理,这是目前较为流行的做法。

(1)关于ASP

ASP的优势:

由于ASP页面每次打开都必须经过先编译后解释的过程,所以页面在反复打开时速度没有任何提升,而ASP页面只需要一次编译后不需要重新编译,直到该页面被修改或Web 使用程序重新启动。这使得在多次访问时速度有了极大的提升。

由于ASP没有提供任何输出数据为内容的元件,所以在使用ASP撰写数据库页面时只能借助ADO的RecordSet对象逐笔读取记录,而ASP通过https://www.360docs.net/doc/ed8909474.html,提供的DataGrid等数据库元件可以直接和数据库联系。

ASP支持使用程序的实时更新。管理员不必关掉网络服务器或者甚至不用停止使用程序的运行就可以更新使用文件。使用程序文件永远不会被加锁,因此甚至在程序运行时文件就可以被覆盖。当文件更新后,系统会温和地转换到新的版本。

ASP采取"code-behind"方式编写代码使得代码更易于编写,结构更清晰,降低了系统的开发和维护的复杂度和费用。

Active Server Pages:“动态服务器网页”,一般简称为“ASP”,ASP之所以能受到大家的重视和使用的原因,主要在于所产生的执行结果都是标准的HTML格式,而且这些程序是在网络服务端中执行,使用一般的浏览器(如IE 或Netscape)都可以正确地获得ASP的“执行”结果,并且将这ASP执行的结果直接在浏览器中“浏览”,不像VBScript 或 JavaScript是在客户端(Client)的浏览器上执行,若使用VBScript来设计程序,客户端(Client)在IE浏览器中可以显示程序执行的结果,可是,客户端(Client)若使用Netscape浏览器就无法显示VBScript的执行结果。

ASP的特点:

任何开发工具皆可发展ASP:只要使用一般的文书编辑程序,如Windows记事本,就可以编辑。当然,其他网页发展工具,例如,FrontPage Express、FrontPage等也都可以;不过还是建议你用记事本来写,既省钱又方便,若是使用那些所见即所得的网页编辑来写ASP,可能会发生一些意想不到的离奇状态。

通吃各家浏览由于ASP程序是在网络服务器端中执行,执行结果所产生的HTML文件适用于不同的浏览器。

语言相容性高:ASP和所有的ActiveX Script语言都相容,除了可结合HTML,VBScript、Java Script、Active X服务器组件来设计外,并可经由“plug-In(外挂组件模组)的方式,使用其他厂商(Third Party)所提供的语言。

隐密安全性高:如果我们在浏览器中直接查看网页的原始代码,就只能看到HTML文件,原始的ASP程序代码是看不到的!这是因杰ASP程序先于网站服务(Web Server)端执行后,将结果转换成标准HTML文件,再传送到客户端(Client)的浏览器上,因此,我们所辛苦撰写的ASP程序并不会轻易地被看见进而被盗用。

易于操控数据库

ASP可以轻易地通过ODBC(Open Database Connectivity)驱动程序连接各种不同的数据库,例如:Acess、Foxpro、dBase、Oracle等等,另外,ASP亦可将“文本文件”或是”Excel” 文件当成数据库用。

面向对象学习容易:ASP具备有面向对象(Object-Oriented)功能,学习容易,ASP提供了五种方便能力强大的内建对象:Request、Response、Sever、Application以及Session,同时,若使用ASP内建的“Application”对象或”Session”对象所撰写出来的ASP程序可以在多个网页之间暂时保存必要的信息。

ASP的六大内部对象

对象名称功能描述

RequestResponseServerSessionApplicationObjectContext 从客户端取得信息将信息送给客户端提供一些Web 服务器工具储存在一个Session 内的用户信息,该信息仅可被该用户访问在一个ASP-Application 中让不同的客户端共享信息可以用来配合Microsoft Transaction 服务器进行分布式事务处理 (2)ASP 和IIS IIS 简介

Wsb 服务器是Web 使用程序的心脏。IIS(Internet Information Server)是微软推出的Windows NT Option Pack 的主要成员,作为Win2000server 的扩展,自推出以来已经有了很大发展,其体系结构是当今市场上最受关注的Web 服务器之一。新推出的IIS4.0版本增强了系统安全性,具有服务器端脚本开发调试,内容管理和站点分析,崩溃防护,内置JAVA 虚拟机及全面支持ASP 等强大功能。

IIS 和ASP 的结合

在过去,客户机/服务器结构的设计和Web 的相关技术几乎处于平行线上,两者相互独立并无法作出集成性的设计。现在我们利用IIS+ASP 构成三层式Web 结构(如图2.1所示)的中间一层,将客户机/服务器结构和Web 密切结合,完成前后端两者的集成输出功能,使得Web 站点的开发更方便,实现的功能更强大。

利用IIS+ASP 技术来集成Web 前后端所带来的强大效益可归结为以下几个方面:

1. 减少构建和维护成本 2. 加快联机过程

3. 使用软件集中在服务器端开发管理 4. 前端可使用任何浏览器(IE ) 5. 后端可存取任何数据库 (SQL 、Access) 6.

可使用任何脚本语言开发 (asp)

图1.1

所以我选择了ASP 结合Frontpage,access 架构联华网上购物系统。

二、网站总体分析和设计

2.1网站的功能

建设一个网站需要考虑到不同使用程序之间存在的各种可能的联系,以及可能存在的错

误的陷阱。特别是在一个综合性的大型电子商务网站中,

这一点尤为重要。一个小小的错误都有可能成为网站的重大漏洞,导致网站后台数据库数据的泄露,或者用户私人数据的泄露。

上网购物,这们的话题不只是新鲜,也可能为您带来不少商机这个网站的核心功能是在

网络上提供超市供应商品的零售业务,即一个网上的超市。用户可以方便地在线浏览商店中

提供的各种商品,也可以在线订购所需要的商品。和现实世界顾客到商店购物的程序不同,

我们必须要保证用户购物的可靠性,即需要对购物用户的身份进行一定程度上的控制。这是

因为网上销售的不是真实的货物,而是达成一项买卖的协议,然后由卖方提供送货业务。实

际的商品交割需要到现实世界中来完成,所心必须对顾客的身份及购物定单进行审核。查证这个电子商务网站由前台购物、后台管理、在线支付三部分组成,功能强大、使用简单、管理方便,只要会打字就能购买到您满意的商品。 综合以上这此要求,至少应该具有以下几个功能

程序和计算逻辑

前端浏览器

ActiveX Server ActiveX Server 元件 后端数据库

数据库服务器

Microsoft IIS + ASP 浏览器

(1)将需要在网络上销售的商品加以归总和分类,建立一个基本的网站商品分类体系,据此来设计商品数据库。然后在网站上按照分类体系分别设置商品陈列架,用户可以通过浏览不同的陈列架找到所需要的商品。

(2)对用户进行注册会员制管理方式,无论是否为会员用户都能在网站上浏览,在线购物(即下定单)。但网站的注册会员可以在每次进入本站时,通过验证身份而获得根据会员等级的不同而得到不同的折扣功能。管理员可方便的为会员设置不同等级,不同等级的员会可享受不同的购物折扣。如果用户发现自己的注册信息有错误,也可以在线修改。

(3)对用户的资料进行采集,记录用户每次购物的信息,对用户的购物进行奖励。奖励的方式是提供一种网站积分,当积分到达一定的分额时通知用户,然后对用户的再次购物进行优惠或者提供其他优惠措施。这一点也是现网络上很多电子商务网站都采用的“积分制”促销活动。

(4)实现用户的在线选购商品和定单的生成。用户可以对自己选择过的商品取消购买,也可以对每件选择的商品决定购买的复件数。

(5)提供用户对网站数据库中所有商品的查找功能,用户可以通过简单的商品名进行精确或者模糊的检索,也可以通过一个提供多个检索入口的高级检索对所需要商品进行多方面的限制性检索。用户可以通过查看检索结果而获得商品的详细情况,如货号、品牌、价格等。

(6)站内留言发布,沟通无极限。会员和游客均可发送短信和留言。

(7)商品采用二级无限分类;实用、够用、好用的商品展示栏目:“新品速递”、“推荐商品”;强大、实用的商品搜索导航功能。

(8)支持市场价和热卖价,通过对比可吸引顾客购买欲望。最终售价名称可自定义。(9)实用的滚动广告、双字幕广告、横幅图片广告、多方位向顾客传递网站资讯。

这里列出的功能其实也是一个综合的大型电子商务网站所具备的基础功能,其他任何衍生的功能都是在此基础之上的拓展。因此,只要掌握了这些基本功能的实现方法,然后建设更大的且功能更完更的电子商务网站就不会有太大的问题。

2.2网站功能模块划分

通常在设计一个大的工程项目时,都是事先将其分成若干个相对独立的功能模块,然后对各个模块进行独立设计和编制。一般来说,这些模块需要遵守一定程度上的相同约定,如变量名和程序接口约定等。每个模块都完成以后,再对各模块进行整合。就像搭积木一样,把各个模块像积木一样最后搭成最终的项目,这种程序设计思路通常也被称为“积木式”程序设计。

根据网站的功能,将该网站划分为以下几个功能模块。

(1)模块一:会员注册和管理模块,包括新会员注册、会员身份验证(即登录)、会员信息修改、会员身份注销和预定制商品。

(2)模块二:商品陈列上架模块,即实现商店所有商品的分类上架,供用户浏览选择。制作网上购物网页最重要的事情大概是商品的分类。好的分类能够让上网者更轻松地找到他要的商品,而增加购买的机会。因此每一分类商品都应该有其专用的网页,就好像百货公司的专柜一样。

(3)模块三:购物车模块,需要完成用户选购商品,购物定单生成功能,以及用户购物积分功能。

(4)模块四:商品检索模块,包括简单的商品名称精确和模糊检索、多种条件的组合检索、检索结果的分面显示和检索结果的详细介绍。

(5)模块五:数据库设计模块,包括按照功能分析设计数据库并处理各表结构。这个模

块是其他所有模块的基础。

各模块内部具有错综复杂的关系,其中最主要的就是购物生成定单和用户身份验证之间的联系。下面列出我们分析得出的关于这些模块内部及模块之间的联系。

(1)会员登录通过以后才能进行资料修改。在修改资料之前必须判断当前用户是否已经登录,或者其登录信息是否已经超时。

(2)会员登录通过以后才能进行商品的折扣计算。在计算金额之前须判断当前用户是否已经登录,或者其登录信息是否已经超时。

(3)用户浏览商品,选购商品,将商品放入购物车。如果该用户决定要购买这些商品,即要生成定单,就必须判断当前用户的折扣比率,或者其登录信息是否已经超时。

(4)用户身份验证通过后将要生成定单。如果用户有需要在定单生成之前进行资料修改,则需要转入用户资料修改程序,该程序位于会员管理模块中。

(5)用户通过检索功能找到所需商品,满意后放入购物车,即由检索模块转入购物车模块。这些联系也反映了网站设计的基本思路和程序编制的基本流程,网站详细的流程如图2-1所示。

从流程图中可以看出,身份验证在整个网站购物的过程中发挥着相当重要的作用。其中包括登录、判断用户登录信息是否超时,以及对非法用户引导其进行注册等功能。

该流程图也大致体现了网站程序设计的思路,按照用户购物的流程来设计程序。顺着该流程图一步一步往下走,在需要进行转向处提供转向功能,并随时注意用户的登录信息。这种思路有利于对整个大的工程的把握,有利于对程序设计过程的实时指导。

2.3主页设计

2.4 数据库设计

分析上一节提出的网站功能模块划分,这个电子商务网站需要使用数据库来存储会员信息、商品信息、定单信息及预定制商品信息。

数据库是整个网站的基础,因此必须在数据库框架设计完成的情况下,其他模块才有可能实施。我们采用的数据库开发工具是Microsoft Access 2000,数据库名称定为shop.mdb。根据需要存储的信息,在该数据库中定义了如下各数据表。

1.会员资料表usermain

该表用于存放会员的注册信息,结构见表

字段名数据类型字段长字段说明

usernid 文本20 用来存储会员的编

号,2至15位纯数字

和字母,主索引username 文本50 存储会员在网站的用

户名

userpassword 文本16 会员的密码,5至10

个字符

usermail 文本100 会员的联系e-mail totalamount 数字精度8,数值范围2 会员积分数

address 文本255 会员的地址

city 文本50 会员所在的城市province 文本20 会员所在的省份country 文本30 会员所在的国家zipcode 文本10 会员的邮政编码birthday 文本50 会员的生日

sex 文本 1 会员的性别IncomeRange 文本20 会员的收入MaritalStatus 文本 1 婚否

Occupation 文本30 会员的职业CompPhone 文本50 会员的联系电话HomePhone 文本50 会员的手机号码CompanyName 文本50 会员的公司名称Memo 备注

UserType 文本20 顾客的等级UserKou 文本50 顾客的折扣

2.商品信息表prodmain

字段名数据类型字段长字段说明

ProdId 文本40 商品编号,主索引ProdName 文本60 商品名称

Model 文本20 商品尺码Priceshichang 货币商品原价Priceremai 货币商品销售价ImgPrev 文本255 小图片位置ImgPrevWidth 文本 5 小图片宽ImgPrevHeight 文本 5 小图片高

ImgFull 文本255 大图片位置ImgFullWidth 文本 5 大图片宽ImgFullHeight 文本 5 大图片高

Remark 文本 1 是否首页推荐ProdDisc 备注商品介绍MemoSpec 备注详细介绍

itemCode 文本20 商品所属大类kindCode 文本20 商品所属小类ProduceArea 文本10 商品出产地ProdLong 文本 5 商品长

ProdWidth 文本 5 商品宽

ProdHeight 文本 5 商品高

Online 是/否是否有现货AddDate 日期/时间商品上架时间ClickTimes 数字商品点击次数Quantity 文本 5 商品库存量

remark 文本 1 是否是首页推荐商品

该表用于存放订单的信息,

字段名数据类型字段长字段说明OrderNum 文本50 订单号码

UserId 文本20 下单人ID

OrderTime 日期/日间下单时间

OrderSum 数字折后总金额RecName 文本50 收货人姓名RecAddress 文本255 收货人地址RecPhone 文本50 收货人电话

RecMail 文本50 收货人邮件地址ZipCode 文本10 邮政编码

Notes 备注顾客下单的订单备注pei 文本50 配送方式

fei 数字配送费用

thiskou 数字折扣比率

prodname 文本255 顾客所购商品名称quatityt 文本255 顾客所购商品数量prdid 文本255 顾客所购商品号

为了方便查询商品,定义了结构见表

字段名类型字段长

item 数字商品大分类序号itemCode 文本20 商品大类名称

kind 数字商品小分类序号kindCode 文本20 商品小分类名称

3.1会员注册和管理

会员注册和管理模块涉及到新会员的注册、老会员登录及修改个人资料,会员身份注销及预定制商品。为了避免在程序中连接数据库时所写的很长的程序段,我们把该语句存放在config.inc文件中。每个需要连接数据库的程序只要在程序开头部分采用包含文件的方法包含该文件。

DB="database/shop.mdb" '定义数据源的路径

'定义连接数据库的语句

set conn=server.createobject("adodb.Connection")

connstr="provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(DB) conn.Open connstr

timeoutsession=5 '会话超时时限

session.timeout=timeoutsession

function sqlstr(data) '此函数用来将sql语句中的单引号转换为双引号

sqlstr="'"&replace(data,"'","'")&"'"

end function

3.2新会员注册

新会员注册时需要提供一系列的信息。对于一个电子商务网站来说,这些信息的可靠性直接和网站的经营相挂钩。因此,必须对用户填写的各种信息进行一定程度上的跟踪和限制。同时为了减轻服务器的负担,在客户端对用户填写的各种信息进行一定的合法性检验,避免过多的无效注册访问服务器,浪费服务器的资源。按照会员信息表的设计,制作下面的会员注册页面enroll.asp,代码如下:

该程序使用JavaScript程序对必须填写的项目进行了检验:

function Checkreg()来检验用户输入是否合法或者符合网站设计的规。

function fucPWDchk(str)功能:检查是否含有非数字或字母参数说明:要检查的字符串返回值:0:含有 1:全部为数字或字母,其中为会员填写的信息及使用javascript对程序的检验语句为。

(1)登陆账号长度为2至15位纯数字和字母。

if (!fucPWDchk(https://www.360docs.net/doc/ed8909474.html,erId.value)){

alert("请输入您字母或者数字作为用户登陆名。");

https://www.360docs.net/doc/ed8909474.html,erId.focus();

return false;

}

if(https://www.360docs.net/doc/ed8909474.html,erId.value.length<2||https://www.360docs.net/doc/ed8909474.html,erId.value. length >15) {

alert("请输入用户名,且长度2-15个字母。");

https://www.360docs.net/doc/ed8909474.html,erId.focus();

return false;

}

(2)真实姓名长度为4-8位。

if(https://www.360docs.net/doc/ed8909474.html,ername.value.length<2||https://www.360docs.net/doc/ed8909474.html,ername.va lue.length >=20) {

alert("请检查您填写的真实姓名。");

https://www.360docs.net/doc/ed8909474.html,ername.focus();

return false;

}

(3)登陆密码长度:5至10个字符。重复密码用来确认顾客刚才输入的密码if(document.ADDUser.pw1.value.length<5||document.ADDUser.pw1.value.length >10) {

alert("请输入密码,长度在5-10之间。");

document.ADDUser.pw1.focus();

return false;

}

if (document.ADDUser.pw1.value != document.ADDUser.pw2.value) { alert("您两次输入的密码不一样!请重新输入。");

document.ADDUser.pw2.focus();

return false;

}

(4)电子邮箱长度大于8位小于50位

if(https://www.360docs.net/doc/ed8909474.html,ermail.value.length<8||https://www.360docs.net/doc/ed8909474.html,ermail.va lue.length >=50) {

alert("请输入有效的电子邮箱。");

https://www.360docs.net/doc/ed8909474.html,ermail.focus();

return false;

}

(5)联系地址长度大于3位小于50位

if(document.ADDUser.Address.value.length<3||document.ADDUser.Address.valu

e.length >=50) {

alert("请输入有效的联系地址。");

document.ADDUser.Address.focus();

return false;

}

(6)邮政编码需要输入且长度为6位。

if (document.ADDUser.ZipCode.value.length !=6) {

alert("请输入正确的邮政编码,长度为6位数字。");

document.ADDUser.ZipCode.focus();

return false;

}

(7)联系地址长度在3位和50位之间

if (document.ADDUser.Address.value.length <3 || document.ADDUser.Address.value.length >=50) {

alert("请输入有效的联系地址。");

document.ADDUser.Address.focus();

return false;

(8)联系电话需检验。

if(document.ADDUser.HomePhone.value.length<6||document.ADDUser.HomePhone.v alue.length >13) {

alert("请输入有效的电话号码。");

document.ADDUser.HomePhone.focus();

return false;

}

(9)可选择填写的项目为:手机建议填写,便于联系,国家默认为中国,省份,城市,性别,婚否,生日,收入,职业,公司,备忘

用户在这个注册页面填写完成后,单击“提交”按钮,送交服务器custadd.asp处理:

使用一系列的变量接受用户填写的各项参数信息(利用request.form)。为了防止新注册的用户和已经注册的用户重名,即判断注册页面传输的会员名是否已经存在。

sql = "SELECT * FROM UserMain where UserId= '" & UserId & "'"

rs.open sql,conn,1,1

if not (rs.Bof or rs.eof) then

如果已经存在,则说明和已经注册的某个用户重名,那么程序返回enroll.asp用户重新进入注册信息填写页面。使用response.write””合返回上一页在这个判定通过以后,根据数据库中已有信息计算这个新会员的会员编号,用SQL语句的addnew方法将各项住处插入到数据库中rsadd.AddNew(rsadd已经连接到数据库usermain)。在计算会员编号和插入数据库的操作时,对数据库进行锁定,防止并发用户操作的冲突发生,导致数据库数据完整性的破坏或者用户的操作无法正常完成。application.lock和application.unlock使用rsadd.Update语句对数据库进行更新保存。正确填写资料并且获得会员资格的后将提示,返回主页或是进入用户中心查看或更改数据。用户注册成功以后,浏览器中将提示其数据已经完全插入了数据库,并将用户填写的资料打印在浏览器中。这时用户可以继续浏览网站或立即进入登录页面登录到网站。

3.3 老会员登录

会员登录的程序比较简单,老会员从loginbox.asp(登录界面)输入自己的会员名和密码以后,表单提交到findhistory.asp处理。

登录界面很简单,表单中提供两个文本框允许用户填写用户名和密码。当无用户登录时显示用户名和密码输入框。此时可以通过输入用户名和密码,单击登录按钮执行 将表单提交到findhistory.asp处理。或是通过注册按钮执行调用enroll.asp文件进行新会员的注册。而当会员登陆成功后。登录框将变为显示会员名称和状态,此时可以单机用户中心执行 连接到account.asp文本进入用户中心对用户的资料进行查看或修改。或单击退出登录执行连接到userlogout.asp文件退出系统。

提取在loginbox.asp页面中输入的用户名和密码。Userid=trim(request.form("userid")) Password= trim(request.form("password"))为了防止正在系统中的用户重复登录所以要对新登录的用户和正在系统中的用户进行比较,if Userid = Session("estore_userid") then如果相同证明此用户正在购物中提示用户返回首页。如果不相等证明会员为一个还为登录的会员要对其输入的用户名和密码进行验证。首先查找usermain和输入用户相同的那条记录sqlstr3 = "select * from usermain where userid='"&Userid&"'"判断数据库中是否有此用户if rs.bof or rs.eof then数据库查找后结果为空证明无此人,选择重新登录或是立即注册 else数据库查找结果不为空证明有此人进行密码的验证if rs("UserPassword")= Password then如果密码正确刚成功登录。密码错误处理同上。

如果登录成功设置标记是否登录的session变量session(" estore_userid ")的状态为Userid已经登录(即设为用户的id号),然后返回的位置用户中心account.asp

3.4 老会员注销

老会员从网站上注销的程序是当已经登录的会员从主页的快捷按钮区或是用户状态显示区单击退出登录会执行。设置标记是否登录的session变量中存放用户的id号,首先从数据库中取出和estore_userid变量中id号相同的用户sqlinfo = "select * from UserMain where UserId='"&session("estore_userid")&"'"。判断是否有此数据if rsinfo.eof and rsinfo.bof then如果数据库不为空证明此用户已经正确登陆。对用户进行退出处理,将用户已经登陆的变量全部付值为空。(如将已登陆用户的id号取值为空Session("estore_userid")="")。如果为空证明用户没有登陆就先退出,提示返回首页正确登录。完成注销以后,即重定向到主页index.asp。

3.5 用户中心

当会员第一次登陆时会自动转到用户中心,或是用户在主页单击用户中心也可进入,用户中心的功能主要有两个,一是个人资料,在个人资料中可以对会员自己的资料进行查询修改,一个是个人订单,当单击个人订单会转入购物车页面,在个人订单中显示购买过的商品和商品的数量,价格,折扣,折扣价格,原价格。在进入用户中心account.asp后,页面首先判断Session("estore_userid") 的状态if Session("estore_userid")="" then是否为“已经登录”。如果没有登录,则提示用户先进入登录页面;否则将显示用户中心的界面。

利用显示用户中心的菜单,从数据库中找出此用户的记录sqlinfo="select*from UserMain where UserId='"&session("estore_userid")&"'"判断数据库中是否有此人的记录if rsinfo.eof and rsinfo.bof then值为空证明无此人提示“非法查看相关资料,请重新正确登陆”。如果找出此用户的记录,取用户的折扣值

userkou=rsinfo("UserKou"),保存用户的折扣值并给userkou变量session("userkou")=userkou,显示用户的相关信息:

用户号<%=rsinfo("UserID")%> 会员级别<%=rsinfo("UserType")%> 折扣数<%=FormatNumber(userkou,2)%>

在用户中心的菜单程序上主要实现,用户信息的显示,修改和用户定单的显示和修改。在account_menu.asp中点击个人资料执行,点击个人定单执行pushcart.asp。

在个人资料my_info.asp文件中,该用户的个人资料以表单的形式显示,供用户修改。按照和注册页面相同的脚本检验程序来规范和控制用户的输入。一切通过以后,表单提交至my_info_save.asp程序处理。该程序按照用户重新填写的信息对数据库中的资料进行更新。在此更新的过程中同样对数据库进行锁定。

在my_info.asp程序中,按照用户填写的已经经过检验的资料来更新该用户在数据库中的资料。用户资料中的会员编号、用户积分均不可修改。资料修改结束后,返回用户中心的主界面。

3.6商品陈列架

首先,我们给出这个网站中商品的分类体系。商品基本大类分为家用电器类、生活用品类、儿童用品类、音像制品类、着装饰品类。

具体划分小类安排如下。

(1)家用电器类:数码产品、家居电器及其他电器。

(2)生活用品类:化妆品、家居用品及其他。

(3)儿童用品类:儿童书籍、儿童玩具及其他。

(4)音像制品类:DVD、VCD、CD及其他。

(5) 着装饰品类:金银配饰、服饰及其他。

在编写商品陈列上架的程序之前,必须要考虑如下几个问题。

(1)商品应当按照所属小类来显示,这样有利于用户集中选择商品。

(2)必须要为顾客提供按照商品分类来引导用户浏览商品的导航栏,应该在页面中使用另外一个框架页面作为该程序的导航栏。

(3)由于每个小类中的商品有可能比较多,因此需要对每个小类的商品进行分页显示,具体每页显示多少可以提供用户自定义的权限。

(4)如果该小类尚且没有商品,应当在程序中加以捕捉这个错误陷阱。

(5)在显示商品时也应可以按照商品的的状态显示。如在主页陈列热门商品,推荐商品,在快捷菜单中可以同样实现。

下面是这个陈列商品的过程

导航栏程序prodtree.asp中,将商店中所有的商品类别罗列在页面上,并且按照大类及小类的关系,在浏览器上显示出一个树形的导航目录。用户可以在prodtree.asp中单击自己想要查找的商品的小类别:

连接到sublist.asp 文件并且提交itemcode字段的值。

在sublist.asp窗口中显示出该小类别中的所有商品。如果这些商品一页显示不完,sublist.asp窗口将自动按照既定的数值来分页显示。

导航栏程序prodtree.asp的核心部分是用表格来显示商品的大类和所有的小类,该核心程序的部分如下:

Dim a '定义变量 a来存放大类别名

sqllar="select Distinct itemCode,item,kindCode,kind from ProdClass order by

item,kind "'用唯一索引取出大类商品的类名和类号和小类商品的类名和类号

response.write "

" ‘利用response.write画出显示商品分类的table框

if rsprodtree.bof and rsprodtree.eof then '库为空无商品类型,显示您好!商城,商品准备中else'库不为空显示数据

a=rsprodtree("itemCode")'将当前显示的分类名付给变量a

Do While Not rsprodtree.eof '当数据库不为空时循环

当选择要显示大类时连接到sublist.asp并将itemcode字段中的值传送过去。

a=rsprodtree("itemCode")'用a变量保存类别名为了判断其他记录是小类别是否属于此大类别

for i=0 to rsprodtree.recordcount '显示商品小类的循环,rsprodtree.recordcount为数据库的记录数

if i<>0 then '在只有一个小类的情况下else '在有多个小类的情况下onMouseOver=""bgColor='#FDE289'""指针指到时颜色

onMouseOut=""bgColor='#FCF5E1'"">指针移开时颜色

选择小类时的连接:

href='sublist.asp?itemCode="&rsprodtree("itemCode")&"&kindCode="&rsprodtree("ki ndCode")&"'>

rsprodtree.movenext '指针下移一条

if rsprodtree.eof then exit do '数据库为空退出do while循环

if a<>rsprodtree("itemCode") then'判断此条记录的小类是否属于正在显示的大类

exit for '不属于此退出for循环

这个导航栏程序prodtree.asp和商品分类显示程序sublist.asp相结合来显示商品

下面介绍sublist.asp的商品陈列的实现,其它部分的商品显示部分的实现和其类似首先读取当前页的状态:是新用户连接打开的页面还是由于用户单击上一页或下一页产生的Page=request("page")将值保存到pagecount:pagecount=page,取出提交来的字段itemcode,kindcode的值付给sublar,submid:SubLar=request("itemCode"),SubMid=request("kindCode")

商品显示模块的程序为

(1)将商品库中所有有货的产品记录取出:sqlprod="select * from ProdMain where online=true "如果大类不为空则先按照大类查找if SubLar<>"" then sqlprod = sqlprod + "and itemCode='"&SubLar&"'"如果小类不为空则先按厌烦查找在按小类查找if SubMid<>"" then sqlprod = sqlprod + "and kindCode='"&SubMid&"'"判断数据库是否为空if rsprod.bof and rsprod.eof then为空证明没有商品则显示,您好!目前商城暂时没有 "&SubLar(大类名)&SubMid&(小类名)"商品else显示商品

(2)产品显示

1.n=0 '产品显示个数的累加器初值付0

2.Do While Not rsprod.eof ‘产品显示的循环(当数据库不为空时循环)

3.显示内容:

当单击图片时显示详细内容

当单击名称时显示详细内容

型  号:<%=rsprod(“Model”)%>

简  介:<%=rsprod("ProdDisc")%>

市场价: <%=rsprod("Priceshichang")%>元

热卖价:<%if rsprod(“quantity”)=0 then ‘无价格显示备货中...

Else <%=rsprod(“Priceremai”)%> 元

放入购物车进,提交用记所购买商品的prodid号: end if

4.n=n+1 '累加器加一

5.rsprod.movenext '指针下移

6.if n>=rsprod.pagesize then exit do ‘判断商品已经显示的个数是否超出了pagesize规定的范围

7.loop '没有超出继续循环

(3)分页程序:pagesize每页放置多少条记录pagecount总的页面数,判断这是一个新的用户连接打开的sublist.asp页面,还是由于用户单击“上一页”按钮,“下一页”按钮等来请求的页面if not isempty(request("page")) then如果不是新的页,取将要显示的页面数pagecount=cint(request("page"))如果是一个新的请求,程序需要对于变量加以初始化,将当前页付傎为1 pagecount=1定义每页显示的记录数rsprod.pagesize=7

判断是否大于一页,如果大于一页将显示“下一页”if pagecount=1 and rsprod.pagecount<>pagecount and rsprod.pagecount<>0 then将页数加一page=<%=cstr(pagecount+1) %>

判断是否需要显示“上一页”if rsprod.pagecount>1 and rsprod.pagecount=pagecount then 将页数减一page=<%=cstr(pagecount-1) %>

判断是否“上一页”,“下一页”都需要显示if pagecount<>1 and rsprod.pagecount<>pagecount then上一页减一page=<%=cstr(pagecount-1)%> “下一页”加一page=<%=cstr(pagecount+1)%> 转到第几页,使用