第十章项目案例:在线投票系统训练的技能点能够分析系统功能能够设计数据库会使用Struts2框架开发程序功能会使用Hibernate框架开发程序功能会使用Filter会使用三层架构组织程序代码任务描述系统概述开发在线投票系统,实现如下功能:用户注册和登录发布新投票投票查看投票结果维护投票投票查询问题分析1:整体开发思路系统开发步骤明确需求设计数据库设计技术框架Struts2+Hibernate项目开发准备编码顺序1、用户注册和登录2、发布新投票3、投票4、查看投票结果5、维护投票6、投票查询测试问题分析2:界面交互设计界面交互设计的原则统一性原则界面风格统一:用相同方式展现相同类型的数据交互风格统一:用相同方式完成相同类型的操作美观性原则界面美观大方易用性原则操作方式自然、易理解问题分析3:技术框架设计技术框架中需要考虑的问题如何分层,每层的职责采用哪些技术如何处理异常、管理事务、记录日志等命名规范教员补充内容难点分析1:数据库设计2-1字段名说明投票内容投票的具体内容投票类型投票为单选还是多选每一个投票应该有多个选项,所以投票选项与投票内容应为多对一关系,字段名说明投票选项选项的具体内容投票内容记录投票内容显示顺序页面显示时,该选项的位置,由系统按照添加顺序自动设置难点分析1:数据库设计2-2字段名说明投票选项记录用户选择了那个选项投票内容记录用户参与了那个投票用户记录那个用户参与投票投票结果应记录投票选项、投票内容以及用户用户须登录才能使用系统,系统应保存用户信息字段名说明用户ID用户在系统中的唯一标识,不能有重复值,用户登录系统所使用的账号用户名用户姓名密码用户登录系统所使用的密码难点分析2:理解业务3-1发布新投票填写投票信息增加选项新增选项可删除,默认选项不可删除发布新投票在Action类中使用字符串数组接收投票选项难点分析2:理解业务3-2投票选择想要参与的投票,页面跳转至投票页面根据发布时设定的投票类型,在页面判断是单选还是多选,选择使用radio还是checkbox显示投票选项难点分析2:理解业务3-3查看投票结果在投票列表中点击投票内容超链接或在投票成功后选择查看投票结果,将跳转到查看投票结果页面通过计算每个选项所得票数占总投票数的百分比设置页面中div显示宽度,以直观显示投票结果项目准备1:数据库设计与实现2-1字段名说明vu_user_id用户ID自动编号,从1开始,主键vu_user_name用户名必填vu_password密码必填用户信息表vote_user投票内容表vote_subject字段名说明vs_id编号自动编号,从1开始,主键vs_title投票内容必填vs_type投票类型必填。1-单选;2-多选;默认为1项目准备1:数据库设计与实现2-2字段名说明vo_id编号自动编号(标识列),从1开始,主键vo_option投票选项必填vs_id投票内容IDvo_order显示顺序投票选项表vote_option投票取值表vote_item字段名说明vi_id编号自动编号(标识列),从1开始,主键vo_id投票选项ID必填vs_id投票内容IDvu_user_id用户ID完成时间:20分钟项目准备2:搭建系统框架采用熟悉的Hibernate+Struts2框架实现系统创建Web工程及相关包为工程添加Struts2的支持,修改web.xml,增加Struts2的Filter,创建Struts2配置文件为工程添加Hibernate支持,创建并配置Hibernate配置文件,创建实体类及实体映射文件创建DAO接口创建DAO接口的Hibernate实现类创建业务接口及实现类使用Filter管理事务完成时间:10分钟完成时间:20分钟完成时间:10分钟完成时间:10分钟开发计划用例1:注册与登录[40分钟]用例2:发布投票[30分钟]用例3:完成投票[30分钟]用例4:查看投票结果[30分钟]用例5:投票维护[40分钟]用例6:投票查询[25分钟]用例1:注册与登录5-1需求说明系统要求用户必须登录,才能使用系统。若不是注册用户则要注册后才可以登录使用投票系统用例1:注册与登录5-2需求说明系统要求用户必须登录,才能使用系统。若不是注册用户则要注册后才可以登录使用投票系统用例1:注册与登录5-3思路分析制作登录和注册页面编写Action实现登录、注册创建BaseAction创建LoginAction实现用户登录创建RegisterAction实现用户注册创建SubjectAction用于投票内容的所有操作,新建list方法获取所有投票信息修改Struts2配置文件,增加Action的配置配置LoginAction配置RegisterAction配置SubjectAction制作登录成功页面,显示投票列表完成时间:40分钟用例1:注册与登录5-4功能测试检查点1(15分钟)注册功能检查点2(15分钟)登录功能检查点3(10分钟)显示所有投票信息互相测试完成的程序功能测试出的缺陷记录在“常见问题列表中”修正缺陷后返测通过,才认为用例开发完成单元测试用例1:注册与登录5-5参考代码或结果演示publicclassSubjectActionextendsBaseAction{privateVoteServiceservice;//业务类privateListsubjects;//投票内容列表//每个投票内容有多少人参与投票privateMapLong,Longvotes=newHashMapLong,Long();//...省略setter&getter方法publicStringlist(){subjects=getService().getAllSubjects();ListObject[]subjectVotes=(ListObject[])getService().getUserCountPerSubject(null);for(Object[]subjectVote:subjectVotes){votes.put((Long)subjectVote[0],(Long)subjectVote[1]);}returnsuccess;}}共性问题集中讲解常见调试问题及解决办法代码规范问题共性问题集中讲解用例2:发布投票3-1需求说明用户登录后可以添加新投票用例2:发布投票3-2思路分析制作发布投票的页面编写Action实现新投票发布在SubjectAction中,新建save方法用于发布新投票在SubjectAction中使用字符数组保存投票选项完成时间:30分钟用例2:发布投票3-3功能测试检查点1(15分钟)制作发布投票的页面检查点2(15分钟)编写Action实现新投票发布互相测试完成的程序功能测试出的缺陷记录在“常见问题列表中”修正缺陷后返测通过,才认为用例开发完成单元测试共性问题集中讲解常见调试问题及解决办法代码规范问题共性问题集中讲解用例3:完成投票3-1需求说明在投票列表页面,点击“我要参与”链接,进入投票页面选择选项点击投票按钮,完成投票,投票成功,页面跳转至投票成功页面投票成功用例3:完成投票3-2思路分析制作投票和投票成功页面投票页面要判断投票的类型是单选还是多选,选择使用radio还是checkbox显示投票选项编写Action实现投票创建VoteAction有关投票的所有操作新建save方法实现投票功能完成时间:30分钟用例3:完成投票3-3功能测试检查点1(15分钟)制作投票和投票成功页面检查点2(15分钟)编写Action实现投票互相测试完成的程序功能测试出的缺陷记录在“常见问题列表中”修正缺陷后返测通过,才认为用例开发完成单元测试共性问题集中讲解常见调试问题及解决办法代码规范问题共性问题集中讲解用例4:查看投票结果4-1需求说明在投票列表页面点击投票内容标题超链接或在投票成功后点击“返回查看投票结果”超链接,查看投票结果用例4:查看投票结果4-2思路分析编写Action实现查看投票结果在VoteAction新建view方法实现查看投票结果创建投票结果页面,显示投票结果设置页面中div显示宽度,以达到直观效果显示投票结果完成时间:30分钟divclass=percentstyle=width:s:propertyvalue='statPercent[id]'/%/div用例4:查看投票结果4-3代码检查检查点1(20分钟)编写Action实现查看投票结果检查点2(10分钟)显示投票结果互相测试完成的程序功能测试出的缺陷记录在“常见问题列表中”修正缺陷后返测通过,才认为用例开发完成单元测试用例4:查看投票结果4-4参考代码或结果演示publicclassVoteActionextendsBaseAction{privateVoteServiceservice;//业务类privateLonguserCountOfThisSubject//投票人数privateSubjectsubject;//投票内容privateLong[]options;//每个选项票数privateMapLong,Longstat=newHashMapLong,Long();//每个选项百分比privateMapLong,LongstatPercent=newHashMapLong,Long();publicStringview(){statUserCountOfThisSubject();//获得投票人数initStatResultToZeroForView();//初始化数据//计算每个选项票数占总票数百分比statVoteCountAndCalcPercentPerOption();returnviewSuccess;}…}共性问题集中讲解常见调试问题及解决办法代码规范问题共性问题集中讲解用例5:投票维护3-1需求说明在投票列表页面点击“维护”超链接,进入管理页面在管理页面中,选择要维护的投票内容,点击“维护”超链接,修改投票内容由管理界面进入维护页面用例5:投票维护3-2思路分析制作管理页面和维护页面编写Action实现投票维护在SubjectAction中新建modifyList方法,实现显示维护投票列表在SubjectAction中新建read方法,实现显示投票信息修改SubjectAction中modify方法,实现更新投票信息完成时间:40分钟用例5:投票维护3-3功能测试检查点1(15分钟)显示管理页面检查点2(25分钟)进行投票维护互相测试完成的程序功能测试出的缺陷记录在“常见问题列表中”修正缺陷后返测通过,才认为用例开发完成单元测试共性问题集中讲解常见调试问题及解决办法代码规范问题共性问题集中讲解用例6:投票查询4-1需求说明在投票列表页面输入查询关键字,点击查询按钮,即可获得查询结果用例6:投票查询4-2思路分析编写Action实现查询投票在SubjectAction中新建search方法,实现投票查询使用投票列表页面显示查询到的结果完成时间:25分钟用例6:投票查询4-3功能测试实现投票查询功能互相测试完成的程序功能测试出的缺陷记录在“常见问题列表中”修正缺陷后返测通过,才认为用例开发完成单元测试用例6:投票查询4-4参考代码或结果演示publicclassSubjectActionextendsBaseAction{privateStringkeywords;//每个投票内容有多少人参与投票privateMapLong,Longvotes=newHashM