1、资料内容仅供您学习参考,如有不当之处,请联系改正或者删除。JavaEE课程设计报告题目名称: 基于struts2、 Spring、 Hibernate构建一个网上投票系统成绩: _目录基于struts2、 Spring、 Hibernate构建一个网上投票系统3一、 问题描述及设计思路31.1 需求分析31.2业务分析31.3投票用例5二、 详细设计过程82.1 创立Struts2应用82.2 添加Hibernate82.3 添加Spring应用92.4 领域模型层设计9三、 结论和体会133.1 结论133.2 体会13四、 附录14附录 A 其它图表14附录 B 主要程序代码15五、 参考
2、文献21基于struts2、 Spring、 Hibernate构建一个网上投票系统一、 问题描述及设计思路对于开发一个投票管理系统来说, 应该实现什么功能, 如何实现这个功能都是开发人员必须了解的问题。将这个系统的需求、 业务流程以及用例进行细致的分析、 讲解。1.1 需求分析随着网络应用的日益普及, 投票的形式也发生了很大的变化。当前在很多的场合, 投票已经开始由原始方式转变为网上投票。由于具有方便、 快捷、 成本低、 调查范围广等优点, 网上投票已经被广泛的应用。如何管理好网上投票信息内容也变得十分的重要, 我们所设计开发的投票管理系统, 正是基于这种需求诞生的。本投票管理系统分为用户提
3、供网上投票和投票信息管理两大类功能。经过投票管理功能能够完成增加新投票、 修改原有投票信息、 查找投票等功能。本系统的界面友好、 操作简便, 适用于任何网站进行投票调查。 本系统的基本功能如下所述。l 使用本系统的网上投票功能, 用户只要登录指定的网页, 就能够进行投票操作, 并能够得到投票结果信息。l 使用本网站的登录功能, 管理员能够登录系统, 然后对相关的信息进行管理。l 使用本系统的创立投票功能, 管理员能够创立一个新的投票功能。l 使用本系统的管理投票功能, 管理员能够对系统已经存在的投票进行更新, 包括增加投票子选项、 删除投票子选项、 修改投票类型、 更改投票状态。l 使用本系统
4、的查找投票功能, 管理员能够经过输入部分或者全部的投票主题查找对应的投票信息。l 使用本系统的管理员管理功能, 管理员能够修改本人的密码或者创立一个新的管理员。l 使用本系统的注销功能, 管理员能够安全的退出本系统。1.2业务分析投票管理系统由前台和后台两部分组成: 前台显示投票并能够执行投票操作, 后台是对投票信息和管理员信息进行管理。下面分别从使用前台和使用后台两个角度来分析本系统的业务流程。1.2.1 显示投票用户进入投票页面如图, 进行投票操作。1.2.2管理投票1.2.2.1后台登录页面只有管理员能够进入后台对相关的信息进行维护, 管理员在维护信息之前必须先登录系统。1.2.2.2
5、后台主页面当成功登录系统后进入后台主页面, 在后台主页面的左侧显示欢迎信息和系统当前所有投票数量信息。同时该页面提供了相关操作的链接, 单击相应的链接即可进行相应的操作。各链接具体实现的业务如下。l 管理投票链接: 当管理员单击”投票管理”的文字或者图标链接后, 进入管理投票页面, 能够对系统已有投票信息进行维护。l 创立投票链接当管理员单击”创立投票”的文字或者图标链接后, 进入创立投票页面, 能够增加新的投票选项。l 查找投票链接: 当管理员单击”查找投票”的文字或者图标后, 进入查找投票页面, 能够根据所输入的投票主题信息( 能够是完整的, 也能够是关键字) 在系统已有的投票中进行查找。
6、l 管理员管理连接: 当管理员单击”管理员管理”链接后, 进入管理员管理页面, 能够修改当前管理员密码, 增加新的管理员。l 投票主页链接: 当管理员单击”投票主页”链接后, 能够跳转到后台主页面。l 注销链接: 当管理员单击”注销后”链接后, 能够安全退出系统。1.3投票用例 用例名称: 投票简要说明: 允许所有用户进行投票操作基本事件流: (1) 用户进入投票页面(2) 系统显示投票主题及投票内容(3) 用户进行投票(4) 系统显示投票结果(5) 用例结束 异常事件流: (1) 投票已经关闭, 系统给出错误提示(2) 用户所在IP已经投过票, 系统出现错误提示 用例名称: 创立投票简要说明
7、: 允许管理员创立新投票前置条件: 管理员已经登录后台系统基本事件流: (1) 管理员进入创立投票页面(2) 管理员填写新投票主题相关信息并单击下一步(3) 管理员填写新投票选项信息并单击下一步(4) 系统增加新投票信息并显示(5) 用例结束异常事件流: (1) 填写信息错误, 系统给出提示信息(2) 管理员中途单击其它页面链接, 跳转相应页面 用例名称: 查找投票 简要说明: 允许管理员查找投票前置条件: 管理员已经登录后台系统基本事件流: (1) 管理员进入查找投票页面(2) 管理员输入完整或部分的投票主题并提交(3) 系统显示查找结果(4) 用例结束异常事件流: (1) 输入信息有误,
8、系统给出错误提示(2) 数据库没有符合要求的信息, 系统给出提示 用例名称: 增加投票选项简要说明: 允许管理员为某投票主题增加子选项气质条件: 管理员已经登录后台系统基本事件流: (1) 管理员进入修改投票信息页面(2) 管理员单击”新增加一个投票选项”链接(3) 管理员输入新增加选项内容(4) 用例结束异常事件流: (1) 输入信息有误, 系统给出错误提示(2) 数据库没有符合要求信息, 系统给出提示 用例名称: 删除投票选项简要说明: 允许管理员删除某投票选项的子选项气质条件: 管理员已经登录后台系统基本事件流: (1) 管理员进入修改投票信息页面(2) 管理员单击要删除选项相应的”删除
9、”链接(3) 系统删除相应的选项(4) 用例结束异常事件流: 当剩余选项个数小于等于2时, 继续删除系统提示错误 用例名称: 修改投票选项简要说明: 允许管理员修改投票信息前置条件: 管理员已经登录后台系统基本事件流: (1) 管理员进入修改投票信息页面(2) 管理员修改投票信息并单击”更新”按钮(3) 系统更新投票信息(4) 用例结束异常信息流: 输入信息有误, 系统给出提示 用例名称: 修改密码简要说明: 允许管理员修改本人的登录密码前置条件: 管理员已经登录后台系统基本事件流: (1) 管理员进入修改密码页面(2) 管理员输入信息并提交(3) 系统显示现修改成功(4) 用例结束异常信息流
10、: (1) 输入信息有误, 系统给出错误提示(2) 旧密码输入不正确, 系统给出提示(3) 两次输入新密码不一致, 系统给出提示 用例名称: 创立新管理员简要说明: 允许管理员创立一个新管理员前置条件: 管理员已经登录了后台系统基本事件流: (1) 管理员进入创立新管理员页面(2) 管理员输入信息并提交(3) 系统显示创立成功(4) 用例结束异常信息流: (1) 输入信息有误, 系统给出错误提示(2) 两次输入密码不一致, 系统给出提示(3) 新管理员用户名已存在, 系统给出提示二、 详细设计过程到当前为止我们已经对于整个投票系统的需求有了一定的了解, 下面将要设计到具体的实现方案。本节将从两
11、个方面入手进行系统设计, 包括技术方案( 使用什么样的技术来开发设计这个系统) 和数据库设计( 本系统设计到的数据信息如何存取) 。下面就是系统设计的详细内容。 经过前面的分析设计, 我们已经对整个投票管理系统的工作流程、 工程构架有了深入的了解, 下面开始进入详细设计和代码的实现过程。2.1 创立Struts2应用 在stc根目录添加配置文件struts.Xml 修改web.xml文件内容 引入jar包2.2 添加Hibernate 引入jar包包括hibernate3.jar、 cglib-nodep-2.14_3.jar、 dom4j-1.6.1.jar、 commons-collect
12、ions.jar、 log4-1.2.13.jar、 c3p0.0.90.4.jar、 jta.jar、 antlr-0.7.6.jar 创立对应数据库的持久化类一共需要创立4个持久化类, 分别为Admin.java、 Vote.java、 Votecontext.java、 Voterjava。它们各自对应的代码将在具体实现小节中提供需要注意的是, 在写Hibernate持久类的时候, 一定要遵循如下所述的规范。l 持久化类符合Javabean的规范, 包含一些成员变量, 以及与之对应的getter、 setter方法l 持久化类有一个ID属性, 用来唯一标示Customer类的每一个对象。
13、在面向对象术语中, 这个ID属性被称为对象标识符( OID, Object Identifier) , 一般它都用整数表示。l Hibernate要求持久化类必须提供一个不带参数的默认构造方法。 创立对象关系映射文件对应持久化类我们也需要创立4个映射文件, 分别为Admin.hbm.xml、 Vote.hbm.xml、 Voter.hbm.xml、 Votecontext.hbm.xml。它们各自对应的代码将在具体的实现小节中提供。 创立Hibernate配置文件hibernate.cfg.xml2.3 添加Spring应用 引入jar包包括spring.jar和sturts2-spring-
14、plugin-2.08.jar 创立Spring配置文件applicationContext.xml 在Web.xml中添加Spring监听2.4 领域模型层设计2.4.1 持久层设计持久层是经过Hibernate实现的, 采用DAO模式进行的开发设计。在设计过程中, 我们所有的实现类都继承了HibernateDaoSupport, 经过Hibernate提供的HQL语言执行数据操作, 避免了手写大量SQL语句繁琐、 易错的弊端。 具体的实现过程能够分为以下几步。(1) 编写接口(2) 编写实现类(3) 在applicationContext.xml中配置DAO。2.4.2 业务层设计业务层是
15、一个典型的Web应用程序中是作为中间组件而存在的。2.4.3 表示层设计 管理员登录模块设计后台管理员登录是后台系统管理的入口, 只有成功登录系统后才能够进行信息管理。首先管理员进入登录界面。输入用户名、 密码以及图形校检码并单击”确定”按钮, 如果信息无误则进入后台管理系统这页面;如果输入信息有误, 系统将给出提示信息。 创立投票模块该模块主要用于系统中添加一个新的投票, 包括投票主题, 投票类型、 投票是否发布、 投票选项内容。输入投票的主题、 子选项个数、 选择投票类型以及是否马上开放并单击”下一步”按钮。如过输入有误, 系统给出提示信息。创立投票选项的代码。确定并单击”下一步”, 创立
16、投票流程结束。 查看投票信息模块该模块用来显示当前系统中已经存在的所有投票信息内容。当管理员单击系统主页面的管理投票链接后, 系统显示所有的投票信息。显示所有的投票信息代码。 修改投票信息模块 该模块用来修改系统已存在的投票相关信息。为了确保信息的公正性, 当某个投票信息被更新时, 该投票对应投票记录, 包括投票票数以及投票人信息都被清空。当单击投票编号对应的编辑链接, 进入修改投票信息界面。单击新增加一个投票选项, 能够为当前投票增加子选项。增加投票选项的代码。观察发现, 在员原选项下面增加了一个新的选项。单击投票选项后面的”删除”链接, 能够删除对应的选票选项。 查找信息模块该模块允许管理
17、员根据投票主题查找对应的投票信息。当单击后台主页查找投票链接后, 进入查找投票界面。输入查询的内容并单击”确定”按钮, 系统显示符合条件的投票信息。 修改密码模块经过该模块能够修改登录管理员的登录密码。单击修改密码连接进入修改界面。输入提示信息并单击”确认”按钮即可修改密码, 如果旧密码不正确或者两次输入的新密码不一致, 系统会给出错误的提示信息。 创立新管理员模块经过该模块能够创立一个新的管理员。单击创立新管理员链接, 进入创立管理员的界面。输入相关的信息并单击”确定”按钮能够创立一个新的管理员, 如果输入有误或者所输入用户名已经不存在, 系统给出错误的提示信息。 投票模块该模块负责显示投票
18、信息给用户并处理投票过程。当投票人进入投票页面。选择并单机: : 下一步”按钮, 系统显示投票结果界面。三、 结论和体会3.1 结论随着网络应用的日益普及, 投票的形式也发生了很大的变化。当前在很多的场合, 投票已经开始由原始方式转变为网上投票。由于具有方便、 快捷、 成本低、 调查范围广等优点, 网上投票已经被广泛的应用。如何管理好网上投票信息内容也变得十分的重要, 我们所设计开发的投票管理系统, 正是基于这种需求诞生的。本投票管理系统分为用户提供网上投票和投票信息管理两大类功能。经过投票管理功能能够完成增加新投票、 修改原有投票信息、 查找投票等功能。本系统的界面友好、 操作简便, 适用于
19、任何网站进行投票调查。3.2 体会这次数据库课程设计给我的最大的印象就是如果自己有了兴趣, 就动手去做, 困难在你的勇气和毅力下是抬不了头的。从做这个课程设计开始无论遇到什么困难, 我都没有一丝的放弃的念头。出于对知识的渴望, 出于对新技术的好奇, 出于对一切未知的求知。我完成了这次课程设计, 不过这只是我学习路上的驿站, 我会继续学习它, 包括jave公司的j2ee我也很想试试, 语言原来就是相通的, just do it! 语言并不重要毕竟它仅仅是工具, 用好一个工具并不是一件值得为外人道的事情, 主要是了解学习思想。古语说的好: 学无止境啊! 我很庆幸我参加了这次课程设计, 让我确实打开
20、了眼界。四、 附录附录 A 其它图表附录 B 主要程序代码创立用户package sunyang.vote.action.admin;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import sunyang.vote.action.rootaction.AdminRoot;import sunyang.vote.domain.Admin;SuppressWarnings(serial)public class Createadmin extends AdminRoot pri
21、vate static final String CREATEADMINERROR = createAdminError;Overridepublic String execute() throws Exception /经过用户名查找管理员信息Admin a = adminService.findAdminByName(name);/如果不为空, 说明已经存在if (a != null) addActionError(getText(adminexist);return CREATEADMINERROR; else Date date = Calendar.getInstance().get
22、Time();SimpleDateFormat formatter = new SimpleDateFormat(yyyy-MM-dd HH:mm:ss);String dateString = formatter.format(date);Admin admin = new Admin();admin.setName(name);admin.setPassword(newpwd1);admin.setLogintime(dateString);adminService.addAdmin(admin);return SUCCESS;登录界面package sunyang.vote.action
23、.admin;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import javax.servlet.http.HttpSession;import org.apache.struts2.ServletActionContext;import sunyang.vote.action.rootaction.AdminRoot;import sunyang.vote.domain.Admin;import sunyang.vote.domain.Count;SuppressWarn
24、ings(serial)public class Login extends AdminRoot Overridepublic String execute() throws Exception HttpSession session = ServletActionContext.getRequest().getSession();if(session.getAttribute(rand)=null)return ERROR;/获得图形校验码String sf = (String) session.getAttribute(rand);/如果图形校验码正确, 判断帐号、 密码是否正确if (s
25、f.equals(safecode) Admin admin = adminService.findAdmin(name, password);if (admin = null) addActionError(getText(loginerror);return ERROR; else /将admin信息存入sessionsession.setAttribute(admin, admin);Count count2 = new Count();/设置单选投票个数count2.setSingleCount(voteService.findVoteCountByType(new Integer(1
26、);/设置多选投票个数count2.setMultiCount(voteService.findVoteCountByType(new Integer(0);/设置所有投票个数count2.setAllCount(voteService.findVoteCount();session.setAttribute(count2, count2);/获得当前系统时间并格式化, 存入管理员登录时间Date date = Calendar.getInstance().getTime();SimpleDateFormat formatter = new SimpleDateFormat(yyyy-MM-d
27、d HH:mm:ss);String dateString = formatter.format(date);admin.setLogintime(dateString);/更新管理员登录时间信息adminService.updatelogintime(admin);return SUCCESS; else addActionError(getText(codeerror);return ERROR;退出登录package sunyang.vote.action.admin;import javax.servlet.http.HttpSession;import org.apache.stru
28、ts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;SuppressWarnings(serial)public class Logout extends ActionSupport Overridepublic String execute() throws Exception HttpSession session = ServletActionContext.getRequest().getSession();session.invalidate();return SUCCESS;投票根目录packa
29、ge sunyang.vote.action.rootaction;import java.util.List;import java.util.Map;import sunyang.vote.service.VoteContextService;import sunyang.vote.service.VoteService;import sunyang.vote.domain.*;import com.opensymphony.xwork2.ActionSupport;SuppressWarnings(serial)public class VoteContextRoot extends A
30、ctionSupport /* * param context * 子选项内容, 数组类型 * param voteId * 投票编号 * param list * param list2 * 封装投票结果信息 * param votecontextId * 投票子选项编号 * param type * 投票类型 * param publish * 是否发布 * param map * 封装投票选项编号及内容 */protected VoteContextService voteContextService;protected VoteService voteService;protected
31、 String context;protected Integer voteId;protected List list2;protected Integer votecontextId;protected Integer type;protected Integer publish;protected Map map;public Integer getPublish() return publish;public void setPublish(Integer publish) this.publish = publish;public Integer getType() return t
32、ype;public void setType(Integer type) this.type = type;public Integer getVotecontextId() return votecontextId;public void setVotecontextId(Integer votecontextId) this.votecontextId = votecontextId;public Integer getVoteId() return voteId;public void setVoteId(Integer voteId) this.voteId = voteId;pub
33、lic String getContext() return context;public void setContext(String context) this.context = context;public VoteContextService getVoteContextService() return voteContextService;public void setVoteContextService(VoteContextService voteContextService) this.voteContextService = voteContextService;publi
34、c VoteService getVoteService() return voteService;public void setVoteService(VoteService voteService) this.voteService = voteService;public Map getMap() return map;public void setMap(Map map) this.map = map;public List getList2() return list2;public void setList2(List list2) this.list2 = list2;五、 参考文献1.张桂珠 刘丽 陈爱国 Java面向对象程序设计( 第2版) 北京邮电大学出版社2毕广吉.Java程序设计实例教程M. 北京: 冶金工业出版社, 3.王保罗.Java面向对象程序设计M. 北京: 清华大学出版社, 4.高林, 周海燕.Jsp网上书店系统与案例分析M. 北京: 人民邮电出版社, 5.刘腾红, 孙细明.信息系统分析与设计M. 北京: 科学出版社,