J2EE 课程设计项目《蓝梦集团客户关系管理系统(CRM)系统》工作人员信息的CRUD实现和测试

合集下载

基于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 课程设计实训项目——《蓝梦网上商城》——系统详细设计说明书(第3部分)

J2EE 课程设计实训项目——《蓝梦网上商城》——系统详细设计说明书(第3部分)

J2EE 课程设计实训项目《蓝梦网上商城》系统详细设计说明书编写人(签字):日期:年月日用户方项目代表(签字):日期:年月日开发方项目代表(签字):日期:年月日质量保证代表(签字):日期:年月日1目录第1章引言···············································································错误!未定义书签。

1.1编写目的 ········································································错误!未定义书签。

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.1对查询结果的数据实现在线“实时”显示1、在线“实时”显示数据的实现原理(1)利用事件指向onmouseover和onmouseout事件(2)在事件处理函数中动态显示或者隐藏某个<div>标签(区域)2、动态添加或者修改<div>标签内的数据(1)数据已经动态获得(2)利用AJAX技术动态(异步)获得服务器返回的数据3、订单详细信息4、与订单相关的客户信息——必须要应用AJAX技术5、与订单相关的员工信息——必须要应用AJAX技术6、产品详细信息(1)产品的详细信息显示(2)产品名称和型号的鼠标指向事件7、合同详细信息8、与合同相关的客户信息——必须要应用AJAX技术9、客户详细信息1.1.2请求状态即时显示的功能实现1、请求状态即时显示在本项目中的具体应用——在请求的响应时间比较慢的时候,及时状态提示(1)表单请求(如查询)(2)翻页请求2、实现的基本原理(1)在提交过程中动态显示一个GIF动画图(2)将该GIF动画图(<img>)移动到目标显示位置(如屏幕的正中)3、实现的方法(1)利用<div>包装<img>标签<div id="popUpLoadStatusImageDivTagID"><img src="../images/preload.gif" /></div> (2)在CSS样单表中设置该图片的显示风格#popUpLoadStatusImageDivTagID{position:absolute;top:130px;z-index:999;display:none;width:100px;height:50px;background:#FFFFFF;}#popUpLoadStatusImageDivTagID img{width:100%;height:100%;}(3)在JavaScript脚本代码中动态显示和移动它function createLoadStatusImageCSSFilter() {var popUpLoadStatusImageDivTagInstance=document.getElementById("popUpLoadStatusImageDivTagID");popUpLoadStatusImageDivTagInstance.style.display="inline";popUpLoadStatusImageDivTagInstance.style.left =(parseInt(document.body.scrollWidth) - 200) / 2 + "px";document.body.style.filter = "alpha(opacity=20)"; //为IE提供的滤镜document.body.style.opacity = "0.20"; //为FireFox提供的滤镜}1.1.3兼容不同版本和厂商浏览器的JavaScript编程实现方法1、对于不同版本和厂商的浏览器应用不同的CSS和页面文件<script language="javascript" type="text/javascript">function switchRightDefaultContent(){var browserType=erAgent;var rightContentFrameObj=document.getElementById("rightContentFrame");if(browserType.indexOf("MSIE 6.0")> -1){rightContentFrameObj.src="rightDefaultContent_IE6.html";}else{rightContentFrameObj.src="rightDefaultContent.html";}}</script>可以参考saleManage目录内的index.jsp页面内对不同版本浏览器应用不同的文件的代码示例,该方法一般应用于差别比较大的场合。

J2EE 课程设计项目《蓝梦集团客户关系管理系统(CRM)系统》对客户信息修改、删除和分页查询及跳转的功能实现

J2EE 课程设计项目《蓝梦集团客户关系管理系统(CRM)系统》对客户信息修改、删除和分页查询及跳转的功能实现

