基于JAVA毕业设计的网上图书销售管理系统

以下是资料介绍,如需要完整的请充值下载. 本资料已审核过,确保内容和网页里介绍一致.  
无需注册登录,支付后按照提示操作即可获取该资料.
我要下载该资源
资料介绍:
摘  要
 
本文讲述了基于B/S模式的SSH技术的图书在线销售系统的设计与实现。所谓的图书在线销售系统是通过网站推广互联企业的图书和技术服务,并使客户随时可以了解企业和企业的产品,为客户提供在线服务和订单处理功能。
从长期的战略目标来说,图书在线销售网站不仅是图书和服务的推广,而是通过Internet、企业内部网和企业外部网,将买家与卖家、厂商和合作伙伴紧密结合在了一起,因而消除了时间与空间带来的障碍。
图书在线销售提供了多种检索途径,可以从分类、新品、特价等途径进行检索,快捷准确。与传统销售方式相比,在线销售能够提供海量图书信息。图书在线销售最突出的优点是:不再限制消费者的购买时段,扩大和巩固了客户群,从而增加了图书企业的核心竞争力,节省实际开店时需要投入的成本和租用费用。
 
关键词  图书;在线销售;订单处理;SSH技术
Abstract
 
This thesis relate to the design and implementation of based on the mode of B/S and SSH technical on-line sales digital products system. The so-called on-line sales digital product system through the Web site to promote Internet business of digital technology products and services, customers can learn more about the business and enterprise products, providing customers with the functions of online services and order processing.
From the long-term strategic objectives, sales of digital products on-line site is not just digital products and services promotion, through the Internet, intranet and extranet make buyers and sellers, manufacturers and partners in the close connection together, thus eliminating the obstacles of time and space.
Online sales of digital products that provide a variety of ways to retrieve, such as classification, new products and bargain products, the search way is faster and more accurate. Compared with the traditional way of marketing, online sales of digital products that can provide mass information. The most prominent advantage of online sales digital products are: no longer limit the consumers’ time to buy, consolidate and expand the customer base, thus increase the competitive ability of digital product business, and save the cost and rental cost of opening a shop actually.
 
Keywords  digital products online sale order processing technology of  SSH
目    录
摘要 I
Abstract II
1章  绪论 1
1.1 课题背景 1
1.2 目的和意义 1
1.3 系统设计思想 2
1.4 本文的结构 3
2章  可行性分析 4
2.1 业务流程图 4
2.2 经济可行性 5
2.3 技术可行性 6
2.4 运行可行性 6
2.5 本章小结 6
3章  需求分析 7
3.1 电子商务的产生和发展情况 7
3.2 图书在线销售系统的需求分析 8
3.3 数据流图 8
3.4 本章小结 16
4章  总体设计 17
4.1 系统模块总体设计 17
4.2 数据库设计 19
4.2.1 数据分析 19
4.2.2 数据库的详细设计 20
4.3 本章小结 24
5章  详细设计与实现 25
5.1 系统运行平台设置 25
5.2 运行环境 25
5.3 开发工具及技术简介 25
5.3.1 开发工具简介 25
5.3.2 技术简介 26
5.4 系统首页设计 27
5.5 系统前台基本功能设计与实现 27
5.5.1 用户维护模块设计与实现 27
5.5.2 图书展示模块设计与实现 31
5.5.3 购物车模块的设计与实现 32
5.5.4 收银台模块的设计与实现 33
5.5.5 查看订单模块的设计与实现 34
5.5.6 公告浏览模块的设计与实现 34
5.5.7 客户留言模块的设计与实现 35
5.6 系统后台管理功能设计与实现 35
5.6.1 基本信息管理设计与实现 35
5.6.2 订单信息管理设计与实现 36
5.6.3 图书信息管理设计与实现 37
5.6.4 公告信息管理设计与实现 38
5.6.5 留言信息管理设计与实现 39
5.7 本章小结 39
6章  系统测试与性能分析 40
6.1 软件测试 40
6.2 本系统测试 40
6.2.1 前台首页的测试 41
6.2.2 购物车模块的测试 41
6.2.3 用户注册模块的测试 41
6.2.4 图书管理模块的测试 42
6.3 本章小结 42
结论 43
致谢 44
参考文献 45
附录1 46
附录2 48
附录3 50
 

1章  绪论

1.1 课题背景

互联网的兴起从本质上改变了整个社会的商品交易方式,国内各大企业从上个世纪90年代互联网兴起之时,就产生了通过网络进行销售经营商品的想法。但是由于在互联网上企业的信誉难以认证、网络的法规政策不健全、物流不发达等一系列的原因,限制了网上交易发展的步伐。进入21世纪以后,随着整个社会的发展、进步,制约网上交易的各个瓶颈问题逐一被击破,各企业也纷纷的加入到电子商务的洪潮之中。
中国互联网协会网络营销工作委员会调查显示,随着国内产业环境和消费市场的成熟,网络购物尤其是以图书为代表的网购将在今年实现更大发展。
根据会员企业艾瑞咨询集团的预测,2008年我国网络购物交易将同比增长125.1%,交易总量将达1263亿,形成了中国网络购物的快速增长浪潮。其中,图书消费人群成为推动此浪潮的一大主力。究其原因,除了该人群对网络购物等新兴的购物模式接受程度较高之外,相比其他细分行业和产品,图书网络购物有着更加完备的产业链条和发展后劲,为其高速增长提供了保障。
网络购物这一消费方式给人们生活带来的变化,除了购物场所的改变以外,更重要的是大大改变了传统的消费行为习惯,无论是否在网上购物,上网查看产品的相关信息,已经成为购物决策环节的重要组成部分,这一环节对购物行为的实际发生起到了至关重要的指导作用。

1.2 目的和意义

在互联网上所有产品的分类信息中,电子类的产品信息无疑是最丰富的,一大批电子资讯类网站从中国互联网诞生初期就开始为网友提供大量一手信息。以天极网为例,该网站的导购平台拥有260条各类图书线、17万条产品报价信息,涉及6400多个品牌和11万款产品。如此庞大并仍在持续增长的信息量远非其他产品类别能及,极大地满足了用户对图书信息的需求。只需动动鼠标即可从资讯页面跳转到购物页面的便捷网购模式,使得信息收集与购物行为之间无缝对接。
随着近年来电子资讯网络媒体与网络购物平台的合作加深,消费者从获取资讯到发生购物行为的时空距离被进一步缩短,由此带来的巨大经济效益使得各大网购平台越来越重视图书销售。淘宝网将“手机数码”放在首页导航栏细分频道的第一位,而易趣网的14个热门搜索关键词中图书类占了5个。
与传统方式销售相比在线销售有很多的优点如:
1.检索便捷
在线销售提供了多种检索途径,可以从分类、新品、特价等途径进行检索,快捷准确。
2.信息量大
与传统销售方式相比,在线销售能够提供海量产品信息。
3.成本低,风险小,无地域限制
网络销售最突出的优点是:不再限制消费者的购买时段,扩大和巩固了客户群,从而增加了企业的核心竞争力,节省实际开店时需要投入的成本和租用费用。
图书在线销售系统的主要目的就是通过网站来推广互联企业的图书和技术服务,并使客户随时可以了解企业和企业的产品,为客户提供在线服务和订单处理功能。从长期的战略目标来说,网站不仅仅是产品和服务的推广,而是通过Internet、企业内部网(Intranet)和企业外部网(Extranet),将买家与卖家、厂商和合作伙伴紧密结合在了一起,因而消除了时间与空间带来的障碍。

1.3 系统设计思想

对于典型的数据库管理系统,尤其是对于像图书在线销售系统这样的数据流量特别大的网络管理系统,必须要满足使用方便、操作灵活等要求。本系统在设计时应该满足以下几个目标
(1)采用人机对话的操作方式,界面美观、友好,信息查询灵活、方便,数据存储准确、安全可靠;
(2)全面展示所有图书,并可展示最新图书和特价图书;
(3)便于顾客快捷地进行图书信息查询;
(4)会员可以随时修改自己的基本资料;
(5)实现网上购物的功能;
(6)实现图书销售排行功能,以方便顾客了解本在线销售系统内的热销图书及帮助企业领导者做出企业营销方案;
(7)系统公告公布图书在线销售系统网站内的最新信息;
(8)顾客可以随时查看自己的订单信息;
(9)对顾客输入的数据,系统进行严格的数据检验,尽可能排除人为的错误;
(10)系统最大限度地实现了易维护性和易操作性;
(11)系统运行稳定、安全可靠。

1.4 本文的结构

本文具体内容包括:可行性分析、需求分析、系统总体设计、系统详细设计与实现、系统的测试。
本文着重描述了图书在线销售系统的组成与结构,阐述了系统的设计方案、实现方法以及所采用的开发工具和相关技术,另外,重点剖析了部分环节的开发过程。
本系统在一定的环境下对系统的重要模块进行了模拟测试,证实了系统的可用性、可靠性。
 

  可行性分析

