基于网络超市商品销售管理系统的设计与实现
摘 要
随着互联网日益深入我们的生活,网上商品销售的方式也逐渐被人们所接受,因而集成销售管理功能的网上销售系统也显得更加重要而实用。鉴于此,本课题设计了基于网络超市的商品销售管理系统。首先,论文简单介绍了商品销售管理系统的产生、发展和现状;然后对本系统使用的几项关键技术做了介绍;最后用软件工程的分析方法从系统需求分析、系统设计、数据库设计、系统实现等几个方面对整个系统进行了阐述。同时对系统的功能,包括商品目录显示、用户注册、用户登录、购物车、定单查询、系统维护管理等功能模块进行了实现。本系统主要运用了HTML、JSP编程技术与SQL Server数据库等关键技术进行设计、实现。设计中使用页面模块化思想,并部分采用三层架构思想,使用JavaBean 完成对数据库的操作,对销售管理、系统维护部分使用Servlet技术实现。当然系统还存在许多不足之处有待改进,特别是安全方面的问题还没有很好的考虑和实现。
关键词:网络超市;管理系统;JSP;JavaBean;Servlet
The Design and Implement of the System of Trade and Management of Products based on Online Supermarket
Abstract
As the close link of Internet with our lives, the online trading has been accepted by people gradually. So the online integrating system of trade and management becomes very important and useful. Therefore, this project designs the system of trade and management of products based on online supermarket. At the beginning, the paper introduces the origin, development and the current situation of the system of trade and management of products briefly. Then it describes some key technologies simply being used by the system. Finally, the system has been analyzed from several aspects, such as the analysis of requirement, designs of the whole system, database design and the implementation of system by using the methods of software engineering. Meanwhile, this project implements the functions which the system requires, including the catalogs, user registration, user login, shopping cart, order inquiry, maintenance and management of system and so on. The system builds this online shopping system based on HTML, JSP and SQL Server database. In the process of designing system, the thinking of modularization of pages and three-layer structure is adopted in the project. The operation of database is made by using JavaBean. Servlets are used to achieve some parts of the system, such as the trade management and system maintenance. But lots of improvements should be made for this system, especially the security issue which is not solved properly.
Key words: Online Supermarket; Management system; JSP; JavaBean; Servlet
目 录
论文总页数:32页
1 引言
1.1选题背景
互联网以前所未有的速度发展,成为与报纸、广播、电视相比肩的第四媒体,同时以其便捷的传输模式改变着人们的消费方式。它有着信息传送速度快、信息覆盖面广、成本低的特点,互联网已日益成为收集和提供信息的最佳渠道并逐步进入传统的流通领域。于是电子商务开始流行起来,越来越多的商家在网上建立在线商店,打破了传统的消费观念,并向消费者展示出一种全新的购物理念。商家可以通过对信息筛选处理有用信息,并做出相应的销售策略,这能为商家带来便利和更大的利润,也能更好的管理好自己的商店。利用简单、便捷、低成本的电子通信方式,买卖双方不见面就可以进行各种商贸活动。当今商业经济网络化已经成为网络经济的大势所趋,眼下电子商务如雨后春笋般大量涌现,企业网络已经成为一种时尚。
为了兼顾商家和顾客的利益,本课题选择针对基于网络超市的商品销售管理系统进行研究设计。本课题主要讨论如何建设网上购物系统以及如何管理。网上购物是一种具有交互功能的商业信息系统,它向用户提供静态和动态两类信息资源。所谓静态信息是指那些不是经常变动或更新的资源,如公司简介、管理规范和公司制度等等;动态信息是指随时变化的信息,如商品报价,商品流动和商品信息等。商品销售系统具有强大的交互功能,可使商家和用户方便的传递信息,完成网上购物交易,加强了厂家与消费者之间的沟通,这种全新的交易方式实现了零售商家与消费者之间的无纸币交换。而对于网上销售的商家,只要使用了在线销售管理系统,他们可以轻松建立一个功能强大的网上商城,最主要的是管理员只需要登录网站后台管理就可以在线发布商品、处理订单,完全不需要任何网站建设的知识,这样节省了大量的人力、物力和财力。
1.2国内外发展现状
基于网络的商品销售管理系统,它是网上商务活动的产物,代表了未来零售业的走向。在网上商店消费的顾客不必出门,可以直接通过计算机网络选购商品,由相应网络经销商送货上门。这种直销的好处是消费者可以方便地得到所需的商品,有效地减少了销售成本,从而大大地降低了商品的价格。在欧美等信息化程度较高的国家和地区,网络商店发展速度迅猛,享誉全球的美国Amazon网上书店,没有一间门市,经营图书250多万种,1997年时营业额就超过了一亿美元。世界级超一流的零售商,如沃尔玛、凯玛特、家庭仓储、科罗格、J.C培尼等也纷纷挤身于网络经商的行列。调查表明,欧美地区的家庭已越来越习惯于在家中从网上购物。
而在我国,电子商务一直在艰难地发展着。从当年8848的失落,到现在的卓越兴起,或多或少都体现了中国电子商务活动的不完善、不成熟。对基于网络的商品销售系统的设计开发,可以为完整的大型商务网站开发积累大量的经验。我国的电子商务发展起步相对较晚,直到1996年,燕莎友谊商场才首次通过网上商城售出一个景泰蓝,虽然货款的支付不是在网上进行的,但这毕竟为我国零售业奏出了网上购物的先声。随着我国互联网的飞速发展,互联网在人们生产生活中作用提高,致使我国上网人数持续增加,2004年上网人数达9400万,预计今年这一数字将达1.2亿。而且有大部分的网民有过网上购物经历,这就说明中国在网上购物的用户还是比较多,而且会日益增长,这也说明在中国发展网上购物具有良好的群众基础,网上购物方式日益被大家所接受。“2005年中国电信业发展与政策通报会”上,信息产业部有关负责人说,在互联网的快速发展中,将加强规划指导,推动网络建设和结构优化,引导企业开发适合市场需求的新业务。 同时,研究互联网上各类业务应用的商业运营模式,现在已经有很多的网上商店,例如,淘宝、易趣、拍拍网等。由于在网上选择范围广,价格实惠,现在越来越多的人已经习惯网上购物的方式,特别是年轻一代。
1.3本课题的研究内容及方法
基于网络超市的商品销售管理系统,一般存在两种结构:C/S(Client/Server——客户端/服务器)架构和基于Internet的B/S(Browser/Server——浏览器/服务器)架构。B/S架构比起C/S架构有着很大的优越性,C/S架构的系统依赖于专门的操作环境,这意味着操作者的活动空间受到极大限制;而B/S架构则不需要专门的操作环境,在任何地方,只要能上网,就能够操作该系统。这也就给交互式信息的产生创造了先决条件,使得通过互联网的信息传递变得更加的便捷。因此,本文设计的基于网络超市商品销售管理系统选取的是B/S。
基于网络超市的商品销售管理系统,实质就是程序结合数据库开发的网站系统。在该系统中,主要实现用户注册、用户登录、用户留言、购物指南、商品查询、购物车、订单查询等基本功能。管理员可以实现对用户的管理、对用户留言的管理、对产品种类的管理、产品的管理、商品管理、订单管理等维护工作。商品销售管理系统不仅要设计漂亮的网页,更要有严谨的规划,每一个细小的环节都很重要,这样才能使得在网上交易的过程中避免不必要的错误发生。
对于本系统的设计开发,是以JDK+Eclipse+TOMCAT作为开发平台,JSP作为前台开发语言,负责处理页面的显示,同时结合Servlets和JavaBean 应用开发。运用JSP产生页面动态部分,HTML产生静态页面,同时在HTML中嵌入JavaScript增加动态效果。使用JavaBean完成对数据库连接的封装和对数据库的存取操作。在系统维护部分还编写简单Servlet 接收用户的输入和提交动作,并根据动作指示进行相应的业务处理。此外还需要建立SqlServer数据库。因为传统的管理信息系统信息获取方法是由专业文字录入人员将信息输入到管理系统的数据库中,这种方法适合数据量不大的时候,但是当数据量比较大并且有较强的专业性时,录入的费用和出错的可能性都会增大。特别对一个网上购物系统,经过长时间的运行,记录了大量的顾客消费的记录,不加分析,这些数据都将毫无用处。建立自己的数据库,使得所需商品信息可以及时的保存、更新,也可以更好的及时了解商品买卖的情况。
2技术理论基础及开发平台
2.1 技术理论基础
2.1.1 HTML语言
HTML(Hyper Text Markup Language 超文本标记语言)是一种用来制作超文本文档的简单标记语言。“超文本”就是指页面内可以包含图片、链接,甚至音乐,程序等非文字的元素。HTML文件是带有特定HTML插入标记的用以编排文档属性和格式的标准文本文件,它能独立于各种操作系统平台(如UNIX,WINDOWS等)。自1990年以来HTML就一直被用作WWW上的信息表示语言,用于描述Homepage的格式设计和它与WWW上其它Homepage的连结信息。HTML文档(即Homepage的源文件)是一个放置了标记的ASCII文本文件,通常它带有HTM或HTML的文件扩展名。生成一个HTML文档主要有以下三种途径:
- 1 ) 手工直接编写,例如用你所喜爱的ASCII文本编辑器或其它HTML的编辑工具。
- 2 ) 通过某些格式转换工具将现有的其它格式文档(如WORD文档)转换成HTML文档。
- 3 ) 由Web服务器(或称HTTP服务器)一方实时动态地生成。
一般的HTML页面具有如下的结构:
< html>
<head>
<title>
</title>
</head>
<body>
//这是HTML正文部分
</body>
</html>
可见在一个HTML网页文件中,一般必须有一对<html></html>标记作为文件的开头和结尾,在<html>标记后是头部标记<head></head>,其后是实体标记<body></body>。在编辑器中输入html代码即可完成对网页的设计,如果在其中加入VB、JAVA等脚本文件以及数据库连接有关的语句指令,便可对已知数据进行查询,从而生成动态网页的一部分。在JSP 中会经常使用HTML 表单提交数据,实现JSP与客户端的交互。HTML表单是HTML支持用户在页面输入信息的方法,它提供了文本框、单选框、文本区、复选框、下拉菜单等控件,方便和简化用户的输入。
2.1.2 JSP技术
JSP(Java Server Pages)是在服务器端编译执行的WEB设计语言,其脚本采用Java技术,完全继承了Java的所有优点。JSP技术为创建显示动态生成内容的WEB页面提供了一个简捷而快速的方法,它能使你将网页的动态部分和静态部分有效分开。
JSP有如下优点:
- 1 ) 将内容的生成和显示进行分离
使用JSP技术,Web页面开发人员可以使用HTML或者XML来设计页面的静态内容;使用JSP生成页面的动态内容。JSP是服务器端技术。在服务器端,JSP引擎解释JSP,生成所有客户端的请求的内容,然后将结果以HTML或者XML页面的形式发送给客户端。这有助于开发人员既保护自己的代码,又保证任何基于HTML的Web 浏览器的完全可用性。
- 2 ) 强调可重用性组件
绝大多数JSP页面依赖于可重用的、跨平台的组件来执行应用程序所要求的更为复杂的处理。JavaBeans已经是很成熟的技术,基于组件的方法可供开发人员共享,大大加速了总体开发过程。
- 3 ) 采用标识简化页面开发
JSP技术封装了许多功能,这些功能是在生成易用的、与JSP相关的HTML或者XML的动态内容时所需要的。标准的JSP标识能够访问和实例化JavaBeans组件、设置或者检索组件属性、下载Applet,以及执行用其他方法更难编码的耗时功能。通过开发制定标识库,JSP技术是可以扩展的。开发人员可以为常用功能创建自己的标识库,从而使Web页面开发人员能够使用如同标识一样的工具来执行特定功能的构件。
- 4 ) 健壮性和安全性
由于JSP 的内置脚本语言是基于Java语言的,而且所有的JSP 都被编译成Servlets,JSP 就具有Java技术的所有好处,包括健壮的储存管理和安全性。
- 5 ) 良好的移植性
作为Java 平台的一部分,JSP拥有Java编程语言“一次编写,各处运行”的特点,即具有良好的移植性。
2.1.3 SQL Server数据库
SQL(Structured Query Language)的意思为结构化查询语言,是用户操作关系数据库的通用语言。 按照ANSI(American National Standards Institute美国国家标准协会)的规定,SQL被作为关系型数据库管理系统的标准语言。SQL语句可以用来执行各种各样的操作, 包括数据定义、数据操纵和数据控制等与数据库有关的全部功能。
目前绝大多数流行的关系型数据库管理系统,如Oracle、 Microsoft SQL Server、Access等都采用了SQL语言标准。虽然很多数据库都对SQL语句进行了再开发和扩展,但是包括Select、 Insert、 Update、 Delete、Create 以及Drop在内的标准的SQL命令仍然可以被用来完成几乎所有的数据库操作。在使用数据库时用得最多的是数据操纵语言,其中以Select语句使用最为频繁。Select语句主要被用来对数据库进行查询并返回符合用户查询标准的结果数据。Select语句中位于Select关键词之后的列名用来决定哪些列将作为查询结果返回。Select 语句中位于From关键词之后的表格名称用来决定将要进行查询操作的目标数据表。用户可以按照自己的需要按照条件进行查询,条件在WHERE 之后,还可以使用通配符“*”来设定返回表格中的所有列。LIKE运算符的功能非常强大,通过使用LIKE运算符可以设定只选择与用户规定格式相同的记录,称为模糊查询。除了上面所提到的之外,用户还可以使用运算符,按顺序显示数据,对结果进行分组计算,限制结果集以及汇总数据等。
2.2 开发平台
2.2.1 简介
本设计为基于网络超市的商品销售管理系统,采用JSP作为前台开发页面的语言,然而能够实现这种页面开发的平台很多,可以使用文本文档直接编写或者使用特定的工具来编写,根据目前所学的知识以及各方面的综合因素,本设计选择Eclipse平台。
Eclipse 是通用的工具平台 —— 一个开放的可以为任何内容而扩展的集成开发环境。Eclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件构建开发环境。此外,Eclipse还附带了一个标准的插件集。
2.2.2 特点
- 1 ) Eclipse平台具有以下特点:
- 在大部分平台上提供一致的特性集
不论使用什么平台,Eclipse 就像为该平台建立的应用程序一样。当下载 Eclipse 时,可以选择下载满足自己需要平台的 Eclipse,对每个平台它都有单独的图形工具包。这提供了接近本土的外观,以及更好的性能。
- 不仅支持 Java 或任意单一的语言, 插件体系结构使 Eclipse支持许多语言和模型
- 开源且免费,但完全得到支持
Eclipse 平台和它的许多免费插件让使用者很容易地下载他们所需要的东西。另外,通过尝试新的语言和工具,大量的免费插件提供一种低风险的方式来扩展视野。
- 真正地可扩展并可配置
Eclipse 插件的页面列出了825个提供产品,它是平台可扩展性的证据。
- 行业力量
Eclipse 这样的高级图形用户界面来开发软件也是极好的,由于它去掉了许多重复琐碎的工作,使我们可以有更多的时间考虑实际的代码和重要的算法。
一旦了解如何通过不同的Eclipse视图进行定位,就可以轻易地从一种语言或平台迁移到另一种并且知道工作起来是一样的。
下面对Eclipse和Jbuilder做简单的比较:eclipse是开源的,自己可以写plugin,免费使用,扩展性强,对机器性能要求比Jbuilder 低,Borland已经把java的开发平台挪到eclipse上面了。而Jbuilder需要花钱购买,对机器性能高,并且以后不再有后继版本了。
3 需求分析与设计方案
3.1 需求分析
3.1.1 需求背景
- 1 ) 系统背景
目前,随着经济的快速发展,企业规模的不断壮大,企业与国内外市场的紧密接轨,电子商务已经成为世界各国发展经济的核心。近年来,在互联网的普及推广下,人们的日常生活和休闲方式也在发生着变化,而以网上购物为主的电子商务也逐渐成长起来,在人们的日常生活中发挥越来越重要的作用。基于网络超市的商品销售管理系统,则是在网络上建立一个虚拟的购物商场,避免了选购商品的烦琐过程,使购物过程变得轻松、快捷、方便,很适合现代人快节奏的生活,同时商家和企业又可以有效的控制销售运营的成本,提高经济利润,开辟新的销售渠道。
商品销售管理系统的主要任务是把日益繁多的商品进行汇总,根据商品的用途进行种类的划分,然后制定商品的详细信息,同时配有实物图片,为方便用户的选择和购买,开发出一种编排更准确、更合理、更快速的商品销售管理系统。因此如何高效地管理好产品,控制好物流成本,提高企业的整体效益,己迫在眉睫。所以,本系统正是根据此要求进行开发设计的。
- 2 ) 用户特征
商品销售管理系统的用户可大致分为两类:一类是需要购买物品的用户,这些用户涉及的面比较广,有来自各个行业和各个职业的不同年龄和不同文化程度的,户对于计算机的操作能力也参差不齐,对这类用户系统必须提供方便的输入方式来满足他们的要求,如使用数字或者字母等,展示友好易懂的用户界面等;另一类是商家的系统管理员,这些人计算机文化程度相对比较高,可以对系统进行日常的维护和紧急情况下对系统的处理。
- 3 ) 假设与前提
根据现实生活中的销售情况和对消费者的购买心理的理解,现对该系统的设计做如下假设和前提条件:
- 所有的商品数量已知。
- 注册用户人数已知。
- 在商品销售系统中,主要安排了日常生活中常用的商品类型。
3.1.2 可行性分析
- 1 ) 逻辑可行性
网上购物系统自身具备的即时互动方式可以吸引很多购物者的注意力,这些购物网站能够随时让顾客参与购买、更方便、更详细、更安全。而且在这样的网站中,产品的管理是有秩序的,并将其进行科学化的分类,便于购买者查询。这种网站的网页设计往往制作得更有指导性,并且更加美观,这些都将会吸引大批的购买者。
- 2 ) 经济可行性
基于网络的商品销售管理系统的投入,能够提高工作效率,减少工作人员,从而减少劳力资本的投入,在货物管理中节省人力,减轻了劳动强度,达到降低成本及其他费用的目的。通过改进薄弱环节,提高工作效率,提高数据处理的及时性和准确性。所以从经济角度来说,本系统开发完全必要。
- 3 ) 技术可行性
本系统开发涉及到的技术因素主要有如下几个方面:
- 数据库技术,对SQL Server熟悉,能够熟练使用SQL Server数据库。
- 系统架构的规划,使用B/S架构。
- 页面开发,使用HTML和JSP技术,能够使用这两种技术开发页面。
- 系统维护部分,运用Servlets处理。
- 配置环境,装有Windows XP电脑一台,安装SQL Server2000数据库,搭建Eclipse平台和Tomcat服务器,IE浏览器等。
上述条件基本符合,本系统设计开发可以进行。
3.2 设计方案
3.2.1 设计目标
客户使用网上购物系统可以很方便地在网上查询、挑选、修改、订购商品等。并且购买后可以选择方便自己的付款方式,如电汇,网上支付,银行汇款等;使用后还可以直接在网上向销售商反馈信息。用户只要有一台电脑上网就可以完成以前复杂的过程,节省许多宝贵的时间。销售商使用该系统,可以直接和客户交流信息、管理用户、管理产品,以及对商品进行添加、删减,并及时更新商品信息。该系统可以帮助销售商更好的管理商品的销售和最及时的了解到商品的销售情况,加强对商店的管理。
3.2.2 系统总体设计
- 1 ) 系统设计思想
- 页面模块化
把页面中常用部分集成为模块,例如页面的头部和尾部。在系统中分别是tail.html和 head.html两个文件。
- 三层架构设计
采用三层架构后,用户界面层通过统一的接口向业务发送请求,业务层按照自己的逻辑规则将请求处理之后进行数据库操作,然后将数据返回给用户界面层。
- 2 ) 系统功能模块划分
图1为商品销售管理系统功能图,主要是把基于计算机系统的功能分配到各个系统元素,就此建立一个模型,用以表达系统元素间的相互关系,为稍后的分析与设计奠定基础。总体设计就是从系统总的方面考虑,结合需要实现的功能,做出规范、全面的设计。
图1 总体模块图
4 各模块及数据库设计
4.1 数据库设计
4.1.1 数据分析
用户的需求具体体现在各种信息的提供、保存、更新和查询,这就要求数据库结构能充分满足各种信息的输出和输入。收集基本数据、数据结构以及数据处理的流程,为后面具体设计打下基础。收集基本数据,将这些商品数据分为三类:纸面记录、电子数据(XML、Access、Excel等文件)、网上数据。无论对于哪一种数据,都要对其进行检查,修正有问题的数据,删除重复和过期的记录。在检查的同时,还要对这些数据进行分析,为制定商品目录方案做准备。
- 1 ) 通过上述对系统功能的分析,针对基于网络超市的商品销售管理系统,总结出如下需求信息:
- 用户分为一般用户和管理员用户。
- 订单分为详细订单和总订单。
- 每一种商品从属于一种类型。
- 一种类型有不同的产品。
- 一种产品有不同的商品。
- 一个用户可以购买多种商品。
- 一个用户对应一张总订单。
- 一张总订单对应多张详细订单。
- 用户可以写留言信息。
- 2 ) 经过上述系统功能分析和需求总结,设计如下的数据项和数据结构:
- 用户信息,包括数据项:用户名、密码、昵称、真实姓名、性别、地址、电话、电子邮箱、用户身份号
- 种类信息,包括数据项:种类号、种类名称
- 产品信息,包括数据项:种类号、产品号、产品名称
- 商品信息,包括数据项:产品号、商品号、商品名称、单价、介绍、规格、产地、图片链接地址
- 总订单信息,包括数据项:订单号、用户号、用户名称、用户电话、
收货地址、订购日期、电子邮箱、发货状态、付款状态、总额、邮政编码、性别、付款方式、发货方式、备注
- 详细订单信息,包括数据项:订单号、商品号、商品名称、单价、商品数量、总价格
- 留言本信息,包括数据项:用户号、留言时间、留言人IP、留言人QQ、留言人邮箱、留言内容
4.1.2概念结构分析
在上面得出数据项和数据结构后,就可以设计出能够满足用户需求的各种实体,以及它们之间的关系,为后面的逻辑结构设计打下基础。这些实体包括各种具体信息,通过相互之间的作用形成数据的流动。
根据上面的设计规划出的实体有7个:用户信息实体、种类实体、产品实体、商品实体、总订单实体、详细订单实体和留言本实体。
各实体之间的E-R图如下所示,实体属性省略。
图2 各实体之间的E-R图
4.1.3逻辑结构分析
在上面数据的概念结构设计完成后,在该节要将上面的数据库概念结构转化为数据库的逻辑结构。
- 1 ) 数据库设计的命名规则:
- ODBC数据源名:eshop
- 数据库名:为了和系统的名称相同,给数据库取名为eshop
- 数据库文件名:eshop.mdf
- 数据库日志名:eshop.log
- 数据库账户:sa
- 账户密码:sa
考虑系统今后的维护工作及功能修改的需要,将表及字段做出了命名规则。
- 2 ) 表的相关项命名规则:
- 所有表的主键命名为“表名+id”。 如:product_id为产品表的主键。
- 所有表的外键命名为使用外键所在表的列名。product_id为商品表的外键。这样把这个两个表关联起来。
- 所有字段的命名为该字段的“表名+英文名称”。如product_name产品的名称。
商品销售管理系统数据库中各个表的设计结果如下面的表格所示,每个表格表示在数据库中的一张表。
- 3 ) 各个表的结构如下:
- 用户信息表:
表1 用户表
uid | pwd | nickname | realname | gender | address | tele | | qx |
char(10) | char(10) | char(10) | char(16) | char(4) | text | char(12) | char(15) | char(1) |
用户代码 | 密码 | 用户昵称 | 真实姓名 | 性别 | 地址 | 电话 | 邮箱 | 身份号 |
注: qx为0代表一般用户,1代表管理员
主键:uid
种类信息表:
表2 种类表
| char(2) | 种类号 |
class_name | char(16) | 种类名称 |
注:主键:class_id
- 留言信息表:
表3 留言表
uid | int | 用户ID |
times | varchar(30) | 留言时间 |
url | varchar(100) | 主机地址 |
ip | varchar(20) | 留言人IP |
| varchar(50) | 留言人邮箱 |
| varchar(20) | 留言人QQ |
content | varchar(1000) | 留言内容 |
name | varchar(20) | 留言人姓名 |
注:主键:uid,这个是自动生成
- 商品信息表:
表4 商品表
product_id | item_id | item_name | price | introduce | specs | supplier | link | clicknum |
char(5) | char(8) | char(40) | float | text | char(20) | char(12) | char(40) | int |
产品号 | 商品号 | 商品名称 | 价格 | 介绍 | 规格 | 产地 | 图片链接 | 点击率 |
注:主键:itme_id
外键:product_id
- 订单细节表:
表5 订单细节表
order_id | item_id | item_name | price | number | sumprice |
char(20) | char(8) | varchar(40) | float | int | float |
订单号 | 商品号 | 商品名称 | 价格 | 数量 | 总价 |
注:主键:order_id+item_id组合组成
外键:order_id,item_id
总订单表:
表6 总订单表
order_id | char(20) | 订单号 |
uid | char(10) | 用户号 |
cname | char(10) | 用户名称 |
address | char(10) | 用户地址 |
pdate | char(20) | 订购日期 |
phone | char(15) | 用户电话 |
sendestatus | char(1) | 发货状态 |
paystatus | char(1) | 付款状态 |
total | float | 总额 |
zip | char(6) | 邮政编码 |
sex | char(1) | 性别 |
pay | char(20) | 付款方式 |
send | smallint | 发货方式 |
content | varchar(50) | 备注 |
注:主键:order_id
外键:uid
paystatus:“0”代表未付款,“1”代表已付款
sendestatus:“0”代表未发货,“1”代表已发货
- 产品信息表:
表7 产品表
class_id | char(2) | 种类号 |
product_id | char(5) | 产品号 |
product_name | char(20) | 产品名称 |
注:主键:product_id
外键: class_id
4.2各模块详细设计
4.2.1 用户模块
该模块是对用户管理的模块,是本系统中的一个重要部分,包括用户注册、用户登录、用户留言等几个小部分。用户可以通过注册成为会员,而管理员只能由系统管理员添加。对于会员的管理,要对会员的信息进行保密,即只允许会员自己可以查看自己的信息。下面是用户模块图:
图3 用户模块图
下面是各个小模块的功能介绍:
- 1 ) 用户注册:用户在第一次登入网上购物系统时需要注册成为本系统的会员,使用用户注册就可以注册成为本商店的会员。只有注册成为商店的会员后,才可以在购物动作结束时结帐。
- 2 ) 用户登录:用户登录可验证用户的注册信息。对用户身份加以确认,判断该用户是哪种用户,具有那些权限,同时赋予其相应操作。这个登录模块可以实现对用户信息的管理,是商店的会员,可以查看自己的信息,修改自己的信息,并可以产生购买行为。同时可以保证系统的安全,不至于让一些无聊的人员恶意修改信息,破坏商店的信誉,同时也可以对用户信息进行确认。如果是管理员则进入系统维护。
- 3 ) 用户留言:用户可以进入留言板发表自己的留言,也可以对商家提出对产品的要求,向商家提出宝贵意见,反映对产品及服务的满意度。
4.2.2 在线模块
图4是在线购物的整个主体业务图,主要包括购物指南、商品搜索、购物车管理、订单查询和收银台四个模块。客户在产生购买行为的时候,主要做以上这些行为。
图4 在线模块图
下面对这些行为做如下的介绍:
- 1 ) 购物指南:在设计系统时,考虑到新用户由于不了解网上购物的具体流程,从而产生盲目购物的现象,甚至有可能不知道怎么操作。为此,我们设计了购物指南这个功能,其主要作用就是帮助新注册的用户能够很快地学会以及方便地进行购物,因此这个功能是专门为新用户而设计的,购物指南会引导用户一步一步熟悉操作。
- 2 ) 商品搜索:可以进入商品种类或者我的商店查询不同类别的所有商品,也可以在首页搜索商品框内进行,查询时可以按照商品代号,或者商品名称进行查询行为,中意的商品可以加入购物车。因为顾客对有些商品的代码,或者名称不是很熟悉,只知道其中的一两个字,这时就可以在首页使用模糊查询,输入商品号或者商品名称或者产地等即可找到所需要的商品,只要是有满足条件的就全部列举出来,让用户选择。
- 3 ) 购物车管理:用户在购买东西的时候会有个购物车盛装用户选购的商品。如果用户发现刚才选的商品自己不喜欢,并可以在自己的购物车上把不喜欢的商品删除,也可以清空购物车,也可以继续添加商品到你的购物车中,总之用户可以管理自己的购物车。
- 4 ) 收银台:当用户购买完东西后点击收银台图标进入收银台,开始结帐过程,其中会让用户填写相关信息,比如选择付款方式,备注信息等,结帐最后生成订单。
- 5 ) 订单查询:在用户购买商品以后,进入收银台去结帐并会生成订单。在订单查询处可以查看自己已经提交的订单信息。不仅在没有退出时可以查看,在退出之后重新登入系统还可以继续查看。
下面看看用户购买东西的流程图,当了解网上购物的大致流程后,根据用户自己的实际需要查看自己需要的商品,在商品的目录里有各个种类的商品,而每个种类的商品中又包含具体商品的详细介绍,方便用户选择所需的商品。用户在选择自己的商品时,系统则连接到后台关于此商品信息的数据库中,找到适合客户需求的信息。然后点击“继续购买”或“收银台”图标,完成购物。此外顾客还得进行身份信息的填写,选择的支付方式、收货地址、邮编等信息。
注意,其中商品出库是在收到汇款或者在转帐之后才由商家所做的行为,在没有收到钱之前是没有这个行为的产生的。
图5 购物流程图
4.2.3 系统维护模块
该模块是管理员对整个商店的管理,属于管理员的操作,包括商品信息管理、会员信息管理、订单管理、产品管理、种类管理等几个部分,先看模块图如下所示:
图6 系统维护模块图
其中各个小部分主要完成的功能,分别如下:
- 1 ) 用户管理:当有新的管理员来时可在用户管理中添加新的管理员,当有管理员要离开时,为了系统的安全必须删除要离开的管理员;或者当有些管理员觉得自己的密码不安全时可以在用户管理模块进行修改。此模块还可以对普通会员进行管理。
- 2 ) 种类管理:现代社会是个千变万化的社会,每天都有新的商品产生,所以作为管理员必须对自己系统中的种类进行更新。也可以删除不合理的种类。
- 3 ) 产品管理:在此模块中,可在各种产品的种类下添加新的产品,并且可对过时的产品进行删除,或者更新现有的产品。
- 4 ) 商品管理:在此模块中,可在商品原有的种类号、商品号、商品名的基础上对商品注册更详细的信息。如:单价、产地、图片、规格、产品介绍,并实时更新商品的最新信息。也可以添加新商品、删除过时商品。
- 5 ) 订单管理:在此模块中,可对顾客已定购的商品的发货情况、付款情况、总额等进行登记,也可以从中得出商品的销售情况,以方便对商品的管理。
- 6 ) 留言管理:管理员在留言板上看到留言信息,如果已经处理了就可以删除掉。
4.3主要核心代码
4.3.1 数据库连接
核心代码:
String dbUrl = "jdbc:microsoft:sqlserver://localhost:1433;databasename=eshop";
String user = "sa"; //数据库用户名
String password = "sa"; //密码
Connection conn=null;
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); //加载数据库驱动程序
conn = DriverManager.getConnection(dbUrl, user, password); //建立一个连接
Statement rst=conn.createStatement(); //创建该对象用于将SQL语句发送到数据库中,也可以创建 PreparedStatement 对象用于对数据库操作
4.3.2 登录确认
核心代码:
<script language=JavaScript>
//用脚本语言写出两个函数,一个是返回上页,一个是打开一个网页
function backward()
{
history.back();
}
function winopen()
{
window.open("adminstrator.html","","height=450,width=750,left=25,top=25,resizable=yes,status=yes,toolbar=no,menubar=no,location=no,scrollbars=yes","");
}
</script>
String uid=request.getParameter("uid");
String pwd=request.getParameter("pwd");
try{
ResultSet rs=bean0.executeQueryUser(uid,pwd);
if(rs.next())
{ String realname=rs.getString("realname");
String qx=rs.getString("qx").trim(); //省略其他代码
session.setAttribute("uid",uid);
if (qx.equals("0")) {
byte[] tmpbyte=realname.getBytes("8859_1"); //转化格式
realname=new String(tmpbyte);
session.setAttribute("realname",realname);
//省略
response.sendRedirect("./index.jsp");
}
else {%>
<p align="center"><font color="#0000FF"><%=uid%>:你是管理员用户!欢迎你进入!</font></p>
<p> </p>
<p align=center><IMG style="CURSOR: hand"
onClick="winopen()"
src="picture/welcome.jpg" alt="点击进入"> </p>
<% }
}
else
{
rs.close();%>
<p align="center"><font color="#0000FF"><%=uid%>:对不起!你的输入有误,请重新填写!</font></p>
<p align=center><IMG style="CURSOR: hand" onClick="backward()"
src="picture/back008.gif"> </p>
<% } }%>
4.3.3 购物车
用户通过detail.jsp查看商品的详细信息,然后通过add.jsp保存到buylist 对象中,接着就引用了一个Vector对象shop来模拟购物车。首先从session对象中读取shop,如果读取的结果为空,说明购物车中还没有商品,这时就需要对购物车进行初始化。如果购物车不为空,则应该向车中添加新的商品。此外在这个程序中还使用了一个智能判断,即当用户重复购买某种商品时,不再添加新的buyList对象,而是把原来的buyList对象的number属性加一。
核心代码如下:
String uid=(String)session.getAttribute("uid"); //从会话中读取用户的ID号
String pid=request.getParameter("itemid");
String pname="";
float price=0;
String sql="select item_name,price from items where item_id=\'"+pid+"\'";
try{
ResultSet rs=bean0.executeSql(sql);
//从数据库中读出该商品的价格和名称
if(rs.next())
{
pname=rs.getString("item_name");
price= rs.getFloat("price");
}
//读取bulist的对象
buylist mylist=new buylist();
mylist.pname=pname;
mylist.price=price;
mylist.pid=pid;
mylist.uid="uid";
mylist.number= 1;
boolean listFlag = true;
//读取购物车信息
Vector shop=(Vector)session.getAttribute("shop");
if(shop==null)
{//如果原购物车为空,则新建购物车
shop=new Vector();
}
else
{ //原购物车不为空的情况
for(int i=0;i<shop.size();i++)
{
//如果该商品已经在购物车内,则只把数目加1,而不增加项目
buylist list=(buylist) shop.elementAt(i);
if(list.pid == mylist.pid)
{ list.number++;
shop.setElementAt(list,i);
listFlag=false;
}
}
}
if(listFlag)shop.addElement(mylist);
session.setAttribute("shop",shop);
//购物车添加完毕
rs.close();
response.sendRedirect("list.jsp");
}
通过list.jsp查看到自己的购物车信息,这时可以清空购物车,通过modify.jsp修改数量,也可以继续添加,购买完之后点击收银台图标结账。
当结账结束,在ment4.jsp页面中就可以看到生成的订单号和其它的相关信息。订单号由当时提交的年月日时分秒组成。
java.util.Date today=new java.util.Date();
int y1=today.getYear()+1900; //省略
String y=Integer.toString(y1); //省略
String orderid=y+m+d+h+mm+ss;
String date1=y+"/"+m+"/"+d+" "+h+":"+mm;
4.3.4 管理员维护
其中仅举例说明,种类维护,这是界面部分的主要代码:页面采用分页显示,HTML表单提交由servletaddcategory处理添加部分,servletdelcategory处理删除操作。
页面代码:
<form action="/eshopwebapp/servletaddcategory" method=post>
// 这部分使用表单提交处理
<form action="/eshopwebapp/servletdelcategory" method=post>
//下面主要是分页显示和显示数据库查询的信息
<%
String classid="";
String classname="";
int intPage; //待显示的页
int intPagesize; //每页显示的记录数
int intRowcount=0; //总记录数
int intPagecount=0; //总页数
String strpage;
intPagesize=5;
strpage=request.getParameter("page");
if(strpage==null){intPage=1;}
else{intPage=Integer.parseInt(strpage);
if(intPage<1)intPage=1;
}
String sql0=select count(*) from category
Statement rs0=bean0.excuteSql(sql0);
intRowcount=rs0.getInt(1);
ResultSet rs=bean0.executeCategory();
//rs.last();
//intRowcount=rs.getRow();
intPagecount=(intRowcount+intPagesize-1)/intPagesize;
if(intPage>intPagecount)intPage=intPagecount;
if(intPagecount>0){
rs.absolute((intPage-1)*intPagesize+1);
int i=0;
while(i<intPagesize&&!rs.isAfterLast())
{ // 从查询结果集里读出信息
classid=rs.getString("class_id");
classname=rs.getString("class_name");
%>
// 显示在页面上
<tr>
<td> <input type="radio" name="classid" value=<%=classid%>></td>
<td><%=classid%></td>
<td><%=classname%></td>
</tr>
<% i++;
rs.next();}
}%>
<tr>
<td colspan="3" align="center"><input type="submit" name="Submit" value="删除">
<input type="reset" name="Submit2" value="取消"></td> </tr>
</table>
</form>
<p>第<%=intPage %>页 共<%=intPagecount %>页
<%if(intPage>1){ %><a href="managecategory.jsp?page=<%=intPage-1 %>">上一页 </a><%} %>
<%if(intPage<intPagecount){ %><a href="managecategory.jsp?page=<%=intPage+1 %>">下一页</a><%} %></p>
Servletaddcategory类的核心代码:
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String var0 = request.getParameter("text1"); //获取种类号
if (var0 == null) {
var0 = "";
}
String var1 = request.getParameter("text2"); //获取种类名称
if (var1 == null) {
var1 = "";
}
PrintWriter out = response.getWriter();
try
{
Connection Connsql = dbConn.myconn();
byte[] tmpbyte=var1.getBytes("Iso_8859_1");
var1=new String(tmpbyte);
Statement prep = Connsql.createStatement (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
//蒋从表单获取的信息插入数据库category表中
prep.executeUpdate("insert into category values(\'"+var0+"\',\'"+var1+"\')");
response.sendRedirect("managecategory.jsp");
}
//省略
}
Servletdelcategory的核心代码:
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String var0 = request.getParameter("classid");
if (var0 == null) {
var0 = "";
}
response.setContentType(CONTENT_TYPE);
try
{
Connection Connsql = dbConn.myconn();
PreparedStatement prep = Connsql.prepareStatement("delete from category where class_id=?");
prep.setString(1, var0);
ResultSet rs = prep.executeQuery(); //从category中删除所选择的种类
response.sendRedirect("managecategory.jsp");
}