J2EE 课程设计项目《蓝梦集团客户关系管理系统(CRM)系统》对客户信息进行修改、删除和分页查询及页面跳转的功能实现1.1.1数据的修改和删除的功能实现1、在每个数据项目中都设计一个“修改”和“删除”的超链接(1)结果页面(2)“修改数据”实现的基本思路1)为超链接提供事件响应函数,但要注意超链接的onclick事件的正确的定义2)在事件响应函数中获得待修改的数据的唯一ID(比如编号等数据)3)向服务器发送修改数据的请求(但要将唯一的ID和当前的分页的页号发送到服务器程序)4)服务器端程序查询出该数据行,并将结果返回到修改页面5)操作者在修改页面中修改数据中的指定项目,再提交6)再查询修改后的结果表,并返回到原来的页号所在数据页2、在“修改”的超链接中添加处理方法(1)为“修改”的超链接添加fastGoTOUpdateSomeOneOrderInfoTargetPage函数代码<ahref="javascript:fastGoTOUpdateSomeOneOrderInfoTargetPage(${oneOrderInfoPO.order_ID}) ;">修改</a>但不能应用下面的形式:<a href="#"onclick="javascript:fastGoTOUpdateSomeOneOrderInfoTargetPage(${oneOrderInfoPO .order_ID});">修改</a>否则将会出现下面的错误(2)fastGoTOUpdateSomeOneOrderInfoTargetPage函数的代码function fastGoTOUpdateSomeOneOrderInfoTargetPage(updatedOrderID){window.location.href="${pageContext.request.contextPath}/orderInfoManageServlet.action" +"?orderInfoActionType=3&order_ID="+updatedOrderID+"&targetPageCounter=${onePageStatePO.currentPageNumber}"+"&sqlQueryWhereString=${requestScope.sqlQueryWhereString}";}注意:必须要将待删除的某个数据项目的id传给服务器。

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.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 课程设计项目——蓝梦商业集团客户关系管理(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、添加对客户信息表单数据进行包装的ActionForm组件(1)类名称为CustomerInfoActionForm,包名称为com.px1987.webcrm.actionform(2)在该类中添加如下成员属性——满足所有(与客户信息管理有关)的表单的要求private int customerInfoActionType; //对客户的操作方式private int customer_ID; //客户IDprivate String customer_name; //客户姓名private byte customer_sex; //客户性别private short customer_age; //客户年龄private byte customer_isValid; //客户信息是否有效private String customer_occupation; //客户所在行业private String customer_unitSize; //客户企业的规模private String customer_unitName; //客户单位的名称private String customer_unitInstructionText; //客户单位简介private byte customer_importantLevel; //客户重要级别private int yearSelect; //更新日期中的年private int monthSelect; //更新日期中的月private int daySelect; //更新日期中的日private byte customer_level; //客户信用等级private String customer_eMail; //客户电子邮箱private String customer_postCode; //邮政编码private String customer_workAddress; //客户通信地址private String customer_mobileNumber; //客户手机号private Date customer_updateDate; //最后更新日期private byte queryMethodRadioButtonID; //查询表单中的查询方式private byte targetPageCounter; //分页查询中的目标页数private String sqlQueryWhereString; //分页查询中的上次的查询SQL条件private String selectAllDataItemCheckbox; //全部选中的CheckBox标签提交的值private int someOneCheckboxTagID[]; //各个编号CheckBox标签提交的值private String customer_occupationAdvance; //高级查询中的客户所在行业private String customer_unitSizeAdvance; //高级查询中的客户企业的规模private String customer_nameAdvance; //高级查询中的客户姓名private short customer_ageAdvance; //高级查询中的客户年龄private String personalCustomer_IDOperator=null; //高级查询表单中的客户编号的操作符private String customer_occupationOperator=null; //高级查询表单中的行业类型的操作符private String customer_unitSizeOperator=null; //高级查询表单中的企业规模的操作符private String customer_nameOperator=null; //高级查询表单中的客户姓名的操作符private String customer_ageOperator=null; //高级查询表单中的客户年龄的操作符private String customer_occupationOperatorAdvance=null; //高级查询表单中的行业类型的操作符private String customer_unitSizeOperatorAdvance=null; //高级查询表单中的企业规模的操作符private String customer_nameOperatorAdvance=null; //高级查询表单中的客户姓名的操作符private String customer_ageOperatorAdvance=null; //高级查询表单中的客户年龄的操作符private String customer_unitNameOperator=null; //高级查询表单中的单位名称的操作符private String customer_sexOperator=null; //高级查询表单中的客户性别的操作符private String customer_eMailOperator=null; //高级查询表单中的客户电子邮件的操作符private String customer_mobileNumberOperator=null; //高级查询表单中的客户联系电话的操作符private byte dataItemsPerPage; //分页中的每页显示的数据条数private byte someOneOrderMethod; //重新按照某种排序方式再次查询数据(3)为这些成员属性提供get/set方法2、添加一个对客户信息各种管理功能控制调度的Action组件(1)类名称为CustomerInfoManageAction,包名称为com.px1987.webcrm.action,继承com.px1987.webcrm.action.BaseClassOfAllAction基类(2)编程该CustomerInfoManageAction组件类3、测试1.1.1分页数据查询功能的实现1、在分页数据查询实现中要区分是第一次查询还是分页跳转(1)CustomerInfoManageAction中的doQueryCustomerInfoAction方法该方法是响应通过查询表单发送的查询请求,为分页查询中的第一次查询。

J2EE 课程设计项目——蓝梦集团客户关系管理系统(CRM)实现

J2EE 课程设计项目——蓝梦集团客户关系管理系统(CRM)实现

J2EE 课程设计项目——蓝梦集团客户关系管理系统(CRM)实现1.1.1蓝梦集团客户关系管理系统(CRM)实现中所应该遵守的基本要求1、对数据访问层编程实现的基本要求(1)尽量在SQL语句中少用IN操作符虽然用IN操作符写拼接出的SQL语句清晰易懂,但由于性能低下——主要是由于用IN 的SQL语句至少多了一个转换过程。

因此尽量在系统开发中不应用该操作符,必要时可以用EXISTS方案代替。

(2)对NOT IN操作也不推荐使用,可以用NOT EXISTS或外连接方案代替,因为前者不能够使用表中的索引。

(3)由于不等于操作符是永远不会用到索引的,因此对它处理只会产生全表扫描。

可以用相同功能的操作运算符代替。

(4)由于UNION在进行表链接后会筛选掉重复的记录,在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果,因此在数据量相当庞大时,会很费时,因此可以用UNION ALL的形式代替UNION,节省大量排序筛选的时间。

(5)当存在索引的时候,尽量使用比较准确的大于小于操作符。

如:尽量使用A>=3而不用A>2,因为前者可以直接定位到等于3的记录,而后者要先定位到等于2的记录再进行比较筛选。

2、对系统中的业务服务层和数据访问层充分应用单元测试单元测试是在软件开发过程中要进行的低级别的测试活动,在单元测试活动中,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。

单元测试不仅仅是作为无错编码一种辅助手段在一次性的开发过程中使用,单元测试也必须还应该是可重复的,无论是在软件修改,或是移植到新的运行环境的过程中。

图4.1为项目中的数据库连接组件的单元测试的结果局部截图。

图4.1项目中的数据库连接组件的单元测试的结果局部截图单元测试是由程序员自己来完成,最终受益的也是程序员自己。

程序员有责任编写功能代码,同时也就有责任为自己的代码编写单元测试用例——验证对应的功能代码的行为和系统所期望的保持一致。

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课程设计《项目开发指导》——第1章 课程设计的项目实施和管理(第3部分)

J2EE课程设计《项目开发指导》——第1章 课程设计的项目实施和管理(第3部分)

第1章课程设计的项目实施和管理(第3/4部分)1.1课程设计中推荐的项目示例1.1.1蓝梦教育集团教育信息化系统1、课程设计待开发的项目立项背景说明某国际化的著名教育企业蓝梦教育集团(Blue Dream Group),为了能够在中国迅速地开展与教育产品和IT技能培训有关的各个方面的业务、并期望能够取得比较好的效益和提高各项教育产品的质量以迎接新的挑战,需要全面地提升本土化的信息化项目建设的进度、拟计划开发出下文将要介绍的各个软件项目。

每个软件项目都希望能够解决蓝梦教育集团在产品销售推广、运营和管理、宣传推广和技术服务中所存在的各种信息管理和处理等方面的问题,各个子项目相互组合在一起,又将能够构成一个完整的蓝梦教育集团的信息化大系统。

每个子项目之间需要实现数据共享、业务方法远程访问等功能性的要求。

2、信息化建设进度的计划安排蓝梦教育集团的整个信息化建设的计划安排将依据企业本身在经营过程中的不同阶段的需要而实现——计划分为两个阶段。

本课程设计的项目开发工作首先实现蓝梦教育集团的第一个阶段的开发任务,第二阶段的开发任务以后再提出和实施。

注意:这样分配项目开发计划的目的是能够逐阶段地开展课程设计,比如在大二年级阶段完成第一阶段的开发任务,而在大三年级阶段完成第二阶段的开发任务——体现课程设计的连续性和技术应用的层次性。

3、蓝梦教育集团第一阶段项目开发计划(1)蓝梦教育集团企业运营、管理和宣传活动中所可能存在的软件系统分类下图1.8所示为企业经营过程中所需要的各种类型的子系统的说明,首先企业需要一个对外的门面——这就是企业的门户网站;当然,企业内部也一定还会存在大量的业务数据需要处理和业务流程、操作需要实现自动化——这将构成企业内部运营和管理应用系统;企业与企业之间、企业与其用户或者消费者之间也还会存在着一定的交互——它们将构成企业外部运营和管理系统。

图1.8 企业经营过程中所需要的各种类型的子系统的图示说明企业的产品或者服务需要推广和销售,则一定需要对外进行宣传——这将构成企业业务宣传和推广系统;某些企业的行业中的业务流程是多环节和多层次的人员协同完成的,为了提高业务处理和业务流程的效率,需要提供一套完整的工作流管理系统。

《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系统架构和程序设计》课程设计实训项目——蓝梦网上商店系统详细设计说明书

《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测试用例。

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

J2EE 课程设计项目《蓝梦集团客户关系管理系统(CRM)系统》工作人员信息的CRUD实现和测试
1.1.1工作人员信息的增、删、改、查(CRUD)实现
1、在项目中添加一个包装工作人员登录信息的PO类
(1)类名称为LoginUserInfoPO,包名称为com.px1987.webcrm.dao.po,并且实现java.io.Serializable接口
(2)在PO类中添加如下的成员
private int loginUser_ID; //登录用户ID
private String loginUser_departmentName; //登录用户所在的部门名称
private String loginUser_userName; //登录用户帐号
private String loginUser_userPassWord; //登录用户密码
private byte loginUser_lockStatus; //登录用户的帐号所处的状态(1代表正常状态,0代表锁定状态)
private List<String> loginUserRole_Name; //登录用户的角色类型的名称集private List<String> availableResourceName; //登录用户可访问的系统资源名称集private List<Integer> availableOperateTypeCoding; //登录用户功能操作类型的编码集private String loginUser_newUserPassWord; //登录用户修改后的新密码
(3)为这些成员属性提供get/set方法
2、添加一个对工作人员信息进行操作的DAO接口
(1)接口的名称为LoginUserInfoCRUDInterface,包名称为com.px1987.webcrm.dao.inter
(2)设计该接口中的CRUD方法——最终的代码请参考源程序
3、为该LoginUserInfoCRUDInterface接口提供一个实现类
(1)类名称为LoginUserInfoCRUDImple,包名称为com.px1987.webcrm.dao.imple ,并且实现com.px1987.webcrm.dao.inter.LoginUserInfoCRUDInterface接口
(2)编程该实现类
1.1.2对工作人员信息DAO组件进行单元测试
1、在测试项目中添加一个测试用例类
(1)类名称为Test LoginUserInfoCRUDImple,包名称为com.px1987.webcrm.dao.test,被测试类选择为com.px1987.webcrm.dao.imple.LoginUserInfoCRUDImple
(2)选择被测试的方法
2、编程该测试用例类程序
3、执行该测试用例类程序
4、再反向测试(模拟错误登录)
1.1.3了解MySQL和Oracle在编程应用方面的不同
1、自动增长的数据类型处理
MySQL有自动增长的数据类型,插入记录时不用操作此字段,会自动获得数据值。

Oracle没有自动增长的数据类型,需要建立一个自动增长的序列号,插入记录时要把序列号的下一个值赋于此字段。

CREATE SEQUENCE 序列号的名称(最好是表名序列号标记)INCREMENT BY 1 START WITH 1 MAXV ALUE 99999 CYCLE NOCACHE;其中最大的值按字段的长度来定, 如果定义的自动增长的序列号NUMBER(6) , 最大值为999999 INSERT 语句插入这个字段值为: 序列号的名称.NEXTV AL。

2、单引号的处理
MySQL可以用双引号包起字符串,Oracle只可以用单引号包起字符串。

在插入和修改字符串前必须做单引号的替换:把所有出现的一个单引号替换成两个单引号。

3. 翻页的SQL语句的处理
MySQL处理翻页的SQL语句比较简单,用LIMIT 开始位置, 记录个数;Oracle处理翻页的SQL语句就比较繁琐了。

每个结果集只有一个ROWNUM字段标明它的位置, 并且只能用ROWNUM < 100, 不能用ROWNUM>80。

以下是经过分析后较好的Oracle翻页SQL语句( ID是唯一关键字的字段名):
SELECT ID, [FIELD_NAME,...] FROM TABLE_NAME WHERE
ID IN ( SELECT ID FROM (SELECT ROWNUM AS NUMROW,
ID FROM TABLE_NAME WHERE 条件1 ORDER BY 条件2)
WHERE NUMROW > 80 AND NUMROW < 100 ) ORDER BY 条件3;
4、长字符串的处理
长字符串的处理Oracle也有它特殊的地方。

INSERT和UPDATE时最大可操作的字符串长度小于等于4000个单字节, 如果要插入更长的字符串, 请考虑字段用CLOB类型,方法借用Oracle里自带的DBMS_LOB程序包。

插入修改记录前一定要做进行非空和长度判断,不能为空的字段值和超出长度字段值都应该提出警告, 返回上次操作。

5、日期字段的处理
MySQL日期字段分DATE和TIME两种,Oracle日期字段只有DATE,包含年月日时分秒信息,用当前数据库的系统时间为SYSDATE, 精确到秒,或者用字符串转换成日期型函数TO_DATE(‘2011-08-01’,’YYYY-MM-DD’) 。

6. 空字符的处理
MySQL的非空字段也有空的内容,Oracle里定义了非空字段就不容许有空的内容。

按MySQL的NOT NULL来定义Oracle表结构,导数据的时候会产生错误。

因此导数据时要对空字符进行判断,如果为NULL或空字符,需要把它改成一个空格的字符串。

7、字符串的模糊比较
MySQL中用“字段名like”,Oracle也可以用“字段名like”,但这种方法不能使用索引、并且速度不快。

而用字符串比较函数instr(字段名,字符串)>0 会得到更精确的查找结果。

相关文档
最新文档