网络平台已经成为企业经营管理中不可忽视的一个重要的方面,拥有一个全面的、功能强大的、操作简单的在线销售系统网站,已经成为企业营销发展的一个必然趋势。图书在线销售系统网站的建立,从销售方面来讲,不仅给图书企业增加了一个新的销售渠道,而且方便了顾客购买与了解公司的图书及新的销售方向。从图书企业宣传方面来讲,不仅扩大了企业知名度,还更直观地展示出企业的图书。拥有一个B2C的图书在线销售系统网站,已经成为图书企业网络销售进程中的一个重要环节。

2.1  业务流程图

根据图书在线销售系统的具体情况,调查管理业务流程是顺着系统信息流动的过程逐步地进行,内容包括各环节的业务处理、信息来源、处理方法、计算方法、信息流经去向、信息提供的时间和形态(报告、单据等)。
1.系统业务流图描述如下
(1)顾客浏览网站 顾客通过浏览器登录到本图书在线销售系统网站后,可以通过新品上架、特价产品、销售排行的模块查看图书及详细信息,同时顾客也可以按类别查看图书。另外,顾客可以浏览公告,销售排行榜等模块;
(2)用户注册及登录 顾客如要购买图书,需要进行用户注册,注册成功并登录后,用户可以购买图书;
(3)购物车处理 用户通过浏览图书信息选择要购买的产品时,可以将产品放入购物车,并可以添加至购物车、查看购物车、移除购物车中的图书、修改购物车中图书数量、清空购物车;
(4)收银台处理 当用户决定购买购物车中的图书时,可以通过收银台结账填写相应的订单信息,确定所填写的订单信息无误后,系统将产生此次订单的编号,完成在线下达订单,并且用户可以查看到订单;
(5)管理员后台处理 系统管理员登录后可以查看到已受理和未受理的订单及详细信息。另外,管理员能够对系统的各项信息进行维护处理。
系统业务流图如图2-1所示。
 
 

图2-1  系统业务流图
 
新系统的目标确定后,可以从经济可行性、技术可行性和运行可行性三个方面对能否实现新系统目标进行可行性分析。

2.2  经济可行性

软件的经济可行性是指软件所能带来的经济效益与开发设计所需要的投资相比,是否相适宜,同时还要看此软件能否真正给用户带来足够的经济效益,我们开发的这套系统正是考虑为图书在线销售系统的使用者提高工作效率,节省工作时间,方便操作与管理而设计。
本系统的开发在经济上是完全可行的。开发此软件不需要大量经费,而且是个人独立设计,可以节省许多费用,同时也可提高个人的实际动手能力。

2.3  技术可行性

根据该系统目标来衡量所需的技术是否具备,一般可从硬软件的性能要求、环境条件、操作人员水平和数量等方面去考虑和分析。
考虑到系统实施的可行性,在软件方面选择了如今较流行的MyEclipse工具来进行开发管理平台的设计,使用SQL server 2005数据库存储数据。
在硬件方面,则选择空间较大,硬件的配置越高,系统的开发与运行会更流畅。考虑到如今的家用或商用电脑硬件的整体配置水平,系统在硬件方面是可行的。
在软件方面,由于MyEclipse和SQL server 2005是两个非常成熟的开发工具,无论在安全性、可用性、可靠性方面都毫无置疑,因此软件方面是可行的。

2.4  运行可行性

在现今社会,顺着Internet在中国的迅速发展,人们日常生活中越来越多地使用Web技术来为自己的工作和学习服务。许多企业为了扩大他们的规模,将他们的生意范围涉及到了出口生意,由于企业的客户很多,而且分布于各地,甚至还有国外,在线销售图书有着对顾客的地域无限制等诸多的优点,可以成功地解决企业所面临的难题。
本图书在线销售系统操作简单易行,所以使用前的培训也比较容易,此系统网站的管理人员对开发此应用项目的态度确定而且管理方面的条件都比较成熟。经过以上分析,运行方面是可行的。

2.5  本章小结

可行性分析的任务是明确应用项目开发的必要性和可行性。本章主要对系统开发的可行性进行具体的分析,从用户方角度考虑本系统是否可行,主要通过有力的数据和软件运行环境方面作为依据。通过经济可行性、技术可行性、运行可行性等方面的分析说明本工程的技术成熟、完备,测试手段可靠,具有良好的市场拓展,它追求的是简单、易学、易懂、易用,因此,本系统具有一定的开发前景,具有开发的价值。

需求分析

3.1  电子商务的产生和发展情况

中国电子商务始于1997年。中国商品订货系统(CGOS)、中国商品交易中心(CCEC)、虚拟“广交会”等大型电子商务项目也在1997年相继推出,拉开了中国电子商务的序幕。1998年“首都电子商务工程”的展开和1999年“8848网上超市”的出现,标志着中国电子商务开始进入快速发展时期,中国电子商务由此正式启动。
据统计,目前全国已有4万家商业网站,其中网上商店700余家。电子商务项目大量推出,几乎每天都有各类电子商务咨询网站、网上商店、网上商城、网上专卖店、网上拍卖等诞生。电子商务应用与发展的地域也由北京、上海、深圳等极少数城市,开始向各大中城市发展。据IDC预测,2000年中国大陆网上交易额将达4000万美元,到2003年将达38亿美元。
可以说,中国电子商务已经由表及里、从虚到实,从宣传、启蒙和推广阶段进入到了务实的发展实施阶段。
1.政府推进 环境改善
我国政府正全面、积极、稳妥地推进中国电子商务的发展。1998年以来,政府对电子商务的支持与协调力度明显增加。我国电子商务发展的总体框架(包括整体战略、发展规划、发展措施、技术体制标准以及相关法律法规)的推出,将会使电子商务有一个更加规范有序的应用与发展环境。不少地方政府也都对电子商务给予了前所未有的关注与支持,开始将电子商务作为重要的产业发展方向。
2.制约瓶颈 开始突破
网上支付、实物配送和信用等作为电子商务系统工程中的重要环节,被视为制约中国电子商务应用与发展的瓶颈。1999年以来,网上支付的瓶颈正在迅速得到解决。在这方面较为成功的,有“8848”网上超市提供的包括网上支付在内的多元化支付方式,有首都电子商城电子商务支付平台等。
3.应用模式 日趋多元
在BtoC模式中,网上书店和网上商场在增加网上支付功能、完善各项服务后以更大的势头发展;网上拍卖、网上商城、网上邮购等面向消费者的电子商务网站大量推出。不少电子商务企业和工商企业开始酝酿企业间电子商务。证券电子商务也有所发展,网上炒股对于有些股民已经成为现实。
网络是一片独特的天空,中国国情又有其特殊性。怎样将结合Internet和中国国情,充分发挥电子商务的优越性,实现极富意义的电子商务技术和商务模式的创新,是摆在中国电子商务业界人士面前的一大课题。
4.内外融合 渐成大势
具有外资背景的电子商务企业和项目日益增加。其表现的形式是双向的:既有海外风险投资直接进入国内的电子商务企业,也有国内企业通过海外上市吸收海外资金。在不少电子商务企业内,外籍或具有外资企业背景的高级管理人员显著增加。与此同时,海外电子商务企业开始直接进入中国市场。随着中国加入世界贸易组织的前景日趋明朗,基于超越国界的Internet的电子商务不可逆转地走上了世界经济一体化的道路。

3.2 图书在线销售系统的需求分析

经过对各大图书购物网站及实际图书企业销售过程的考察、分析,要求本系统具有以下功能
(1)统一友好的操作界面,保证系统的易用性,方便用户的操作;
(2)具备图书信息的展示功能,方便浏览者对图书信息进行浏览与比较;
(3)规范的图书分类,方便浏览者分类查找图书;
(4)完善的购物车功能与用户结账功能;
(5)设置网站公告信息模块,使浏览者能够及时了解网站的各项动态变化,及销售的新品、特价活动等信息;
(6)图书销售排行功能;
(7)订单信息查询功能、图书信息查询功能;
(8)全面的后台管理功能,以方便管理员对网站信息进行更新与管理。

3.3 数据流图

1. 系统总数据流图如图3-1所示

图3-1 系统总数据数据流图
订单管理数据流图如图3-2所示。

图3-2 订单管理数据流图
 
基本信息维护数据流图如图3-3所示。

图3-3 基本信息维护数据流图数据流图
 
  2.数据字典
数据字典的作用是在软件分析和设计的过程中给人提供关于数据的描述信息。它主要是对数据流图中的数据流、处理逻辑、外部实体、数据存储和数据项等方面进行具体的定义。数据流程图配以数据字典,就可以从图形和文字两个方面对系统的逻辑模型进行完整的描述。
(1) 数据项定义
如表3-1所示。
表3-1 系统数据项定义
序号 名称 别名 类型 长度(字符)
I01-01 goods_id 商品号 Int 4
I01-02 goods_name 商品名 varchar 50
I01-03 goods_miaoshu 商品描述 varchar 5000
 
