您的当前位置:首页正文

Java Web课程设计---客户管理系统

来源:个人技术集锦


枣 庄 学 院

信息科学与工程学院课程设计任务书

题 目: 客户信息管理系统

姓 名: 桑得水 学 号: 201212140421

专业班级: 网络工程(物联网) 课 程: Java Web 指导教师: 李钢 职称: 讲 师 完成时间: 2014年 5 月——-—2014年 6月

枣庄学院信息科学与工程学院制

2014年6 月20日

课程设计任务书及成绩评定

课程设计的任务和具体要求 课程设计要求设计一个用Java Web开发基于B/S架构的管理系统,页面至少6个以上,应能反应出学生综合利用Java Web知识和数据库知识完成一定的设计任务的能力,反映出学生理论联系实践的动手能力。 具体要求如下: (1)明确所要开发系统的设计任务; (2)做好需求分析,合理选择设计方案; (3)页面静态部分可用Dreamweaver开发实现 (4)动态页面部分可用JSP、Servlet、JavaBean等实现; (5)后台数据库可采用MySQL、Oracle、SQL Server等实现; (6)在编写程序过程中应注意相关文档的编写; (7)认真撰写课程设计总结报告。 指导教师签字: _______ 日期: 指导教师评语 成绩:____________ 指导教师签字: 日期:

课程设计所需软件、硬件等  硬件环境: CPU,主频1GHz以上;内存512M以上; 硬盘30G以上;1024×768显示分辨率  软件环境: Microsoft windows XP或以上版本 ; eclipse; JDK1。6; Tomcat6.0; MySQL 课程设计进度计划 起至日期 工作内容 备注 参考文献、资料索引 序号 文献、资料名称 编著者 出版单位 [1] 沈应逵. Java Web数据库系统应用开发与实例.北京:人民邮电出版社,2009

I

目 录 一、 前言 .........................................错误!未定义书签。 二、 课程设计内容与目标 ...........................错误!未定义书签。 三、 系统设计 ..................................................... 2 3.1 系统特点 .................................................. 2 3。2 功能设计 ................................................. 2 3.3 用户界面草图 .............................................. 3 3。4 页面迁移图 ...............................错误!未定义书签。 3。5 页面功能设计 .............................................. 5 四、 数据库设计 ................................................... 6 4。1 数据库表 ................................................. 6 4。2 数据库操作图 ............................................. 7 五、 功能模块的详细设计 ........................................... 8 5。1 程序目录结构图 ........................................... 8 5.2 数据库访问模块 ............................................ 8 5.3 共通Servlet的处理 ........................................ 9 5.4 登录模块 ................................ 1错误!未定义书签。 5。5 页面导航设计 ............................................. 15 5。6 客户资料维护模块 ........................................ 17 5.7 客户来电信息模块 ........................ 2错误!未定义书签。 5。8 客户回访信息模块 ........................................ 25 5。9 客户重要信息提示模块 .................................... 27 六、 对本系统开发的思考总结 ...................................... 29

II

一.课程设计目的 课程设计是一项重要的实践性教学环节,在教师的指导下,以学生为中心,充分调动学生的积极性和能动性,重视学生自学能力的培养. 《Java Web 数据库系统应用开发与实例》是为教育技术学本科专业开设的专业选修课程,课程的主要目标是要求学生掌握基本的Web应用程序开发和设计的流程及相关的技术技能.本课程在讲解相关理论知识的基础上,按照一定的组织原则和现有实验条件安排了一定数量的实验,通过这些实验使学生初步掌握开发和设计Web数据库系统的基本方法和基本技能。然而由于这些实验是分时分批按一定的技术种类和实验目的实施的,固然可以有目的地训练和培养学生某个方面技能,但明显的不连续性使学生不能从整体上把握如何系统地开发和设计一个完整Web数据库系统应用程序.通过本课程设计可以较好地解决这个问题. 通过本课程设计可以使学生充分认识开发和设计Web应用程序的的重要性和复杂性,充分了解Web应用程序的设计和开发的基本过程,掌握常用的Web开发技术,充分把握各项技术的特点和应用领域以及各项技术之间的相互关系,进一步体会各项技术在Web应用程序中地位和作用从而对各种技术有比较清醒的认识,在此基础上习得Web开发技术平台的选择能力. 二.课程设计内容与目标 课题名称:客户信息管理系统 设计目标:本系统模拟企业对于客户信息的管理,操作人员可以添加、修改客户信息,针对客户来电进行记录,并对客户的重要信息进行提醒,等等。 设计方法:jsp、mysql动态网页制作工具配合相关技术(如HTML、CSS、JavaScript、xml等) 设计要求:利用Web应用程序的客户端开发技术(包括Jsp、HTML、CSS、JavaScript、HTML、XML、MySql等)设计一个符合要求的Java Web数据库应用系统,并实现用户交互功能的设计,达到Java Web应用程序可用性和易用性目标。 0

