J2EE 课程设计项目《蓝梦集团客户关系管理系统(CRM)系统》实现项目中的数据库连接池功能及测试

合集下载

基于J2EE S2SH架构的客户关系管理(CRM)系统概要设计说明书

基于J2EE S2SH架构的客户关系管理(CRM)系统概要设计说明书

基于J2EE S2SH架构的客户关系管理(CRM)系统概要设计说明书1.1.1引言1、项目背景国内著名的蓝梦商业集团(BlueDream Business Group),为了能够在国内迅速地开展连锁加盟机构以扩大其商业销售渠道,急需开发一套适合本企业经营和管理要求的客户关系管理(CRM,Customer Relationship Management)系统。

待开发的软件系统为蓝梦集团CRM系统客户资料信息分析子系统。

本项目的提出者为蓝梦集团高层管理部及系统开发部,开发者为蓝梦大学软件学院J2EE课程实训项目开发组,用户为蓝梦集团员工。

2、编写目的本系统的概要设计说明书的编写目的是对项目进行总体设计,在需求明确定义系统各功能模块的基础上设计各模块间的关系,明确个模块间的接口,进行系统开发的分工,进一步明确软件系统各功能模块是如何实现的,为后期的详细设计以及系统实现做准备,同时也是系统测试的依据。

具体的目的有:(1)为项目经理为开发人员分配任务和控制项目进度提供依据;(2)为编码人员提供类的编写以及接口的设计依据;(3)为技术总工设计系统框架提供依据;(4)为数据库设计人员提供依据;(5)为测试人员编写系统测试用例提供依据。

(6)为修改、维护提供条件;(7)为阶段性和总结性的质量验证和确认提供依据;3、预期读者本概要设计说明书的预期读者为项目开发组全体人员,尤其是编码人员以及验收人员,将来还会面对系统的维护与升级人员。

4、术语定义(1)CRMCustomer Relationship Management,客户关系管理系统。

本文档中“用户”即指本系统的使用者,“客户”则指正大商业集团的客户。

(2)抱怨业务指如果客户在消费后对本次消费的产品或服务有意见,需要客户服务部门的人员进行处理。

抱怨业务的处理工作由户服务部门的人员完成。

(3)客户级别根据客户的消费总金额,按照一定的计算和判定方法,得出的客户级别。

《J2EE系统架构和程序设计》课程设计实训项目——蓝梦网上商店系统概要设计说明书

《J2EE系统架构和程序设计》课程设计实训项目——蓝梦网上商店系统概要设计说明书

《J2EE系统架构和程序设计》课程设计实训项目——蓝梦网上商店系统概要设计说明书1.1.1编写目的将软件系统需求转换为未来系统的设计,逐步开发强壮的系统构架,并使设计适合于实施环境,为提高性能而进行设计和为程序开发步骤配置提供指导。

因此,本设计说明书作为《蓝梦网上商店系统》项目开发的依据和规范,并作为开发任务及目标依据和规范系统开发操作,《蓝梦网上商店系统》网站的开发内容及达到的各项功能及性能指标以此设计说明书为准。

本设计文档描述了整个系统的架构以及业务逻辑实现时应遵循的步骤,文档的预期读者主要包括:项目管理人员、系统设计人员与程序编写人员、测试人员、用户手册编写人员、客户、系统维护人员和项目评审人员等。

1.1.2系统总体设计1、系统主要的特色(1)系统基于J2EE架构设计将界面表示、业务务逻辑和数据层相对分离,使系统结构更加合理;采用成熟的J2EE 架构,使系统具有较好的维护性。

(2)采用中间件的负载平衡、动态伸缩等功能为关键业务建立了最佳的运行环境,为应用提供了充分的扩展余地。

(3)以Browser(浏览器)为核心的客户端程序实现了真正意义上的“零维护”,从而使业务软件的更新、发布和维护更为容易。

(4)系统的外部接口采用XML数据交换格式降低系统间偶合度,确保数据交换与具体应用平台无关。

(5)系统采用个性化的权限管理和界面显示具体的用户只看到整个系统的一部分,即只有用户具有操作权限的模块,对该用户才是可见的,不具有操作权限的部分是不可见,因此,每个用户只看到整个界面树的一个子集,系统菜单动态生成。

2、系统运行环境(1)软件环境(2)硬件环境(3)开发环境1)服务器软件环境2)服务器硬件环境3)开发机器软件环境4)开发机器硬件环境3、系统功能层次结构4、系统中所应用的关键技术与算法(1)本系统采用JSP+JavaBeans实现JSP 即Java Server Pages,它是Serverlet的直接扩展,JSP框架的目标是将应用逻辑同表示分离,它旨在允许非JA V A开发人员用下列方式设计JSP 页面:1)HTML标记。

《J2EE系统架构和程序设计》课程设计实训项目——蓝梦集团网上求职招聘系统项目系统设计评审总结报告说明书

《J2EE系统架构和程序设计》课程设计实训项目——蓝梦集团网上求职招聘系统项目系统设计评审总结报告说明书

《J2EE系统架构和程序设计》课程设计实训项目——蓝梦集团网上求职招聘系统项目系统设计评审总结报告说明书1.1.1系统设计评审会议记录1、会议时间XX月XX日2、会议人员张三(组长),李四(组员),王五(组员)3、会议地点教学楼4064、会议目的本次设计和开发评审会议的目的是小组全体人员对软件设计的技术文档进行评价,以判断确定设计和开发能否实现软件产品预先定义的规格,同时通过评审标识出与规格和标准的偏差,它向管理部门提供充足的证据以证明:1)设计是否符合了其规格要求;2)设计是否满足相关法律、法规以及企业标准的要求;3)软件产品的更改得到了恰当地实施;4)软件产品的更改只对那些规格发生了更改的系统区域有影响,没有引入新的问题5、会议讨论范围会议讨论对软件设计和开发的原始设计以及设计与开发的更改进行评审。

6、角色和职责(1)主审人主审人是技术评审的指挥人员,负责评审活动的组织、结论、书面报告和问题跟踪,主审人由张三同志承担。

(2)评审专家评审专家应由满足要求的技术人员担任,负责向评审组成员提出自己的评审意见和建议。

评审专家是由李四、王五同志承担。

(3)质量保证人员由杨六同志承担。

(4)会议记录员由赵七同志承担。

(5)顾客和用户代表由章八、王九同志承担。

(6)相关领导和部门管理人员无。

7、评审时机在项目的详细设计文档出来后,由项目开发组长和技术总工共同组织本项目的设计评审会议,对项目的设计结果进一步理性地思考,对项目的设计结果(架构和类)进一步完善和重构,并考虑如何应用有关的设计模式(架构和编程实现等方面)优化系统的设计以最终达到系统的可扩展性、可维护性。

8、评审的基本要求(1)项目的设计评审会议在本次执行,不排除在项目开发过程中出现变动,再次召开评审会议的可能。

(2)评审结论应明确;(3)评审资料应及时归档。

9、评审依据(1)立项说明书,软件需求规格说明书,软件概要设计文档和软件详细设计文档。

(2)软件设计文档国家标准GB8567—88 中的相关规定。

J2EE 课程设计实训项目——《蓝梦网上商城》——实现系统项目中的订单信息业务处理功能组件

J2EE 课程设计实训项目——《蓝梦网上商城》——实现系统项目中的订单信息业务处理功能组件