续表3-1
I01-04 goods_pic 存放商品图片 Varchar 50
I01-05 goods_yanse 商品颜色 Varchar 50
I01-06 goods_shichangjia 商品市场价 int 4
I01-07 goods_tejia 商品特价 int 4
I01-08 goods_isnottejia 普通商品 varchar 50
I01-09 goods_catelog_id 商品种类号 int 4
I01-10 catelog_id 种类编号 Int 4
I01-11 catelog_name 种类名称 Varchar 50
I01-12 catelog_miaoshu 种类描述 Varchar 5000
I01-13 order_id 订单ID Int 4
I01-14 order_bianhao 订单编号 Varchar 50
I01-15 order_date 订单生成日期 varchar 50
I01-16 order_zhuangtai 订单状态 varchar 50
I01-17 order_jine      总的消费金额 Int 4
I01-18 order_songhuodizhi 送货地址 Varchar 50
I01-19 order_fukuangfangshi 付款方式 Varchar 50
I01-20 order_user_id 用户ID Int 4
I01-21 orderItem_id 订单明细编号 Int 4
I01-22 order_id 订单编号 Int 4
I01-23 goods_id 商品编号 Int 4
I01-24 goods_quantity   购买数量 Int 4
I01-25 user_id   用户ID Int 4
I01-26 user_name 用户名 Varchar 50
I01-27 user_pw 用户密码 Varchar 50
I01-28 user_realname 真实姓名 Varchar 50
I01-29 user_address 住址 Varchar 50
I01-30 user_sex 性别 Varchar 50
I01-31 user_tel 联系电话 Varchar 50
I01-32 user_email 用户邮箱 Varchar 50
 
续表3-1
I01-33 user_qq 用户QQ Varchar 50  
  I01-34 userId 管理员ID int 4
  I01-35 userName 管理员名称 Varchar 50
  I01-36 userPw 管理员密码 Varchar 50
  I01-37 gonggao_id 公告编号 Int 4
  I01-38 gonggao_title 公告标题 Varchar 50
  I01-39 gonggao_content 公告内容 Varchar 5000
  I01-40 gonggao_data 公告创建时间 Varchar 50
  I01-41 gonggao_fabuzhe 发布人 Varchar 50
  I01-42 liuyan_id 留言id Int 4
  I01-43 liuyan_title 留言标题 Varchar 50
  I01-44 liuyan_content 留言内容 Varchar 5000
  I01-45 liuyan_date 留言时间 Varchar 50
  I01-46 liuyan_user 留言客户 Varchar 50
 
 
(2)数据流定义
数据流编号:D1-01
数据流名称:图书基本信息维护
数据流来源:系统管理员
数据流去向:P1
数据流组成:I01-01+I01-02+I01-03+I01-04+I01-05+I01-06+I01-07+I01-08+I01-09
 
数据流编号:D1-02
数据流名称:管理图书信息操作
数据流来源:F1、P1
数据流去向:P1、F1
数据流组成:I01-01+I01-02+I01-03+I01-04+I01-05+I01-06+I01-07+I01-08+I01-09
 
数据流编号:D2-01
数据流名称:订单信息操作
数据流来源:系统管理员
数据流去向:P2
数据流组成:I01-13+I01-14+I01-15+I01-16+I01-17+I01-18+I01-19+I01-20+I01-21+I01-22+I01-23+I01-24
 
数据流编号:D2-02
数据流名称:订单信息
数据流来源:F2、P2
数据流去向:P2、F2
数据流组成:I01-13+I01-14+I01-15+I01-16+I01-17+I01-18+I01-19+I01-20+I01-21+I01-22+I01-23+I01-24
 
数据流编号:D3-01
数据流名称:公告信息维护
数据流来源:系统管理员
数据流去向:P3
数据流组成:I01-37+I01-38+I01-39+I01-40+I01-41
 
数据流编号:D3-02
数据流名称:管理公告信息操作
数据流来源:F3、P3
数据流去向:P3、F3
数据流组成:I01-37+I01-38+I01-39+I01-40+I01-41
 
数据流编号:D4-01
数据流名称:留言信息管理
数据流来源:系统管理员
数据流去向:P4
数据流组成:I01-42+I01-43+I01-44+I01-45+I01-46
 
数据流编号:D4-02
数据流名称:管理留言信息操作
数据流来源:F4、P4
数据流去向:P4、F4
数据流组成:I01-37+I01-38+I01-39+I01-40+I01-41
 
数据流编号:D5-01
数据流名称:客户信息管理
数据流来源:系统管理员
数据流去向:P5
数据流组成:I01-25+I01-26+I01-27+I01-28+I01-29+I01-30+I01-31+I01-32+I01-33
 
数据流编号:D5-02
数据流名称:管理客户信息操作
数据流来源:F5、P5
数据流去向:P5、F5
数据流组成:I01-25+I01-26+I01-27+I01-28+I01-29+I01-30+I01-31+I01-32+I01-33
 
数据流编号:D6-01
数据流名称:用户信息
数据流来源:客户
数据流去向:P6
数据流组成:I01-25+I01-26+I01-27+I01-28+I01-29+I01-30+I01-31+I01-32+I01-33
 
数据流编号:D6-02
数据流名称:管理客户信息操作
数据流来源:P6
数据流去向:F5
数据流组成:I01-25+I01-26+I01-27+I01-28+I01-29+I01-30+I01-31+I01-32+I01-33
 
数据流编号:D7-01
数据流名称:留言信息
数据流来源:客户
数据流去向:P7
数据流组成:I01-42+I01-43+I01-44+I01-45+I01-46
 
数据流编号:D7-02
数据流名称:客户留言信息
数据流来源:P7
数据流去向:F4
数据流组成:I01-42+I01-43+I01-44+I01-45+I01-46
 
数据流编号:D8-01
数据流名称:公告信息
数据流来源:P8
数据流去向:客户
数据流组成:I01-37+I01-38+I01-39+I01-40+I01-41
 
数据流编号:D8-02
数据流名称:公告信息
数据流来源:F3
数据流去向:P8
数据流组成:I01-37+I01-38+I01-39+I01-40+I01-41
 
数据流编号:D9-01
数据流名称:商品信息
数据流来源:客户
数据流去向:P9
数据流组成:I01-01+I01-02+I01-03+I01-04+I01-05+I01-06+I01-07+I01-08+I01-09
 
数据流编号:D9-02
数据流名称:订单信息
数据流来源:P9
数据流去向:F2
数据流组成:I01-01+I01-02+I01-03+I01-04+I01-05+I01-06+I01-07+I01-08+I01-09
 
数据流编号:D10-01
数据流名称:商品信息
数据流来源:P10
数据流去向:客户
数据流组成:I01-01+I01-02+I01-03+I01-04+I01-05+I01-06+I01-07+I01-08+I01-09
 
数据流编号:D10-02
数据流名称:商品信息
数据流来源:F1
数据流去向:P10
数据流组成:I01-01+I01-02+I01-03+I01-04+I01-05+I01-06+I01-07+I01-08+I01-09

3.4 本章小结

需求分析报告是对系统需求的全面分析,是软件生存周期中最关键的一步,是建立软件开发的基础。经过需求分析要得到系统将要“做什么”,同时理解在做什么的基础上抽取出其“怎么做”的本质。本章首先介绍了电子商务近年来的发展状况,然后具体说明了需求分析的内容,详细描述了数据流图和数据字典的组成,为下一章的总体设计打下基础。
 
 
 
 
 
 
 

4章  总体设计

4.1 系统模块总体设计

利用层次图来表示系统中各模块之间的关系。层次方框图是用树形结构的一系列多层次的矩形框描绘数据的层次结构。树形结构的顶层是一个单独的矩形框,它代表完整的数据结构,下面的各层矩形框代表各个数据的子集,最底层的各个矩形框代表组成这个数据的实际数据元素(不能再分割的元素)。随着这种结构的精细化,层次方框图对数据结构也描绘得越来越详细,这种模式非常适合于需求分析阶段的需要。从对顶层的信息的分类开始,沿着图中每条路径反复细化,直到确定了数据结构的全部细节为止。
本系统一共分为前台和后台两大模块,两个模块之间虽然在表面上是相互独立的,但是在对数据库的访问上是紧密相连的,各个模块访问的是同一个数据库,只是所访问的表不同而已。每个模块的功能都是按照在调研中搜集的资料进行编排制作的。依据上述功能分析,系统在两个模块的基础上每一个模块又分为几个模块。
1.前台系统功能模块分为
(1)图书展台模块:通过新品上架,分页显示特价图书,图书销售排行展示网站的所有图书;
(2)图书查询模块:按图书的类别查询图书的相关信息;
(3)购物车模块:用户添加图书至购物车,查看购物车中的图书,从购物车中移除不满意的图书,清空购物车中的产品,修改所要购买的图书的数量;
(4)收银台模块:用户满意购物车中的产品后进行结账并填写订单信息;
(5)用户维护模块:为用户提供了用户注册、用户登录、用户资料修改以及找回密码的功能;
(6)订单查询模块:用户通过查看订单能够了解到自己的当前订单信息及历史订单记录;
(7)公告浏览模块:用户通过浏览公告信息,能够及时了解到网站最新的各种信息。
(8)留言模块:客户可以进行留言给我们提意见,我们在不断地改进中前进。
系统前台用户功能结构图如图4-1所示。
 

图4-1 系统前台用户功能结构图
 
2.后台系统功能模块分为
(1)图书管理模块:按类别查看图书,对图书的信息进行维护;
(2)用户管理模块:为了保护用户的信息,此模块与前台用户维护的区别是管理员只能查看用户信息和删除操作;
(3)管理员维护模块:这是对管理员的信息进行维护,可以修改管理员的信息。
(4)订单管理模块:管理员查询订单,查看订单详细信息,删除订单信息,进行订单受理;
(5)公告管理模块:管理员公告浏览,公告信息维护;
(6)留言模块:管理员可以查看客户的留言,对留言进行维护。
系统后台管理员功能结构图如图4-2所示。

