客户关系管理系统毕业论文

上传人:仙*** 文档编号:34900494 上传时间:2021-10-24 格式:DOC 页数:37 大小:854KB
收藏 版权申诉 举报 下载
客户关系管理系统毕业论文_第1页
第1页 / 共37页
客户关系管理系统毕业论文_第2页
第2页 / 共37页
客户关系管理系统毕业论文_第3页
第3页 / 共37页
资源描述:

《客户关系管理系统毕业论文》由会员分享,可在线阅读,更多相关《客户关系管理系统毕业论文(37页珍藏版)》请在装配图网上搜索。

1、客户关系管理系统毕业设计客户关系管理系统专业:计算机软件班级:09级计算机三班姓名:马海龙指导教师:赵明亮完成时间:2012年6月12日客户关系管理系统第一章 系统分析1.1 需求分析通过调查研究,要求系统满足有以下功能;由于操作人员的计算机知识普遍较差,要求有良好的人机界面。方便的数据选择查询,支持模糊查询功能。管理客户的详细信息:包括客户的基本信息、联系人信息、和服务信息。数据计算自动完成,尽量减少人工干预。1.2 可行性分析经济性通过计算机网络对客户信息进行管理,使企业对自身拥有的客户有了一个更为深该的了解。不仅能全面的统计客户的购买数量,及时的了解客户的动态信息,还可以根据计算机记录的

2、数据信息,不断的调整企业的生产发展动向。技术性 采用 Struts2.0+Spring3.0+Hibernate3.2 开源框架 数据库采用 SQLServer 2005 框架详解: Struts2.0: Struts 2是Struts的下一代产品,是在 struts 和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构的差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开,所以Struts 2可以理解为WebWork

3、的更新产品。虽然从Struts 1到Struts 2有着太大的变化,但是相对于WebWork,Struts 2只有很小的变化。Spring3.0: 是为了解决企业应用程序开发复杂性由Rod Johnson创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。Hibernate3.2: 是一个开放源代码的对象关系映射框架,它

4、对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。SQL是英文Structured Query Language的缩写,意思为结构化查询语言。SQL语言的主要功能就是同各种数据库建立联系,进行沟通。按照ANSI(美国国家标准协会)的规定,SQL被作为关系型数据库管理系统的标准语言。第二章 总体设计2.1 项目

5、规划客户关系管理系统是一个典型的数据库开发应用程序,营销管理,客户管理,服务管理,统计报表,基础数据如下:营销管理模块:该模块主要功能是对销售机会,客户开发计划进行增删改查操作。客户管理模块:该模块的主要功能是对客户信息,联系人,交往记录,历史订单等增删改查操作。服务管理模块:该模块主要功能是对客户服务进行添加、删除、查询等操作。报表管理模块:该模块主要起到统计数据的作用。基础数据模块:对字典表数据进行增删改查操作。2.2 系统功能结构图图1 数据表树型结构图第三章 系统设计3.1 设计目标 项目详解:因为项目中有许多重复的代码,我们可以将他抽象出一个公共的父类(BaseDao(对数据访问,制

6、定出增删改查方法),BaseAction(定义request,response,分页,页面返回变量)等等)包:com.action (存放Action类 用来处理用户请求和业务逻辑) com.biz(用来存放业务逻辑接口)com.bizImpl(业务逻辑接口的实现类)com.dao(用来存放数据访问接口)com.daoImpl(数据访问接口实现类)com.entity(存放实体类)com.util(存放工具类)JuTest(单元测试类)Web.xmlweb-appversion=2.5 xmlns=xmlns:xsi=http:/www.w3.org/2001/XMLSchema-instan

7、cexsi:schemaLocation= /配置DWRdwrorg.directwebremoting.servlet.DwrServletdebugtruedwr/dwr/*/解决页面使用懒加载问题openSessionInVieworg.springframework.orm.hibernate3.support.OpenSessionInViewFilteropenSessionInView/*/定义过滤去进行拦截转码doFiltercom.util.FilterdoFilter/*/Struts自带的过滤器struts2org.apache.struts2.dispatcher.ng

8、.filter.StrutsPrepareAndExecuteFilterstruts2/*/定义监听程序系统初始化时,启动org.springframework.web.context.ContextLoaderListener/指定 applicationContext.xml 位置,classpath代表src目录下contextConfigLocationclasspath:applicationContext.xmllogin.jspDatasource.properties(配置文件):/在程序启动时由Spring工厂对此配置文件进行解析加载datasource.type=sqls