ServiceException{
boolean okOrNot=false;
okOrNot=orderInfoDAOServiceImple.insertOneOrderInfo(oneOrderInfoVO);
return okOrNot;
}
public boolean doDeleteOneOrderInfo(int orderID) throws ServiceException{
杨教授大学堂 精心创作的优秀程序员 职业提升必读系列资料
J2EE 课程设计实训项目——《蓝梦网上商城》——实现系统项目中的订 单信息业务处理功能组件
1.1.1 Spring 业务处理层的实现----针对用户 Order 订单信息业务功能处理 1、 订单信息管理的接口 (1)接口名称为 OrderInfoManageInterface,包名称为 com.px1987.webshop.business.order
boolean okOrNot=false;
okOrNot=orderInfoDAOServiceImple.deleteOneOrderInfo(orderID);
return okOrNot;
}
public ArrayList doGetAllOrderInfo() throws ServiceException{
(2)设计该接口 package com.px1987.webshop.business.order; import java.util.*; import com.px1987.webshop.business.vobject.*; import com.px1987.webshop.service.*; public interface OrderInfoManageInterface{

J2EE课程设计实训教学示例项目《蓝梦教育集团即时通讯系统》(仿腾讯QQ)数据库设计说明书

J2EE课程设计实训教学示例项目《蓝梦教育集团即时通讯系统》(仿腾讯QQ)数据库设计说明书

J2EE课程设计实训教学示例项目《蓝梦教育集团即时通讯系统》(仿腾讯QQ)数据库设计说明书蓝梦教育集团IM(即时通讯)系统——数据库设计说明书历史记录目录第一章引言 (3)1.1编写目的 (3)1.2 背景 (3)1.3 定义 (3)1.4 参考资料 (3)第二章外部设计 (4)2.1标识符和状态 (4)2.2使用它的程序 (4)2.3约定 (5)2.4专门指导 (5)2.5支持软件 (5)第三章结构设计 (6)3.1概念结构设计 (6)3.2 逻辑结构设计 (7)3.2.1 UserLogin (客户登录) (7)3.2.2 User(客户基本信息表) (7)3.2.3 UserToGroup (查出客户所在的群) (8)3.2.4 Group (群的基本信息表) (8)3.2.5 GroupToUser (记录客户离线的时间) (8)3.2.6 GroupRecord (群的聊天记录表) (9)3.2.7 ChatLogs (用户的离线聊天记录) (9)3.2.8 DynamicTable (动态表) (9)第四章运用设计 (11)4.1数据字典设计 (11)4.1.1 UserLogin (客户登录) (11)4.1.2 User(客户基本信息表) (11)蓝梦教育集团IM(即时通讯)系统——数据库设计说明书4.1.3 UserToGroup (查出客户所在的群) (11)4.1.4 Group (群的基本信息表) (12)4.1.5 GroupToUser (记录客户离线的时间) (12)4.1.6 GroupRecord (群的聊天记录表) (12)4.1.7 ChatLogs (用户的离线聊天记录) (13)4.1.8 DynamicTable (动态表) (13)4.2安全保密设计 (13)第一章引言1.1编写目的本数据库设计说明书的编写目的是详细描述蓝梦集团即时聊天系统的数据库结构与设计,对数据库表的组成、关键字等进行详细描述,以对以后的系统建设起到指导和约束作用,并为之后的功能实现作准备。

基于SSH2架构的课程设计实训教学示例项目——《客户关系管理CRM系统》——系统简介和项目立项

基于SSH2架构的课程设计实训教学示例项目——《客户关系管理CRM系统》——系统简介和项目立项

基于SSH2架构的课程设计实训教学示例项目——《客户关系管理CRM系统》——系统简介和项目立项1.1.1蓝梦集团客户关系管理系统简介1、客户关系管理系统(CRM,Customer Relationship Management)(1)CRM最初是由Gartner Group相关人员提出的,就如同它提出ERP一样而Gartner Group作为全球比较权威的研究组织,对CRM给出的定义如下:客户关系管理(CRM)是代表增进赢利、收入和客户满意度而设计的企业范围的商业战略。

企业需要解决如何更好地定位目标客户、采集客户的需求、分析客户流失的具体原因。

但作为服务型的企业,ERP之类的系统是不适合的。

(2)盖洛普(Gallup)将CRM定义为:策略+管理+IT这个简单的公式,却又蕴涵着复杂的定义。

三个方面各自不同,却又缺一不可。

其中的“策略”其实是指战略,而管理是指“战术”,IT则是指“工具”,与Gartner Group的定义是相通的,只不过更加简洁。

(3)CRM是一个获取、保持和增加可获利客户的过程CRM首先是一套先进的管理思想及技术手段,它通过将人力资源、业务流程与专业技术进行有效的整合,最终为企业涉及到客户或消费者的各个领域提供了完美的集成,使得企业可以以更低的成本、更高的效率满足客户的需求。

2、从产品中心制到客户中心制的演变(1)盖洛普认为新型的企业与客户的关系应当是以“客户为中心”的互动关系通过满足客户需求提高客户满意度来吸引和留住客户,从而建立和保持企业的竞争优势。

这其实就是从“产品中心制”到“客户中心制”演变的体现。

(2)从产品中心制到客户中心制的演变示图CRM系统强调建立一个以客户为中心的现代企业,以客户价值来判定市场的需求,满足了将企业的战略从以产品为中心转向以客户为中心的企业需求。

应用CRM最终达到提高企业客户的满意度,减少客户的流失。

3、企业为什么要应用CRM系统(1)企业需要维系与客户的关系企业要想生存发展,就必须与之息息相关的客户建立起良好的互动关系,不断地发展新的客户,并以企业高质量的产品、优质的服务、良好的资信吸引新的客户;经常维系与老客户的关系,以规范的客户管理方式、温馨的客户关怀、高效的客户服务来提升老客户的忠诚度。

J2EE 课程设计项目——蓝梦商业集团客户关系管理(CRM)系统需求定义

J2EE 课程设计项目——蓝梦商业集团客户关系管理(CRM)系统需求定义

J2EE 课程设计项目——蓝梦商业集团客户关系管理(CRM)系统需求定义1.1.1CRM系统的基本需求1、蓝梦商业集团CRM系统中的部分子系统的部分功能性需求本系统不仅提供有客户管理、产品管理、订单管理和合同管理,也还包括有市场管理、销售管理、服务管理等方面的扩展功能。

下图为本系统中的主要功能模块和子功能项目说明:其中的客户信息管理主要记录客户基本信息、客户联系人、交往记录、客户设置和竞争产品等方面的信息,客户信息是企业利润的部分来源。

由于客户信息自身的特点,进行科学的客户信息管理是信息加工、信息挖掘、信息提取和再利用的需要。

通过对客户信息的有效管理,可以最终实现客户信息利用的最大化和最优化。

产品管理中的产品信息主要:包括产品名称、价目表、产品供应商、产地和产品分类等信息,产品模块主要管理本公司所销售或生产的产品档案信息,使用户可以清楚的看到产品的分布、用户可以快速的通过产品分类找到产品。

而订单管理中的订单信息记录了所需产品、客户方面的详细信息,订单管理是客户关系管理的有效延伸,能更好的把个性化、差异化服务有机的融入到客户管理中去,能推动经济效益和客户满意度的提升。

企业商业合同管理的完善是企业健康经营的一个重要标志,本系统中的合同管理将客户管理和产品管理也融合到合同管理中,真正体现优化企业资源的目的。

高效的合同管理不但提高了工作效率,也大大节约了办公成本,进一步提高企业服务和管理的质量,规范了合同管理工作,防范了经营风险,减少了因合同管理不当而造成的损失,为企业带来社会与经济双重的效益。

下面介绍主要的子系统的功能。

(1)销售信息管理和分析子系统销售管理系统主要用来处理与企业的销售活动相关的业务内容,比如与客户签订销售订单、发货、办理出库、退货、收取销售货款等,而且还可以处理应收款、预收款以及现收款等往来款业务。

通过销售订单的录入与变更,最终跟踪和管理销售情况。

在销售信息管理子系统中还包括有产品信息的管理,而产品信息管理是产品市场分析的基础,也是从不同侧面进行产品个性化分析的出发点。

J2EE Web组件课程设计实例项目——蓝梦集团CRM系统的首页面设计和实现实例(第1部分)

J2EE Web组件课程设计实例项目——蓝梦集团CRM系统的首页面设计和实现实例(第1部分)

1.1蓝梦集团CRM系统的首页面设计和实现实例(第1部分)1.1.1项目的原型系统及结构分析、素材1、/2、/3、保存/的首页4、保存/的首页5、在Dreamweaver工具中打开这些页面1.1.2蓝梦集团CRM系统的Web页面实现1、在Dreamweaver中构建本项目的Web站点(1)命名BlueDreamCRM、定位站点所在的目录(2)点击“保存”按钮2、在站点新建各个通用目录3、在本站点中添加系统的首页index.html——采用XHTML页面并且设置标题文字为“蓝梦集团客户关系系统首页”<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb18030" /><title>蓝梦集团客户关系系统首页</title><link href="css/indexStyle.css" rel="stylesheet" type="text/css" /></head><body>这是蓝梦集团客户关系系统首页的测试内容</body></html>3、为该首页添加一个CSS文件(1)建立全局共用CSS文件commonStyle.css(2)再新建首页面的CSS文件indexStyle.css(3)在indexStyle.css引用commonStyle.css文件@charset "gb18030";@import url("commonStyle.css");(4)将index.html与indexStyle.css相互连接<link href="css/indexStyle.css" rel="stylesheet" type="text/css" />4、添加通用共享的CSS项目——commonStyle.css文件中body {font-family: "宋体";font-size: 12px;margin: 0px 0px 0px 1%; /* 左边框留出1%的外边距*/ height: auto;width: 98%;font-style: normal;line-height: normal;font-weight: normal;background-color: #FFFFFF;}img {border -top-style: none;border -right- style: none;border -left- style: none;border -bottom- style: none}a {color: #0063dc;text-decoration: none;}a:hover {color: #f60;text-decoration: underline;}.clearFloat{clear:both;}* {margin: 0px;padding: 0px;}然后再测试页面5、熟悉CSS中的扩展属性(1)@import url ( url ) 媒体类型;指定导入的外部样式表及目标设备类型,此规则无默认值。

J2EE 课程设计实训项目——《蓝梦网上商城》——构建用户信息管理相关的数据访问服务组件(第1部分)

J2EE 课程设计实训项目——《蓝梦网上商城》——构建用户信息管理相关的数据访问服务组件(第1部分)

J2EE 课程设计实训项目——《蓝梦网上商城》——构建用户信息管理相关的数据访问服务组件(第1/3部分)1.1.1构建用户信息管理相关的数据访问服务组件实际开发实现时,是将DAO服务组件细分为几个不同的组件。

这样能够更好地体现“单一职责”的设计原则。

1、添加一个ServiceException异常类(1)类名称为ServiceException,包名称为com.px1987.webshop.service,基类为ng.Exception(2)编程该异常类package com.px1987.webshop.service;public class ServiceException extends Exception{public ServiceException(){}public ServiceException(String message){super(message);}public ServiceException(Throwable cause){super(cause);}public ServiceException(String message, Throwable cause){ super(message, cause);}}2、添加一个CartServiceException异常类(1)类名称为CartServiceException,包名称为com.px1987.webshop.service,基类为ng.Exception(2)编程该异常类package com.px1987.webshop.service;public class CartServiceException extends Exception{//该异常类型为后面的购物车提供服务public CartServiceException() {}public CartServiceException(String message) {super(message);}public CartServiceException(Throwable cause) {super(cause);}public CartServiceException(String message, Throwable cause) { super(message, cause);}}3、添加我们的业务处理层的业务实体类等------用户信息管理所涉及的业务实体组件类(1)基类名称为UserInfoBaseVO,包名称为com.px1987.webshop.business.vobject(2)在该类中提供下面的各个属性,并且为这些属性提供get/set方法private String id;private String userName;private String userPassWord;private Integer userType;private String aliaoName;private String passWordAsk;private String userImage;private String registerTime;private String passWordAnswer;private String userMail;private String userResume;private Integer type_User_Admin; //该成员主要是区分用户的类型-----注册用户(=1)还是管理员(=2)(3)最后产生出下面的状态package com.px1987.webshop.business.vobject;public class UserInfoBaseVO {// 下面的属性来自于UserInfoBasePO类private String id;private String userName;private String userPassWord;private Integer userType;private String aliaoName;private String passWordAsk;private String userImage;private String registerTime;private String passWordAnswer;private String userMail;private String userResume;private Integer type_User_Admin; //该成员主要是区分用户的类型-----注册用户(=1)还是管理员(=2)public UserInfoBaseVO(){id="";userName="";userPassWord="";userType=new Integer(1);aliaoName="";passWordAsk="";userImage="";registerTime="";passWordAnswer="";userMail="";userResume="";type_User_Admin=new Integer(1);}public String getAliaoName() {return aliaoName;}public void setAliaoName(String aliaoName) { this.aliaoName = aliaoName;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getPassWordAnswer() {return passWordAnswer;}public void setPassWordAnswer(String passWordAnswer) { this.passWordAnswer = passWordAnswer;}public String getPassWordAsk() {return passWordAsk;}public void setPassWordAsk(String passWordAsk) { this.passWordAsk = passWordAsk;}public String getRegisterTime() {return registerTime;}public void setRegisterTime(String registerTime) { this.registerTime = registerTime;}public String getUserImage() {return userImage;}public void setUserImage(String userImage) { erImage = userImage;}public String getUserMail() {return userMail;}public void setUserMail(String userMail) {erMail = userMail;}public String getUserName() {return userName;}public void setUserName(String userName) {erName = userName;}public String getUserPassWord() {return userPassWord;}public void setUserPassWord(String userPassWord) {erPassWord = userPassWord;}public String getUserResume() {return userResume;}public void setUserResume(String userResume) {erResume = userResume;}public Integer getUserType() {return userType;}public void setUserType(Integer userType) {erType = userType;}public Integer getType_User_Admin() {return type_User_Admin;}public void setType_User_Admin(Integer type_User_Admin) {this.type_User_Admin = type_User_Admin;}}(2)类名称为UserInfoVO,包名称为com.px1987.webshop.business.vobject,基类为前面的erInfoBaseVO(3)在该类中定义下面的属性成员//下面的属性来自于UserInfoBasePO类private int userSex;private String userBirthDay;private String userComeFrom;// 下面的属性来自于UserInfoPO类private Map contactMethod = new HashMap();private String userSign;private int emailVisible;private int acceptAdvise;// 下面的属性来自于AdminUserInfoPO类private String workUnit;private String studyHistory;private String studySchool;private String idCardNo;(4)为上面的各个属性提供get/set方法(5)最后为下面的状态package com.px1987.webshop.business.vobject; import java.util.*;public class UserInfoVO extends UserInfoBaseVO{ //下面的属性来自于UserInfoBasePO类private int userSex;private String userBirthDay;private String userComeFrom;// 下面的属性来自于UserInfoPO类private Map contactMethod = new HashMap();private String userSign;private int emailVisible;private int acceptAdvise;// 下面的属性来自于AdminUserInfoPO类private String workUnit;private String studyHistory;private String studySchool;private String idCardNo;public UserInfoVO(){super();userSex=1;userBirthDay="";userComeFrom="";userSign="";emailVisible=1;acceptAdvise=1;workUnit="";studyHistory="";studySchool="";idCardNo="";}public int getAcceptAdvise() {return acceptAdvise;}public void setAcceptAdvise(int acceptAdvise) { this.acceptAdvise = acceptAdvise;}public int getEmailVisible() {return emailVisible;}public void setEmailVisible(int emailVisible) { this.emailVisible = emailVisible;}public String getIdCardNo() {return idCardNo;}public void setIdCardNo(String idCardNo) { this.idCardNo = idCardNo;}public String getStudyHistory() {return studyHistory;}public void setStudyHistory(String studyHistory) { this.studyHistory = studyHistory;}public String getStudySchool() {return studySchool;}public void setStudySchool(String studySchool) { this.studySchool = studySchool;}public String getUserBirthDay() {return userBirthDay;}public void setUserBirthDay(String userBirthDay) { erBirthDay = userBirthDay;}public String getUserComeFrom() {return userComeFrom;}public void setUserComeFrom(String userComeFrom) { erComeFrom = userComeFrom;}public int getUserSex() {return userSex;}public void setUserSex(int userSex) {erSex = userSex;}public String getUserSign() {return userSign;}public void setUserSign(String userSign) {erSign = userSign;}public String getWorkUnit() {return workUnit;}public void setWorkUnit(String workUnit) {this.workUnit = workUnit;}public String getUserICQCode() {return (String)contactMethod.get("userICQCode");}/** 下面的各个方法为“帮助方法”*/public void setUserICQCode(String userICQCode) { contactMethod.put("userICQCode", userICQCode);}public String getUserMSNCode() {return (String)contactMethod.get("userMSNCode");}public void setUserMSNCode(String userMSNCode) { contactMethod.put("userMSNCode", userMSNCode);}public String getUserQQCode() {return (String)contactMethod.get("userQQCode");}public void setUserQQCode(String userQQCode) {contactMethod.put("userQQCode", userQQCode);}public void addOneContactMethod(String oneContactMethodKey,String oneContactMethodValue) { //该方法为“帮助方法”contactMethod.put(oneContactMethodKey,oneContactMethodValue);}public String getOneContactMethod(String oneContactMethodKey){return (String)contactMethod.get(oneContactMethodKey);}public Map getContactMethod() {return contactMethod;}public void setContactMethod(Map contactMethod) {this.contactMethod = contactMethod;}}4、添加我们的业务处理层中针对订单信息管理的业务实体类等(1)订单信息管理所涉及的业务实体组件类类名称为OrderInfoVO,包名称为com.px1987.webshop.business.vobject(2)在该类中定义下面的属性成员private Integer id;private String createTime;private String userID;private boolean payFee;private int sendGoodsType;private String orderNumber;private String receivePersonName;private String receivePersonAddress;private String receivePersonTel;private String receivePersonMail; (3)为上面的各个属性提供get/set方法(4)最终的代码package com.px1987.webshop.business.vobject; public class OrderInfoVO{private Integer id;private String createTime;private String userID;private boolean payFee;private int sendGoodsType;private String orderNumber;private String receivePersonName;private String receivePersonAddress;private String receivePersonTel;private String receivePersonMail;public OrderInfoVO(){}public String getCreateTime() {return createTime;}public void setCreateTime(String createTime) { this.createTime = createTime;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getOrderNumber() {return orderNumber;}public void setOrderNumber(String orderNumber) {this.orderNumber = orderNumber;}public boolean isPayFee() {return payFee;}public void setPayFee(boolean payFee) {this.payFee = payFee;}public String getReceivePersonAddress() {return receivePersonAddress;}public void setReceivePersonAddress(String receivePersonAddress) { this.receivePersonAddress = receivePersonAddress;}public String getReceivePersonMail() {return receivePersonMail;}public void setReceivePersonMail(String receivePersonMail) { this.receivePersonMail = receivePersonMail;public String getReceivePersonName() {return receivePersonName;}public void setReceivePersonName(String receivePersonName) { this.receivePersonName = receivePersonName;}public String getReceivePersonTel() {return receivePersonTel;}public void setReceivePersonTel(String receivePersonTel) { this.receivePersonTel = receivePersonTel;}public int getSendGoodsType() {return sendGoodsType;}public void setSendGoodsType(int sendGoodsType) {this.sendGoodsType = sendGoodsType;}public String getUserID() {return userID;}public void setUserID(String userID) {erID = userID;}}5、添加我们的业务处理层针对商品信息管理组件的业务实体类等(1)商品信息管理所涉及的业务实体组件类类名称为GoodsInfoVO,包名称为com.px1987.webshop.business.vobject(2)在该类中定义下面的属性成员private Integer id;private String goodsName;private int goodsKind;private float goodsPrice;private float offPrice;private int hitNumber;private int buyNumber;private String imageFile;private String goodsDescriptor;private String goodsProductTime;private String goodFactoryName;private int totalNumber;private int onLibNumber;(3)为上面的各个属性提供get/set方法(4)最终的代码package com.px1987.webshop.business.vobject; public class GoodsInfoVO {private Integer id;private String goodsName;private int goodsKind;private float goodsPrice;private float offPrice;private int hitNumber;private int buyNumber;private String imageFile;private String goodsDescriptor;private String goodsProductTime;private String goodFactoryName;private int totalNumber;private int onLibNumber;public GoodsInfoVO(){}public int getBuyNumber() {return buyNumber;public void setBuyNumber(int buyNumber) {this.buyNumber = buyNumber;}public String getGoodFactoryName() {return goodFactoryName;}public void setGoodFactoryName(String goodFactoryName) { this.goodFactoryName = goodFactoryName;}public String getGoodsDescriptor() {return goodsDescriptor;}public void setGoodsDescriptor(String goodsDescriptor) { this.goodsDescriptor = goodsDescriptor;}public int getGoodsKind() {return goodsKind;}public void setGoodsKind(int goodsKind) {this.goodsKind = goodsKind;}public String getGoodsName() {return goodsName;}public void setGoodsName(String goodsName) {this.goodsName = goodsName;}public float getGoodsPrice() {return goodsPrice;public void setGoodsPrice(float goodsPrice) {this.goodsPrice = goodsPrice;}public String getGoodsProductTime() {return goodsProductTime;}public void setGoodsProductTime(String goodsProductTime) { this.goodsProductTime = goodsProductTime;}public int getHitNumber() {return hitNumber;}public void setHitNumber(int hitNumber) {this.hitNumber = hitNumber;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getImageFile() {return imageFile;}public void setImageFile(String imageFile) {this.imageFile = imageFile;}public float getOffPrice() {return offPrice;public void setOffPrice(float offPrice) { this.offPrice = offPrice;}public int getOnLibNumber() {return onLibNumber;}public void setOnLibNumber(int onLibNumber) { this.onLibNumber = onLibNumber;}public int getTotalNumber() {return totalNumber;}public void setTotalNumber(int totalNumber) { this.totalNumber = totalNumber;}}。

J2EE 课程设计项目——蓝梦商业集团客户关系管理(CRM)系统典型用例描述

J2EE 课程设计项目——蓝梦商业集团客户关系管理(CRM)系统典型用例描述

J2EE 课程设计项目——蓝梦商业集团客户关系管理(CRM)系统典型用例描述
1、用户登录模块用例描述
2、修改密码模块用例描述
3、增加客户信息模块用例描述
4、删除客户信息模块用例描述
5、修改客户信息模块用例描述
6、查找客户信息模块用例描述
7、客户详细报告项目模块用例描述
8、新建订单模块用例描述
9、删除订单模块用例描述
10、修改订单项目模块用例描述
11、查询订单模块用例描述
12、新建产品模块用例描述
13、删除产品模块用例描述
14、修改产品模块用例描述
15、查询产品模块用例描述
16、统计分析产品信息模块用例描述
17、新建合同模块用例描述
18、查询合同模块用例描述
19、编辑合同模块用例描述
20、删除合同模块用例描述
21、审批合同模块用例描述。

J2EE 课程设计项目《蓝梦集团客户关系管理系统(CRM)系统》服务层内的各个组件功能实现及测试

J2EE 课程设计项目《蓝梦集团客户关系管理系统(CRM)系统》服务层内的各个组件功能实现及测试

J2EE 课程设计项目《蓝梦集团客户关系管理系统(CRM)系统》服务层内的各个组件功能实现及测试1、添加一个创建验证码图片的服务组件类(1)类名称为CreateVerifyCodeImageBean,包名称为com.px1987.webcrm.service.util(2)编程该功能类(3)测试该功能类的正确性public static void main(String args[]) throws IOException{CreateVerifyCodeImageBean oneCreateVerifyCodeImageBean=new CreateVerifyCodeImageBean();java.awt.image.BufferedImage image=oneCreateVerifyCodeImageBean.createSomeOneVerifyImage();FileOutputStream verifyCodeImageOutputStream=new FileOutputStream("verifyCodeImageFile.jpeg");// 输出图像javax.imageio.ImageIO.write(image, "JPEG", verifyCodeImageOutputStream);}在项目的当前路径下将创建出一个文件名称为verifyCodeImageFile.jpeg的图片2、添加一个实现读取Cookie中的数据项目的JavaBean组件(1)类名称为ReadDataFromCookie,包名称为com.px1987.webcrm.service.util(2)在该类中添加如下的成员属性和提供get/set方法private String isAutoLoginFlag=null;private String isMemoryUserNameFlag=null;private String userName=null;private String userPassWord=null;(3)编程该组件类。

J2EE 课程设计实训项目——《蓝梦网上商城》——实现系统项目中的用户信息业务处理功能组件

J2EE 课程设计实训项目——《蓝梦网上商城》——实现系统项目中的用户信息业务处理功能组件

J2EE 课程设计实训项目——《蓝梦网上商城》——实现系统项目中的用户信息业务处理功能组件1.1.1实现系统项目中的用户信息业务处理功能组件1、添加与Spring相关的系统包(1)在Web-INF/lib目录下添加下面的各个文件spring.jar、aopalliance.jar、cglib-nodep-2.1_3.jar、spring-mock.jar、quartz-1.6.0.jar(定时器)、mail.jar和activation.jar(JMail相关的文件)而commons-logging.jar、log4j-1.2.14.jar已经在前面的Struts中添加过。

(2)实现过程如下2、用户信息管理的接口(1)接口名称为UserInfoManageInterface,包名称为er(2)设计该接口中的各个成员package er;import com.px1987.webshop.business.vobject.*;import com.px1987.webshop.service.*;import java.util.*;public interface UserInfoManageInterface{public boolean doUserLogin(UserInfoVO oneUserInfoVO) throws ServiceException;public boolean doUserRegister(UserInfoVO oneUserInfoVO) throws ServiceException;public boolean doUpdateOneUserInfo(UserInfoVO oneUserInfoVO) throws ServiceException;public boolean doUpdateOneRegisterUserPassWord(UserInfoVO oneUserInfoVO,String newPassWord) throws ServiceException;public boolean doUpdateOneAdminUserPassWord(UserInfoVO oneUserInfoVO,String newPassWord) throws ServiceException;public boolean doCheckUserNameExist(String userName,Integer type_User_Admin) throws ServiceException;public String doGetOneRegisterUserPassWord(UserInfoVO oneRegisterUserInfoVO) throws ServiceException;public String doGetOneAdminUserPassWord(UserInfoVO oneAdminUserInfoVO) throws ServiceException;public UserInfoVO doGetOneRegisterUserInfo(String registerUserID) throws ServiceException;public UserInfoVO doGetOneRegisterUserInfo(UserInfoVO oneRegisterUserInfoVO) throws ServiceException;public UserInfoVO doGetOneAdminUserInfo(String adminUserID) throws ServiceException;public UserInfoVO doGetOneAdminUserInfo(UserInfoVO oneAdminUserInfoVO) throws ServiceException;public UserInfoBaseVO doGetOneUserInfo(String userName,String userPassWord, Integer type_User_Admin) throws ServiceException;public ArrayList doGetAllUserNameInfo(String userName) throws ServiceException;public boolean doDeleteOneRegisterUserInfo(String registerUserID) throws ServiceException;public boolean doDeleteOneRegisterUserInfo(UserInfoVO oneRegisterUserInfoVO) throws ServiceException;public boolean doDeleteOneAdminUserInfo(String adminUserID) throws ServiceException;public boolean doDeleteOneAdminUserInfo(UserInfoVO oneAdminUserInfoVO) throws ServiceException;public ArrayList doGetAllRegisterUserInfo() throws ServiceException;public ArrayList doGetSomeRegisterUserInfo(Map registerUserInfos) throws ServiceException;public ArrayList doGetAllAdminUserInfo() throws ServiceException;public ArrayList doGetSomeAdminUserInfo(Map adminUserInfos) throws ServiceException;}3、用户信息管理的接口UserInfoManageInterface的实现类(1)用户信息管理的接口UserInfoManageInterface的实现类------类名称为UserInfoManageImple,包名称为er(2)将产生出下面的状态(3)并在其中提供一个“UserInfoDAOServiceInterface userInfoDAOServiceImple=null;”的对象声明,同时为它提供set方法。

《J2EE系统架构和程序设计》课程设计实训项目——蓝梦网上商店系统测试计划说明书

《J2EE系统架构和程序设计》课程设计实训项目——蓝梦网上商店系统测试计划说明书

《J2EE系统架构和程序设计》课程设计实训项目——蓝梦网上商店系统测试计划说明书杨教授大学堂精心创作的优秀程序员职业提升必读系列资料《J2EE系统架构和程序设计》课程设计实训项目——蓝梦网上商店系统测试计划说明书1.1.1 引言1、编写目的本测试计划书的目的是为了描述蓝梦网上商店系统项目所要完成的测试,包括测试背景、测试目的、风险分析、所需资源、任务安排和进度等。

本计划的读者对象为项目经理,软件测试工程师以及软件测试人员。

2、参考资料(1)J2EE项目实训Hibernate框架技术(21世纪高等学校实用软件工程教育规划教材)杨少波编著清华大学出版社 2008 年5月(2)J2EE项目实训Spring框架技术(21世纪高等学校实用软件工程教育规划教材)杨少波编著清华大学出版社 2008 年5月(3)J2EE项目实训UML及设计模式(21世纪高等学校实用软件工程教育规划教材)杨少波编著清华大学出版社 2008 年5月(4)J2EE项目实训Struts框架技术(21世纪高等学校实用软件工程教育规划教材)杨少波编著清华大学出版社 2008 年10月(5)《JSP与数据库连接》刘瑞挺,高等教育出版社(6)《数据库原理与方法》郑若忠王鸿武,湖南科学技术出版社(7)《软件需求》(美) Karl E.Wiegers 著,刘伟琴刘洪涛译1.1.2 任务概述1、测试目标本测试计划的目标分为三个阶段,第一阶段测试本系统的各种功能的实现效果,分为管理员功能和用户购物功能两大部分;第二阶段测试本系统在各种平台下的兼容性;第三阶段测试系统的安全性和可扩展性。

本计划说明书主要针对第一阶段。

2、测试运行环境杨教授大学堂,版权所有,盗版必究。

1/9页杨教授大学堂精心创作的优秀程序员职业提升必读系列资料(1)硬件环境目前市场上出售的一般个人或商务电脑均可使用,机器配置要求如下:1)CPU: P3同类档次或更高档次以上。

2)内存: 256M以上内存。

《基于J2EE轻量级系统架构实现的CRM系统》论文第一章 绪论

《基于J2EE轻量级系统架构实现的CRM系统》论文第一章 绪论

《基于J2EE轻量级系统架构实现的CRM系统》论文第一章绪论1.1.1引言CRM系统(Customer Relationship Management,客户关系管理系统)是商业应用的重要IT体系结构,它提供重整客户组织结构的便利手段和基本结构,能够有效地降低企业经营成本和缩短产品销售时间。

CRM系统同时也是OA(Office Automation,办公自动化)系统、进销存系统(Inventory Management System)、财务系统(Financial System)及客户管理系统(Customer Management System)的一个结合。

每一个公司、企业都有自己的员工信息、产品的存售信息、财务状况信息及客户信息,随着企业的发展壮大,对各区域的员工、产品、财务及客户的管理工作也变得越来越繁琐。

信息查看频繁和工作人员需要在不断地录入新的客户信息、各区域的员工的考核、产品发货情况及客户信息的同时,又需要不断地对客户所提出的问题需要及时地回复。

当今的市场压力迫使企业在提高产品质量和性能的同时,降低生产成本和缩短产品上市的时间。

每个企业都在努力地更新自己,这不仅包括其生产过程和产品的更新换代,也包括管理思想的更新和应用更先进的信息化的管理系统。

客户是一个企业最宝贵的资源,如何更好地发掘企业老客户的价值,同时又能开发出更多的新客户,对一个企业的发展是至关重要的。

以客户为中心并为客户提供高质量的服务,从而获取较高的客户满意度和忠诚度,是企业最重要的核心竞争力,也是企业在竞争中立于不败之地的根本保证。

CRM系统是企业与客户之间建立的一种有益关系,国内著名的蓝梦商业集团(BlueDream Business Group)为了能够在国内迅速地开展连锁加盟机构以扩大其商业销售渠道,急需开发一套适合本企业经营和管理要求的CRM系统。

蓝梦商业集团的高层管理人员期望该客户关系管理系统能够以“客户”为中心,将本集团下属的各个企业的市场、销售和服务等有机地整合起来,并形成跨部门的统一业务管理的平台,使原本各自为战的销售人员、市场推广人员、售后服务人员开始真正地协调合作,成为一支以客户为中心的强大团队和使其所销售的产品能够更好地满足客户的需要。

J2EE 课程设计实训项目——《蓝梦网上商城》——对系统控制层中的用户信息管理的Action程序类进行单元测试

J2EE 课程设计实训项目——《蓝梦网上商城》——对系统控制层中的用户信息管理的Action程序类进行单元测试

J2EE 课程设计实训项目——《蓝梦网上商城》——对系统控制层中的用户信息管理的Action程序类进行单元测试1.1.1对系统控制层中的各个Action程序类进行单元测试1、引用在控制层测试中所需要的各个*.jar包文件(1)将Strutstest和Junit所需要的*.jar包加入到本测试项目中(2)将J2EE Web技术中所需要的Servlet和JSP的*.jar包加入------因为,本测试用例所在的项目为Java项目1)servlet-api.jar和jsp-api.jar文件(在Tomcat中带有)2)commons-collections-2.1.1.jar包文件(在Struts的系统包中已经带有)2、在测试的Java项目中添加一个针对UserInfoManageAction类的TestCase类(1)新增加一个TestCase类(2)设置该TestCase的各个项目类名称为MockStrutsTestUserInfoManageAction,包名称为com.px1987.webshop.testcontrol,基类选择为servletunit.struts.MockStrutsTestCase。