图4-2 系统后台管理员功能结构图

4.2 数据库设计

对于一个电子商务网站而言,为了支持较大的访问量带来的数据访问需求,使用桌面型的数据库管理系统是不能满足需要的,而且安全性也没有充分保障。因此,需要使用大型商业化企业级服务用途的数据库管理系统,如SQL Server,Oracle等。本系统采用Microsoft SQL Server 2005 数据库管理系统。

4.2.1 数据分析

对于本系统的数据库的需求而言,由于其主要是用于信息的提供、保存、更新和查询等。因此,需要分析该系统功能所隐含的对数据应用的需求,从而确定数据库的结构。
(1)用户注册、登录、验证等功能需要对用户信息建立数据表,其中的数据项可能包括用户E_mail、昵称、密码、住址等;
(2)查看图书分类信息和图书详细信息等功能既需要对图书大小类别进行管理,也需要针对每一个图书进行管理,因此至少需要两张数据表;
(3)用户购物后产生的订单需要进行管理,这里也包括订单的基本信息和详细信息等;
(4)订单生成后,在订单处理的过程中,需要出货等,因此可能需要记录订单的发送情况;
(5)需要系统管理员对该系统进行管理,因而需要建立管理员信息数据表,其中的数据项包括管理员ID、密码等。
(6)客户要进行留言,所以必须建立留言表,其中包括留言标题、留言日期等。
 
这样,至少要创建如下的数据结构和数据项
(1)用户信息,包括用户ID,用户名等数据项;
(2)管理员信息,包括管理员ID,密码等数据项;
(3)图书信息,包括图书ID,产品名称、单价、特价等数据项;
(4)图书类别信息,包括电子ID,类别名称等数据项;
(7)订单信息,包括订单ID,用户编号,订货地址等数据项;
(8)订单明细信息,包括订单ID,图书ID,订货时间等数据项;
(9)公告信息,包括公告ID,公告名称及内容等数据项;
(10)留言信息,包括留言标题,留言日期,留言内容等。

4.2.2 数据库的详细设计

在设计数据库时,应考虑以下事项
(1)数据库的用途及该用途将如何影响设计,应创建符合用途的数据库计划;
(2)数据库规范化规则,防止数据库设计中出现错误;
(3)对数据完整性的保护;
(4)数据库和用户权限的安全要求;
(5)应用程序的性能需求,设计数据库时必须利用 Microsoft SQL Server 2005 中能够提高性能的功能。对于性能而言,在数据库大小和硬件配置之间权衡也是很重要的;
(6)数据库维护。
数据库E-R如图4-3所示。

图4-3  数据库E-R图
 
根据此图书在线销售系统的实际情况,本系统的数据库命名为db_shoping,db_shoping数据库中共分为8张数据表。
1.图书信息表
此表用于记录网站所有图书的基本信息,是与图书相关联的图书的类别表。如表4-1所示。
表4-1 t_goods(图书信息表)
序号 名称 别名 类型 长度(字符)
1 goods_id    编号 Int 4
2 goods_name 商品名 varchar   50
3 goods_miaoshu 商品描述 varchar 5000
4 goods_pic 存放商品图片 varchar 50
5 goods_yanse 商品颜色 varchar 50
6 goods_shichangjia 商品市场价 int 4
7 goods_tejia 商品特价 int 4
8 goods_isnottejia 普通商品 varchar 50
9 goods_catelog_id 商品种类号 int 4
 
    2.图书类别信息表
    此表用于记录图书类别的基本信息,为方便用户查询图书和管理员管理图书信息而设立。如表4-2所示。
表4-2 t_catelog(图书类别信息表)
序号 名称 别名 类型 长度(字符)
1 catelog_id 种类编号 Int 4
2 catelog_name 种类名称 Varchar 50
3 catelog_miaoshu 种类描述 Varchar 5000
 
 
3.订单信息表
    此表用于记录用户的基本订单信息,使用户方便查看自己的订单信息同时也为管理员出货提供基本订单信息。如表4-3所示。
表4-3 t_order(订单信息表)
序号 名称 别名 类型 长度(字符)
1 order_id 订单ID Int 4
2 order_bianhao 订单编号 Varchar 50
3 order_date 订单生成日期 varchar 50
4 order_zhuangtai 订单状态 varchar 50
5 order_jine      总的消费金额 Int 4
6 order_songhuodizhi 送货地址 Varchar 50
7 order_fukuangfangshi 付款方式 Varchar 50
8 order_user_id 用户ID Int 4
 
 
4.订单明细信息表
    此表用于记录用户订单的详细信息,为用户提供详细的图书订单信息,同时也为管理员出货提供用户所订的图书的具体信息。如表4-4所示。
 
表4-4 t_orderItem(订单明细信息表)
序号 名称 别名 类型 长度(字符)
1 orderItem_id 订单明细编号 Int 4
2 order_id 订单编号 Int 4
3 goods_id 商品编号 Int 4
4 goods_quantity   购买数量 Int 4
 
5.用户信息表
此表用于记录用户的基本信息,是用户购买图书的权限基础,为用户维护和管理员管理用户提供信息。如表4-5所示。
表4-5 t_user(用户信息表)
序号 名称 别名 类型 长度(字符)
1 user_id   用户ID Int 4
2 user_name 用户名 Varchar 50
3 user_pw 用户密码 Varchar 50
4 user_realname 真实姓名 Varchar 50
5 user_address 住址 Varchar 50
6 user_sex 性别 Varchar 50
7 user_tel 联系电话 Varchar 50
8 user_email 用户邮箱 Varchar 50
9 user_qq 用户QQ Varchar 50
 
 
6.管理员信息表
    此表用于记录不同权限管理员的基本信息,可以管理系统的所有信息。如表4-6所示。
表4-6 t_admin(管理员信息表)
序号 名称 别名 类型 长度(字符)
1 userId 管理员ID int 4
2 userName 管理员名称 Varchar 50
 
                                                               续表4-6
3 userPw 管理员密码 Varchar 50
 
 
7.公告信息表
此表用于记录公告的基本信息,为用户提供系统网站的最新信息。如表4-7所示。
表4-7 t_gonggao(公告信息表)
序号 名称 别名 类型 长度(字符)
1 gonggao_id 公告编号 Int 4
2 gonggao_title 公告标题 Varchar 50
3 gonggao_content 公告内容 Varchar 5000
4 gonggao_data 公告创建时间 Varchar 50
5 gonggao_fabuzhe 发布人 Varchar 50
 
8.留言信息表
此表用于记录客户的留言信息,以及对商品的建议等。如表4-8所示。
                  表4-8 t_liuyan(留言信息表)
序号 名称 别名 类型 长度(字符)
1 liuyan_id 留言id Int 4
2 liuyan_title 留言标题 Varchar 50
3 liuyan_content 留言内容 Varchar 5000
4 liuyan_date 留言时间 Varchar 50
5 liuyan_user 留言客户 Varchar 50
                                              

4.3 本章小结

本章介绍了对本系统的总体设计,给出了图书在线销售系统的功能结构图、E-R图等,说明了各子系统的之间的联系。本章完成了系统数据库的数据需求分析的过程,说明了数据库由概念结构设计转换成逻辑结构设计的过程,并把各个物理数据模型结合起来形成了一个整体的关系数据库模型,为系统详细设计作好了充足的准备工作。

  详细设计与实现

5.1 系统运行平台设置

本系统的运行平台设置分为硬件环境和软件环境。

5.2 运行环境

1.硬件环境
系统的硬件环境配置为处理器Pentium III800,内存512M,硬盘1G。
2.软件环境
系统的软件环境配置为Windows XP操作系统,SQL Server 2005数据库,JDK1.5、MyEclipse5.1开发工具包和Tomcat6.0服务器。

5.3  开发工具及技术简介

以下内容是对本系统所采用的开发工具和技术进行的简单介绍。

5.3.1 开发工具简介