9、erver hibernate.dialect=org.hibernate.dialect.SQLServerDialectdatasource.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriverdatasource.url=jdbc:sqlserver:/localhost:1433;DatabaseName=clientdatasource.username=sadatasource.password=123struts.xml:/接受页面请求(如user_login) 为跳转到userAction 下的login方法

10、/返回堆栈下的信息来进行,跳转或重定向$successResultValue$redirectPathapplicationContext.xml(Hibernate由 Spring 控制管理):/ 加载datasource.properties 里的数据配置信息$datasource.driverClassName$datasource.url$datasource.username$datasource.password /Hibernate配置与注入数据源updates$hibernate.dialect$hibernate.show_sql$hibernate.format_sql$h

11、ibernate.jdbc.fetch_size$hibernate.jdbc.batch_sizefalse$hibernate.connection.release_mode /扫描 com.entity下的所有类 com.entity / Hibernate 持久化层 模板化 /注入事物管理器 log4j.properties :/日志信息管理3.2 开发及运行环境开发工具:Myeclipse 8.5(java开发工具),Powerdesigner(数据库建模工具) ,SQLServer(微软的数据库产品)开发环境: Windows操作系统,Tomcat服务器,JDK6.0 硬件平台:C

12、PU:P41。8GHz;内存:256MB以上。软件平台:操作系统:Windows 系统;数据库:SQL Server 2000;浏览器:推荐使用IE6.0;Web服务器:IIS5.0;分辨率:最佳效果1024*768。3.3 数据库设计本系统数据库采用SQLServer2005数据库,系统数据库名称为jb_crm_team0_Data.MDF。数据库jb_crm_team0_Data.MDF中包含15张表。关于数据库中的数据表请参见后文。第四章 客户管理模块设计(主要代码)4.1 主要模块设计登陆与权限模块 此模块用于用户的登陆验证与权限数据库表 用户登录界面 /用户点击登陆 提交SysUse

