摘要
本文介绍了商城购物系统的设计与实现,包括底层的开发和页面的设计,使用的系统是Windows XP,开发工具为MyEclipse,运用的服务器为Tomcat,使用的数据库为MySql,系统主要实现的功能是用户的注册和登录,用户信息的改查以及商品信息的查询,用户购买商品后整理出的商品订单等以及订单的增删改查功能,该系统中页面的设计使用了Dreamever工具,代码上使用的是JSP语言。
关键词:MVC模式,J2EE,商城购物系统
1.绪论
1.1网上商品购物系统概述
当今社会科技飞速发展,计算机使用普遍,英特网也进入到了家家户户,生活水平越发提高的今天,随着网上商品购物系统的出现,很多消费者坐在家中就可以如同在商场里选购商品一样购买着自己需要的商品,这促使网上购物成为一种时尚,网上购物系统大大促进了商品的消费。
随着越来越多的商场提供着网上商店,现在网上商品购物系统越来越全面,通过这样的系统,可以做到商品信息的规范管理,科学统计和快速查询。因为用户确定购买商品后涉及到一个网上银行付费问题,因此用户在进入该系统选购商品时需有一个不与他人重复的唯一的用户名,注册用户名时会相应的有该用户的各种联系方式与地址,用户在选购商品时同时系统也会为其提供一个看不见的“购物车”来累积用户的购买商品,整个系统既自主化又易使用。
1.2 研究意义
上世纪90年代以来,随着网络、通信和信息技术的突破性进展,Internet在全球爆炸性增长并迅速普及。上网不再是知识份子的特权,农民,工人都可以在网上获取和传播消息,网络已逐渐日常生活化,成为传播讯息的一个极为快速和方便的通道,世界上的网民的数量也每年都在以大幅度的数量上升,同时,人们的生活节奏越来越快,生活质量也越来越高,很多人都不愿意为买一件商品而亲自去商场精挑细选,都享受坐在书房用鼠标点点就能获得送货上门的服务,因此电子商务应运而生,随着网上银行的出现,很多的东西在网络上也逐渐商品化,这使得电子商务变得越来越普及。
电子商务是基于互联网、以交易双方为主体、以银行电子支付和结算为手段、以客户数据为依托的全新的商务模式,它可以使商家与供应商更紧密地联系起来,更快地满足客户需求,也可以让商家在全球范围内选择最佳供应商,在全球市场上销售产品。自1998年“电子商务年”以来,电子商务在全球发展迅猛,大约每九个月其交易额就翻一番,全球电子商务交易额(包括网上贸易额、销售额等)达到数千亿美元,电子商务收入剧增262%。
目前,世界各国纷纷看好电子商务这块新大陆,普遍认为电子商务的发展将是未来25年世界经济发展的一个重要推动力,对经济的促进将远远超过200年前的工业革命。著名网络经济调查评论家Robert Metcalfe声称:“互联网的价值等于(与之相联结的)网点数量的平方。”
1.3 研究现状
第一,网上购物前景乐观。在当今这个信息高速发展的社会里,网络已经成为人们日常学习生活中很重要的部分。人们可以从网络中浏览信息,享受服务,享受高科技带来的便利。因此网络市场前景相当广阔,而作为网络服务主流的网上购物更是很具有开发潜力。随着电脑上网的发展,越来越多的电脑用户逐渐认识了网上购物。
第二,网上购物不如商场购物受到认可。 虽然网络购物方便快捷,适应弹性相当大,可是还是有很多的电脑用户以及非电脑用户不接受通过上网购买所需物品。也就是说,网上购物的发展前景是乐观的,可是发展现状还有待研讨。另外通过口头调查,还得知网上购物不如商场购物受欢迎的另一原因,就是网络安全以及商品质量无法得到保证。
第三,比起其它商品,人们更愿意从网上购买书籍音像类商品。 据分析,首先,书籍音像这类商品成本一般不会很高;其次,这类商品的质量真伪比较容易辨别,消费者不易上当受骗;再次,超大全面的信息流使从网上寻找这类商品比在图书馆或者书店寻找更方便,真正体现了网上购物的优点,既方便快捷,又简单明了。
第四,用户对目前电子商务网站内容还有较大意见。 其原因是现在网站存在很多问题,比如:内容不详细、不符合购物者阅读习惯等。另外,网上内容的真实性需要提高,这种不真实内容的破坏性是很大的。 的确,目前网上交易安全性得不到保障、产品质量、售后服务、厂商信用、送货耗时、付款不便有很大关系,但是当网民们展望互联网未来的时候,网上购物与网络通讯和网上学校一起被网民们公选为最有希望的网上事业。
第五,大多数人们接受货到付款的支付方式。 在被问及最愿意接受的付款方式时,超过80%的用户选择货到付款,其次为网上银行支付、信用卡付款、银行转账。用户对货到付款有良好的信任。
1.4 研究内容
充分利用计算机的友好图形界面,简便的操作以及完善的数据库管理来开发一个智能化,系统化,信息化的网络商城购物系统,使该购物系统最大限度地应用于现代化商品购物之中,成为网上购物后台管理人员的得力助手。
网络商城购物系统是用户购买已经放在货架上的商品,而这些商品信息都是事先存入的,该系统中只包含了一种人,即用户,用户必须通过登录后才可以行使自己的功能。
该系统中主要操作有:
用户的注册和登录。
用户自身对自身信息的查看,修改,操作。
用户的注册信息包括用户名和密码,以及其它注册信息如电话号码,家庭住址,邮编等。
登录信息主要是通过用户的用户名和密码来判别该用户名是否是经过注册的。
商品信息则包括了商品的价格,所属类别,商品的详细说明等方面内容。
用户选择商品后需将商品放入自己的购物车中,同时也会产生相应的用户订单,用户本身可以对自己的购物车进行查看,对购物车中商品进行查看,修改,删除操作,也可以对订单进行查看,修改和删除操作。
该系统能使用户清晰明了的知道自己所选择的商品以及其单价及所有商品的总价。付款时用户可选择付款方式为邮局付款(Post payment)还是现金付款(Cash payment)还是汇款付款(Remit payment)。
1.5 研究思路与研究方法
编写一个完整的项目系统,其中很花费时间的不仅仅是编写代码,编写业务流程,需求分析和界面,数据库的设计等也非常重要.编写代码只是后期的工作.只有在正确的了解了客户的真正需求,真正理解了客户的思想后才可能做出功能有针对性的好软件.需求分析不是说一次就能完成的,需要反复地进行深入调查,研究,了解客户的工作实质,才能抓住客户的需求,这样做出来的软件才能称的上是有市场前景的。否则,如果一个软件做出来,其功能不符合客户的需求,那么这个软件将不会被使用,只能浪费程序员的时间和精力而已.
数据库的设计也是一个非常重要的环节.软件处理的最根本的内容就是数据,如果数据设计的不好,表格与表格之间设计的不够严谨,那编出来的软件其功能的实现肯定大打折扣.因此只有合理的数据设计才能使该软件真正与用户的需求契合.
另外,软件页面的设计也很重要,友好的页面会给用户带来很亲和的感觉,规范的排版也会提高工作者的工作效率.
项目的代码部分是留到最后编写的,需要在软件的需求分析和设计都拟好以后,才能符合客户要求的实现代码.这样编写出来的代码也具有分层模式,格式上整齐,很容易理解,另外该写注释的地方也应该写上注释,以方便以后的调试工作.
代码编写完成后还需要测试,也可以称之为调试,以验证软件的功能是否能够全部正确有效的实现。
本次毕业设计主要是利用MVC分层模式处理项目的底层实现,实现数据库内数据的增删改查,项目的底层代码被封装起来后,通过接口对外扩展其他功能,界面的实现是采用server方式将代码与数据库连接起来,数据库使用的是MySql,开发使用的工具是MyEclipse,开发使用的服务器是Tomcat.
2.系统概述
本文采用Servlet技术对商品购物管理系统的设计进行研究,该系统是基于B/S结构下进行系统开发的,利用Java和JSP的特性来设计结构合理的MVC架构并结合Java中间件软件开发高效的Servlet应用程序。
2.1 系统描述
该系统主要采用了Servlet和JSP技术实现。把Servlet、JSP和自定义标签等信息资源整合到一个统一的框架中,开发人员利用其进行开发时,不需要再自己重新编写代码实现全套MVC模式,这极大地节省了程序员的时间。 本系统采用了JSP Model2体系,如图2-1所示。
2.2系统功能
本系统实现后,可以更加方便快捷的为网上购物用户提供全方位的服务,使用户从查看商品到挑选商品到购买商品最后到付款都能在一个系统中完成,这为用户在该系统中购买商品提供了大大的方便,后台的数据库操作也使该系统中用户购物管理上规范化,系统化,提高了后台信息处理的速度和准确性,能够及时、准确、有效的查询和修改用户的购物情况。
2.3设计目标
本系统的设计目标是借助网络,为商场建立一个商品信息管理和查询系统,给商品管理和用户提供一个网上电子平台,使用户在家里就可以挑选购买商品,这将大大提高商场的经济效益,也体现了当今社会商品信息的管理水平和现代化程度。其最终实现系统的全方位化和管理信息化及自动化。
3需求分析
该网上商品购物系统主要分为用户模块,商品信息模块,订单模块和购物车模块,该系统主要是为用户购物提供服务的,提供的服务也是多种多样,用户模块中提供的服务有注册、登录,登录以后会有登录用户的基本信息查询、修改功能,商品信息模块中提供商品的查询信息和商品列表,商品点选后会自动放入用户的购物车中并生成一张购物清单,此时进入了订单模块,订单模块中可以对所选购的商品进行增删改查等操作,进入订单模块时会经过购物车模块,购物车模块中用户可选择商品,之后生成一张购物清单。
这些模块的总体用例图如图3-1所示:
3.1用户模块
按功能用户模块可分为如下几大子模块。
注册:只有注册的用户才能进一步得到系统提供的服务。注册时需要输入用户的注册信息,包括用户名、密码、确认密码、所在省份、联系地址、邮编、电话、手机、邮箱等。如果账号已经存在,则注册不能成功。注册成功后才可进行登陆。
登录:登录时要求输入用户名和密码。在输入账号和口令后,系统将验证账号和口令是否正确,这验证过程是与注册时存入数据库内的数据相关的,如果验证成功,用户将处于登录状态;否则,用户信息:用户登陆后可随时查看与更改个人信息。用户模块的用例图如
3.2商品信息模块
商品信息模块包括商品的详细信息查询与所有商品所生成的商品清单列表,每种商品点击后都会进入商品的详细信息情况的查询中,在每种商品商品后面都有一个标有“添加购物车”按钮的图标,点击后可将该商品加入系统分配给用户的购物车中。商品信息模块用例图如图3-3所示:
3.3 购物车模块
用户在点击“添加购物车”按钮时,用户就会进入购物车模块中,购物车在该系统中是个极其重要的存在,关联着多个模块,在该系统中起着连接商品信息和用户订单的一个桥梁作用。购物车模块用例图如图3-4所示:
3.4 订单模块
订单模块包括用户信息,付款方式与商品购物清单三大模块。
用户信息模块:将已经注册的用户的详细联系方式显示出来,以确认该用户的身份及联系方式,在此部分用户可以点击其上的“修改”按钮来修改用户的信息并重新保存。
付款方式模块:用户确认购买商品后需选择一种付款方式,这里提供三种付款方式:cash payment(现金付款方式);post payment(邮局付款方式);amount remit(汇款方式)。
商品购物清单模块:该模块详细罗列了用户购物车里的商品,包括商品的数量,价格,小计,总计等信息,在这里用户还可以最后一次确认自己所选择购买的商品,如若无误,则可点击提交按钮。订单模块用例图如图3-5所示
4系统设计
对需求进行了分析以后,接下来对系统的整体架构进行设计。目的是为了使用户更容易理解整个系统的操作。
4.1系统架构设计
整个应用程序遵循多层的架构模式,从上到下依次为视图层、控制层、模型层、持久化层和数据库层。
各层次之间的依赖关系应该是自顶向下的,即上层依赖下层,而下层不应对上层有依赖或尽量减少对上层的依赖。
4.2业务实体设计
系统的业务实体在内存中表现为实体域对象,在数据库中表现为关系数据,实体业务实体包括以下内容。
(1)设计域模型,创建域模型实体对象。
(2)设计关系数据模型。
(3)创建映射文件。
网上商品购物系统中有以下的业务实体:用户、用户信息、产品、产品种类、订单、订单条目、订单状态、付款方式。
产品和产品种类:一种产品种类对应多个产品,一个产品只对应一种产品种类,他们之间是一对多的关系。
产品和订单条目:一个订单条目对应多个产品,一种产品只对应订单里的一个条目,他们之间是一对多的关系。
订单和订单条目:一个定单可以对应多条订单条目,一条订单条目只对应一个个订单,他们之间是一对多的关系。
订单状态和订单:一个订单状态可以对应多个订单,而一个订单只能对应一种订单状态,他们之间是一对多的关系。
订单与用户和付款方式:多个订单可以对应一个用户,一个用户可以选择多种付款方式,订单与用户之间是多对一的关系,用户与付款方式之间是一对多的关系。
用户与用户信息:一个用户只能对应一种信息,一种信息也只对应着一个用户,用户与用户信息之间是一一对应的。
4.3业务逻辑设计
在系统中,应用的持久化层采用Hibernate做中间件,并使用了DAO设计模式实现数据层的访问。DAO模式是J2EE核心模式中的一种,其主要目的就是在业务核心方法和具体数据源之间再增加一层,用这一层来连接业务方法和数据源,这样就实现了两者的解耦,如图4-2所示。
数据源是多样化的,可能是XML或者是关系数据库。关系数据库有不同的产品,如MySQL或者Oracle。通过使用DAO模式,业务核心部分就不用关心数据层是如何实现数据库操作。
5 数据库设计
数据库设计是系统开发过程中的一个重要环节,它是连接底层代码和界面之间数据传递的枢纽,具体可以分为两个部分:一是数据库的连接,一是建表。
5.1 数据库连接脚本
数据库在安装好后只能说是成功了一半,要想使数据库能够存储数据并可以从外面调用数据库中的数据,则数据库的成功连接也是至关重要的。在创建数据库表之前,首先要创建一个数据库并连接。本系统使用的数据库是MySQL,数据库名为biyesheji。数据库连接的XML代码如下:
<hibernate-configuration>
<session-factory>
<property name="show_sql">true</property>
<property name="connection.isolation">2</property>
<property name="hbm2ddl.auto">update</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://127.0.0.1:3306/biyesheji</property>
<property name="connection.username">root</property>
<property name="connection.password">panmin</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="myeclipse.connection.profile">ora20</property>
</session-factory>
</hibernate-configuration>
5.2 设计表结构
在系统中包含用户表user、用户信息表contactinfo、产品表product、产品种类表category、订单表orders、订单条目表ordersLine、订单状态表orderStatus、付款方式表payway等八个表,下面分别介绍。
(1)用户表User
表User用来保存用户的信息。结构如表5-2所示。
表 5-2 表user的结构
编号 | 名称 | 字段 | 数据类型 | 说明 |
1 | 用户名 | Userid | long | 主键 |
2 | 密码 | Password | varchar(20) |
(2)用户信息表ContactInfo
表ContactInfo用来存储用户的详细信息。结构如图表5-3所示。
表5-3表contactinfo的结构
编号 | 名称 | 字段 | 数据类型 | 说明 | |
1 | 地址 | Street1 | varchar(20) | ||
2 | 省份 | Province | Varchar(10) | ||
3 | 城市 | City | Varchar(10) | ||
4 | 邮编 | Zip | Varchar(10) | ||
5 | 邮箱 | varchar(20) | |||
6 | 家庭电话 | Homephone | varchar(20) | ||
7 | 移动电话 | Cellphone | varchar(20) |
(3)产品表product
表product用来保存产品的详细信息,结构如表5-4所示。
表 5-4 表Product的结构
编号 | 名称 | 字段 | 数据类型 | 说明 |
1 | 产品号 | Productid | long | 主键 |
2 | 产品名称 | Pname | Varchar(10) | |
3 | 产品说明 | pdescription | Varchar(1000) | |
4 | 基本价格 | Baseprice | Number(20) | |
5 | 描述 | Images | Varchar(20) |
(4)产品种类表Category
表Category用来保存产品种类信息,结构如表5-5所示:
表5-5 表category的结构
编号 | 名称 | 字段 | 数据类型 | 说明 |
1 | 种类号 | Categoryid | long | 主键 |
2 | 种类名称 | Cname | varchar(30) | |
3 | 种类描述 | Cdecription | Varchar(100) |
(5)订单表orders
表Orders用来保存订单的相关信息,结构如表5-6所示。
表 5-6 表Orders的结构
编号 | 名称 | 字段 | 数据类型 | 说明 |
1 | 订单号 | Ordersid | long | 主键 |
2 | 订单名称 | Oname | varchar(20) | |
3 | 订单花费 | Ocost | Number(20) |
(6)订单条目表Ordersline
表Ordersline用来保存订单的条目信息,结构如表5-7所示。
表 5-7 表Ordersline的结构
编号 | 名称 | 字段 | 数据类型 | 说明 |
1 | 订单条目号 | Orderslineid | Long | 主键 |
2 | 数目 | Amount | Number(10) |
(7)订单状态表Orderstatus
表Orderstatus用来保存订单状态信息,结构如表5-8所示。
表 5-8 表Orderstatus的结构
编号 | 名称 | 字段 | 数据类型 | 说明 |
1 | 订单号 | Orderstatusid | long | 主键 |
2 | 订单名称 | Osname | Varcher(10) | |
3 | 订单描述 | Osdescription | Varcher(50) |
(8)付款方式表PayWay
表PayWay用来保用户的付款信息,结构如表5-9所示。
表 5-9 表PayWay的结构
编号 | 名称 | 字段 | 数据类型 | 说明 |
1 | 付款方式号 | PayWayid | Long | 主键 |
2 | 付款方式 | style | Varchar(10) |
5.3 数据库中建表
至此,已经确定了简单数据库的相关信息。下面就该在数据库中建立所需要的表了,建表主要代码如下:
/*八个子表 */
<mapping resource="cn/edu/aust/entity/User.hbm.xml"/>
<mapping resource="cn/edu/aust/entity/ContactInfo.hbm.xml"/>
<mapping resource="cn/edu/aust/entity/Orders.hbm.xml"/>
<mapping resource="cn/edu/aust/entity/PayWay.hbm.xml"/>
<mapping resource="cn/edu/aust/entity/Product.hbm.xml"/>
<mapping resource="cn/edu/aust/entity/OrderLine.hbm.xml"/>
<mapping resource="cn/edu/aust/entity/OrderStatus.hbm.xml"/>
<mapping resource="cn/edu/aust/entity/Category.hbm.xml"/>
该系统中,我使用的是自动建表功能,代码中通过映射共建立了八个表格,其中每个<mapping resource=""/>对应了相应的表格。向一些对应表中添加数据如下代码所示:
/*向商品种类表(category)中插入数据*/
insert into category(cname,cdescription) values('1','图书类');
insert into category(cname,cdescription) values('2','日用品类');
insert into category(cname,cdescription) values('3','饮料类');
insert into category(cname,cdescription) values('4','水果类');
/*向产品信息表(product)中插入数据*/
insert into product(pname,pdescription,baseprice,cgory) values ('book1','This book which teach you English',20.0,1);
insert into product(pname,pdescription,baseprice,cgory) values ('book2','The book is a good book which to teach you many things',18.0,1);
insert into product(pname,pdescription,baseprice,cgory) values ('book3','The book which is about math',25.0,1);
insert into product(pname,pdescription,baseprice,cgory) values ('book4','The book which is about chinaese',25.0,1);
insert into product(pname,pdescription,baseprice,cgory) values ('fruit1','Which called apple',5.0,4);
insert into product(pname,pdescription,baseprice,cgory) values ('fruit2','Which called banana',3.0,4);
insert into product(pname,pdescription,baseprice,cgory) values ('fruit3','Which called orange',6.0,4);
insert into product(pname,pdescription,baseprice,cgory) values ('shopping1','This is a cup',10.0,2);
insert into product(pname,pdescription,baseprice,cgory) values ('shopping2','This is a desk',30.0,2);
insert into product(pname,pdescription,baseprice,cgory) values ('shopping3','This is a coat',100.0,2);
insert into product(pname,pdescription,baseprice,cgory) values ('drinking1','The water',2.0,3);
insert into product(pname,pdescription,baseprice,cgory) values ('drinking2','The tea',50.0,3);
insert into product(pname,pdescription,baseprice,cgory) values ('dinking3','The coffie',10.0,3);
/*向付款方式表(payway)中插入数据*/
insert into payway(paywayid,paystyle) values ('1','cash payment');
insert into payway(paywayid,paystyle) values ('2','post payment');
insert into payway(paywayid,paystyle) values ('3','amount remit');
6 详细设计
6.1 基本组件
该系统中基本组件包括控制器组件和视图组件。
6.1.1 控制器组件
控制器组件负责接收用户请求、更新模型,以及选择合适的视图组件返回给用户。控制器组件有助于分离模型层和视图层,有了这种分离,就可以在同一个模型的基础上开发多种类型的视图,主要包括:
(1)ActionServlet组件——充当该组件的中央控制器
(2)ActionInitListener组件——监听器,监听子应用模块的请求
(3)Action组件——负责处理一些具体的业务
6.1.2 视图组件
视图组件的作用是为客户提供动态的网页。该系统中的视图主要由JSP组件构成,还可以包括以下组件:
(1)HTML文档
(2)JSP客户化标签
(3)JavaScript脚本和样式页stylesheet
6.2 通用功能实现
在系统中有些功能是所有模块公用的,比如Hibernate的Session操作、抛出的异常处理操作ServiceException,这里把他们实现为通用功能以便其他模块也能使用。
6.2.1 Hibernate的Session操作
系统中Hibernate的Session操作是通过HibernateSessionFactory辅助类实现的,它提供了统一的Session获得的方法,系统中其他部分获得Hibernate的Session都是通过HibernateSessionFactory.getSession()方法统一获得的。该方法存储在系统中的cn.aust.edu包中的HbnUtil类中。
6.2.2事务的实现
系统中事务是通过编码式方式实现的,原理如下图6-1所示。
从业务方法中传递session给数据访问DAO对象,控制事务的回滚与提交。
6.3 功能模块实现
6.3.1用户注册
注册组件关系如下图6-2所示:
视图层register.jsp页面收集注册信息,然后将注册信息传递给UserAction,UserAction调用模型层业务方法UserAction.register()注册。如果成功,则页面转到registerSuccess.jsp页面,显示注册成功信息,否则转到registerError.jsp页面。
点击“返回”链接,将返回上层页面。创建用户信息相关代码如下所示:
private User createUser(HttpServletRequest request){
User user=new User();
user.setUserid(request.getParameter("userid"));
user.setPassword(request.getParameter("password"));
ContactInfo info=new ContactInfo();
info.setProvince(request.getParameter("province"));
info.setCity(request.getParameter("city"));
info.setStreet1(request.getParameter("street1"));
info.setStreet2(request.getParameter("street2"));
info.setZip(request.getParameter("zip"));
info.setHomePhoto(request.getParameter("homePhone"));
info.setOfficePhoto(request.getParameter("officePhone"));
info.setCellPhoto(request.getParameter("cellPhone"));
info.setEmail(request.getParameter("email"));
user.setInfo(info);
info.setUser(user);
return user;
}
用户注册信息页面截图如图
6.3.2 注册成功
注册成功与失败时都会返回一个提示页面,当注册成功时将返回注册成功页面,注册成功页面截图如图6-4所示:
6.3.3 用户登陆
注册页面成功后,注册的信息将被存入数据库中,用户也将返回登陆界面重新登陆,登陆时系统会判别该用户名是否已经在数据库中存在,若不存在,则登陆失败,若存在,则系统需要判断该用户名与用户输入的密码与数据库里存入的是否一致,当一致时,点击登陆才会显示登陆成功的页面,用户登录时相关代码如下:
public String login(HttpServletRequest request,HttpServletResponse response)
throws ServiceException{
try{
String uid=request.getParameter("userid");
User user=userService.findById(uid);
if(user!=null&&
user.getPassword().equals(request.getParameter("password"))){
//如果用户已经存在
HttpSession session=request.getSession();
session.setAttribute("user", user);
session.setAttribute("shopcart", new ShopCart());
return "/user/success.jsp";
}else{
//用户名不存在时返回的页面
return "/error.jsp";
}
}catch(Exception e){
e.printStackTrace();
throw new ServiceException(e);
}
用户登录页面截图如图6-5所示:
6.3.4用户信息
用户登录成功后注册的信息将全部存入数据库中,在界面的上面一栏里有一个用户管理标签,点击该按钮用户将进入用户管理界面来查询用户的全部信息,在该页面下方有一个修改按钮,用户在查看自己信息时可以修改自己的全部信息,修改完毕点击下方的修改按钮后该用户的详细信息将会被重新保存,数据库内该用户的相应信息也将会被改变,但有一点需要注意,用户可以修改其任何信息但是不可以修改其用户名。获取用户相关信息代码如下:
public String userinfoAction(HttpServletRequest request,
HttpServletResponse response){
User user=new User();
HttpSession session=request.getSession();
User u=(User)session.getAttribute("user");
user.setUserid(u.getUserid());
user.setOrderid(u.getOrderid());
user.setPassword(request.getParameter("password"));
ContactInfo info=new ContactInfo();
info.setContactinfoid(u.getInfo().getContactinfoid());
info.setProvince(request.getParameter("province"));
info.setCity(request.getParameter("city"));
info.setStreet1(request.getParameter("street1"));
info.setStreet2(request.getParameter("street2"));
info.setZip(request.getParameter("zip"));
info.setHomePhoto(request.getParameter("homePhone"));
info.setOfficePhoto(request.getParameter("officePhone"));
info.setEmail(request.getParameter("email"));
user.setInfo(info);
info.setUser(user);
try{
userService.modify(user);
session.setAttribute("user", user);
session.setAttribute("info", info);
}catch(Exception e){
e.printStackTrace();
}
return "/user/userinfo.jsp";
}
用户信息界面截图如图6-6所示:
6.3.5 商品展示
用户登录成功后会出现一个页面,提示用户“登录成功,点击进入商品展示页面”,点击该链接后就进入了商品页面,在此页面里可以查看各种类型的商品的详细信息,每种商品后都有一个对应的“加入购物车”图标,点击后将会将商品加入系统分配给用户的一个虚拟购物车shopcart中,此时页面将转入购物车的页面,将商品添加至购物车内相关代码如下:
public String addToCart(HttpServletRequest request,
HttpServletResponse response){
ShopCart cart=(ShopCart)request.getSession().getAttribute("shopcart");
Product product=null;
String paywayid=request.getParameter("paywayid");
long productid=Long.parseLong(paywayid);
try{
product=productService.findById(productid);
cart.addProduct(product,1);
}catch(ServiceException e){
e.printStackTrace();
}
return "/shopcart.jsp";
}
商品展示列表截图如图6-7所示:
6.3.6 商品详细列表与购物清单
图6-8 商品清单列表截图
如上截图6-8所示,商品界面上点击每种商品名称后可以查询该种商品的详细信息,商品后面对应的“加入购物车”字样可以进入购物清单界面,购物清单界面包括产品的名称,数量,价格,每种商品的合计,与总的商品的合计,在这个界面用户可以通过每种商品后的一个“取消”按钮和一个“保存修改”按钮,来改变用户对商品的需要量,取消可取消购买该种商品,用户也可自己手动修改需要购买的商品的数量然后点击“保存修改”,按钮,则系统会自动改变清单上的商品选择数目,清单列表下的“提交清单”按钮时指用户确认了清单上锁罗列商品的内容后将此清单提交至更上一层进行操作,用户可通过“继续购物”按钮重新进入商品展示区选购商品,点击“清空购物车”可清空购物车里的所有商品。
6.3.7确认订单
用户在提交完订单后页面会转入确认订单界面,该界面里共分为三个模块,
第一模块是用户信息模块,这里会显示此次登录的用户的一些详细信息以确认该用户的身份与联系方式,用户也可以在这里再一次修改相关信息并保存;
第二模块是付款方式模块,这里会让用户选择选用哪种方式付款;
第三模块是商品购物清单模块,显示了用户购物的清单列表,此处用户也可以再重新修改购物清单,
订单模块的相关代码如下:
public String confirmOrder(HttpServletRequest request,
HttpServletResponse response,ServletContext context){
List<OrderStatus> os=(List<OrderStatus>)context.getAttribute("ORDERSTATUS");
/*付款方式*/
List<PayWay> pw=(List<PayWay>)context.getAttribute("PAYWAY");
long paywayid=Long.parseLong(request.getParameter("payway"));
User user=(User)request.getSession().getAttribute("user");
/*订单*/
Orders order=new Orders();
ShopCart cart=(ShopCart)request.getSession().getAttribute("shopcart");
List<CartItem> item=cart.getItem();
/*获取产品id*/
for(int i=0;i<item.size();i++){
OrderLine line=new OrderLine();
CartItem ci=item.get(i);
line.setAmount((long)ci.getAmount());
line.setProduct(ci.getProduct());
order.addOrderLine(line);
line.setOrder(order);
}
order.setOcost(""+cart.getTotal());
order.setUser(user);
for(int j=0;j<pw.size();j++){
PayWay payway=pw.get(j);
if(paywayid==payway.getPaywayid()){
order.setWay(payway);
break;
}
}
order.setStatus(os.get(0));
Date data=new Date();
order.setOname(user.getUserid()+data.toString());
try{
orderService.add(order);
}catch(Exception e){
e.printStackTrace();
}
cart.reset();
return "/user/orderinfo.do?orderid="+order.getOrderid();
}
确认订单截图如图6-9所示:
6.3.8 订单明细
在上层的确认订单页面,当用户都确认信息无误后,可点击“提交订单”按钮将该订单提交至最上层“订单明细”层,订单明细层与确认订单层基本类似,只是该页面显示的是最终的确认页面,用户将无法修改任何信息。订单明细层页面截图如图6-10所示:
6.3.9 订单处理状态
当用户选购了一些商品后,可点击页面上的“订单”按钮来查看当前订单的处理状态,订单处理状态截图如图6-11所示:
该系统的最上一排按钮都与各自的相关信息对应着,用户可通过这些按钮快速查询相关信息,如用户可以点击“退出”按钮直接返回到登陆界面,可以点击首页在未登录的情况下就查看商品的展示信息,在点击“购物车”按钮时须注意,当用户所选择的商品还未提交时,点击该按钮可以查看到购物车中的商品数目以及总共金额等,但当订单提交后,购物车同时将清空里面的数据,此时再查看购物车时已经没有可显示数据了。
总结
通对此次对毕业设计中基于JSP的设备管理与查询系统的设计与实现,我获益匪浅,感受也颇深:一直认为编程是一个很复杂的动词,难度颇深,所以对代码一直存着敬畏的态度,毕业设计时因为需要自己用代码做出一个系统所以认真的从最底层代码开始写起,通过这我获得了许多平时上课时所学不到的项目设计与开发的方法和经验,也理解了很多关于编程方面的知识:
科学的开发过程是目标系统开发成功的关键,引用软件工程的方法,一个项目的开发要从可行性研究开始,其间经过可行性研究,需求分析,总结设计,详细设计,编码,测试等主要设计阶段。同时对每一阶段都要进行认真的设计及周密的评审,目标系统才能完成。四年的大学时间,说长不长,说短也不短,能让好好学的人学到很多的知识,也能让不好好学的人虚度很多年华,做这个毕业设计花费了我数周时间,但完成该系统并不是我一个人的功劳,这其间有我们班好几位同学的努力,由于时间的仓促,以及在校外的不方便,我做的系统比较简单,并且有一些地方也有待于进一步的完善。例如产品的分页方面,以及后台管理中管理员的这一管理功能。
通过这次毕业设计,我明白了许多道理,做任何事情之前都要有个总体规划,不能盲目的想当然去,那样只会浪费时间与精力,并且收获也很少。做的过程中也要不断总结与改进,编程不同于其他,一个小小的不注意的错误就能让程序员调试半天,因此编程过程中一定不能焦躁,另外,一个整体系统底层的数据库部分实现是很重要的,要最先实现并测试成功后再继续一层层往上开发,因为JAVA语言面向对象的特点,底层语言被封装后,越是上层的页面语言与下面底层语言的联系就越少,这样也方便了程序员后来对系统所做的功能的扩展与更新。团队间组员之间的协调与配合也起着相当大的作用。
没有付出就绝对没有收获,一个非常简单的道理,在毕业设计中更是非常明显,在需求分析中我遇到的困难不是很多,而在后期的编码与实现中由于自己的专业知识掌握的不够扎实,所以遇到了很多问题,但都一一向老师与同学请教并解决了。
通过本次毕业设计,我学会了如何运用计算机专业的J2EE语言来开发一个较为复杂的软件系统。我进一步认识了人机界面设计的内部结构与基本原理、方法和步骤。对软件的编写有了较深入的了解。
参考文献
[1]萨师煊.数据库系统概论[M].北京:高等教育出版社.2006
[2]孔长征.Dreamweaver短期培训教程[M].北京:北京电子希望出版社.2002.
[3]张晓晖.XML手册(第四版)[M].北京:电子工业出版社,2003.
[4]沃尔什著、李化等译.J2EE 1.4基础教程[M].北京: 清华大学出版社,2004.
[5]李华庵,李水根,郭英奎等.精通Java中间件编程[M].中国水利水电出版社,2003.
[6]杨易.JSP网络编程技术与实例[M].人民邮电出版社,2005.
[7]郭光等.DreamweaverMX2004完全征服手册[M].北京:中国青年出版社.2004
[8]Marty Hall,Larry Brown.Servlet与JSP核心编程[M].清华大学出版社,2004.
[9][美]Walter Savitch.Absolute Java[M].北京:电子工业出版社.2005.
[10]飞思科技产品研发中心.JSP数据库开发实例精粹.北京:电子工业出版社,2005.
[11]Inderjeet Singh, Beth Steams, Mark Johnson, and the Enterprise Team.Addison Wesley-Designing Enterprise Applications with the J2EE Platform[M].Sun Microsystems,In c, 2002.
[12]Ray Lai. J2EE'm Platform Web Services[M]. Prentice Hall PTR, 2003.8.
[13]Deepak Alur, John Crupi, Dan Malks. Core J2EETM Paterns: Best Practices and Design Strategies, Second Edition[R]. Prentice HallPTR, 2003.
[14]Eric Armstrong,JenniferBall,StephanieBodof.TheJ2EETM1 .4 Tutorial[M].Sun Microsystems,In c, 2004.
[15]Rod Johnson.Expert One-on-One J2EED esignand Development[J].WroxPress, 2003.
1、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“文章版权申述”(推荐),也可以打举报电话:18735597641(电话支持时间:9:00-18:30)。
2、网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
3、本站所有内容均由合作方或网友投稿,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务。
原创文章,作者:写文章小能手,如若转载,请注明出处:https://www.447766.cn/chachong/1043.html,