MyEclipse企业级工作平台(MyEclipse Enterprise Workbench ,简称MyEclipse)是对Eclipse IDE的扩展,利用它我们可以在数据库和J2EE的开发、发布,以及应用程序服务器的整合方面极大的提高工作效率。它是功能丰富的J2EE集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML, Struts, JSF, CSS, Javascript, SQL, Hibernate。
在结构上,MyEclipse的特征可以分为7类:(1)J2EE模型;(2)WEB开发工具;(3)EJB开发工具;(4)应用程序服务器的连接器;(5)J2EE项目部署服务;(6)数据库服务;(7)MyEclipse整合帮助。
对于以上每一种功能上的类别,在Eclipse中都有相应的功能部件,并通过一系列的插件来实现它们。MyEclipse结构上的这种模块化,可以在不影响其他模块的情况下,对任一模块进行单独的扩展和升级。
简单而言,MyEclipse是Eclipse的插件,也是一款功能强大的J2EE集成开发环境,支持代码编写、配置、测试以及除错。
SQL Server 2005是一种采用T-SQL语言,基于C/S模式的关系型数据库管理系统。SQL Server 2005存储和管理数据有以下优点
(1)每个数据项都存储在中央位置,所有用户都可在这个位置使用它们;
(2)各个客户端上不单独存储数据项复本,从而消除了因用户不得不确保使用的信息相同所带来的麻烦。系统不需要确保使用当前值更新所有数据复本,因为中央位置仅有一个复本;
(3) 可以在服务器上一次性定义业务和安全规则,并对所有的用户平等执行;
(4)可以在数据库内通过使用约束、存储过程和触发器来强制执行规则。还可在服务器应用程序中执行规则,因为这些应用程序也是许多客户端访问的中央资源;
(5)关系数据库服务器只返回应用程序所需要的数据,优化了网络流量;
(6)最大程度地降低硬件的成本,由于数据不是存储在每个客户端上,客户端不必耗费磁盘空间来存储数据。客户端无需在本地增加管理数据的功能,同时,服务器不需将处理能力耗费在显示数据上;
(7)可以配置服务器以优化检索数据所需的磁盘输入/输出容量,配置客户端以优化从服务器检索数据的格式;
(8)可以将服务器存储在一个相对安全的位置,并配备如不间断电源供应系统这样的设备,这比完全保护每个客户端更经济;
(9)维护任务(例如备份和恢复数据)得到简化,因为这些任务都可以集中在中央服务器上执行。

5.3.2 技术简介

本系统采用MVC框架,MVC(Model-View-Controller)是一种设计 模式,它强制性地把应用程序的输入、处理和输出分开。MVC把应用程序分成3个核心:模型层、视图层和控制层,它们分别担负不同的任务。其中视图层向用户显示相关的数据,并能接受用户的输入数据,但是它并不进行任何实际的业务处理。模型层表示业务数据和业务逻辑。控制层接收用户输入并调用模型和视图去完成用户的需求。
本系统需要用到的Java相关技术有jsp技术、servlet技术、jdbc技术、SSH框架。其中,关键的技术难点在于Struts技术的运用。Struts技术是基于MVC的Web应用框架。在Struts框架中,模型层由实现业务逻辑的JavaBean组件构成,控制层由ActionServlet和Action来实现,视图层由一组JSP文件构成。

5.4 系统首页设计

本系统网站的主界面设计结构采用了上左右的结构,上部分为主功能菜单区,主要是显示网站的主功能,左侧为最新图书,特价区域,我的购物车,右部分为我的订单区,我的留言 主要是为方便用户提供了一些最新上架的图书信息。界面设计如图5-1所示。
 
 
图5-1 系统首页

5.5 系统前台基本功能设计与实现

本节对系统前台主要功能设计进行详细的说明。

5.5.1 用户维护模块设计与实现

由于网上购物必须保证用户的正确性、购物的安全性,需要对用户资料进行有效的管理,因此用户管理是电子商务网站的重要内容。它主要包括用户注册、登录和验证、用户注册资料的修改更新和用户注销等功能。
1.注册
(1)实现目标
用户单击注册后需要输入密码和确认密码、用户真实姓名、住址、性别、E_mail、QQ。用户只须填写一个Web表单。这里需要用户通过E_mail注册是考虑到两点:第一,用户的E_mail是惟一的;第二,通过用户的E_mail可以很方便快捷的与用户取得联系。用户在提交注册信息后,系统会对注册页面填写的正确性进行检查。对于不符合要求的填写会给出必要的提示,并返回修改;对于符合要求的注册表单,用户提交信息后也要返回相应的欢迎信息,用户提交的正确注册信息将被存入系统的数据库中。界面的设计如图5-2所示。
 
 
图5-2 用户注册模块
(2)实现过程
所属页面名:userReg.jsp
表单属性:name="form1" action="<%=path%>/userReg.action" method="post"
页面设计如表5-2所示。
 
表5-2 用户注册主要控件信息列表
名称 类型 含义
userName Text 输入用户名称
password Password 输入密码
passwordOne Password 输入确认密码
userRealname Text 输入真实姓名
 
续表5-2
userAddress Text 输入住址
userSex radio 选择性别
userTel Text 输入联系方式
E-mail Text 输入E-mail地址
确定 Button 提交用户信息
取消 Button 取消注册
 
 
2.登录和验证
(1)用户登录程序流程描述
当用户输入用户名和密码后首先要进行身份验证,如果用户存在,则成功登录,反之,如果用户不存在,提示错误信息“输入的用户名或密码不存在,请注册”,返回登录界面重新输入用户名和密码。用户登录的程序流程图如图5-3所示。
 

图5-3 用户登录程序流程图
 
(2)实现目标
对于本系统的购物过程而言,在用户浏览图书时,可以不进行登录,只有在使用购物车时,才需要登录,以完成整个购物过程。用户登录用于验证用户的用户名和密码,然后决定顾客进入系统进行操作,如进行用户修改的操作,购物车和结帐的操作等。界面的设计如图5-4所示。
 
 
 
 
 
 
图5-4 用户登录模块
   (3)实现过程
所属页面名:index.jsp
页面设计如表5-3所示。
表5-3 用户登录主要控件信息列表
名称 类型 含义
userName Text 输入用户名
password Password 输入密码
注册 button 注册新用户
登录 button 登录网站
 
 
3.用户修改和注销
(1)实现目标
已注册的用户只要登录本系统后便可以通过单击用户修改按钮进行用户修改操作,在此页面中用户可以更改自己的帐户和详细信息,如可以修改密码、修改Email地址等个人信息。通过点击提交按钮完成修改操作。界面的设计如图5-5所示。
图5-5 用户修改模块
为了保证用户购物的安全性,系统提供了不关闭浏览器而退出图书在线销售系统的功能,注销功能是清除用户在使用或登录系统期间的所有Session信息。
(2)实现过程
所属页面名:userXinxi.jsp
表单属性:action="<%=path%>/userEdit.action" name="form1" method="post"
页面设计如表5-4所示。
表5-4 用户修改主要控件信息列表
名称 类型 含义
userName Text 输入用户名称
password Password 输入密码
passwordOne Password 输入确认密码
userRealname Text 输入真实姓名
userAddress Text 输入住址
userSex radio 选择性别
userTel Text 输入联系方式
E-mail Text 输入E-mail地址
确定 Button 提交用户信息
取消 Button 取消注册
 

5.5.2 图书展示模块设计与实现

1.实现目标
为了方便顾客选购图书,本系统采用了两种展示产品的方式。一种是以类别查询为基础查看图书,另外一种是新品上架、特价产品和销售排行的展台。以销售排行查看图书为例,顾客在首页的的销售排行即可查看销售排行,方便顾客查看畅销的图书相关信息及详细信息。
图5-6 销售排行模块
2.实现过程
所属页面名:index.jsp
通过查询t_orderItem表中按销售额字段goods_quantity降序排列实现。

5.5.3 购物车模块的设计与实现

1.购物车程序流程描述
用户选购图书后添加到购物车中,在购物车中进行查看,同时对不满意的产品可以进行移除,对要购买的产品可以调整数量,移除产品和清空产品。用户决定购买产品后可以去收银台进行结账。购物车流程图如图5-7所示。

图5-7 购物车程序流程图
 
2.实现目标
用户购买产品的核心功能是购物车和订单提交。购物车模块的设计包括:顾客添加图书到购物车和顾客对购物车的管理,如更新购买的图书数量、清空购物车和将购物车中图书从购物车中移除等。购物车要具有持续性,而且不限制用户购买图书的数量,也就是购物车可以显示很多图书。界面的设计如图5-8所示。
3.实现过程
所属页面名:myCart.jsp核心代码参见附录3
页面设计如表5-8所示。
 
图5-8 购物车模块

5.5.4  收银台模块的设计与实现

1.实现目标
用户选择完图书后,需要确认购物车中内容,即结帐,点击下一步,此时页面跳转到结账页面。在结帐页面,需要用户填写联系地址、联系电话、付款方式和送货方式和备注信息,以便生成订单。当完成一次交易所需要的用户方面的信息都已齐全,只须生成订单即可进入配送过程。如果用户所填写的订单信息正确,系统会返回给用户此次交易所产生的订单号码。界面的设计如图5-9所示。
 

 
图5-9 结账模块
 
2.实现过程
所属页面名:orderQuren.jsp
表单属性:action="<%=path%>/orderSubmit.action" name="f" method="post"
页面设计如表5-5所示。
具体代码参照附录3。
表5-5 收银台主要控件信息列表
名称 类型 含义
userName Text 收货人账号
userRealname Text 收货人姓名
userTel Text 收货人联系电话
userAddress Text 收货人地址
odderSonghuodizhi Text 送货住址
 

5.5.5 查看订单模块的设计与实现

1.实现目标
用户填写完订单并提交成功后可以通过查看订单按钮看到自己的订单及详细信息。界面的设计如图5-10所示。
 
 
图5-10 查看订单模块
2.实现过程
所属页面名:myOrder.jsp
具体代码参见附录3。

5.5.6  公告浏览模块的设计与实现

