基于Struts框架的客户关系管理系统开发.doc_第1页
基于Struts框架的客户关系管理系统开发.doc_第2页
基于Struts框架的客户关系管理系统开发.doc_第3页
基于Struts框架的客户关系管理系统开发.doc_第4页
基于Struts框架的客户关系管理系统开发.doc_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于Struts 框架的客户关系管理系统开发摘要图书管理是高校内每一个系部或院部都必须切实面对的工作,但一直以来人们使用传统的人工方式管理图书资料。这种方式存在着许多缺点,如效率低、保密性差且较为繁琐。另外,随着图书资料数量的增加,其工作量也将大大增加,这必将增加图书资料管理者的工作量和劳动强度,这将给图书资料信息的查找、更新和维护都带来了很多困难。图书管理作为计算机应用的一个分支,有着手工管理无法比拟的优点,如检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高图书管理的效率。因此,开发一套能够为用户提供充足的信息和快捷的查询手段的图书管理系统,将是非常必要的,也是十分及时的。关键词:图书 ;UML;Struts目录第1章 绪论11.1 系统开发背景11.2 系统研究目的与意义11.3 可行性分析2第2章 系统分析与设计32.1 系统分析32.1.1 用例图32.1.2 包图32.1.3 类图32.2 系统设计32.2.1 时序图32.2.2 活动图32.3 数据库建模42.3.1 概念模型42.3.2 物理模型4第3章 系统实现53.1 开发环境搭建53.1.1 需要安装的技术平台53.1.2 开发工具的选择73.2 环境配置83.2.1 Struts框架配置83.2.2 服务器端配置103.2.3 第3方组件配置113.3 页面设计及功能实现113.3.1 登录界面113.3.2 主界面113.3.3 添加客户信息页面163.3.4 查看客户信息页面173.3.5 决策支持图表显示203.3.6 数据库连接实现21第4章 软件测试234.1 单元测试235.2 集成测试24第5章 工作总结和展望26参考文献27I基于Struts 框架的客户关系管理系统开发第1章 绪论1.1 系统开发背景目前各高校的图书管理系统仍然是只有管理管理的形式。一切信息只能从管理员那里得到,这种系统带来了很多不方便,同时也增加了工作人员的负担。因为要对图书的借入、归还的记载,还有新书的引进和归类等进行处理,导致工作的繁重和堆积,如果只凭借人力去处理和解决,往往要付出大量的工作时间,然而得到的效率却很低。为了更好的解决和处理问题,减少工作时间,减轻管理人员的负担,建立一个更完善的管理体系,创建一个图书管理系统事在必行,以保证能够适应现今社会并提高工作效率。现在通过面向对象的技术可以解决多端口访问的问题,学生也可以在别的地方访问该系统以得到自己所需要的信息。数据库技术SQL Server2000的应用比access技术更先进。这些都能增加系统的优越性和可行性。1.2 系统研究目的由于对图书管理工作需求的考虑, 解决管理工作中所遇到的问题,方便管理者随时可以进行操作,减轻工作人员目前繁重复杂的工作,使管理工作变得醒目、简捷、有条理,开发本系统是十分必要而且重要的。1.3 可行性分析技术可行性:Struts框架作为基于MVC设计模式的Web应用的一种典型体现,Struts架构对Model、View和Controller提供了现成的实现组件。在Controller控制器部分中,Struts中的Controller控制器部分的作用是接收用户端浏览器的请求,然后选择执行相应的图书逻辑,再把响应结果送到用户端;在Model模型部分中,Struts架构使用JavaBean来提供具体的图书逻辑,这种图书逻辑的细分可以增强代码的可重用性;在View视图部分,Struts依然可以使用JSP来实现,同时,Struts还提供了丰富的自定义标记库,View部分使用这些自定义标记同样可以实现与Model部分的有效交互并能够增强显示功能。随着Web技术日益成熟,Struts逐渐作为Web开发中比较成熟的一种框架被使用。应用可行性:本系统是对传统CRM开发方式的变革,通过使用B/S的部署方式,用户通过浏览器就可以直接访问系统,操作方式贴近用户上网习惯,方便用户“随时随地”使用地同时,也极大地提高了工作效率,进而降低学校成本。第2章 系统分析与设计本系统使用UML统一建模语言设计系统模型,静态模型使用用例图、类图、包图表示,动态模型使用活动图、状态图表示。2.1 系统分析2.1.1 用例图用例图的目的是使用简单直观的方式,描述软件系统的功能和需求。在用例图中一般包括行为者和用例两个方面的描述。其中用例用来说明用户的具体需求,而行为者则是用来描述要和用例之间进行交互的软件系统外部的人或者系统。2.1.2 包图一个包图可以是任何一种的UML图组成,通常是UML用例图或UML类图。 包是一个UML结构,它使得你能够把诸如用例或类之类模型元件组织为组。 包被描述成文件夹,可以应用在任何一种UML图上。 2.1.3 类图类图(Class diagram)是显示了模型的静态结构,特别是模型中存在的类、类的内部结构以及它们与其他类的关系等。类图不显示暂时性信息。2.2 系统设计2.2.1 时序图2.2.2 活动图活动图用于显示动作及其结果。其重点在于描述方法实现中所完成的工作,以及用例实例或者对象中的活动。2.3 数据库建模本系统的数据库建模使用的工具是PowerDesigner,它提供了拖放方式的可视化映射工具,通过使用它,用户可以方便、快速及准确地记录数据依赖关系。2.3.1 概念模型概念模型是对真实世界中问题域内的事物的描述,不是对软件设计的描述。概念模型包括:实例、关联、属性。本系统概念模型如下图所示:2.3.2 物理模型物理模型对应着数据库中的表,如图2-25是该系统物理模型图。 第3章 系统实现3.1 开发环境搭建3.1.1 需要安装的技术平台在搭建开发环境之前,需要提前安装相关的软件以及提供Web应用的基本技术平台,包括JDK、Web Container以及DataBaseServer的安装。1.Java 2 SDK SEStruts应用中的核心代码是用Java语言编写的,因此其应用的运行需要JDK(Java Development Kits)的支持。本开发使用JDK1.5版本。如图所示:图3-1 JDK安装2. Servlet Container(Web Application Server)Struts可以运行在任何一个支持JSP1.2以上版本和Servlet 2.3以上版本的Web Container中,目前支持JSP的应用服务器是比较多的 ,如Tomcat、Resin、Websphere、Weblogic等。Tomcat是一个免费的开源的Serlvet容器,它是Apache基金会的Jakarta项目中的一个核心项目,由Apache,Sun和其它一些公司及个人共同开发而成。由于有了Sun的参与和支持,最新的Servlet和Jsp规范总能在Tomcat中得到体现。本开发使用Apache Tomcat 5.5版本,它的运行主界面如图4-2所示:图3-2 Tomcat运行界面3. DataBaseServerMySQL是一个免费的,快速稳定并且支持多线程多用户的数据库服务器,可以与Java、C、C+、PHP等语言进行连接,可以运行在Windows、Linux、FreeBSD、OS/2等平台上。本系统使用的数据库服务器是MySql5.0版本,运行界面如图:图3-3 MySql运行图3.1.2 开发工具的选择Eclipse是一种可扩展的开放源代码IDE。它允许在同一IDE中集成来自不同供应商的工具,并实现了工具之间的互操作性,从而显著改变了项目工作流程,使开发者可以专注在实际的嵌入式目标上。Eclipse出色而具独创性的平台特性及开放源代码的特点,吸引了IBM、Borland、Oracle、Sybase和RedHat等知名IT厂商加入到Eclipse平台的扩展上来。开源软件的蓬勃发展,更是强化了Eclipse作为开发工具方面的优势,如Spring、Struts等开源框架都会附带提供各自的Eclipse插件工具。本系统使用J2EE开源框Struts在Windows平台下进行开发,因此选择基于Eclipse的MyEclipse6.0作为开发工具,MyEclipse支持多种平台并且集成了大量的J2EE插件,能够方便快捷地将各个框架集成起来,节省了大量配置框架的时间,大大提高了开发效率。运行界面如图所示:图3-4 MyEclipse运行界面3.2 环境配置搭建好开发环境后,需要对系统的运行环境进行一下相关配置,主要包括Struts框架配置,服务器端配置以及相关的第3方组件配置。3.2.1 Struts框架配置详细内容可以在struts-config.xml文件中找到。1. ActionForm配置2. Action配置.3. 其他配置3.2.2 服务器端配置详细内容可以在web.xml文件中找到index.jspactionorg.apache.struts.action.ActionServletconfig/WEB-INF/struts-config.xmldebug2detail22action*.do3.2.3 第3方组件配置详细内容可以在web.xml文件中找到。DisplayChartorg.jfree.chart.servlet.DisplayChartDisplayChart/servlet/DisplayChart3.3 页面设计及功能实现3.3.1 登录界面图4-5 登录界面效果图3.3.2 主界面图4-6 主界面效果图主界面设计主要使用了CSS和JAVASCIPT技术,CSS主要用来控制界面风格及页面元素的样式,JAVASCIPT用来实现系统菜单的动态收缩和扩展。CSS样式表代码如下:/*滚动条样式*/bodySCROLLBAR-FACE-COLOR: #EFEFEF; SCROLLBAR-HIGHLIGHT-COLOR: #E1411D; SCROLLBAR-SHADOW-COLOR: #E1411D; SCROLLBAR-3DLIGHT-COLOR: #ffffff; SCROLLBAR-ARROW-COLOR: #E1411D; SCROLLBAR-TRACK-COLOR: #ffffff; SCROLLBAR-DARKSHADOW-COLOR: #ffffff;/*任何一个按钮样式 */.buttonbackground-image:url(images/button_bg.gif);background-color:#FFFFFF;border-top:1px solid #C8CCCB;border-left:1px solid #C8CCCB;border-bottom:1px solid #C8CCCB;border-right:1px solid #C8CCCB;background-repeat:repeat-x;padding-top:4px;padding-bottom:0px;padding-left:0px;padding-right:0px;margin-right:0px;text-decoration:line;font-size: 12px;color: #000002;inputborder-style:expression(this.type=text|this.type=password)?solid:) inputborder-width:expression(this.type=text|this.type=password)?1px:)TEXTAREAcolor:000000;border: 1px solid #DADADA;background-color: #ffffff;SELECTFONT-SIZE: 9pt;FONT-FAMILY: 宋体 .Navigation fontPADDING-RIGHT: 1px; PADDING-LEFT: 1px; FILTER: glow(color=#FFFFFF,strength=3); PADDING-BOTTOM: 1px; COLOR: #000000; PADDING-TOP: 1px; HEIGHT: 10px.Navigationtdbg background:#F5F9FE; padding:0 3px; height:22;/*子页表格样式*/.title2background-color:#F4A494;height:22px;font-size:12px;COLOR:#ffffff;border-bottom:1px solid #dadada;text-align:left;letter-spacing:2px;/*managemain.html中样式*/*最上面的图片样式*/.TOPBgbackground:url(Images/TOPBg.gif);HEIGHT:75px;/*菜单样式*/.ManageMainMenu background:url(Images/TopMenuBg.gif);height:25px;font-size:12px;color:#FFFFFF; /*右上菜单上字体样式*/.WSOASTopMenuFontfont-size:12px;color:#FFFFFF; /*菜单链接样式*/.ManageMainMenuHreffont:normal 12px 宋体;color:#FFFFFF;text-decoration:none; .ManageMainMenuHref a:linkfont:normal 12px 宋体;color:#FFFFFF;text-decoration:none; .ManageMainMenuHref a:visitedfont:normal 12px 宋体;color:#FFFFFF;text-decoration:none; .ManageMainMenuHref a:activefont:normal 12px 宋体;color:#FFFFFF;text-decoration:none;.ManageMainMenuHref a:hover font:normal 12px 宋体;color:#FFFF00;text-decoration:none;/*背景色*/.ManageMainBgcolorbackground-color:#F5B3A3; .managemainbottom font-size:14px;color:#FFFF33;实现菜单的收缩和扩展JavaScipt代码如下:/展开、收缩菜单function showsubmenu(sid)var whichEl = document.getElementById(submenu + sid);var imageId = document.getElementById(imgMenu + sid);var MenuICOId = document.getElementById(MenuICO + sid);var strShow=true;if (whichEl.style.display = none)whichEl.style.display=;imageId.src=images/gif/MenuICO/Menu_close.gif;MenuICOId.src=images/gif/MenuICO/openfolder.gif; for (i=0; idocument.all.length; i+) srcelement=document.all(i); if(srcelement.className=MenuPIC)var targetid=srcelement.id;var targetelement=document.all(targetid);var strbuf=srcelement.src;if(strbuf.indexOf(Menu_close.gif) strShow=false;elsewhichEl.style.display=none;imageId.src=images/gif/MenuICO/Menu_open.gif;MenuICOId.src=images/gif/MenuICO/Menufolder.gif; for (i=0; idocument.all.length; i+) srcelement=document.all(i); if(srcelement.className=MenuPIC)var targetid=srcelement.id;var targetelement=document.all(targetid);var strbuf=srcelement.src;if(strbuf.indexOf(Menu_open.gif) strShow=true;/全部展开/收缩菜单function AllShowsubmenu() var AllShowTitle=document.getElementById(AllShowTitle); for (i=0; idocument.all.length; i+) srcelement=document.all(i); if(srcelement.className=MenuPIC) var targetid=srcelement.id;var targetelement=document.all(targetid);var strbuf=srcelement.src;var strbufId=targetid.replace(imgMenu,);var whichEl = document.getElementById(submenu + strbufId);var MenuICOId = document.getElementById(MenuICO + strbufId);if(AllShowTitle.innerHTML = 全部收缩)srcelement.src=images/gif/MenuICO/Menu_open.gif;MenuICOId.src=images/gif/MenuICO/Menufolder.gif;whichEl.style.display=none;elsesrcelement.src=images/gif/MenuICO/Menu_close.gif;MenuICOId.src=images/gif/MenuICO/openfolder.gif;whichEl.style.display=; if(AllShowTitle.innerHTML = 全部展开) AllShowTitle.innerHTML = 全部收缩; else AllShowTitle.innerHTML = 全部展开;3.3.3 添加客户信息页面该页面可以对客户信息进行添加,因为涉及到数据内容较多,考虑到系统运行效率,将数据验证工作交给了JavaScript控件,这里以时间输入来进行说明。该功能使用的是一个JavaScript时间控件,通过该控件可以方便控制时间格式,时间输入形式,如果所示,在“最近联系”中,用户将只能选择今天(包括今天)以前的日期,该方法实现方法可以见源代码。添加客户信息模块/从客户表单中得到数据CustomerActionForm caf = (CustomerActionForm)form;/* * author WJ * 验证客户是否存在 */if (CustomerDao.isRepeatForCustomer(caf.getName()=true) request.setAttribute(msg, 失败!该客户已存在);return mapping.findForward(msg);caf.setAddress1(Address1Dao.getAddressByNumber(caf.getAddress1()/* * 使用BeanUtils类的copyProperties方法可以方便地将 * 表单内容存到对象中 */CustomerDao customerDao = new CustomerDao();BeanUtils.copyProperties(customerDao, caf);/* * 生成客户编号格式crmrjcn+时间 */SimpleDateFormat sdf = new SimpleDateFormat(yyyyMMddHHmmss);String currentTime = crmrjcn + sdf.format(new java.util.Date();System.out.println(currentTime);customerDao.setNumber(currentTime);/返回到指定提示页return mapping.findForward(msg);3.3.4 查看客户信息页面刚进入页面时,程序默认是分页显示全部数据,用户可以输入或者选择查询条件进行查询,同时在查看同时,登录用户权限可以进行修改、删除等操作。为了数据显示方便,使用了分页查询显示,具体实现代码:/* * 从客户端得到是全部显示数据还是查询显示 */String style=request.getParameter(style);String strPageNo = request.getParameter(pageNo);/全部显示数据if (style.equals(selectall) PageClass pc = new PageClass();int pageNo = pc.getPageNo(strPageNo);/ 得到总记录数String sql1 = select * from customer;List listTemp = CustomerDao.getCustomer(sql1);int allRecord = listTemp.size();/ 得到总页数int totalPage = pc.getTotalPageOne(allRecord);/ 这里是使用了mysql中自己带的limit分页语法int startPos = (pageNo - 1) * FinalClass.PAGESIZEONE;String sql = select * from customer limit + startPos + ,+ FinalClass.PAGESIZEONE;List list = CustomerDao.getCustomer(sql);/ 得到当前页记录int pageNumber = list.size();/ 得到上一页int lastPageNo = pageNo - 1;/ 得到下一页int nextPageNo = pc.getNextPageNo(pageNo, totalPage);/返回给客户端浏览器request.setAttribute(customerlist, list);.request.setAttribute(style, selectall); else if (style.equals(selectlike) CustomerActionForm caf = (CustomerActionForm)form;./* * 从客户端拿到查询条件,通过代码设置保证初始值存在 */String kw1 = null;if (kw1Str != null) . else kw1 = kw1ActionForm;String ty1 = null;if (ty1Str != null) try ty1Str = new String(request.getParameter(ty1).getBytes(iso8859-1), gb2312);/ 这里赋值是必须的ty1 = ty1Str; catch (UnsupportedEncodingException e1) e1.printStackTrace(); else ty1 = ty1ActionForm;./* * 对分页时,需要的变量进行初始化 */PageClass pc = new PageClass();.int allRecord = 0;int totalPage = 0;int startPos = 0;int pageNo = pc.getPageNo(strPageNo);/* * 开始查询条件判断,同时返回包括所有对应记录的listTemp对象 */if (ty1.equals(0) | ty1 = null) . else ./数据记录数allRecord = listTemp.size();/总页数totalPage = pc.getTotalPageOne(allRecord);/* * 根据页的当前位置取出对应的记录 */startPos = (pageNo - 1) * FinalClass.PAGESIZEONE;int length = startPos+FinalClass.PAGESIZEONE;if (lengthlistTemp.size() length = listTemp.size();for(int i=startPos;ilength;i+) .request.setAttribute(style, selectlike);/返回到指定页面return mapping.findForward(customerlist);修改代码如下:/从客户端表单收集数据.String url = null;/判断操作入口if (childType=null) request.setAttribute(customerDao, customerDaoTemp);request.setAttribute(userMan, list2);url = customermodify; else if(childType.equals(modify) /执行更新操作System.out.println(customerDao.getRemark()+-CustomerAction.java-test);customerDao.updateCustomerForModify();request.setAttribute(msg, success);url = msg;/根据操作结果进行跳转return mapping.findForward(url);删除代码:/得到要删除对应记录的idString idStr = request.getParameter(id);int id = Integer.parseInt(idStr);/根据id删除该对象CustomerDao.delCustomerById(id);request.setAttribute(msg, 删除成功);return mapping.findForward(msg);3.3.5 决策支持图表显示本系统除可以进行客户等有关信息的维护外,还可以将客户有关信息以报表等形式展示给客户,为用户的日常工作提供必要支持。图3-11 费用分析图表效果饼图的效果使用的是Jfreechart报表,具体代码如下:public class BingTu HttpSession session = null;public BingTu(HttpSession s) session = s;public String getFileName(int score, String department) JFreeChart chart = createChart(createDataset(score), department);String filename = null;try filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, null,session); catch (IOException e) e.printStackTrace();return filename;/ 生成饼图数据集对象public PieDataset createDataset(int score) DefaultPieDataset defaultpiedataset = new DefaultPieDataset();return defaultpiedataset;/ 生成图表主对象JFreeChartpublic JFreeChart createChart(PieDataset piedataset, String department) / 定义图表对象JFreeChart jfreechart = ChartFactory.createPieChart(department+ 一季度费用分析图, piedataset, true, true, false);/ 获得图表显示对象PiePlot pieplot = (PiePlot) jfreechart.getPlot();/ 设置图表标签字体pieplot.setLabelFont(new Font(SansSerif, Font.BOLD, 12);pieplot.setNoDataMessage(No data available);pieplot.setCircular(true);pieplot.setLabelGap(0.01D); / 间距return jfreechart;3.3.6 数据库连接实现本系统使用JDBC的数据库连接技术,系统与数据库实现连接代码如下:/静态初始化,使用这个类的时候首先执行这个语句static try Class.forName(com.mysql.jdbc.Driver); catch (ClassNotFoundException e) e.printStackTrace();db = new DB();/连接上数据库public static Connection getC

温馨提示

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

评论

0/150

提交评论