13、r_login function tosubmit() document.forms0.action=SysUser_login; document.forms0.submit(); 后台数据接收(通过Struts与Spring控制找到请求的Action类) /注解 将此类名定义名为SysUserAction(Spring将通过解析找到此类) Component(SysUserAction) /继承事先写好的公用类 BaseAction public class SysUserAction extends BaseAction /将SysUserBiz(写好的对数据进行逻辑处理的接口,增删改查

14、方法)注入此类Resource(name = SysUserBiz)private SysUserBiz sysUserBiz; /封装SysUser类 private SysUser sysUser;public SysUser getSysUser() return sysUser;public void setSysUser(SysUser sysUser) this.sysUser = sysUser; /请求的对应方法 public String login()String Msg=用户名或密码错误!;this.setSuccessResultValue(login.jsp);If(

15、sysUserBiz.login(this.sysUser.getUsrName(), this.sysUser.getUsrPassword() Msg=;this.setSuccessResultValue(html/index.jsp);this.getRequest().getSession().setAttribute(Uname,sysUserBiz.getByName(this.sysUser.get UsrName();this.getRequest().setAttribute(Msg, Msg);return SUCCESS;营销管理模块 数据库 查询所有操作public

16、String getAll() /调用BaseAction里的分页方法this.doPage(from SalChance, null);this.setSuccessResultValue(/html/sale/list.jsp) ;return SUCCESS;BaseAction的分页方法public void doPage(String strSql, String urlparam) / Page page = new Page(strSql, 20, getPage(), 5,/ urlparam);/10:每页显示10条数据 5:页之间的跨度为5page_.initPage(st

17、rSql, 10, getPage(), 5, urlparam);setPageHtml(page_.getPageText();/ 分页setPageList(page_.getPageList();模糊查询 public String getByInfo()String hql =from SalChance ;if(salChance.getChcCustName()!=null & !salChance.getChcCustName().equals()hql+=where chcCustName Like %+salChance.getChcCustName()+%;else if

18、(salChance.getChcTitle()!=null & !salChance.getChcTitle().equals() hql+=where chcTitle Like %+salChance.getChcTitle()+%;else if(salChance.getChcLinkman()!=null & !salChance.getChcLinkman().equals() hql+=where chcLinkman Like %+salChance.getChcLinkman()+%; this.doPage(hql, null); this.setSuccessResul

19、tValue(/html/sale/list.jsp) ; return SUCCESS;添加public String add()if(this.salChanceBiz.add(this.salChance) /添加成功后系统将再次加载数据,此处用到了Redirect(重定向) this.setRedirectPath(SalChance_getAll);return Redirect; this.setSuccessResultValue(/html/sale/add.jsp); return SUCCESS;/Form表单里控件的名字要与Action里定义的实体名字吻合。如下为Acti

20、on实例的salChance类下的chcStatus字段赋值修改 public String update() if(this.salChanceBiz.update(this.getSalChance() this.setRedirectPath(SalChance_getAll); return Redirect; return ERREO; 填充 public String toEdit() this.getRequest().setAttribute(SalChanceByid,salChanceBiz.getSal(this.salChance.getChcId(); this.ge

21、tRequest().setAttribute(AllUser, sysUserBiz.getAll(); this.setSuccessResultValue(/html/sale/edit.jsp); return SUCCESS;/在页面获取存在request内的数据对下拉列表填充 请选择. /迭代循环 option value= /删除操作 public String del() if(this.salChanceBiz.del(this.getSalChance().getChcId() this.setRedirectPath(SalChance_getAll);return Re

22、direct; this.setSuccessResultValue(error.jsp);return SUCCESS; /通过JAVASCRIPT 提示是否要删除。img onclick=if(confirm(您确认删除这条数据?)to(/SalChance_del?salChance.chcId=) title=删除src=/html/images/bt_del.gif class=op_button / 客户开发计划:此模块为客户计划操作,分三种状态,制定开发计划,开发计划得到的响应,开发结束(主要知识点介绍,其他请参见上模块) /如果状态已完毕/这里用到了Struts2 标签去判断i

23、mgonclick=javascript:window.location.href=/salPlan_getByid?salPlan.salChance.chcId=¶m=3title=查看 src=/html/images/bt_detail.gifclass=op_button /如果状态开发中imgonclick=javascript:window.location.href=/salPlan_getByid?salPlan.salChance.chcId=¶m=1 onclick=javascript:alert(您没有权限!)title=制定计划 src=/html/

24、images/bt_plan.gifclass=op_button /imgonclick=javascript:window.location.href=/salPlan_getByid?salPlan.salChance.chcId=¶m=2onclick=javascript:alert(您没有权限!)title=执行计划 src=/html/images/bt_feedback.gifclass=op_button /imgonclick=alert(用户开发成功,已添加新客户记录。);window.location.href=salPlan_upChan?salChance.

25、chcId=&salChance.chcStatus=2;onclick=javascript:alert(您没有权限!)title=开发成功 src=/html/images/bt_yes.gifclass=op_button /已完毕处理,考虑开发成功只需要状态的修改,所以页面只需要编号(id)和状态(status)通过id进行查询此条信息,然后将状态进行赋值,执行修改。 public String upChan() String status = this.getSalChance().getChcStatus();this.setSalChance(this.salChanceBiz.

26、getSal(this.salChance.getChcId(); this.getSalChance().setChcStatus(status); if(this.salChanceBiz.update(this.getSalChance() this.setRedirectPath(salPlan_SalChanAll); return Redirect; this.setSuccessResultValue(error.jsp);return SUCCESS; 客户信息管理介绍:此模块对客户信息的管理及其对子类(联系人,交往记录,历史订单)进行操作(增删改查),如果客户等级为重点客户的

27、信息将不显示删除操作(主要知识点介绍,其他请参见上模块)/等级判断如果是重点客户将没有删除按钮/如果不是则有删除按钮/通过Struts2标签的if标签,去判断用户等级imgonclick=if(confirm(您确认删除这条数据?)to(cstCustomer_del?cstCustomer.custNo=) onclick=javascript:alert(您没有权限!)title=删除 src=/html/images/bt_del.gifclass=op_button /填充public String toEdit() if (this.cstCustomerBiz.getCus(thi

28、s.cstCustomer.getCustNo() != null) this.getRequest().setAttribute(cstCust,this.cstCustomerBiz.getCus(this.cstCustomer.getCustNo();this.getRequest().setAttribute(basDict,this.basDictBiz.getByInfo(地区);this.getRequest().setAttribute(basDictc,this.basDictBiz.getByInfo(客户等级);this.setSuccessResultValue(/h

29、tml/cust/cust/edit.jsp);return SUCCESS;客户流失介绍:此模块为客户流失,分三种状态(已流失,暂缓流失,警告),默认状态为警告,我们可以进行暂缓和流失操作,确认流失之后将不可对其在操作。(查改)通过状态判断/考虑此操作都是对信息的修改操作,只是跳转页面不同,我们可以通过参数判断跳转的页面(param)javascript:window.location.href=cstCustomer_toRelayOrConfirm?param=relay&cstLost.lstId=8 public String toRelayOrConfirm() if (this.

30、cstLostBiz.getCl(this.getCstLost().getLstId() != null) this.getRequest().setAttribute(lost,this.cstLostBiz.getCl(this.getCstLost().getLstId();if (this.param.equals(relay) this.setSuccessResultValue(/html/cust/lost/relay.jsp); else if (this.param.equals(confirm) this.setSuccessResultValue(/html/cust/

31、lost/confirm.jsp);return SUCCESS;其他模块均为普通增删改查操作(省略)结束语这次我们的设计是比较正规化的,设计之前要开题,开题报告通过才能展开设计。这不仅让我学到如何做好开题报告,也让我主动的分析设计,在展开设计之前就做了很多工作,培养了我的软件设计能力。在开始具体设计以前,我已经完成系统的结构设计,数据库规划等工作,这样以后的设计就事半功倍了。在毕业设计中除了学习了具体的专业知识外,我认为最重要却是让我们建立了软件设计的正确概念。在这次毕业设计的过程中,我体会到要想开发一个系统软件,不仅需要相当的专业技术知识,还要有严谨缜密的思维能力。只有思想上清晰了,编程才

32、有意义,否则就是白费力气。同时还要善于捕获细小的方面,因为那往往是这个程序的致命因素。这次毕业设计培养了我的细心和耐性,更树立了一种科学的态度。这对我以后的工作和学习也有很大的帮助和指导作用。同时也深刻认识到了本身不存在很多不足之处,还需要不断地学习来充实完善自己,只有这样才能学有所成,求得更大的发展。通过交流我也感觉到,无论什么方面的编程,学习过程是一样的,都要经过不断的实践积累,不是一蹴而就的。回想这三个月是艰苦的三个月,也是收获的三个月。了解了正确的管理方法,积累了经验。致谢首先我要真挚的感谢我的指导老师赵老师,在他的督促帮助下我顺利完成了我的毕业设计。在他的指导下,我从毫无头绪到现在能

33、把整个程序大思路清晰的展现出来,虽然不能说这个我的系统软件有多完善,但这却是我在赵老师的指导下一步一步完成的。在制作毕业设计期间赵老师经常询问我们的设计进度以及在设计中遇到的困难,帮助我们解决我们设计中的难点。在整个设计过程中,他对我们严格要求,按照计划定期检查我们的设计成果,为我们理清整个设计阶段的任务,使我们能够按计划完成设计。其次我要感谢我们计算机系的领导对我们毕业生的关心和支持,他们不仅要处理系里的一切大小事情,还要像其他老师一样带毕业设计的学生,在这样的情况下,他们还时时关心我们毕业班的学生,根据我们毕业设计的进度,督促老师多跟我们联系,以便指导我们完成毕业设计。所以我衷心的感谢他们。最后,我要感谢在毕业设计的整个过程中帮助我的所有领导、老师和同学,没有他们的帮助我也不可能完成此次毕业设计。感谢他们给我的各方面的关心和帮助,对指导老师的认真负责的指导再次致以衷心的感谢。 37- 37 -

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!