1.实现目标
吸引顾客有很多种宣传措施,本系统采用公告的方式进行宣传。利用类似流动看板的方式显示公告信息。在顾客点击某一条公告信息时,系统可以自动弹出一个页面显示具体的公告信息。界面的设计如图5-11所示。
 
 
图5-11 公告浏览模块
2.实现过程
所属页面名:gonggaoDetailQian.jsp
首先使用gonggaoDAO中的save方法,将公告信息添加到数据库中,在用户点击页面中的公告后,通过gonggaoDAO下的findAll方法,将其调出,显示到页面中。

5.5.7 客户留言模块的设计与实现

1.实现目标
为了能够了解客户对我们的商品的满意程度,我们设计了留言模块,让用户能够在第一时间将问题反映给我们,以便我们及时改进。界面的设计如图5-12所示。
 
图5-12 公告浏览模块
2.实现过程
所属页面名:liuyanAll.jsp
首先通过判断session中的userName是否为空,如果为空,则只能先登录才能进行留言。如果不为空,则留言人中显示userName,使用获取系统时将来给留言时间赋值。客户在输入标题和内容后,将其存储到数据库中,在客户查看时再将其调出。

5.6  系统后台管理功能设计与实现

本节对系统后台功能设计进行详细的说明。

5.6.1 基本信息管理设计与实现

1.实现目标
该功能主要分布在管理员信息、用户信息、图书类别信息,订单信息,公告信息和留言信息的处理。对这些信息操作的主要功能详细设计包括对它们的添加、删除、更新和查询等操作,需要分别在基本信息中的每一个页面中设计这些功能。当对这些基本信息进行添加、删除和更新操作时,需要将这些操作所执行的结果返回到本系统的数据库中,并能够在相应的页面中刷新显示新的结果集。需要用SQL语句将这些信息添加到数据库中。模块的输出是操作信息成功的提示信息。对于在某一页面中的查询功能,此页面要能够刷新显示出此查询结果信息。以客户信息管理理为例。界面的设计如图5-13所示。

 
图5-13 客户信息管理模块
2.实现过程
所属页面名:userMana.jsp
客户管理主要是使用userDAO中下的findById和findAll方法来删除和获取数据库中的数据。进入客户管理界面时通过findAll方法来显示所有用户的信息,点击删除时,通过findById方法获取指定的用户ID,使用sql语句进行操作。

5.6.2 订单信息管理设计与实现

1.实现目标
该模块是针对用户订单信息和订单明细信息的管理功能进行的详细设计,主要是对用户订单信息和订单明细信息的查看、删除和受理订单的操作。管理员应该可以查看系统中已处理的订单和未经处理的订单信息,用户订单信息和订单明细信息在不同的页面显示。界面的设计如图5-14所示。
     
 
图5-14 订单管理模块
2.实现过程
所属页面名:orderMana.jsp
订单管理模块使用了buyAction中的方法,当用户提交订单时,订单状态默认为未受理。管理员查看订单时调用了orderMana()方法将订单显示到页面中,点击删除时调用orderDelByAd()方法将通过订单的ID对指定的订单进行那个删除操作,点击受理订单时调用orderShouli()方法将订单状态改为已受理。管理员查看订单明细时通过 orderDetail()方法通过订单ID将指定的订单明细显示到页面中。
具体代码参照附录3。
5.6.3  图书信息管理设计与实现
1.实现目标
在图书管理模块中除了基本的信息管理功能外,为了方便顾客浏览到图书的真实外貌,在添加图书模块中增加上传图书图片的功能。
管理员在图书添加页面中输入添加的图书基本信息,点击提交后进入上传图片页面。在商品信息管理中,我将商品分为特价和非特价商品来管理。此页面中能够显示出已输入的特价图书基本信息,在上传图片位置上添加文件后点击提交,提交成功后有提示信息弹出。在管理员查看商品信息时,将鼠标放到查看图片上就可以查看图片界面的设计如图5-15所示。
 
 
 
图5-15 商品信息管理模块
2.实现过程
所属页面名:goodsManaYesTejia.jsp
本模块主要是对商品表进行管理,所以就是一些查询和删除操作,我在做的时候,主要讲商品分为特价和非特价商品,在管理时也是分开管理,主要通过判断goodsIsnottejia来区分是否为特价商品。

5.6.4  公告信息管理设计与实现

1.实现目标
在各大热门网站上都有公共的出现,该模块的建立也是为了通过实现发布公告,给顾客提供方便的操作,让客户能够及时的了解商城的活动情况。
 
 
2.实现过程
所属页面名:gonggaoMana.jsp
在gonggaoAction中,调用gonggaoAdd方法进行添加操作,使管理员能添加一个新公告,管理员查看时则调用了gonggaoMana()方法,来显示所有的公告信息,要进行删除操作就会调用gonggaoDel()方法进行删除。

5.6.5 留言信息管理设计与实现

1.实现目标
客户对商城的商品有任何意见,都可以在留言模块中进行留言,方便管理员查看,商城会及时处理问题。界面的设计如图5-17所示。
 
 
图5-17 留言信息管理模块
2.实现过程
所属页面名:liuyanMana.jsp
留言功能,主要先依靠liuyanDAO.findAll方法来获取所有留言,然后调用liuyanMana来显示,管理员的添加操作是调用liuyanAdd方法实现的,留言的时间定义是用获取系统时间的方法来定义的。删除留言时则调用liuyanDel方法来实现。

5.7  本章小结

本章进行了此系统的详细设计的介绍,我们可以对本系统的设计有了一个细致全面的了解。前台模块详细介绍了用户维护、销售排行、购物车、结账、查看订单、留言模块和公告浏览模块的设计和实现的过程,同时后台模块介绍了客户信息管理、订单管理、图书信息管理、公告管理和留言管理的设计和实现的过程。本系统详细设计的原则是采用结构化的设计方法,改善控制结构,降低程序的复杂程度,从而提高程序的可读性、可测试性和可维护性。
 
 

第6章  系统测试与性能分析

6.1 软件测试

经过需求分析、设计和编码等阶段的开发后,得到了源程序,开始进入到软件测试阶段。然而,在测试之前的各阶段中都可能在软件产品中遗留下许多错误和缺陷,如果不及时找出这些错误和缺陷,并将其改正,这个软件产品就不能正常使用,甚至会导致巨大的损失。目前,程序的正确性证明尚未得到根本的解决,因此软件测试仍是发现软件中错误和缺陷的主要手段。
系统整体测试步骤:
1.单元测试
单元测试是整体测试中的第一步,通常在编码阶段进行。在源程序代码经过编译、评审、确认没有语法错误之后,便可开始进行单元测试。
2.集成测试
集成测试在单元测试完成之后,将所有的模块概要设计要求组装成系统时进行的测试,主要目标是发现与接口有关的问题。
3.确认测试
经过集成测试之后,接口错误已经发现被发现并改正了,接下便要进行确认测试。所谓确认测试就是验证所开发软件的功能性及其他特性是否符合软件需求规格说明书的要求。所以,确认测试又被称为有效性测试。
4.系统测试
系统测试是更大范围内进行测试,它将经过确认测试的软件作为整个基于计算机的系统的一个元素,在实际运行环境下,对系统进行的一系列集成和确认测试。

6.2 本系统测试

为了测试系统的正确性和完整性,本节将对系统中重点模块的测试进行介绍。

6.2.1 前台首页的测试

1.查询模块的测试
首先在主页中的查询产品中的下拉列表中单击某一类别,然后在文本框中输入要查询的商品关键字,在右边显示菜单中查询到商品,则说明查找成功。通过对系统的反复大量的测试,该模块测试成功。
2.图书分类浏览模块的测试
测试过程是单击页面左边的商品类别,选中某一类别后,就可以在页面右边显示该类别下的所有商品。通过对该功能的重复大量测试,该模块能够准确地实现此项功能。

6.2.2 购物车模块的测试

在本模块中首先对修改数量单元进行了测试,所修改的数量如果是有效数字,则修改所购图书数量成功,否则修改失败,系统自动将图书数量重置为“1”。通过随机测试了几组数据,其修改的数量和累计的金额均正确。如果客户购买了同一个商品,则就会进行该商品购买数量的累加,不会重复出现。然后针对购物车应该不限制顾客购买图书的数量这一原则进行测试,通过大量向购物车中添加图书来进行测试,测试结果为购物车中可以显示所添加的所有图书信息,测试结果取得了预期的效果。

6.2.3 用户注册模块的测试

在用户注册模块中涉及到了三项数据,项目分别为密码和确认密码、用户真实姓名、住址、性别、E_mail、QQ。测试这个模块准备的数据有:
1.sang、123、123、—、哈尔滨道里区、女、bing@123.com、37472
2.sa、123、12、张三、哈尔滨道外区、男、bzhi@123.com、6434634
3.be、123、123、李四、哈尔滨香坊区、男、bli@123.com、53658403
首先进入注册页面,输入第一组数据,单击注册按钮系统会提示表单信息不能为空,因为表单信息要全部填写,而真实姓名没有写值。然后测试第二组数据,可以明显看出所输入的密码与确认密码是不一致的。然后测试第四组数据,其中九项均是系统正确的数据,因此测试通过。在填写用户名时,用户可以查看自己的用户名是否可以使用。

6.2.4 图书管理模块的测试

