《CRM客户关系管理需求分析.doc》由会员分享,可在线阅读,更多相关《CRM客户关系管理需求分析.doc(36页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、长沙民政职业技术学院毕业实践报告题目:_类型:毕业论文毕业设计毕业专题毕业论文指导老师:_李政仪_系 别:_ 软件学院_班 级:_计应0833_学 号:_姓 名:_胡蓉_年 月 日客户关系管理系统计应0833班项目参与人员: 学号姓名职位胡蓉组长汪利君何珍妮目录1 概述11.1 范围21.2软硬件坏境需求21.3安全保密需求 21.4可维护性与可扩展性需求32 功能性需求32.1用户管理32.1.1 用户注册42.1.2 用户登录 42.1.2.1用户登陆模块52.2 客户管理62.2.1客户列表72.2.2客户添加72.2.2.1客户添加流程72.2.3客户修改82.2.4客户删除82.2.
2、5客户共享82.2.6客户移交92.2.7 查看详细信息132.2.8 共享客户92.2.8.1我共享给别人的客户92.2.8.2别人共享给我的客户92.3 联系人管理102.3.1 联系人列表102.3.2 联系人添加112.3.3 联系人修改112.3.4 联系人删除122.3.5 查看联系人详细信息123 其他功能性需求解析133.1 解决中文乱码133.2 判断是否已登录133.3日志管理144 数据库设计14结论 22致谢 23参考文献 24附录 251 概述客户关系管理系统是以客户为中心,基于客户生命周期的全过程,采用协同技术和理念,帮助企业更好的获取客户、保留客户及提升客户价值、
3、提高客户满意度和忠诚度,有效的避免客户信息流失,从而全面提升企业竞争能力和盈利能。客户是公司最宝贵的资源,为了更好的发掘老客户的价值,并开发更多新客户,通过这个客户关系管理系统完成对客户基本信息、联系人信息、交往信息、客户服务信息的充分共享和规范化管理。客户服务是一个涉及多个部门,存在一定流程的工作。客户服务水平的高低决定着公司的核心竞争力。该客户关系管理系统应提供一个客户服务在线平台,使客户服务处理过程中相关人员可以在线完成服务的处理和记录工作。1.1范围本系统包括:用户管理、客户管理、联系人管理三个功能模块。1.2软硬件坏境需求本系统采用Oracle10数据库,使用Java EE进行开发,
4、采取B/S架构。数据库设计原则上符合第三范式,且规范,易于维护。程序采用SSH(struts2+hibernate3+spring三大框架,使用MVC模式,保证系统的可维护性和可扩展性。系统应可运行于Windows平台或Unix平台(数据库服务器运行于Windows平台)。1.3安全保密需求本系统的系统架构,以及权限机制可以保证系统的安全性。首先,从系统架构看,本系统采用B/S模型,从而使服务器数据源与客户端分离,保证了数据的物理独立性;其次,本系统的用户授权机制通过角色的定义管理实现,通过定义某些角色能进行的操作权限,和定义用户拥有的角色,限定用户的操作权限,实现对用户的授权。1.4可维护性
5、与可扩展性需求本系统的应用平台设计中选择B/S结构,采用基于JAVA技术并且符合Java EE开发规范的系统应用平台,并采用三层结构,使系统具有良好的可维护性和可扩展性。2、功能性需求 本系统主要分用户管理、客户管理、联系人管理。用户管理: 管理员的权限有登陆、注册、客户管理、联系人管理。其中客户管理包括添加客户、删除客户、修改客户、客户共享、客户移交;联系人管理包括添加联系人、删除联系人、修改联系人。用户用例图用户注册在登录页面点击“注册”超级链接,跳转到用户注册页面,在页面输入相应的信息(有*的为必填项),点击“提交”按钮,如果注册成功,3秒钟后跳转到登陆页面,否则,显示错误信息,停留在当
6、前页面。点击“重填”按钮,可以全部清空当前页面的内容,重新进行填写。注意:(1)用户名必须3个字符以上;密码6个字符以上,email的格式正确,用jquery来进行验证。 (2)在保存前先判断用户名是否已经存在,若用户名已经存在,弹出“此用户名已经存在,不可用”,需重新输入用户名,若不存在,弹出“此用户名可用”信息框。用dwr实现此功能。用户注册页面验证用户是否已存在:先在dwr.xml配置文件中进行配置 在页面导入三个js文件在页面中用javascript来验证function testuser()var name=document.getElementById(txtusername).v
7、alue;JUser.isExitUser(name,function(date) if(date=true) alert(此用户名已存在,不可用); else alert(此用户名可用); ); /当鼠标离开文本框时触发事件关键代码讲解:/处理注册public String doregister() PrintWriter out=null;try out=ServletActionContext.getResponse().getWriter(); catch (IOException e) e.printStackTrace();int result=uservice.addUser(u
8、ser);if(result=1) / 注册成功out.print(alert(注册成功);location.href=/MyCRM/User/login.jsp;);if(result=2) /用户名已经存在out.print(alert(用户名已经存在);history.go(-1););if(result=0) / 注册成功out.print(alert(注册失败);history.go(-1););return SUCCESS;用户登录输入用户名和密码,在获取页面参数后,先通过用户名查询数据库,如果该用户名存在,则再查询与该用户名匹配的密码是否与页面获取的密码一致,如果一致,就可以进入
9、主界面;如果不一致,弹出“密码输入错误“信息框,须重新输入密码;如果用户名不存在,则弹出”用户名不存在“信息框,需重新输入用户名。登陆页面用户登录流程分析图Login.jsp.Main.jsp.用户登录信息输入NY获取页面参数查询数据库用户存在用户不存在功能开始功能结束NY密码一致登录成功保存信息用户登录模拟执行流程用户登陆代码详解:/处理登录public String dologin() Map session = ActionContext.getContext().getSession();int userid = uservice.selecUserByName(user.getUse
10、rname().getUserid();/ 通过用户名查询iduser.setUserid(userid);boolean flag = uservice.login(user); / 调用方法if (flag) session.put(user, user); / 把用户信息存入sessionCookie cook = new Cookie(loginuser, user.getUsername(); / 创建cookie,保存用户的用户名,cook.setMaxAge(60 * 60); / 设置有效时间ServletActionContext.getResponse().addCooki
11、e(cook); / 添加cookieMap application = ActionContext.getContext().getApplication();Object obj = application.get(count);if (obj = null) application.put(count, 1); / 如果之前没有人登录,则count赋值为1 else application.put(count, (1 + (Integer) obj);/ 如果已有人登录,则把取出的值加1return SUCCESS; else this.addFieldError(user.userna
12、me, 对不起,密码错误,您不能登录!);/ 如果登陆出错,在页面显示return SUCCESS;/ 如果登陆出错,在页面用红色字体显示错误信息 主页面用户成功登录后进入系统主界面主页面点击“刷新“链接刷新当前页面,“前进”链接返回到本页面之前查看的前一个页面,“后退“链接返回到前一个出现的页面;“退出系统”退出当前系统,进入登陆页面。左页面中有“欢迎您:sa “的字样,sa是当前登陆的用户名。头页面有显示当前用户是第几位访问本系统,并显示用户登录的当前时间。点击头页面的相关链接会跳转到相应的页面。 注解:(1)欢迎您:(2)您是第位访问者(3)今天是:退出系统点击主页面的“退出系统”链接,
13、弹出“确定退出系统”询问框,点击“确定”按钮,则退出系统进入登陆页面,点击“取消”则停在当前页面。关键代码讲解:/处理退出public String doexit() Mapsession=ActionContext.getContext().getSession();session.remove(user);return login;客户管理A、客户列表点击客户管理下面的“客户列表”链接,可以查看当前用户下面的所有客户信息。在客户名称和地址栏中输入关键字,点击“查询”按钮,可以进行模糊搜索,也可以两个条件同时进行模糊查询。 在文本框中输入想要跳转到得页面数字,点击“转”链接,就可以跳转到相应
14、的页面。如输入“3”,就可以跳转到第三页。列表页面关键代码讲解:/ 列表public String search() HttpServletRequest request = ServletActionContext.getRequest();int page = 1; if (request.getParameter(page) != null) try page = Integer.valueOf(request.getParameter(page); catch (Exception e) page = 1; / 处理异常,显示第一页Map session = ActionContext
15、.getContext().getSession();int userid = (Users) session.get(user).getUserid(); / 获取session中的用户idint count = cservice.getCustomCount(custom, userid); / 总记录数MyPage mypage = new MyPage(3, count, page); /分页List userlist = uservice.getAll();request.setAttribute(userlist, userlist);cservice.listall(custom
16、, mypage, userid);request.setAttribute(mypage, mypage);return SUCCESS;B、客户添加点击列表页面“新增”链接,或客户管理下面的“新增客户”链接,跳转到客户添加页面填写好相关信息后(*为必填项),点击“确定”按钮,如果添加成功,返回列表页面,页面自动刷新,刚添加的记录显示在第一行;否则,显示错误信息,停留在当前页面。点击“返回”链接可以返回到前一个页面,点击“重填”按钮,可以全部清空当前页面的内容,重新进行填写。注意:(1)客户名称必须填写,用jquery验证。 (2)dwr验证客户名称是否已经存在。 (3)国家、省/州、城市用
17、js实现动态关联。说明:系统的客户均指的是公司客户;每一个客户均有一个所有者,默认情况下,增加人(登录用户)即为该客户的所有者。添加信息活动图添加信息的活动图关键代码讲解:/ 处理添加public String add() int result = cservice.addCustom(custom); /调用方法HttpServletResponse response = ServletActionContext.getResponse();PrintWriter out = null;try out = response.getWriter(); catch (IOException e)
18、 e.printStackTrace();if (result = 1) / 添加成功return SUCCESS;if (result = 2) / 用户名已经存在out.print(alert(用户名已经存在);history.go(-1););return null;if (result = 0) / 添加失败out.print(alert(添加失败);history.go(-1););return null;return SUCCESS;C、客户修改点击列表页面的“修改”链接,跳转到客户修改页面,页面显示该客户原来信息的值。修改完相关信息后,点击“确定”按钮,如修改成功,返回到列表页面
19、,页面自动刷新,否则,显示“修改失败”,停留在当前页面。点击“重填”按钮,可以全部清空当前页面的内容,重新进行填写。点击“返回”链接可以返回到前一个页面。说明:客户在进行修改的时候,如果没有对国家进行选择,则以其原来的国家、省/州、城市的值为准,更新数据库,如果已经进行了选择,则是把已经选择的国家、省/州、城市的值更新到数据库。关键代码讲解:/ 到修改页面,获取客户原来的信息public String toedit() custom = cservice.getCustomById(custom.getCustomid();return SUCCESS;/ 处理修改public String
20、doedit() HttpServletRequest request = ServletActionContext.getRequest();Map session = ActionContext.getContext().getSession();int userid = (Users) session.get(user).getUserid();/ 从session中获得用户id的值Users user = new Users();user.setUserid(userid); /获取页面国家、省/州、城市下拉列表的值String cmaincountry = custom.getCma
21、incountry();String cmainprovince = custom.getCmainprovince();String cmaincity = custom.getCmaincity(); / 获取页面隐藏域国家、省/州、城市的值,是原来的值String hiddmaincountry = request.getParameter(hiddmaincountry);String hiddmainprovince = request.getParameter(hiddmainprovince);String hiddmaincity = request.getParameter(
22、hiddmaincity);/如果没有对国家等进行选择,则以原来的国家等值更新数据库(即隐藏域的值),如果对国家等进行了选择,则以选择的为准更新数据库if (国家.equals(cmaincountry) custom.setCmaincountry(hiddmaincountry); else custom.setCmaincountry(cmaincountry);if (省份/州.equals(cmainprovince) custom.setCmainprovince(hiddmainprovince); else custom.setCmainprovince(cmainprovin
23、ce);if (地级市/县.equals(cmaincity) custom.setCmaincity(hiddmaincity); else custom.setCmaincity(cmaincity);int result = cservice.updateCustom(custom); /调用方法HttpServletResponse response = ServletActionContext.getResponse();PrintWriter out = null;try out = response.getWriter(); catch (IOException e) e.pri
24、ntStackTrace();if (result = 1) / 修改成功return SUCCESS;if (result = 2) / 修改后的客户名称已经存在out.print(alert(用户名已经存在);history.go(-1););return null;if (result = 0) / 修改失败out.print(alert(修改失败);history.go(-1););return null;return SUCCESS;D、客户删除 客户删除可以单个删除一条记录,也可以同时删除多条记录(1)单个删除在列表页面点击“删除”链接,弹出“确定要删除吗?”询问框,点击“确定”,
25、如果删除成功,则删除此记录,列表页面自动刷新,否则显示“删除失败“信息框;点击“取消”则不删除此记录。关键代码讲解:/ 单个删除public String del() int result = cservice.deleteLinkByCustid(custom.getCustomid();/ 调用方法(通过客户id来删除)HttpServletResponse response = ServletActionContext.getResponse();PrintWriter out = null;try out = response.getWriter(); catch (IOExcepti
26、on e) e.printStackTrace();if (result = 0) / 删除失败out.println(alert(删除失败);history.go(-1););return null;if (result = 1) / 删除成功return SUCCESS;return SUCCESS;(2)批量删除 选择要删除客户前面的复选框,点击“删除“按钮,会先进行判断是否已经选择了客户,如果没有选择客户,则会弹出”必须至少选择一个进行删除“信息框。如果删除成功,列表页面自动刷新,否则,显示”删除失败“信息框。 说明:这里删除客户的时候,如果客户已经共享了就不能再删除,而且删除客户的时
27、候会同步删除该客户下面所有的联系人。关键代码讲解:/批量删除public String delmany() HttpServletResponse response = ServletActionContext.getResponse();int result = cservice.dropSomeCustom(cbox); / 客户列表复选框的idPrintWriter out = null;try out = response.getWriter(); catch (IOException e) e.printStackTrace();if (result = 0) out.println
28、(alert(删除失败);history.go(-1););return null;if (result = 1) return SUCCESS;return SUCCESS;E、客户共享客户共享就是用户将自己的指定客户共享给其他的用户,这样其他的用户可以查看共享客户的相关信息,但不能对客户进行操作。 在列表页面选择要共享的客户(客户信息前面的复选框),点击“客户共享给”按钮,跳转到共享页面(可以同时共享多个客户)主要代码讲解:/ 选择要共享的客户public String choice() HttpServletRequest request = ServletActionContext.g
29、etRequest();List userlist = uservice.getAll(); / 得到所有用户request.setAttribute(userlist, userlist);Map session = ActionContext.getContext().getSession();int userid = (Users) session.get(user).getUserid();List listcust = cservice.getCustomByUser(userid);request.setAttribute(listcust, listcust);return SU
30、CCESS;/ 共享给public String toshare() HttpServletRequest request = ServletActionContext.getRequest();List custom = cservice.selectByCids(cbox);request.setAttribute(custom, custom);List userlist = uservice.getAll(); / 得到所有用户request.setAttribute(userlist, userlist);return SUCCESS;表格上面显示已选择的客户,下面显示可以共享给的用
31、户,选择要共享的用户(复选框),点击“共享”按钮,如客户以共享,弹出“客户已共享“信息框,如共享成功,跳转到“我共享给别人的用户”页面,页面自动刷新;否则,显示错误信息。(可以同时共享给多个用户,即多对多共享)注意:在点击“客户共享给“按钮的时候会进行判断是否已经选择了客户,如果没有选择客户,则会弹出”必须至少选择一个客户进行共享“信息框。点击“返回”链接可以返回到前一个页面。关键代码讲解:/ 共享的按钮事件public String doshare() HttpServletResponse response = ServletActionContext.getResponse();Prin
32、tWriter out = null;try out = response.getWriter(); catch (IOException e) e.printStackTrace();int result = csservice.addShare(userbox, custbox);if (result = 1) return SUCCESS;if (result = 2) out.print(alert(用户已共享);history.go(-1););return null;if (result = 0) out.print(alert(共享失败);history.go(-1););ret
33、urn null;return SUCCESS;F、客户移交客户移交就是用户可以把自己的客户移交给其他的用户,那么其他的用户就拥有了对客户管理的权限,可以对客户进行增删改查、移交共享等操作。选择要移交的客户(可多选),在下拉列表中选择移交的用户,点击“客户移交”按钮,如移交成功,返回到列表页面,页面自动刷新,不会再显示已移交的客户信息,否则,弹出“移交失败“信息框。注意:点击“客户移交“按钮时,会先进行判断是否已选择了客户和用户,如果没有选择客户,则弹出”至少要选择一个客户进行移交“信息框,如果没有选择用户,则会弹出 “请选择用户”信息框。关键代码讲解:/ 客户移交public String
34、move() HttpServletResponse response = ServletActionContext.getResponse();PrintWriter out = null;try out = response.getWriter(); catch (IOException e) e.printStackTrace();int result = cservice.editCustByIds(custom.getUsers().getUserid(), cbox);if (result = 0) out.println(alert(移交失败);history.go(-1););
35、return null;if (result = 1) return SUCCESS;return SUCCESS;G、查看详细信息 点击列表页面的“详细信息“链接,跳转到客户详细信息页面,获取当前客户所有信息。客户详细信息页面上部分显示当前客户的所有详细信息,下部分显示当前客户下面的所有联系人信息。点击“返回”链接可以返回到前一个页面。关键代码讲解:/ 详细信息public String tolook() custom = cservice.getCustomById(custom.getCustomid();HttpServletRequest request = ServletActionContext.getRequest();List link = lservice.selectLinkmanByCustid(custom.getCustomid();/ 查询当前客户下的所有联系人request.setAttribute(link, link);