开发模式:MVC模式.MVC模式的目的就是实现Web系统的职能分工。 Model层实现系统中的业务逻辑,通常可以用JavaBean或EJB来实现。 View层用于与用户的交互,通常用JSP来实现。 Controller层是Model与View之间沟通的桥梁,它可以分派用户的请求并选择恰当的视图以用于显示,同时它也可以解释用户的输入并将它们映射为模型层可执行的操作。 开发工具:windows7,eclispe,jdk1.7,tomcat7.0、mysql5.5 三、系统设计 1、系统特点 本系统尝试从一些简单的层面对于企业客户信息的管理进行一种探索,针对企业和客户的交流行为进行系统化管理,力求做到客户信息的准确、快捷和可追溯性。 本系统包括3个主要层面,客户信息维护、客户来电记录和客户回访记录。 2、功能设计 4个模块 (1)客户资料信息维护模块 客户信息输入、修改和删除。 (2)客户来电信息模块 来电信息添加和来电信息查询。 (3)客户回访信息模块 回访信息添加和回访信息查询。 (4)客户重要信息提示模块 用例图UseCase 1

3、用户界面草图 登录草图 导航页面草图 2

其它功能见后面操作效果图 4、页面迁移图 从页面迁移图中可以看出,本系统的页面迁移基本上发生在模块内部,整体比较简单而清晰 3

5、页面功能设计 所有页面的pageId和对应页面的Jsp文件名及所对应的功能

4

四、数据库设计 1、数据库表 (1)用户表user

(2)客户信息表Customer (3)客户来电表 IncomeCall

(4)客户回访表 FeedBackCall 5

2、数据库操作图

6

五、功能模块的详细设计 1、程序目录结构图 2、数据库访问模块 数据库的设计是需要针对每个模块而不是每个页面进行设置数据库模块,所有的数据访问类DUser、DIncome、Dcustomer、DFeedback、DRemind从同一个父类Dcommom继承,该父类提供了一个方法getDBConnection来获取数据库的链接。 7