1. 添加功能的测试
对图书添加模块准备的商品名、商品描述、商品图片、商品颜色、市场价、特价、商品种类,分别准备的测试数据为:摩托罗拉W220、翻盖手机,好用。1680、1500。其中类别的选择是通过下拉列表框来选择,颜色也是通过下拉列表来选择,图片单击上传图片后,找到图片的地址点击确定就可以上传,单击添加按钮,执行添加操作,数据提交后,就完成了商品的添加。之后,进行了几项测试,如漏填了几项数据、上传图片格式不正确,这些数据的操作结果都是失败。
2. 删除功能的测试
以编号为4的这条记录为例,通过单击该条记录上的“删除”链接按钮,对图书信息进行删除的操作,数据提交后,系统提示“删除商品信息成功”,通过对该模块的浏览,该信息的确已被删除,查无此条记录,说明此模块运行无误,信息删除成功。如果是删除商品类别,假如该类别下还有商品,则会提示不能删除,如果类别下没有商品,则可以进行删除。
3. 查询功能的测试
本系统中的查询功能都是通过点击链接实现的。将图书管理的编码进行了测试,输入管理员的密码登录后台后点击图书设置就可以直接看到查询出的图书信息。点击查看产品图片后查询出了图书是否上传了图片,系统没有出现错误,查询成功。

6.3  本章小结

软件测试是软件开发中的重中之重,在项目管理过程中,强调的是每个过程的每一个环节都要进行测试,保证系统在每个阶段可以控制。本章着重对前台首页、购物车模块、用户注册模块和图书管理模块进行了详细的测试说明。通过反复大量的测试,每个模块均测试成功。
结    论
图书在线销售系统采用了比较流行的B/S模式,使用当前较流行的SSH框架和拥有较高安全性与稳定性的数据库SQL Server 2005来完成系统的设计与开发。系统充分考虑了用户的需求,最终达到了预期效果,并添加了一些附加功能,使系统更加人性化。操作者可以随时对所有的信息进行查询,并且每个模块都提供信息浏览的功能。
本系统实现了图书企业通过互联网向消费者推销自己的图书和服务,在图书在线销售系统网站消费的顾客可以通过计算机网络搜索到自己需要的信息,购买自己需要的图书,在线下达订单。然后由图书在线销售系统后台来处理相关的订单信息、网站维护等信息。
由于本人在知识、经验方面都存在着不足,在整个开发的过程中时间也比较仓促,因此该系统必然会存在一些缺陷和不足。本系统在图书信息管理等方面还有不足之处,由于对其具体功能分析的不够透彻,以至于在实现功能上不够细化,不够详尽,所以有待以后将其更加完善。
致    谢
在指导老师的指导和同学帮助之下,我顺利地完成了本次毕业设计。在毕业设计这段时间里,我认识到了自己的不足并努力的争取独立完成我的设计,最终收获很多,学到了以前很多没有学到的知识,同时也巩固了所学过的知识。
首先,感谢我的指导老师。作为我的导师,无论是在理论还是实践方面都给我提了很多宝贵的意见,使我的毕业设计在有条不紊的环境下进行,逐步趋于完善,得以顺利完成。
其次,我也很感谢在开题检查时老师给我提出宝贵意见,还有其他老师在此期间的关怀和帮助,以及学院为我提供良好的毕业设计环境。
最后,感谢在毕业设计中为我提供帮助的学院的老师和同学,以及在毕业设计中被我引用或参考的论著的作者,总之感谢在毕业设计期间给予我帮助的所有老师和同学,感谢你们对我的支持。
参考文献
1  汪建文.我国零售企业的商务电子化应用商场现代化.2008.(04):56-60
2  胡燕.软件工程与标准化.信息技术与标准化.2004.(12):17-21
3  盛仲飙.JSP中数据库访问的性能优化研究.微型电脑应用.2008,(9):16-17
4  董纪阳.软件设计中的需求分析.电脑知识与技术.2008.(28):56-57
5  林华灵.基于Strut框架技术的Web应用.中国新技术新产品.2008,(14):9-11
6  何玉洁.数据库原理与应用教程.机械工业出版社.2003:23-78
7  杨文红,赵德平,刘柯剑.基于MVC模式Struts框架研究与应用.硅谷.2008.(20):45-46
8  赵蕾,程明定,刘琳.J2EE模型中Struts框架技术的研究和应用.中国博览.2004.(12):25-26
9  桃子.图书市场前瞻.微型计算机.2007.(13):89-90
10 周建儒.JSP中自定义标签的实现与部署.科技信息(科学教研).2008.(23):51-53
11 Mcleod.Management Information system management in practice.Prentice Hall.1998:43-55
12 Raghu Ramakrishnan.Johannes Gehrke.Database Management System.McGraw-Hill Professional. 2007:180-213
13  Cassidy A.Information systems strategic planning.Bocaraton.Flrida.St.
Luicepress.1998:12-31
14  Dionysios Tsichritzis C.Data Base Management Systems.1977:150-53
15  hristopher P.Ben light.A critical success factors model for eprimplement.
IEEE software.1999:16-30
 
 
 

附录1

Struts
Struts 是 Apache软件基金会(ASF)赞助的一个开源项目。它最初是 Jakarta项目中的一个子项目,并在2004年3月成为ASF的顶级项目。它通过采用 Java Servlet/JSP 技术,实现了基于Java EE Web应用的 Model-V
iew-Controller(MVC)设计模式的应用框架(Web Framework),是 MVC 经典设计模式中的一个经典产品。
MVC结构
在 Struts 中,已经由一个名为 ActionServlet 的 Servlet 充当控制器(Controller)的角色,根据描述模型、视图、控制器对应关系的 struts-config.xml 的配置文件,转发视图(View)的请求,组装响应数据模型(Model)。在 MVC 的 模型(Model)部分,经常划分为两个主要子系统(系统的内部数据状态与改变数据状态的逻辑动作),这两个概念子系统分别具体对应 Struts 里的 ActionForm 与 Action 两个需要继承实现超类。在这里,Struts 可以与各种标准的数据访问技术结合在一起,包括Enterprise Java Beans(EJB), JDBC 与 JNDI。在 Struts 的视图(View) 端,除了使用标准的JavaServer Pages(JSP)以外,还提供了大量的标签库使用,同时也可以与其他表现层组件技术(产品)进行整合,比如 Velocity Templates,XSLT 等。通过应用 Struts 的框架,最终用户可以把大部分的关注点放在自己的业务逻辑(Action)与 映射关系的配置文件(struts-config.xml)中。
发展历程
在 Java EE 的Web应用发展的初期,除了使用 Servlet 技术以外,普遍是在 JavaServer Pages (JSP)的源代码中,采用 HTML 与 Java 代码混合的方式进行开发。因为这两种方式不可避免的要把表现与业务逻辑代码混合在一起,都给前期开发与后期维护带来巨大的复杂度。为了摆脱上述的约束与局限,把业务逻辑代码从表现层中清晰的分离出来,2000年,Craig McClanahan 采用了 MVC 的设计模式开发Struts。后来该框架产品一度被认为是最广泛、最流行 JAVA 的 WEB 应用框架。
2006年,WebWork 与 Struts 这两个优秀的Java EE Web框架(Web Framework)的团体,决定合作共同开发一个新的,整合了 WebWork 与 Struts 优点,并且更加优雅、扩展性更强的框架,命名为 “Struts 2”,原Struts的1.x 版本产品称为”Struts 1”。
至此,Struts项目并行提供与维护两个主要版本的框架产品——Struts 1 与 Struts 2。  
    充满竞争的MVC框架
虽然Struts的是成熟的和流行的框架,建设前端Java应用,它正面临新的挑战,从较新的”轻量”的MVC框架,如Spring的MVC ,Stripes和Tapestry 。新的XForms标准和框架,也可能是另一种选择,以建立复杂的Web窗体验证与Struts的未来。
在WebWork框架脱离Apache的Struts的几年前,以提供改进和完善,同时保持了相同的一般建筑的原始Struts框架。然而,它在2005年12月宣布,该框架将重新合并WebWork 。WebWork 2.2已获得通过,成为Apache的Struts的2 ,达到了第一个完整的版本于2007年2月。
Sun公司最近提出了一项新的除了Java平台,所谓的JavaServer界面(SF) 。除了原有的框架下, Apache的Struts的项目还提供了一个JSF的为基础的框架,所谓的页岩。
其他的MVC框架,并不是基于J2EE的包括Ruby on Rails的, WebObjects , Django ,Catalyst, TurboGears , CakePHP , Symfony (对于PHP ),Zend公司,大展ATK公司,并CodeIgnite(对于PHP )。 Struts4php是一个Struts框架的PHP的web脚本语言版本。Girders是微软.NET基于C #的Struts框架的一部分。
 
 
 
 
 
 
 
 
 