被测试的类为erInfoManageAction。

(3)选择需要进行测试的各个方法(4)点击“完成”按钮,将产生出下面的状态5、编程该MockStrutsTestUserInfoManageAction测试用例类package com.px1987.webshop.testcontrol;import servletunit.struts.MockStrutsTestCase;import junit.framework.*;import java.io.*;import java.util.Date;import javax.servlet.http.HttpSession;public class MockStrutsTestUserInfoManageAction extends MockStrutsTestCase { public MockStrutsTestUserInfoManageAction(String arg0) {super(arg0);}protected void setUp() throws Exception{super.setUp();}protected void tearDown() throws Exception{super.tearDown();}public void testDoSuccessUserLogin(){/*下面的目录路径根据实际的状态,修改为对应的内容*/setContextDirectory(new File("D:/AllInOneWebShop/WebShopProject/WebRoot"));setConfigFile("/WEB-INF/struts-config.xml");setRequestPathInfo("/userInfoManage");HttpSession session=request.getSession();session.setAttribute("verifyCode","1234");addRequestParameter("verifyCodeDigit","1234");addRequestParameter("actionType","doLogin_GetPassWord");//代表目前为登录和找回密码的表单状态addRequestParameter("menuID","2");addRequestParameter("type_User_Admin","1");addRequestParameter("userName","张三");addRequestParameter("userPassWord","12345678");//代表目前为登录状态addRequestParameter("login_GetPassWord_ActionType","1");actionPerform();verifyForward("userLoginSuccess");}public void testDoFailureUserLogin(){/*下面的目录路径根据实际的状态,修改为对应的内容*/setContextDirectory(new File("D:/AllInOneWebShop/WebShopProject/WebRoot"));setConfigFile("/WEB-INF/struts-config.xml");setRequestPathInfo("/userInfoManage");HttpSession session=request.getSession();session.setAttribute("verifyCode","1234");addRequestParameter("verifyCodeDigit","1234");addRequestParameter("actionType","doLogin_GetPassWord");//代表目前为登录和找回密码的表单状态addRequestParameter("menuID","2");addRequestParameter("type_User_Admin","1");addRequestParameter("userName","张三");//将密码设置为错误的数据addRequestParameter("userPassWord","abcd");//代表目前为登录状态addRequestParameter("login_GetPassWord_ActionType","1");actionPerform();verifyForward("loginFailure");}public void testDoSuccessGetPassWord() {// 下面的目录路径根据实际的状态,修改为对应的内容setContextDirectory(new File("D:/AllInOneWebShop/WebShopProject/WebRoot"));setConfigFile("/WEB-INF/struts-config.xml");setRequestPathInfo("/userInfoManage");HttpSession session=request.getSession();session.setAttribute("verifyCode","1234");addRequestParameter("verifyCodeDigit","1234");addRequestParameter("actionType","doLogin_GetPassWord");//代表目前为登录和找回密码的表单状态addRequestParameter("menuID","2");addRequestParameter("type_User_Admin","1");addRequestParameter("userName","张三");addRequestParameter("passWordAsk","Who Are You?");addRequestParameter("passWordAnswer","zhang");//代表目前为找回密码状态addRequestParameter("login_GetPassWord_ActionType","2");actionPerform();verifyForward("getPassWordSuccess");}public void testDoFailureGetPassWord(){// 下面的目录路径根据实际的状态,修改为对应的内容setContextDirectory(new File("D:/AllInOneWebShop/WebShopProject/WebRoot"));setConfigFile("/WEB-INF/struts-config.xml");setRequestPathInfo("/userInfoManage");HttpSession session=request.getSession();session.setAttribute("verifyCode","1234");addRequestParameter("verifyCodeDigit","1234");addRequestParameter("actionType","doLogin_GetPassWord");//代表目前为登录和找回密码的表单状态addRequestParameter("menuID","2");addRequestParameter("type_User_Admin","1");addRequestParameter("userName","张三");addRequestParameter("passWordAsk","Who Are You?");//将答案设置为错误的数据addRequestParameter("passWordAnswer","1234");//代表目前为找回密码状态addRequestParameter("login_GetPassWord_ActionType","2");actionPerform();verifyForward("getPassWordFailure");}public void testDoRegister() {// 下面的目录路径根据实际的状态,修改为对应的内容setContextDirectory(new File("D:/AllInOneWebShop/WebShopProject/WebRoot"));setConfigFile("/WEB-INF/struts-config.xml");setRequestPathInfo("/userInfoManage");HttpSession session=request.getSession();session.setAttribute("verifyCode","1234");addRequestParameter("verifyCodeDigit","1234");addRequestParameter("actionType","doRegister");//代表目前为注册的表单状态addRequestParameter("menuID","1");addRequestParameter("userName","张三");addRequestParameter("userPassWord","12345678");addRequestParameter("confirmPassWord","12345678");addRequestParameter("aliaoName","网上张飞");addRequestParameter("type_User_Admin","1");addRequestParameter("passWordAsk","Who Are You?");addRequestParameter("passWordAnswer","zhang");addRequestParameter("userMail","trainict@"); addRequestParameter("userImage","../webResource/PersonImage/Chang.gif");addRequestParameter("userSex","1");addRequestParameter("userBirthDay","2007-01-25");addRequestParameter("userComeFrom","北京");addRequestParameter("userResume","我是网络飞人");addRequestParameter("userType","1");addRequestParameter("userQQCode","QQ1234567890");addRequestParameter("userICQCode","ICQ1234567890");addRequestParameter("userMSNCode","MSN1234567890");addRequestParameter("userSign","12345678900");addRequestParameter("emailVisible",new Boolean(true).toString());addRequestParameter("acceptAdvise",new Boolean(true).toString());actionPerform();verifyForward("registerSuccess");}public void testDoUpdateUserPassWord(){// 下面的目录路径根据实际的状态,修改为对应的内容setContextDirectory(new File("D:/AllInOneWebShop/WebShopProject/WebRoot"));setConfigFile("/WEB-INF/struts-config.xml");setRequestPathInfo("/userInfoManage");HttpSession session=request.getSession();session.setAttribute("verifyCode","1234");addRequestParameter("verifyCodeDigit","1234");//代表目前为修改密码的表单状态addRequestParameter("menuID","3");addRequestParameter("actionType","doUpdateUserPassWord");addRequestParameter("type_User_Admin","1");addRequestParameter("userName","张三");addRequestParameter("userPassWord","12345678");addRequestParameter("userNewPassWord","1234");actionPerform();verifyForward("updateUserPassWordSuccess");}public void testDoUpdateUserInfo(){// 下面的目录路径根据实际的状态,修改为对应的内容setContextDirectory(new File("D:/AllInOneWebShop/WebShopProject/WebRoot"));setConfigFile("/WEB-INF/struts-config.xml");setRequestPathInfo("/userInfoManage");HttpSession session=request.getSession();session.setAttribute("verifyCode","1234");addRequestParameter("verifyCodeDigit","1234");//代表目前为修改用户的信息的表单状态addRequestParameter("menuID","1");addRequestParameter("actionType","doUpdateUserInfo");//应该根据数据库表中的实际的数据值来决定String registerUserId="402880681071d7ed011071d7f24b0002";addRequestParameter("userID",registerUserId);addRequestParameter("userName","张三");addRequestParameter("userPassWord","12345678");addRequestParameter("confirmPassWord","12345678");addRequestParameter("aliaoName","网上张飞");addRequestParameter("type_User_Admin","1");addRequestParameter("passWordAsk","Who Are You?");addRequestParameter("passWordAnswer","zhang");addRequestParameter("userMail","trainict@");addRequestParameter("userImage","../webResource/PersonImage/Chang.gif");addRequestParameter("userSex","1");addRequestParameter("userBirthDay","2007-01-25");addRequestParameter("userComeFrom","北京");addRequestParameter("userResume","我是网络飞人");addRequestParameter("userType","1");addRequestParameter("userQQCode","QQ1234567890");addRequestParameter("userICQCode","ICQ1234567890");addRequestParameter("userMSNCode","MSN1234567890");addRequestParameter("userSign","12345678900");addRequestParameter("emailVisible",new Boolean(true).toString());addRequestParameter("acceptAdvise",new Boolean(true).toString());actionPerform();verifyForward("updateUserInfoSuccess");}}6、执行该MockStrutsTestUserInfoManageAction测试用例类(1)执行该测试用例类杨教授大学堂精心创作的优秀程序员职业提升必读系列资料(2)将产生出下面的结果杨教授大学堂,版权所有,盗版必究。

《J2EE系统架构和程序设计》课程设计实训项目——蓝梦网上商店系统详细设计说明书

《J2EE系统架构和程序设计》课程设计实训项目——蓝梦网上商店系统详细设计说明书

《J2EE系统架构和程序设计》课程设计实训项目——蓝梦网上商店系统详细设计说明书1.1.1引言1、编写目的编写此文档的主要目的,在于从整体上详细说明蓝梦网上商店系统的功能与处理模式,使项目开发人员和管理人员明确产品功能及解决方案,针对性地进行系统开发和测试、验收等工作,并为开发、编写代码提供详细的实现方案。

本设计说明书作为蓝梦网上商店系统项目开发的依据和规范,并作为开发任务及目标依据,蓝梦网上商店系统的开发内容及达到的各项功能及性能指标以此设计说明书为准。

在本设计说明书中将详细阐述系统设计方案,供前期开发者及后期维护者参考。

2、参考资料(1)J2EE项目实训Hibernate框架技术(21世纪高等学校实用软件工程教育规划教材)杨少波编著清华大学出版社 2008 年5月(2)J2EE项目实训Spring框架技术(21世纪高等学校实用软件工程教育规划教材)杨少波编著清华大学出版社 2008 年5月(3)J2EE项目实训UML及设计模式(21世纪高等学校实用软件工程教育规划教材)杨少波编著清华大学出版社 2008 年5月(4)J2EE项目实训Struts框架技术(21世纪高等学校实用软件工程教育规划教材)杨少波编著清华大学出版社2008 年10月(5)《JSP与数据库连接》刘瑞挺,高等教育出版社(6)《数据库原理与方法》郑若忠王鸿武,湖南科学技术出版社(7)《软件需求》(美)Karl E.Wiegers 著,刘伟琴刘洪涛译1.1.2模块命名规则1、模块汇总表提示:这里模块是指相对独立的软件设计单元,例如对象类、函数包等等。

2、模块关系图1.1.3子系统模块设计1、模块1——管理员管理商品模块管理商品,首要的是添加商品,因此,就要先来设计添加商品的界面。

根据数据库设计部分可知,商品信息包括两个数据表,一个是商品类型表My_GoodsType,一个是商品信息表My_Goods,在商品类型表中初始化了四条数据。

J2EE 课程设计实训项目——《蓝梦网上商城》——对系统中的用户信息业务处理功能组件进行单元测试

J2EE 课程设计实训项目——《蓝梦网上商城》——对系统中的用户信息业务处理功能组件进行单元测试

J2EE 课程设计实训项目——《蓝梦网上商城》——对系统中的用户信息业务处理功能组件进行单元测试1.1.1对系统中的用户信息业务处理功能组件进行单元测试1、在测试项目中引入与Spring相关的*.jar包文件(1)引入与Spring相关的*.jar包文件(log4j-1.2.14.jar、spring.jar和commons-logging.jar)(2)实现的过程如下(3)注意:log4j-1.2.14.jar和commons-logging.jar已经在前面添加过,在此可以不再需要重复。

2、添加log4j的属性配置文件(1)新建log4j.properties文件(2)log4j.properties文件的内容如下# For JBoss: Avoid to setup Log4J outside $JBOSS_HOME/server/default/deploy/log4j.xml! # For all other servers: Comment out the Log4J listener in web.xml to activate Log4J.log4j.rootLogger=INFO, stdout, logfilelog4j.appender.stdout=org.apache.log4j.ConsoleAppenderyout=org.apache.log4j.PatternLayoutyout.ConversionPattern=%d %p [%c] - <%m>%nlog4j.appender.logfile=org.apache.log4j.RollingFileAppenderlog4j.appender.logfile.File=mylog.loglog4j.appender.logfile.MaxFileSize=512KB# Keep three backup files.log4j.appender.logfile.MaxBackupIndex=3# Pattern to output: date priority [category] - messageyout=org.apache.log4j.PatternLayoutyout.ConversionPattern=%d %p [%c] - %m%n3、针对UserInfoManageImple类提供对应的测试用例类(1)添加测试用例类(2)设置该测试用例的各个名称类名称为TestUserInfoManageImple,包名称为com.px1987.webshop.testbusiness,基类为junit.framework.TestCase,被测试的类选择为erInfoManageImple(3)选择我们业务组件类中的各个被测试方法(4)将产生出下面的状态4、编程该TestUserInfoManageImple类(1)引入与ApplicationContext相关的各个包import org.springframework.context.ApplicationContext;import org.springframework.context.support.FileSystemXmlApplicationContext;(2)在setUp方法中获得我们的被测试类的对象protected void setUp() throws Exception{super.setUp();//根据实际来决定String springXMLPath="E:/NetShopProject/SpringBusiness/webShopUserInfoIoC.xml";ApplicationContext applicationContext =new FileSystemXmlApplicationContext(springXMLPath);userInfoManageImple=(UserInfoManageInterface) applicationContext.getBean("userInfoManageImple");}(3)编程各个测试方法---如下面的testDoUserLogin方法public void testDoUserLogin() throws Exception{String userName="张三"; //根据实际数据库表中的数据来决定String userPassWord="1234"; //根据实际数据库表中的数据来决定int type_User_Admin=1; //表示现在是前台用户在登录UserInfoVO oneLoginUserInfo=new UserInfoVO();oneLoginUserInfo.setUserName(userName);oneLoginUserInfo.setUserPassWord(userPassWord);oneLoginUserInfo.setType_User_Admin(type_User_Admin);boolean actualReturn=userInfoManageImple.doUserLogin(oneLoginUserInfo);this.assertTrue(actualReturn);}(4)最后的代码如下package com.px1987.webshop.testbusiness;import java.util.*;import junit.framework.*;import org.springframework.context.ApplicationContext;import org.springframework.context.support.FileSystemXmlApplicationContext;import er.*;import com.px1987.webshop.business.vobject.*;import com.px1987.webshop.service.*;public class TestUserInfoManageImple extends TestCase{UserInfoManageInterface userInfoManageImple=null;public TestUserInfoManageImple(String arg0) {super(arg0);}protected void setUp() throws Exception{super.setUp();//根据实际来决定String springXMLPath="D:/ WebShopProject/WebRoot/WEB-INF/classes/webShopUserInfoIoC.xml";ApplicationContext applicationContext =new FileSystemXmlApplicationContext(springXMLPath);/* 没有应用AOP Throws Advice或者应用了Spring中的“自动代理”功能时* userInfoManageImple=(UserInfoManageInterface)applicationContext.getBean("userInfoManageImple");*//** 下面是应用ProxyFactoryBean来实现AOP Throws Advice时* userInfoManageImple=(UserInfoManageInterface) applicationContext.getBean("userInfoManageImpleProxy");*/userInfoManageImple=(UserInfoManageInterface)applicationContext.getBean("userInfoManageImple");}protected void tearDown() throws Exception {userInfoManageImple=null;super.tearDown();}public void testDoUserLogin() throws ServiceException{String userName="张三"; //根据实际数据库表中的数据来决定String userPassWord="1234"; //根据实际数据库表中的数据来决定int type_User_Admin=1; //表示现在是前台用户在登录UserInfoVO oneLoginUserInfo=new UserInfoVO();oneLoginUserInfo.setUserName(userName);oneLoginUserInfo.setUserPassWord(userPassWord);oneLoginUserInfo.setType_User_Admin(new Integer(type_User_Admin));boolean actualReturn=userInfoManageImple.doUserLogin(oneLoginUserInfo);this.assertTrue(actualReturn);}public void testDoGetOneUserInfo() throws ServiceException{UserInfoBaseVO oneUserInfoBaseVO=null;int type_User_Admin=1;String userName="张三";String userPassWord="1234";oneUserInfoBaseVO=userInfoManageImple.doGetOneUserInfo(userName,userPassWord, type_User_Admin);this.assertNotNull(oneUserInfoBaseVO);String returnUserName=oneUserInfoBaseVO.getUserName();this.assertNotNull(returnUserName);}public void testDoUserRegister() throws ServiceException{UserInfoVO oneRegisterUserInfoVO=new UserInfoVO();oneRegisterUserInfoVO.setUserName("张三");oneRegisterUserInfoVO.setUserPassWord("1234");oneRegisterUserInfoVO.setUserType(new Integer(1));oneRegisterUserInfoVO.setAliaoName("网上张飞");oneRegisterUserInfoVO.setPassWordAsk("Who Are You?");oneRegisterUserInfoVO.setUserImage("zhang.gif");oneRegisterUserInfoVO.setRegisterTime(new Date().toLocaleString());oneRegisterUserInfoVO.setPassWordAnswer("zhang");oneRegisterUserInfoVO.setUserMail("trainict@");oneRegisterUserInfoVO.setUserSex(1);oneRegisterUserInfoVO.setUserBirthDay("2007-01-25");oneRegisterUserInfoVO.setUserComeFrom("北京");oneRegisterUserInfoVO.setUserResume("我是网络飞人");oneRegisterUserInfoVO.addOneContactMethod("userQQCode","QQ1234567890");oneRegisterUserInfoVO.addOneContactMethod("userICQCode","ICQ1234567890");oneRegisterUserInfoVO.addOneContactMethod("userMSNCode","MSN1234567890");oneRegisterUserInfoVO.setUserSign("12345678900");oneRegisterUserInfoVO.setEmailVisible(1);oneRegisterUserInfoVO.setAcceptAdvise(1);//代表前台用户在进行注册oneRegisterUserInfoVO.setType_User_Admin(new Integer(1));boolean actualReturn=userInfoManageImple.doUserRegister(oneRegisterUserInfoVO);this.assertTrue(actualReturn);}public void testDoCheckUserNameExist() throws ServiceException{String userName="张三"; //根据实际选择数据int type_User_Admin=1;boolean actualReturn=userInfoManageImple.doCheckUserNameExist(userName,type_User_Admin);this.assertTrue(actualReturn);}/*public void testDoDeleteOneRegisterUserInfoString() throws ServiceException{ String registerUserID="4028806810723e1a0110723e1f660002"; //根据实际选择数据boolean actualReturn=userInfoManageImple.doDeleteOneRegisterUserInfo(registerUserID);this.assertTrue(actualReturn);}public void testDoDeleteOneRegisterUserInfoUserInfoVO() throws ServiceException{ String registerUserID="40288068107200f101107200f91a0003"; //根据实际选择数据UserInfoVO oneRegisterUserInfoVO=new UserInfoVO();oneRegisterUserInfoVO.setId(registerUserID);boolean actualReturn=userInfoManageImple.doDeleteOneRegisterUserInfo(oneRegisterUserInfoVO);this.assertTrue(actualReturn);}public void testDoDeleteOneAdminUserInfoString() throws ServiceException { String adminUserID="4028806810723e1a0110723e1eca0001"; //根据实际选择数据boolean actualReturn=userInfoManageImple.doDeleteOneAdminUserInfo(adminUserID);this.assertTrue(actualReturn);}public void testDoDeleteOneAdminUserInfoUserInfoVO() throws ServiceException{ String adminUserID="40288068107200f101107200f8eb0002"; //根据实际选择数据UserInfoVO oneAdminUserInfoVO=new UserInfoVO();oneAdminUserInfoVO.setId(adminUserID);boolean actualReturn=userInfoManageImple.doDeleteOneAdminUserInfo(adminUserID);this.assertTrue(actualReturn);}*/public void testDoGetAllAdminUserInfo() throws ServiceException{ArrayList allAdminUserInfos=userInfoManageImple.doGetAllAdminUserInfo();this.assertNotNull(allAdminUserInfos);Iterator allItem=allAdminUserInfos.iterator();while(allItem.hasNext()){UserInfoVO oneAdminUserInfoVO=(UserInfoVO)allItem.next();this.assertNotNull(oneAdminUserInfoVO);String adminUserName=oneAdminUserInfoVO.getUserName();this.assertNotNull(adminUserName);}}public void testDoGetAllRegisterUserInfo() throws ServiceException{ArrayList allRegisterUserInfos=userInfoManageImple.doGetAllRegisterUserInfo();this.assertNotNull(allRegisterUserInfos);Iterator allItem=allRegisterUserInfos.iterator();while(allItem.hasNext()){UserInfoVO oneRegisterUserInfoVO=(UserInfoVO)allItem.next();this.assertNotNull(oneRegisterUserInfoVO);String adminUserName=oneRegisterUserInfoVO.getUserName();this.assertNotNull(adminUserName);}}public void testDoGetAllUserNameInfo() throws ServiceException{String userName="张";String oneUserNameReturned=null;ArrayList allUserNameInfo=userInfoManageImple.doGetAllUserNameInfo(userName);this.assertNotNull(allUserNameInfo);Iterator allItem=allUserNameInfo.iterator();while(allItem.hasNext()){oneUserNameReturned=(String)allItem.next();this.assertNotNull(oneUserNameReturned);}}public void testDoGetOneRegisterUserInfoString() throws ServiceException{ String registerUserID="402880681071d7ed011071d7f24b0002"; //根据实际选择数据UserInfoVO oneRegisterUserInfoVOReturned=null;oneRegisterUserInfoVOReturned=userInfoManageImple.doGetOneRegisterUserInfo(registerUserID);this.assertNotNull(oneRegisterUserInfoVOReturned);String oneUserNameReturned=oneRegisterUserInfoVOReturned.getUserName();this.assertNotNull(oneUserNameReturned);}public void testDoGetOneRegisterUserInfoUserInfoVO() throws ServiceException{ String registerUserID="402880681071d7ed011071d7f24b0002"; //根据实际选择数据UserInfoVO oneRegisterUserInfoVO=new UserInfoVO();oneRegisterUserInfoVO.setId(registerUserID);UserInfoVO oneRegisterUserInfoVOReturned=null;oneRegisterUserInfoVOReturned=userInfoManageImple.doGetOneRegisterUserInfo(oneRegisterUserInfoVO);}public void testDoGetOneAdminUserInfoString() throws ServiceException{ String adminUserID="402880681071d7ed011071d7f20d0001"; //根据实际选择数据UserInfoVO oneAdminUserInfoVO=null;oneAdminUserInfoVO=userInfoManageImple.doGetOneAdminUserInfo(adminUserID);this.assertNotNull(oneAdminUserInfoVO);String oneUserNameReturned=oneAdminUserInfoVO.getUserName();this.assertNotNull(oneUserNameReturned);}public void testDoGetOneAdminUserInfoUserInfoVO() throws ServiceException{ String adminUserID="402880681071d7ed011071d7f20d0001"; //根据实际选择数据UserInfoVO oneAdminUserInfoVO=new UserInfoVO();oneAdminUserInfoVO.setId(adminUserID);UserInfoVO oneAdminUserInfoVOReturned=null;oneAdminUserInfoVOReturned=userInfoManageImple.doGetOneAdminUserInfo(oneAdminUserInfoVO);}public void testDoGetOneRegisterUserPassWord() throws ServiceException{ UserInfoVO oneRegisterUserInfoVO=null;String userName="张三";String passWordAsk="Who Are You?";String passWordAnswer="zhang";oneRegisterUserInfoVO=new UserInfoVO();oneRegisterUserInfoVO.setUserName(userName);oneRegisterUserInfoVO.setPassWordAsk(passWordAsk);oneRegisterUserInfoVO.setPassWordAnswer(passWordAnswer);String userPassWordReturned=userInfoManageImple.doGetOneRegisterUserPassWord(oneRegisterUserInfoVO);this.assertNotNull(userPassWordReturned);}public void testDoGetOneAdminUserPassWord() throws ServiceException{ UserInfoVO oneAdminUserInfoVO=null;String userName="张三";String passWordAsk="Who Are You?";String passWordAnswer="zhang";oneAdminUserInfoVO=new UserInfoVO();oneAdminUserInfoVO.setUserName(userName);oneAdminUserInfoVO.setPassWordAsk(passWordAsk);oneAdminUserInfoVO.setPassWordAnswer(passWordAnswer);String userPassWordReturned=userInfoManageImple.doGetOneAdminUserPassWord(oneAdminUserInfoVO);this.assertNotNull(userPassWordReturned);}public void testDoGetSomeAdminUserInfo() throws ServiceException{}public void testDoGetSomeRegisterUserInfo() throws ServiceException{}public void testDoUpdateOneUserInfo() throws ServiceException{UserInfoVO oneRegisterUserInfoVO=new UserInfoVO();//应该根据数据库表中的实际的数据值来决定String registerUserId="402880681071d7ed011071d7f24b0002";//设置需要修改的某个用户的ID以定位其记录oneRegisterUserInfoVO.setId(registerUserId);oneRegisterUserInfoVO.setUserName("张三");//本测试的数据只是对原来的数据改变了此值oneRegisterUserInfoVO.setUserPassWord("12345678"); oneRegisterUserInfoVO.setUserType(new Integer(1)); oneRegisterUserInfoVO.setAliaoName("网上张飞"); oneRegisterUserInfoVO.setPassWordAsk("Who Are You?"); oneRegisterUserInfoVO.setUserImage("zhang.gif"); oneRegisterUserInfoVO.setRegisterTime(new Date().toLocaleString()); oneRegisterUserInfoVO.setPassWordAnswer("zhang"); oneRegisterUserInfoVO.setUserMail("trainict@"); oneRegisterUserInfoVO.setUserSex(1);oneRegisterUserInfoVO.setUserBirthDay("2007-01-25"); oneRegisterUserInfoVO.setUserComeFrom("北京"); oneRegisterUserInfoVO.setUserResume("我是网络飞人"); oneRegisterUserInfoVO.setUserSign("12345678900"); oneRegisterUserInfoVO.setEmailVisible(1);oneRegisterUserInfoVO.setAcceptAdvise(1);Map newContactMethod = new HashMap(); //可以在此改变用户的联系方式newContactMethod.put("userQQCode","QQ1234567890"); newContactMethod.put("userICQCode","ICQ1234567890"); newContactMethod.put("userMSNCode","MSN1234567890"); oneRegisterUserInfoVO.setContactMethod(newContactMethod);int type_User_Admin=1;oneRegisterUserInfoVO.setType_User_Admin(type_User_Admin);boolean actualReturn=userInfoManageImple.doUpdateOneUserInfo(oneRegisterUserInfoVO);this.assertTrue(actualReturn);}}5、执行该测试用例(1)右击我们的的测试用例类,并选择运行方式为JUnit测试用例。

J2EE Web组件课程设计实例项目——CRM系统后台管理页面实现示例(第1部分)

J2EE Web组件课程设计实例项目——CRM系统后台管理页面实现示例(第1部分)

1.1J2EE Web组件课程设计实例项目——CRM系统后台管理页面实现示例(第1部分)1.1.1顶部菜单条页面内容和CSS样式的实现1、在顶部菜单条页面中链接对应的CSS样式文件<link href="css/topMenuBar.css" rel="stylesheet" type="text/css" />2、在topMenuBar.css文件中引用通用的CSS样式文件commonStyle.css@charset "gb18030";@import url("commonStyle.css");3、实现topMenuBar.html页面的内容和样式(1)HTML页面标签<div id="topMenuBarOuterWarpID"></div>(2)对应的CSS样式单#topMenuBarOuterWarpID{width:100%;}(3)测试现在的效果4、实现定部的第一行的内容和样式(1)HTML页面标签<div id="topMenuBarOuterWarpID"><div id="firstRowID_topMenuBarOuterWarpID"></div></div>(2)对应的CSS样式单#firstRowID_topMenuBarOuterWarpID{background:url(../images/saleInfoImages/main_05.gif);height:24px; /* 注意:一定要设置高度,否则背景区域不能正确地出现*/ width:100%;margin-top:0px;margin-bottom:0px;}(3)测试现在的效果5、实现第1行中的3列(1)HTML页面标签<div id="firstRowID_topMenuBarOuterWarpID"><div id="firstColumn_firstRowID"></div><div id="secondColumn_firstRowID"></div><div id="thirdColumn_firstRowID"></div> </div>(2)对应的CSS样式单#firstColumn_firstRowID{float:left;width:270px;height:24px;background:url(../images/saleInfoImages/main_03.gif); }#secondColumn_firstRowID{float:left;width:505px;height:24px;background:url(../images/saleInfoImages/main_04.gif); }#thirdColumn_firstRowID{float:right;width:21px;height:24px;background:url(../images/saleInfoImages/main_07.gif); }(3)测试现在的效果6、实现第2行(1)HTML页面标签<div id="secondRowID_topMenuBarOuterWarpID"> </div>(2)对应的CSS样式单#secondRowID_topMenuBarOuterWarpID{width:100%;height:38px;margin-top:0px;margin-bottom:0px;background:#000000;}(3)测试现在的效果7、实现第2行中的第1列(1)HTML页面标签<div id="secondRowID_topMenuBarOuterWarpID"><div id="firstColumn_secondRowID"></div></div>(2)对应的CSS样式单#firstColumn_secondRowID{float:left;width:270px;height:38px;background:url(../images/saleInfoImages/main_09.gif); }(3)测试现在的效果8、实现第2行中的第2列(1)HTML页面标签<div id="secondRowID_topMenuBarOuterWarpID"><div id="firstColumn_secondRowID"></div><div id="secondColumn_secondRowID"><a href="#"><img src="images/saleInfoImages/main_12.gif" /></a><a href="#"><img src="images/saleInfoImages/main_14.gif" /></a><a href="#"><img src="images/saleInfoImages/main_16.gif" /></a><a href="#"><img src="images/saleInfoImages/main_18.gif" /></a><a href="#"><img src="images/saleInfoImages/main_20.gif" /></a><span><img src="images/saleInfoImages/main_21.gif" /></span><a href="#"><img src="images/saleInfoImages/main_22.gif" /></a></div></div>(2)对应的CSS样式单#secondColumn_secondRowID{float:left;background:#000000;height:38px;}#secondColumn_secondRowID a{position:relative;top:10px;margin-left:10px;}#secondColumn_secondRowID span{position:relative;top:10px;margin-left:10px;}(3)测试现在的效果9、实现第2行中的第3列(1)HTML页面标签<div id="thirdColumn_secondRowID"><label><span>■</span><script language="javascript" type="text/javascript">var oneDate = new Date();var year= oneDate.getYear();var month= oneDate.getMonth()+1;var date= oneDate.getDate();var dayInWeek;switch(oneDate.getDay()){case 0:dayInWeek="星期日";break;case 1:dayInWeek="星期一";break;case 2:dayInWeek="星期二";break;case 3:dayInWeek="星期三";break;case 4:dayInWeek="星期四";break;case 5:dayInWeek="星期五";break;case 6:dayInWeek="星期六";break;}var hours= oneDate.getHours();var minutes= oneDate.getMinutes();var seconds= oneDate.getSeconds();document.write(year+"年"+month+"月"+date+"日"+dayInWeek+","+hours+":"+minutes+":"+seconds);</script></label></div>(2)对应的CSS样式单#thirdColumn_secondRowID{float:right;background:#000000;height:38px;text-align:right;width:245px;color: #FFFFFF;}#thirdColumn_secondRowID label {position:relative;top:15px;}#thirdColumn_secondRowID label span{font-size: 9px;}(3)测试现在的效果10、实现第2行中的第4列(1)HTML页面标签<div id="fourColumn_secondRowID"></div>(2)对应的CSS样式单#fourColumn_secondRowID{float:right;width:21px;height:38px;background:url(../images/saleInfoImages/main_11.gif); }(3)测试现在的效果11、实现第3行(1)HTML页面标签<div class="clearFloat"></div><div id="thirdRowBar_topMenuBarOuterWarpID"></div>(2)对应的CSS样式单#thirdRowBar_topMenuBarOuterWarpID{width:100%;height:8px;margin-top:0px;margin-bottom:0px;background-image: url(../images/saleInfoImages/main_30.gif);}(3)测试现在的效果12、实现第3行中的3个单元格(3列)(1)HTML页面标签<div id="thirdRowBar_topMenuBarOuterWarpID"><div id="firstColumn_thirdRowBar_topMenuBarOuterWarpID"></div><div id="secondColumn_thirdRowBar_topMenuBarOuterWarpID"></div><div id="thirdColumn_thirdRowBar_topMenuBarOuterWarpID"></div> </div>(2)对应的CSS样式单#firstColumn_thirdRowBar_topMenuBarOuterWarpID{float:left;width:270px;height:8px;background:url(../images/saleInfoImages/main_29.gif);}#secondColumn_thirdRowBar_topMenuBarOuterWarpID{float:left;width:680px;height:8px;background:url(../images/saleInfoImages/main_30.gif); }#thirdColumn_thirdRowBar_topMenuBarOuterWarpID{ float:right;width:21px;height:8px;background:url(../images/saleInfoImages/main_31.gif); }(3)测试现在的效果13、实现第4行(1)HTML页面标签<div class="clearFloat"></div><div id="fourRowID_topMenuBarOuterWarpID"></div>(2)对应的CSS样式单#fourRowID_topMenuBarOuterWarpID{width:100%;height:28px;margin-top:0px;margin-bottom:0px;background:url(../images/saleInfoImages/main_36.gif); }(3)测试现在的效果14、实现第4行中的各个列(1)HTML页面标签<div id="fourRowID_topMenuBarOuterWarpID"><div id="firstColumn_fourRowID_topMenuBarOuterWarpID"><div>当前用户:admin</div></div><div id="secondColumn_fourRowID_topMenuBarOuterWarpID"><a href="#">业务中心&nbsp;|</a><a href="#">系统管理&nbsp;|</a><a href="#">通讯录表&nbsp;|</a><a href="#">数据管理&nbsp;|</a><a href="#">统计报表&nbsp;|</a><a href="#">业务管理&nbsp;|</a><a href="#">系统配置&nbsp;|</a><a href="#">升级维护</a></div><div id="thirdColumn_fourRowID_topMenuBarOuterWarpID"></div><div class="clearFloat"></div></div>(2)对应的CSS样式单#firstColumn_fourRowID_topMenuBarOuterWarpID{float:left;width:177px;height:28px;background:url(../images/saleInfoImages/main_32.gif);}#firstColumn_fourRowID_topMenuBarOuterWarpID div{ color: #FFFFFF;position:relative;top:10px;margin-left:20%;}#secondColumn_fourRowID_topMenuBarOuterWarpID{ float:left;height:28px;}#secondColumn_fourRowID_topMenuBarOuterWarpID a{ position:relative;top:10px;margin-left:5px;}#secondColumn_fourRowID_topMenuBarOuterWarpID img{ width:3px;height:28px;}#thirdColumn_fourRowID_topMenuBarOuterWarpID{ float:right;width:23px;height:28px;background:url(../images/saleInfoImages/main_37.gif); }(3)测试现在的效果。

J2EE 课程设计项目《蓝梦集团客户关系管理系统(CRM)系统》表现层功能实现及测试

J2EE 课程设计项目《蓝梦集团客户关系管理系统(CRM)系统》表现层功能实现及测试

J2EE 课程设计项目《蓝梦集团客户关系管理系统(CRM)系统》表现层功能实现及测试1.1.1构建Web应用系统项目1、在DW中创建Web站点2、在项目中创建如下的文件目录3、添加默认的系统首页面index.jsp<%@ page contentType="text/html; charset=gb2312" isELIgnored="false" %><%String someOneTargetPage="/loginUserInfoServlet.action?loginUserActionType=4";RequestDispatcheroneRequestDispatcher=request.getRequestDispatcher(someOneTargetPage);oneRequestDispatcher.forward(request, response);%>当然,也可以采用<jsp:forward>标签进行转发跳转在该默认的系统首页面index.jsp中自动跳转到真正的首页面中,为什么要采用如此“二级跳”?(1)减少在真正首页面中的脚本代码,可以将在首页面中数据访问和处理的逻辑代码转移到Servlet(本示例是LoginUserInfoServlet.java类)或者JavaBean(本示例是ReadDataFromCookie.java类)组件中。

(2)隐藏真正首页面文件的位置。

4、测试工作人员登录功能(1)在web.xml配置文件中为系统配置默认的首页<welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list>(2)执行登录页面输入http://127.0.0.1:8080/bluedreamcrm/index.jsp或者http://127.0.0.1:8080/bluedreamcrm/都将能够看到下面的页面(3)本系统还提供有对Web表单的数据检查功能(4)本系统还提供有保存用户名称和自动登录等功能1.1.2对用户系统登录页面(employeeLogin.jsp)进行设计优化1、在JSP中不应该包含Java脚本(1)在index.jsp页面中向Servlet发送请求<%@ page contentType="text/html; charset=gb2312" isELIgnored="false" %><%String someOneTargetPage="/loginUserInfoServlet.action?loginUserActionType=4";RequestDispatcheroneRequestDispatcher=request.getRequestDispatcher(someOneTargetPage);oneRequestDispatcher.forward(request, response);%>(2)LoginUserInfoServlet程序private void doIndexForwardToTargetAction(HttpServletRequest request, HttpServletResponse response,LoginUserInfoActionForm oneLoginUserInfoActionForm)throws ServletException, IOException {ReadDataFromCookie oneReadDataFromCookie=new ReadDataFromCookie();booleanisAutoLoginStatus=oneReadDataFromCookie.readLoginInfoFromCookieAndCheckAutoLoginSt atus(request);if(isAutoLoginStatus){String gotoLoginResponeTarget="/loginUserInfoServlet.action"; //继续向登录信息处理的Servlet发送请求oneReadDataFromCookie.autoLinkToResponseTarget(gotoLoginResponeTarget,request,resp onse);return;}/** 第一次进行系统登录时,将正常显示登录表单页面*/booleanisMemoryUserName=(oneReadDataFromCookie.getIsMemoryUserNameFlag()!=null)&&oneReadDataFromCookie.getIsMemoryUserNameFlag().equals("1");if(isMemoryUserName){request.setAttribute("userNameInCookie",oneReadDataFromCookie.getUserName());request.setAttribute("isMemoryUserName", "memoryUserName"); //需要记住用户名称}else{request.setAttribute("isMemoryUserName", "noMemoryUserName"); //不需要记住用户名称}forwardToSomeOneTargetPage(request,response,this.getInitParameter("forwardToTargetInde xPage"));return;}(3)在employeeLogin.jsp中利用EL和JSTL获得从Servlet传来的数据<c:choose><c:when test="${requestScope.isMemoryUserName=='memoryUserName'}"> <input type="text" name="userName" size="8" id="userName" class="inputStyle_inDataForm"value="${erNameInCookie}" /></c:when><c:when test="${requestScope.isMemoryUserName=='noMemoryUserName'}"> <input type="text" name="userName" id="userName" size="8" class="inputStyle_inDataForm" /></c:when><c:otherwise><input type="text" name="userName" id="userName" size="8" class="inputStyle_inDataForm" /></c:otherwise></c:choose>保存名称<c:choose><c:when test="${requestScope.isMemoryUserName=='memoryUserName'}"> <input type="checkbox" name="isMemoryUserNameFlag"id="isMemoryUserNameFlag" value="1" checked /> </c:when><c:when test="${requestScope.isMemoryUserName=='noMemoryUserName'}"> <input type="checkbox" name="isMemoryUserNameFlag"id="isMemoryUserNameFlag" value="1" /> </c:when><c:otherwise><input type="checkbox" name="isMemoryUserNameFlag"id="isMemoryUserNameFlag" value="1" /> </c:otherwise></c:choose>。

J2EE Web组件课程设计实例项目——CRM系统后台管理页面实现示例(第3部分)

J2EE Web组件课程设计实例项目——CRM系统后台管理页面实现示例(第3部分)

1.1J2EE Web组件课程设计实例项目——CRM系统后台管理页面实现示例(第3部分)1.1.1实现右面的内容(表格)1、为rightContent.html页面提供对应的CSS样式文件rightContent.css2、在该样式文件中引用通用样式文件@import url("commonStyle.css");3、在rightContent.html页面文件中链接rightContent.css文件4、实现数据表格的最外层<div id="theOuterWarper"></div>#theOuterWarper{width:100%;}5、实现顶部的状态信息行<div id=firstRow_theOuterWarper></div>#firstRow_theOuterWarper{height:30px;width:100%;background:url(../images/tableDataImages/tab_05.gif);margin-bottom:0px;margin-top:0px;}6、实现顶部中的左右状态信息(1)HTML标签<div id=firstRow_theOuterWarper><div id="firstColumn_firstRow_theOuterWarper"></div><div id="secondColumn_firstRow_theOuterWarper"><img src="images/tableDataImages/tb.gif" /><span>您当前的位置</span>:潜在市场管理</div><div id="thirdColumn_firstRow_theOuterWarper"></div><div id="fourColumn_firstRow_theOuterWarper"><input type="checkbox" name="selectAllDataItemCheckbox" value="1" />全选<img src="images/tableDataImages/22.gif" /><a href="#">新增</a><img src="images/tableDataImages/33.gif" /><a href="#">修改</a><img src="images/tableDataImages/11.gif" /><a href="#">删除</a> </div></div>(2)对应的CSS样式#firstColumn_firstRow_theOuterWarper{float:left;width:12px;height:30px;margin-left:0px;background:url(../images/tableDataImages/tab_03.gif);}#secondColumn_firstRow_theOuterWarper{float:left;position:relative;top:5px;}#secondColumn_firstRow_theOuterWarper img{position:relative;top:3px;}#secondColumn_firstRow_theOuterWarper span{font-weight: bold;}#thirdColumn_firstRow_theOuterWarper{float:right;height:30px;background:url(../images/tableDataImages/tab_07.gif); }#fourColumn_firstRow_theOuterWarper{float:right;height:30px;padding-top:5px;}#fourColumn_firstRow_theOuterWarper img{width:14px;height:14px;margin-left:5px;}7、实现中间的表格#dataTableTagID{border-top-width: 0px;border-right-width: 0px;border-bottom-width: 0px;border-left-width: 0px;border-top-style: none;border-right-style: none;border-bottom-style: none;border-left-style: none;}#firstRowFirstColumnTDTagID{width:8px;background:url(../images/tableDataImages/tab_12.gif); }#secondColumnDataTableTagID{width:100%;border: 0px none #FFFFFF;background-color: b5d6e6;}.dataTHeadCellCSSClassStyle{height:22px;background:url(../images/tableDataImages/bg.gif);background-color:#FFFFFF;text-align: center;}#firstColumnTDTagID{width:3%;}#secondColumnTDTagID{width:3%;}#thirdColumnTDTagID{width:12%;}#fourColumnTDTagID{width:14%;}#fifthColumnTDTagID{width:18%;}#sixthColumnTDTagID{width:23%;}#servenColumnTDTagID{width:15%;}.dataCellCSSClassStyle{height:20px;background-color:#FFFFFF;text-align: center;}#firstRowThirdColumnTDTagID{width:8px;background:url(../images/tableDataImages/tab_15.gif); }8、实现底部的状态信息行<div id=thirdRow_theOuterWarper></div>#thirdRow_theOuterWarper{height:35px;width:100%;background:url(../images/tableDataImages/tab_19.gif);margin-bottom:0px;margin-top:0px;}9、实现底部的状态信息行中的第1列<div id=thirdRow_theOuterWarper><div id="firstColumn_thirdRow_theOuterWarper"></div></div>#firstColumn_thirdRow_theOuterWarper{float:left;width:12px;height:35px;margin-left:0px;background:url(../images/tableDataImages/tab_18.gif);}10、实现底部的状态信息行中的第2列<div id=thirdRow_theOuterWarper><div id="firstColumn_thirdRow_theOuterWarper"></div><div id="secondColumn_thirdRow_theOuterWarper"> <span>共有50 条记录,当前第1/5 页</span> </div></div>#secondColumn_thirdRow_theOuterWarper{float:left;}#secondColumn_thirdRow_theOuterWarper span{color: #03515d;position:relative;top:10px;}11、实现底部的状态信息行中的第3列<div id=thirdRow_theOuterWarper><div id="firstColumn_thirdRow_theOuterWarper"></div><div id="secondColumn_thirdRow_theOuterWarper"> <span>共有50 条记录,当前第1/5 页</span> </div><div id="thirdColumn_thirdRow_theOuterWarper"></div></div>#thirdColumn_thirdRow_theOuterWarper{float:right;width:16px;height:35px;background:url(../images/tableDataImages/tab_20.gif);}11、实现底部的状态信息行中的第4列<div id="fourColumn_thirdRow_theOuterWarper"><a href="#"><img src="images/tableDataImages/first.gif" id="goFirstPageImgID" /></a><a href="#"><img src="images/tableDataImages/back.gif" id="goBackPageImgID" /></a><a href="#"><img src="images/tableDataImages/next.gif" id="goNextPageImgID" /></a><a href="#"><img src="images/tableDataImages/last.gif" id="goLastPageImgID" /></a><span >转到第<input name="targetPageCounter" id="targetPageCounter" type="text" size="4" /> 页</span><a href="#"><img src="images/tableDataImages/go.gif" id="goTargetPageImgID"/></a></div>#fourColumn_thirdRow_theOuterWarper{float:right;}#goFirstPageImgID{width:37px;height:15px;position:relative;top:7px;}#goBackPageImgID{width:43px;height:15px;position:relative;top:7px;}#goNextPageImgID{width:43px;height:15px;position:relative;top:7px;}#goLastPageImgID{width:37px;height:15px;position:relative;top:7px;}#goTargetPageImgID{width:37px;height:15px;position:relative;top:7px;}#targetPageCounter{height:12px;width:20px;border:1px solid #999999;}#fourColumn_thirdRow_theOuterWarper span{color: #03515d;position:relative;top:3px;}12、添加对应的JavaScript脚本程序(1)新建一个JavaScript脚本程序文件(2)在rightContent.html页面中引用该脚本文件<script src="javascript/rightContent.js"language="javascript" type="text/javascript"> </script>(3)编程该脚本中的相关的代码(4)测试现在的效果13、总体测试。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

J2EE 课程设计项目《蓝梦集团客户关系管理系统(CRM)系统》实现项目中的数据库连接池功能及测试1.1.1对未应用数据库连接池功能时的数据库连接的性能测试及结果1、添加一个性能测试的类TestConnectionPerformance(1)包名称为com.px1987.webcrm.dao.test,类名称为TestConnectionPerformance(2)编程该TestConnectionPerformance类代码package com.px1987.webcrm.dao.test;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import com.px1987.webcrm.dao.imple.MySQLConnectDBBean;import com.px1987.webcrm.dao.inter.ConnectDBInterface;import com.px1987.webcrm.exception.WebCRMException;public class TestConnectionPerformance {private String selectSqlStatement = "select * from customer_info";private ConnectDBInterface connectDBBean = null;public TestConnectionPerformance() throws WebCRMException ,SQLException{ connectDBBean=new MySQLConnectDBBean();long startTimer = System.currentTimeMillis();//先获取当前的毫秒数int loopIndex;for (loopIndex = 0; loopIndex < 50; loopIndex ++) {Connection oneConnection = connectDBBean.getConnection();PreparedStatement onePreparedStatement = oneConnection.prepareStatement(selectSqlStatement);ResultSet oneResultSet = onePreparedStatement.executeQuery();while (oneResultSet.next()) {}oneResultSet.close();onePreparedStatement.close();connectDBBean.closeDBCon();}System.out.println("经过"+loopIndex+"次的循环调用,花费的总时间为:" + (System.currentTimeMillis() - startTimer) + "ms\n");}public static void main(String[] args) throws WebCRMException,SQLException{ new TestConnectionPerformance();}}2、执行的结果1.1.2应用DBCP组件为系统提供数据库连接池(pool、buffer)功能从而优化系统性能(优化数据库连接,并体验面向接口编程所带来的优点)1、请大家思考(1)JDBC直接连接的主要问题是什么?对于共享资源的使用的设计方法,有一个很著名的设计模式:应用资源池(Resource Pool)。

该模式是为了解决资源的频繁分配和释放所造成的问题而提出的!而解决常规的JDBC所带来的各种问题,可以采用数据库连接池技术。

(2)什么是数据库连接池(Pool)的连接?----缓存已经存在的数据库连接对象,为什么要应用?数据库连接池(Connection Pool)池是一个很普遍的概念,和缓冲存储有机制相近的地方,都是缩减了访问的环节,但它更注重于资源的共享。

对于访问数据库来说,建立连接的代价比较昂贵,因此,数据持久层建立了“连接池”以提高访问的性能。

数据持久层把连接当作对象,整个系统启动后,连接池首先建立若干连接,访问本来需要与数据库连接的区域,都改为和池相连,池临时分配连接供访问使用,结果返回后,访问将连接交还。

这种设计消除了JDBC与数据源建立连接的延时,同时在应用级提供了对数据源的并发访问。

2、本项目计划采用DBCP-------添加DBCP的驱动程序*.jar包文件导入Apache DBCP的驱动程序*.jar包文件,最后为下面的状态3、为ConnectDBInterface接口提供一个新的实现类DBCPConnectDBBean(1)类名称为DBCPConnectDBBean,包名称为com.px1987.webcrm.dao.imple注意并体验“OCP原则”在代码功能扩展时的要求当系统中的某个方面的“需求”发生变化时,我们不应该直接修改原来的功能实现类,而只需要添加一个新的功能实现类以替换原来的功能实现类。

由于在数据库连接组件的设计方面,我们应用了接口隔离的手段,从而使得本设计是满足OCP原则的。

(2)编程该实现类package com.px1987.webcrm.dao.imple;import java.sql.Connection;import java.sql.SQLException;import java.util.logging.Level;import java.util.logging.Logger;import mons.dbcp.BasicDataSource;import com.px1987.webcrm.config.SystemConfigInfo;import com.px1987.webcrm.dao.inter.ConnectDBInterface;import com.px1987.webcrm.exception.WebCRMException;public class DBCPConnectDBBean implements ConnectDBInterface {private java.sql.Connection con = null;private static BasicDataSource oneDataSourceImple=null;private Logger logger = Logger.getLogger(this.getClass().getName());private static String JDBC_DBDriver_ClassName =null;private static String JDBC_DSN_URL = null;private static String JDBC_dbUserName=null;private static String JDBC_dbUserPassWord=null;private static String JDBC_dbcp_maxActive = null;static{JDBC_DBDriver_ClassName = SystemConfigInfo.getProperty("JDBC_DBDriver_ClassName");JDBC_DSN_URL = SystemConfigInfo.getProperty("JDBC_DSN_URL");JDBC_dbUserName = SystemConfigInfo.getProperty("JDBC_dbUserName");JDBC_dbUserPassWord = SystemConfigInfo.getProperty("JDBC_dbUserPassWord");JDBC_dbcp_maxActive = SystemConfigInfo.getProperty("JDBC_dbcp_maxActive");oneDataSourceImple=new BasicDataSource();oneDataSourceImple.setDriverClassName(JDBC_DBDriver_ClassName);oneDataSourceImple.setUrl(JDBC_DSN_URL);oneDataSourceImple.setUsername(JDBC_dbUserName);oneDataSourceImple.setPassword(JDBC_dbUserPassWord);oneDataSourceImple.setMaxActive(Integer.parseInt(JDBC_dbcp_maxActive)); //最大的连接数目oneDataSourceImple.setDefaultAutoCommit(true);}public void initDBConnection() throws WebCRMException{try {con=oneDataSourceImple.getConnection();}catch (java.sql.SQLException e) {logger.log(, e.getMessage());throw new WebCRMException("不能正确地连接数据库并且出现SQLException---可能是数据库服务器没有启动");}}public DBCPConnectDBBean() {}public void closeDBCon() throws WebCRMException {if(con==null){return;}try {con.close(); //注意:要识别是否为重复调用,否则会出现数据库连接已经关闭的状况con = null;}catch (SQLException e){logger.log(, e.getMessage());throw new WebCRMException("不能正确地关闭数据库连接");}}public Connection getConnection() throws WebCRMException {initDBConnection();return con;}public boolean isDBConnectionClose(){return (con==null)?true:false;}}3、对上面的DBCPConnectDBBean组件类的各个功能方法进行测试(1)修改TestMySQLConnectDBBean类中的对象创建语句connectDBBean=new MySQLConnectDBBean();改变为:connectDBBean=new DBCPConnectDBBean();因此修改和适应需求的变化比较容易!这样当数据连接的方式发生了变化,并不需要修改数据库连接的类代码!(2)再次执行该TestMySQLConnectDBBean测试用例类4、对比应用DBCP后的性能提高的效果——再次执行性能测试类TestConnectionPerformance程序将TestConnectionPerformance程序中的connectDBBean=new MySQLConnectDBBean();改变为下面的语句:connectDBBean=new DBCPConnectDBBean();采用JDBC直接连接时所花费的时间为:4297ms,而应用DBCP后的完成同样功能的数据访问,时间为500ms。

相关文档
最新文档