DCommon代码 public class DCommon { public Connection getDBConnection( ) {//尝试连接数据库 try { //载入MySQL的JDBC驱动类 Class。forName(CommonConst。DB_DRIVER_CLASSNAME); Connectionconn=DriverManager.getConnection ( CommonConst.DB_CONN_STRING );//获得数据库连接 return conn; } catch(Exception ex) { ex.printStackTrace(); return null; } } } 3、共通Servlet的处理 本系统中一旦代码出现了异常,将直接向上抛出,一直抛到共通类Servlet

8

进行处理。 在共通Servlet中发现异常,将页面跳转到错误处理页面,并把错误信息在页面上显示出来,同时提供一个往登录页面迁移的链接。 对应的共通Servlet的相关代码如下: public class CommonServlet extends HttpServlet { //保存各页面Id对应的action类的对象 private Hashtable hPageHandler = new Hashtable(); //配置文件的存放位置 private JXPathContext configContext = null; public void init() { //取得配置文件,并获得其中的dom元素 String filePath = getInitParameter(”configXML”); String fileRealPath = getServletContext().getRealPath(filePath); //尝试建立配置文件的DOM try { org.jdom.input。SAXBuilder builder = new SAXBuilder(); org.jdom。Document pDoc = builder。build(fileRealPath ); configContext = JXPathContext.newContext(pDoc); GlobalObjectProvider.init( configContext ); } catch(Exception e) { System。out。println(”Servlet初始化失败!\"); } //初始化共通类以获取页面信息 CommonConst。init(); } //每一种动作第一次执行的时候,初始化对应的类 public void doPost ( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException { //设置提交表单的中文编码

9

request.setCharacterEncoding(\"GBK”); HttpSession mySession = request.getSession(true); //得到用户输入信息 String sPageId = request.getParameter(\"pageId”); String sActionId = request。getParameter(”actionId”); if ( sPageId == null || sPageId.equals(”\") || sActionId == null || sActionId.equals(\"”) ) { //非法进入页面,跳转到首页 mySession。invalidate(); response。sendRedirect(\".。/login.jsp\"); return; } //如果非法进入页面(登录页面除外) if ( !sPageId。equals(\"S001\") && mySession.getAttribute(”loginUser\") == null ) { //非法进入页面,跳转到首页 mySession。invalidate(); response.sendRedirect(\"../login。jsp”); return; } try { //根据pageId获得处理对象,如果没有则创建一个对象 Object oActionObject = hPageHandler。get( sPageId ); if ( oActionObject == null ) { //根据配置文件创建一个新对象 String sClassName = (String)configContext.getValue( \"ch08—config/page[@id='”+sPageId+\"’]/@className”); oActionObject = Class。forName( sClassName )。newInstance(); hPageHandler.put( sPageId, oActionObject); } //取得方法名

10

String sMethodName = (String)configContext。getValue( \"ch08-config/page[@id=’\"+sPageId+”’]/action[@id=’\"+sActionId+”']/@methodName”); //生成对应的参数,并调用对应对象的对应方法 //inputData是根据传入的参数做成的 Hashtable inputData = new Hashtable(); Enumeration params = request.getParameterNames(); while( params。hasMoreElements()) { String sParaName = (String)params.nextElement(); inputData。put( sParaName, request。getParameter(sParaName) ); } //outputData是下一个页面的值域,在此只是被初始化 Hashtable outputData = new Hashtable(); //生成参数列表 Class[] paraType = { Class.forName(\"java.util.Hashtable\"), Class.forName(”java。util.Hashtable”), Class。forName(\"javax。servlet.http.HttpSession\") }; Object[] paraObj = { inputData, outputData, mySession }; //生成Method对象 Method invokeMethod = oActionObject。getClass().getMethod( sMethodName, paraType ); //调用方法 invokeMethod。invoke( oActionObject, paraObj ); //根据outputData的结果决定下一个页面 String sNextPageId = (String)outputData。get(\"pageId\"); String sRealPagePath = (String)configContext。getValue( ”ch08—config/page[@id=’\"+sNextPageId+”’]/@path”); //设置下一个页面的值域 mySession。setAttribute( sNextPageId, outputData ); response.sendRedirect( sRealPagePath ); return; }

11

catch(Exception e) { //页面处理出错,跳转到错误处理页面 e.printStackTrace(); Hashtable outputData = new Hashtable(); outputData。put( \"exception\); //设置错误页面的值域 mySession.setAttribute( CommonConst。VIEWID_ERROR, outputData ); response.sendRedirect(\"。。/error.jsp\"); return; } } public void doGet ( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException { doPost( request, response ); } } 错误页面:

12

4、登录模块 由于本系统用户角色只有一种,不存在跳转到不同页面的问题,处理相对简单一些,如果用户登录成功,则将用户信息放到session中,并将页面跳转到导航页面。 (1)登录页面控制模块ALogin相关代码如下: public class ALogin { public void doLogin ( Hashtable inputData, Hashtable outputData, HttpSession mySession ) throws Exception { //获取输入信息 String sUsername = (String)inputData。get(”username\"); String sPassword = (String)inputData。get(\"password”); //校验用户输入信息 LUser lUser = (LUser)GlobalObjectProvider。getLogicService(CommonConst。LOGIC_KEY_USER); //如果对应的类没有的话,报错并返回login页面 if ( lUser == null ) { throw new Exception(\"发生了内部错误,请联系技术人员!\" ); } //获取用户信息 User userInfo = lUser.getUserInfo( sUsername, sPassword ); if ( userInfo == null ) { outputData.put( \"pageId\", CommonConst.VIEWID_LOGIN ); outputData.put( \"errMsg\", ”用户名密码检查失败!请重新输入。” ); outputData。put( ”username”, sUsername ); return; } else { outputData.put( ”pageId\", CommonConst。VIEWID_MENU); //往session中设置用户信息 mySession.setAttribute( ”loginUser\", userInfo ); return;

13

} } } (2)登录效果图 5、页面导航设计 (1)页面位置信息和页面的pageid息息相关,考虑用一个全局变量来存这个信息,然后通过在共通文件中来访问这个全局变量来获取对应页面的名称。为了达到这个目的设置一个成员变量pageinfo和对应的设置方法init(),对应代码如下: public static Hashtable pageInfos = new Hashtable(); //数据库相关常量 public static String DB_DRIVER_CLASSNAME = ”com.mysql.jdbc.Driver”; public static String DB_CONN_STRING = \"jdbc:mysql://localhost/ch08?user=root&password=123\"; //初始化 public static void init() { pageInfos.put(”S002”,\"目录页面\"); pageInfos.put(\"S110”,”客户资料 > 客户资料录入页面\"); pageInfos。put(\"S120\",\"客户资料 〉 客户资料修改一览页面\"); pageInfos。put(”S121”,”客户资料 > 客户资料修改详细页面”); pageInfos。put(\"S130\",\"客户资料 〉 客户资料删除页面”); pageInfos。put(\"S210”,\"客户来电 > 快速反应条件输入页面\"); pageInfos.put(”S211”,”客户来电 > 快速反应结果一览页面”); pageInfos。put(\"S220”,\"客户来电 > 客户来电信息添加页面”); pageInfos。put(\"S230”,\"客户来电 〉 客户来电信息查找页面”); pageInfos。put(\"S231”,\"客户来电 〉 客户来电信息一览页面\"); pageInfos。put(”S232\",\"客户来电 > 客户来电信息详细页面\"); pageInfos.put(”S310”,”客户回访 > 客户回访信息添加页面\"); pageInfos。put(”S320”,”客户回访 > 客户回访信息查找页面\");

14

pageInfos。put(”S321\",\"客户回访 > 客户回访信息一览页面\"); pageInfos.put(\"S322\",\"客户回访 〉 客户回访信息详细页面”); pageInfos.put(”S410”,”客户重要信息提醒页面\"); } //获得页面信息 public static String getPageInfo( String sPageId ) { return (String)pageInfos。get(sPageId); } 5.1页面外观设计 为四个模块设计不同颜色风格的CSS代码 .tr_head1 {color: black; background-color:#aaccaa;} .tr_content1 {color: black; background—color:#eeffee; cursor:hand;} .tr_head2 {color: black; background—color:#ccaaaa;} .tr_content2 {color: black; background—color:#ffeeee; cursor:hand;} 。tr_head3 {color: black; background—color:#aaaacc;} 。tr_content3 {color: black; background-color:#eeeeff; cursor:hand;} 。tr_head4 {color: black; background—color:#ccccaa;} 。tr_content4 {color: black; background—color:#ffffee; cursor:hand;} 5。2导航页效果图 15

6、客户资料维护模块 (1)客户资料录入 单击导航页面链接进入客户资料录入页面。注意两个方面:一是页面对应的显示元素和输入元素的颜色和当前模块的颜色想吻合,而是在用户输入信息并单击“登录”按钮时,将客户信息登入数据库,然后页面直接转入修改一览。 页面控制类ACustomerAdd: public class ACustomerAdd { //追加一个客户 public void doRegister( Hashtable inputData, Hashtable outputData, HttpSession mySession ) throws Exception { //首先获得要追加的客户详细信息 String sRealname = (String)inputData。get(”realname”); String sSex = (String)inputData.get(”sex”); String sBirthday = (String)inputData.get(\"birthday”); String sPhone = (String)inputData.get(”phone\"); String sCellphone = (String)inputData.get(”cellphone”); String sAddress = (String)inputData.get(\"address”); String sStartDate = (String)inputData。get(\"startDate”);

16

String sMemo = (String)inputData.get(”memo”); //生成一个Customer对象以调用 Customer customer = new Customer(); customer。setRealname( sRealname ); customer。setSex( sSex ); customer.setBirthday( sBirthday ); customer。setPhone( sPhone ); customer。setCellphone( sCellphone ); customer.setAddress( sAddress ); customer。setStartDate( sStartDate ); customer。setMemo( sMemo ); //调用对应的logic类 LCustomer lCustomer = (LCustomer)GlobalObjectProvider。getLogicService(CommonConst。LOGIC_KEY_CUSTOMER); //添加对应的记录 lCustomer。addCustomer( customer ); //然后重新检索,并将页面迁移到一览页面 Vector vCustomers = lCustomer.getAllCustomer(); outputData.put( ”pageId\", CommonConst。VIEWID_CUSTOMER_LIST); //往值域中设置当前位置信息 mySession.setAttribute(\"customers\", vCustomers ); outputData。put( ”pageIndex”, new Integer(0) ); return; } } 效果图: 17

(2)客户资料修改 public class ACustomerModify { //修改一个客户信息 public void doRegister( Hashtable inputData, Hashtable outputData, HttpSession mySession ) throws Exception { //首先获得要修改的客户详细信息 String sCustomerId = (String)inputData。get(\"customerId\"); String sRealname = (String)inputData.get(”realname\"); String sSex = (String)inputData。get(”sex\"); String sBirthday = (String)inputData.get(\"birthday\"); String sPhone = (String)inputData.get(\"phone\"); String sCellphone = (String)inputData.get(”cellphone”); String sAddress = (String)inputData。get(\"address\"); String sStartDate = (String)inputData.get(\"startDate”); String sMemo = (String)inputData.get(”memo”); //生成一个Customer对象以调用 Customer customer = new Customer(); customer.setCustomerId( sCustomerId ); customer.setRealname( sRealname ); customer.setSex( sSex ); customer。setBirthday( sBirthday );

18

customer。setPhone( sPhone ); customer.setCellphone( sCellphone ); customer.setAddress( sAddress ); customer.setStartDate( sStartDate ); customer.setMemo( sMemo ); //调用对应的logic类 LCustomer lCustomer = (LCustomer)GlobalObjectProvider。getLogicService(CommonConst。LOGIC_KEY_CUSTOMER); //添加对应的记录 lCustomer.modifyCustomer( customer ); //然后重新检索,并将页面迁移到一览页面 Vector vCustomers = lCustomer.getAllCustomer(); outputData.put( ”pageId”, CommonConst.VIEWID_CUSTOMER_LIST); //往值域中设置当前位置信息 mySession。setAttribute(”customers\", vCustomers ); outputData.put( ”pageIndex\", new Integer(0) ); return; } } 19

(3)客户资料删除 public class ACustomerDelete { //到首页 public void doFirst( Hashtable inputData, Hashtable outputData, HttpSession mySession ) throws Exception { //首页的index一定为0 outputData。put( ”pageId\", CommonConst.VIEWID_CUSTOMER_DELETE); //往值域中设置当前位置信息 outputData。put( ”pageIndex\", new Integer(0) ); return; }

20

//到末页 public void doLast( Hashtable inputData, Hashtable outputData, HttpSession mySession ) throws Exception { //首先获得全部客户信息,并计算出最后一页的位置 Vector allCustomers = (Vector)mySession。getAttribute(”customers”); int iMax = allCustomers.size(); int iMaxPage = (int)Math。ceil((double)iMax/20); int iIndex = (iMaxPage-1)*20; //首页的index一定为0 outputData。put( \"pageId\", CommonConst。VIEWID_CUSTOMER_DELETE); //往值域中设置当前位置信息 outputData。put( \"pageIndex”, new Integer(iIndex) ); return; } //到前页 public void doPrev( Hashtable inputData, Hashtable outputData, HttpSession mySession ) throws Exception { //首先获得当前页 String sCurPage = (String)inputData。get(”curPage\"); int iCurPage = (new Integer(sCurPage)).intValue(); int iIndex = (iCurPage—2)*20; outputData。put( \"pageId\", CommonConst.VIEWID_CUSTOMER_DELETE); //往值域中设置当前位置信息 outputData.put( \"pageIndex\", new Integer(iIndex) ); return; } //到次页 public void doNext( Hashtable inputData, Hashtable outputData, HttpSession mySession ) throws Exception {

21

//首先获得当前页 String sCurPage = (String)inputData。get(”curPage”); int iCurPage = (new Integer(sCurPage)).intValue(); int iIndex = iCurPage*20; outputData.put( ”pageId”, CommonConst.VIEWID_CUSTOMER_DELETE); //往值域中设置当前位置信息 outputData.put( \"pageIndex”, new Integer(iIndex) ); return; } //到首页 public void doSpec( Hashtable inputData, Hashtable outputData, HttpSession mySession ) throws Exception { //首先获得指定页码 String sSpecPage = (String)inputData.get(\"spec\"); //获得全部客户信息,并计算出最后一页的位置 Vector allCustomers = (Vector)mySession.getAttribute(\"customers\"); int iMax = allCustomers.size(); int iMaxPage = (int)Math。ceil((double)iMax/20); int iSpec = (new Integer(sSpecPage))。intValue(); //如果指定页大于全部页码,则跳转到第一页 if ( iSpec 〉 iMaxPage ) { iSpec = 1; } //指定页 outputData.put( ”pageId”, CommonConst.VIEWID_CUSTOMER_DELETE); //往值域中设置当前位置信息 outputData。put( \"pageIndex\", new Integer((iSpec—1)*20) ); return; } //修改某条记录 public void doDelete( Hashtable inputData, Hashtable outputData, HttpSession mySession ) throws Exception

22

{ //首先获得要修改的客户ID String sCustomerId = (String)inputData.get(”customerId”); //获得对应的客户的详细信息,然后迁移到客户详细信息修改页面 //调用对应的logic类 LCustomer lCustomer = (LCustomer)GlobalObjectProvider。getLogicService(CommonConst。LOGIC_KEY_CUSTOMER); //删除对应的记录 lCustomer.deleteCustomerById( sCustomerId ); //然后重新检索,并定位到第一页 Vector vCustomers = lCustomer.getAllCustomer(); //由于需要在页面迁移中使用题库,所以放到session中 mySession.setAttribute( ”customers”, vCustomers ); //然后迁移到指定页面 outputData。put( \"pageId\", CommonConst.VIEWID_CUSTOMER_DELETE); //往值域中设置当前位置信息 outputData.put( ”pageIndex\", new Integer(0) ); return; } }

7、客户来电信息模块 快速反应页面的设计代码: public class AQuickCondition { //追加一个客户 public void doSearch( Hashtable inputData, Hashtable outputData,

23

HttpSession mySession ) throws Exception { //首先获得要查找的相关资料 String sCustomerId = (String)inputData。get(\"customerId”); String sRealname = (String)inputData。get(\"realname\"); String sSex = (String)inputData。get(\"sex”); if ( sSex == null ) { sSex = \"”; } String sPhone = (String)inputData.get(\"phone\"); String sStartDate = (String)inputData.get(”startDate”); String sIncomeDate = (String)inputData。get(”incomeDate\"); String sFeedbackDate = (String)inputData。get(”feedbackDate”); //调用对应的logic类 LCustomer lCustomer = (LCustomer)GlobalObjectProvider.getLogicService(CommonConst.LOGIC_KEY_CUSTOMER); //然后检索,并将页面迁移到一览页面 Vector vCustomers = lCustomer.getCustomers( sCustomerId, sRealname, sSex, sPhone, sStartDate, sIncomeDate, sFeedbackDate); //检索出来了数据 if ( vCustomers。size() > 0 ) { outputData。put( ”pageId\", CommonConst.VIEWID_QUICK_LIST); //往值域中设置当前位置信息 mySession。setAttribute(\"customers”, vCustomers ); outputData.put( ”pageIndex\", new Integer(0) ); } else { //重新显示条件录入页面 outputData.put( \"customerId”, sCustomerId ); outputData。put( ”realname\", sRealname );

24

outputData。put( ”sex\", sSex ); outputData.put( ”phone”, sPhone ); outputData.put( ”startDate\", sStartDate ); outputData。put( \"incomeDate\", sIncomeDate ); outputData.put( \"feedback\", sFeedbackDate ); outputData.put( \"pageId”, CommonConst.VIEWID_QUICK_CONDITION); outputData。put( ”initMsg\", ”检索结果为0件,请重新指定查询条件!\" ); } return; } }

8、客户回访信息模块 public class AFeedbackCondition { //查找 public void doSearch( Hashtable inputData,

25

Hashtable outputData, HttpSession mySession ) throws Exception { //首先获得要查找的相关资料 String sCustomerId = (String)inputData。get(\"customerId”); String sCallFrom = (String)inputData.get(”callFrom\"); String sFromTime = (String)inputData.get(”fromTime”); String sToTime = (String)inputData.get(\"toTime”); //调用对应的logic类 LFeedback lFeedback = (LFeedback)GlobalObjectProvider。getLogicService(CommonConst。LOGIC_KEY_FEEDBACK); //然后检索,并将页面迁移到一览页面 Vector vFeedbacks = lFeedback.getFeedbacks( sCustomerId, sCallFrom, sFromTime, sToTime ); outputData.put( \"pageId\", CommonConst。VIEWID_FEEDBACK_LIST); //往值域中设置当前位置信息 mySession。setAttribute(\"feedbacks”, vFeedbacks ); outputData。put( ”pageIndex”, new Integer(0) ); return; } } 26

9、客户重要信息提示模块 public class ARemind { //到首页 public void doFirst( Hashtable inputData, Hashtable outputData, HttpSession mySession ) throws Exception { //首页的index一定为0 outputData。put( ”pageId”, CommonConst.VIEWID_INFOR_REMIND); //往值域中设置当前位置信息 outputData.put( ”pageIndex\", new Integer(0) ); return;

27

} //到末页 public void doLast( Hashtable inputData, Hashtable outputData, HttpSession mySession ) throws Exception { //首先获得全部客户信息,并计算出最后一页的位置 Vector allCustomers = (Vector)mySession.getAttribute(”customers”); int iMax = allCustomers。size(); int iMaxPage = (int)Math.ceil((double)iMax/20); int iIndex = (iMaxPage—1)*20; //首页的index一定为0 outputData。put( ”pageId”, CommonConst。VIEWID_INFOR_REMIND); //往值域中设置当前位置信息 outputData。put( \"pageIndex\", new Integer(iIndex) ); return; } //到前页 public void doPrev( Hashtable inputData, Hashtable outputData, HttpSession mySession ) throws Exception { //首先获得当前页 String sCurPage = (String)inputData.get(”curPage”); int iCurPage = (new Integer(sCurPage)).intValue(); int iIndex = (iCurPage—2)*20; outputData。put( ”pageId\", CommonConst.VIEWID_INFOR_REMIND); //往值域中设置当前位置信息 outputData.put( ”pageIndex\", new Integer(iIndex) ); return; } //到次页 public void doNext( Hashtable inputData, Hashtable outputData, HttpSession mySession ) throws Exception {

28

//首先获得当前页 String sCurPage = (String)inputData。get(\"curPage”); int iCurPage = (new Integer(sCurPage))。intValue(); int iIndex = iCurPage*20; outputData.put( \"pageId”, CommonConst。VIEWID_INFOR_REMIND); //往值域中设置当前位置信息 outputData。put( \"pageIndex\", new Integer(iIndex) ); return; } //到首页 public void doSpec( Hashtable inputData, Hashtable outputData, HttpSession mySession ) throws Exception { //首先获得指定页码 String sSpecPage = (String)inputData。get(\"spec”); //获得全部客户信息,并计算出最后一页的位置 Vector allCustomers = (Vector)mySession。getAttribute(”customers\"); int iMax = allCustomers.size(); int iMaxPage = (int)Math.ceil((double)iMax/20); int iSpec = (new Integer(sSpecPage))。intValue(); //如果指定页大于全部页码,则跳转到第一页 if ( iSpec > iMaxPage ) { iSpec = 1; } //指定页 outputData.put( ”pageId”, CommonConst。VIEWID_INFOR_REMIND); //往值域中设置当前位置信息 outputData.put( \"pageIndex\", new Integer((iSpec—1)*20) ); return; } } 六 对本系统开发的思考总结 MVC模块划分、内容结构如何组织的方法,对一个Web程序设计的影响是很大的,有效的规划可以为Web程序设计增加美感。其它的模块则有一定的联系性. 29

但是所有的模板其并非是层级关系——即一层一层的点下去,他们可以通过导航栏上的链接转到其它WEB程序设计上,由此可形成一个具有Web程序设计的模式,因此这些模块之间可以实现无顺序关系,却仍能感受到该Web程序设计是一个很条理。 美工方面做得还是差了些,以后会多下一番功夫。

30

因篇幅问题不能全部显示,请点此查看更多更全内容