附录2
Struts
Apache Struts is an open-source web application framework for developing Java EE web applications. It uses and extends the Java Servlet API to encourage developers to adopt a model-view-controller (MVC) architecture. It was originally created by Craig McClanahan and donated to the Apache Foundation in May, 2000. Formerly located under the Apache Jakarta Project and known as Jakarta Struts, it became a top level Apache project in 2005.
Design goals and overview
In a standard Java EE web application, the client will typically submit information to the server via a web form. The information is then either handed over to a Java Servlet which processes it, interacts with a database and produces an HTML-formatted response, or it is given to a JavaServer Pages (JSP) document which intermingles HTML and Java code to achieve the same result. Both approaches are often considered inadequate for large projects because they mix application logic with presentation and make maintenance difficult.
The goal of Struts is to cleanly separate the model (application logic that interacts with a database) from the view (HTML pages presented to the client) and the controller (instance that passes information between view and model). Struts provides the controller (a servlet known as ActionServlet) and facilitates the writing of templates for the view or presentation layer (typically in JSP, but XML/XSLT and Velocity are also supported). The web application programmer is responsible for writing the model code, and for creating a central configuration file struts-config.xml which binds together model, view and controller.
Requests from the client are sent to the controller in the form of “Actions” defined in the configuration file; if the controller receives such a request it calls the corresponding Action class which interacts with the application specific model code. The model code returns an “ActionForward”, a string telling the controller which output page to send to the client. Information is passed between model and view in the form of special JavaBeans. A powerful custom tag library allows it to read and write the content of these beans from the presentation layer without the need for any embedded Java code.
Struts also supports i18n (internationalization), provides facilities for the validation of data submitted by web forms, and includes a template mechanism called “Tiles” which (for instance) allows the presentation layer to be composed from independent header, footer, and content components.
Competing MVC frameworks
Although Struts is a well documented, mature and popular framework for building front ends to Java applications, it is facing new challenges from newer “light weight” MVC frameworks such as Spring MVC, Stripes and Tapestry. The new XForms standards and frameworks may also be another option to building complex web Form validations with Struts in the future.
The WebWork framework spun off from Apache Struts several years ago, aiming to offer enhancements and refinements while retaining the same general architecture of the original Struts framework. However, it was announced in December 2005 that Struts would re-merge with WebWork. WebWork 2.2 has been adopted as Apache Struts 2, which reached its first full release in February 2007.
Sun recently brought out a new addition to the Java platform, called JavaServer Faces (JSF). Aside from the original framework, the Apache Struts project also offers a JSF-based framework called Shale.
Other MVC frameworks that are not J2EE based include Ruby on Rails, WebObjects, Django, Catalyst, TurboGears, CakePHP, Symfony (for PHP), Zend, Achievo ATK, and CodeIgniter (for PHP). Struts4php is a version of the Struts framework for the PHP web scripting language. Girders is a port of the Struts framework in C# for Microsoft .NET.
 
 
 
 
 
 
 
 
附录3
购物车核心代码
在userAction中:
public String userLogin()
{
String sql="from TUser where userName=? and userPw=?";
Object[] con={userName,userPw};
List userList=userDAO.getHibernateTemplate().find(sql,con);
if(userList.size()==0)
{
this.setMessage("用户名或密码错误");
this.setPath("qiantai/index.html");
}
else
{
 Map session= ServletActionContext.getContext().getSession();
 TUser user=(TUser)userList.get(0);
 session.put("user", user);
 Cart cart=new Cart();          //用户登陆成功后生成购物车,并将其放入到session中。
 session.put("cart", cart);
 this.setMessage("成功登录");
 this.setPath("qiantai/index.html");
}
return "succeed";
}
 
在buyAction中:
public String addToCart()
{
TGoods goods=goodsDAO.findById(goodsId);
TOrderItem orderItem=new TOrderItem();
orderItem.setGoods(goods);
orderItem.setGoodsQuantity(quantity);
Map session= ServletActionContext.getContext().getSession();
Cart cart = (Cart)session.get("cart");     //将session中的cart取出,也就是上边存储在session中的cart
cart.addGoods(goodsId, orderItem);
session.put("cart",cart);              //再把cart放入session
//this.setMessage("");
this.setPath("myCart.action");
return "succeed";
}
public String myCart()  //获取我的购物车
{
return ActionSupport.SUCCESS;
}
public String orderQueren()                 //确认提交订单
{
Map request=(Map)ServletActionContext.getContext().get("request");

return ActionSupport.SUCCESS;
}
public String orderSubmit() //订单提交
{
Map session= ServletActionContext.getContext().getSession();
Cart cart = (Cart)session.get("cart");                //将cart取出
TUser user=(TUser)session.get("user");        //将用户取出
TOrder order=new TOrder();
order.setOrderBianhao(new SimpleDateFormat("yyyyMMddhhmmss").format(new Date()));        //设定订单编号
order.setOrderDate(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date()));      //确认订单的日期
order.setOrderZhuangtai("no");                       //订单状态默认为未受理                                      
order.setOrderUserId(user.getUserId());                 //设定订单的用户ID
        order.setOrderJine(cart.getTotalPrice());     //商品的价格
orderDAO.save(order);             //保存订单

for (Iterator it = cart.getItems().values().iterator(); it.hasNext();)
     //把订单里的商品存入数据库
{
 
TOrderItem orderItem = (TOrderItem) it.next();
orderItem.setOrderId(order.getOrderId());
orderItem.setGoodsId(orderItem.getGoods().getGoodsId());
orderItemDAO.save(orderItem);
}

cart.getItems().clear();  //清空购物车
session.put("cart", cart);

Map request=(Map)ServletActionContext.getContext().get("request");
request.put("order", order);

return ActionSupport.SUCCESS;

}



public String myOrder()                                                                 //根据用户查询订单
{
Map session= ServletActionContext.getContext().getSession();
TUser user=(TUser)session.get("user");  //获取用户
String sql="from TOrder where orderUserId="+user.getUserId();
List orderList=orderDAO.getHibernateTemplate().find(sql);  //调用orderDAO中的find方法,执行sql语句
Map request=(Map)ServletActionContext.getContext().get("request");
request.put("orderList", orderList);

return ActionSupport.SUCCESS;
}


public String orderMana()  //订单管理
{
String sql="from TOrder order by orderUserId";
List orderList=orderDAO.getHibernateTemplate().find(sql);
Map request=(Map)ServletActionContext.getContext().get("request");
request.put("orderList", orderList);
return ActionSupport.SUCCESS;
}


public String orderDel()                                                            //用户自己删除订单
{
TOrder order=orderDAO.findById(orderId);
orderDAO.delete(order);


Map session= ServletActionContext.getContext().getSession();
TUser user=(TUser)session.get("user");

this.setMessage("删除成功");
this.setPath("myOrder.action?userId="+user.getUserId());     //跳转到 myOrder.action
return "succeed";
}

public String orderDelByAd()                                                       //管理员删除订单
{
TOrder order=orderDAO.findById(orderId);
orderDAO.delete(order);
String sql="delete from TOrderItem where orderId="+orderId;
orderItemDAO.getHibernateTemplate().bulkUpdate(sql);

this.setMessage("删除成功");
this.setPath("orderMana.action");
return "succeed";
}


public String orderShouli()  //对订单进行受理
{
TOrder order=orderDAO.findById(orderId);
order.setOrderZhuangtai("yes");//已经受理订单
orderDAO.attachDirty(order);
this.setMessage("受理订单成功");
this.setPath("orderMana.action");
return "succeed";
}



public String orderDetail()                 //订单明细
{
String sql="from TOrderItem where orderId="+orderId;
List orderItemList=orderItemDAO.getHibernateTemplate().find(sql);
for(int i=0;i<orderItemList.size();i++)
{
TOrderItem orderItem=(TOrderItem)orderItemList.get(i);
orderItem.setGoods(goodsDAO.findById(orderItem.getGoodsId()));
}       //取出订单里的商品
Map request=(Map)ServletActionContext.getContext().get("request");
request.put("orderItemList", orderItemList);
return ActionSupport.SUCCESS;
}

 
 
在cart.java中
package com.util;
 
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
 
import com.model.TGoods;
import com.model.TOrderItem;
 
public class Cart            //定义购物车类
{
 
protected Map<Integer, TOrderItem> items;
 
public Cart()                                                  //定义构造方法
{
 
if (items == null)
{
items = new HashMap<Integer, TOrderItem>();
}
}
 
public void addGoods(Integer goodsId, TOrderItem orderItem)  //添加购物车
{
 
if (items.containsKey(goodsId))                                   
{
 
TOrderItem _orderitem = items.get(goodsId);
_orderitem.setGoodsQuantity(_orderitem.getGoodsQuantity()+ orderItem.getGoodsQuantity());             //如果购买商品重复,则加上数量
items.put(goodsId, _orderitem);
} else
{
 
items.put(goodsId, orderItem);
}
}

public void delGoods(Integer goodsId)                                  //删除购物车
{
items.remove(goodsId);
}

 
public void updateCart(Integer goodsId, int quantity)  //更新购物车的数量
{
 
TOrderItem orderItem = items.get(goodsId);
orderItem.setGoodsQuantity(quantity);
items.put(goodsId, orderItem);
}
 
public int getTotalPrice()  //计算总的价格
{
 
int totalPrice = 0;
for (Iterator it = items.values().iterator(); it.hasNext();)
{
 
TOrderItem orderItem = (TOrderItem) it.next();
TGoods goods = orderItem.getGoods();
int quantity = orderItem.getGoodsQuantity();
totalPrice += goods.getGoodsTejia() * quantity;          //单价乘以数量
}
return totalPrice;
}
 

 
}