基于struts2、spring、hibernate构建一个网上投票系统.doc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 struts2 spring hibernate 构建 一个 网上 投票 系统
- 资源描述:
-
《JavaEE》课程设计报告 题目名称:基于struts2、Spring、Hibernate 构建一个网上投票系统 指导教师:_______ ___王振飞______ _______ 专业班级:__ 机械2011级____ ______ _ 组 长:________ __董建华 _____ ______ 成 员:__ 娄宇 杨浩亮 张益民 林强 __ __ 电子邮件:____ 15224891@_ ______ _ 设计时间: 2011 年 11 月 16 日 至 2011 年 12 月 21 日 成绩:______ 目录 基于struts2、Spring、Hibernate构建一个网上投票系统 3 一、问题描述及设计思路 3 1.1 需求分析 3 1.2业务分析 3 1.3投票用例 5 二、详细设计过程 8 2.1 创建Struts2应用 8 2.2 添加Hibernate 8 2.3 添加Spring应用 9 2.4 领域模型层设计 9 三、结论和体会 13 3.1 结论 13 3.2 体会 13 四、附录 14 附录 A 其它图表 14 附录 B 主要程序代码 15 五、参考文献 21 基于struts2、Spring、Hibernate构建一个网上投票系统 一、问题描述及设计思路 对于开发一个投票管理系统来说,应该实现什么功能,如何实现这个功能都是开发人员必须了解的问题。将这个系统的需求、业务流程以及用例进行细致的分析、讲解。 1.1 需求分析 随着网络应用的日益普及,投票的形式也发生了很大的变化。目前在很多的场合,投票已经开始由原始方式转变为网上投票。由于具有方便、快捷、成本低、调查范围广等优点,网上投票已经被广泛的应用。如何管理好网上投票信息内容也变得十分的重要,我们所设计开发的投票管理系统,正是基于这种需求诞生的。 本投票管理系统分为用户提供网上投票和投票信息管理两大类功能。通过投票管理功能可以完成增加新投票、修改原有投票信息、查找投票等功能。本系统的界面友好、操作简便,适用于任何网站进行投票调查。 本系统的基本功能如下所述。 l 使用本系统的网上投票功能,用户只要登录指定的网页,就可以进行投票操作,并可以得到投票结果信息。 l 使用本网站的登录功能,管理员可以登录系统,然后对相关的信息进行管理。 l 使用本系统的创建投票功能,管理员可以创建一个新的投票功能。。 l 使用本系统的管理投票功能,管理员可以对系统已经存在的投票进行更新,包括增加投票子选项、删除投票子选项、修改投票类型、更改投票状态。 l 使用本系统的查找投票功能,管理员可以通过输入部分或者全部的投票主题查找对应的投票信息。 l 使用本系统的管理员管理功能,管理员可以修改本人的密码或者创建一个新的管理员。 l 使用本系统的注销功能,管理员可以安全的退出本系统。 1.2业务分析 投票管理系统由前台和后台两部分组成:前台显示投票并可以执行投票操作,后台是对投票信息和管理员信息进行管理。下面分别从使用前台和使用后台两个角度来分析本系统的业务流程。 1.2.1 显示投票 用户进入投票页面如图,进行投票操作。 1.2.2管理投票 1.2.2.1后台登录页面 只有管理员可以进入后台对相关的信息进行维护,管理员在维护信息之前必须先登录系统。 1.2.2.2 后台主页面 当成功登录系统后进入后台主页面,在后台主页面的左侧显示欢迎信息和系统当前所有投票数量信息。同时该页面提供了相关操作的链接,单击相应的链接即可进行相应的操作。各链接具体实现的业务如下。 l 管理投票链接:当管理员单击“投票管理”的文字或者图标链接后,进入管理投票页面,可以对系统已有投票信息进行维护。 l 创建投票链接当管理员单击“创建投票”的文字或者图标链接后,进入创建投票页面,可以增加新的投票选项。 l 查找投票链接:当管理员单击“查找投票”的文字或者图标后,进入查找投票页面,可以根据所输入的投票主题信息(可以是完整的,也可以是关键字)在系统已有的投票中进行查找。 l 管理员管理连接:当管理员单击“管理员管理”链接后,进入管理员管理页面,可以修改当前管理员密码,增加新的管理员。 l 投票主页链接:当管理员单击“投票主页”链接后,可以跳转到后台主页面。 l 注销链接:当管理员单击“注销后“链接后,可以安全退出系统。 1.3投票用例 Ø 用例名称:投票 简要说明:允许所有用户进行投票操作 基本事件流: (1) 用户进入投票页面 (2) 系统显示投票主题及投票内容 (3) 用户进行投票 (4) 系统显示投票结果 (5) 用例结束 异常事件流: (1) 投票已经关闭,系统给出错误提示 (2) 用户所在IP已经投过票,系统出现错误提示 Ø 用例名称:创建投票 简要说明:允许管理员创建新投票 前置条件:管理员已经登录后台系统 基本事件流: (1) 管理员进入创建投票页面 (2) 管理员填写新投票主题相关信息并单击下一步 (3) 管理员填写新投票选项信息并单击下一步 (4) 系统增加新投票信息并显示 (5) 用例结束 异常事件流: (1) 填写信息错误,系统给出提示信息 (2) 管理员中途单击其他页面链接,跳转相应页面 Ø 用例名称:查找投票 Ø 简要说明:允许管理员查找投票 前置条件:管理员已经登录后台系统 基本事件流: (1) 管理员进入查找投票页面 (2) 管理员输入完整或部分的投票主题并提交 (3) 系统显示查找结果 (4) 用例结束 异常事件流: (1) 输入信息有误,系统给出错误提示 (2) 数据库没有符合要求的信息,系统给出提示 Ø 用例名称:增加投票选项 简要说明:允许管理员为某投票主题增加子选项 气质条件:管理员已经登录后台系统 基本事件流: (1) 管理员进入修改投票信息页面 (2) 管理员单击“新增加一个投票选项“链接 (3) 管理员输入新增加选项内容 (4) 用例结束 异常事件流: (1) 输入信息有误,系统给出错误提示 (2) 数据库没有符合要求信息,系统给出提示 Ø 用例名称:删除投票选项 简要说明:允许管理员删除某投票选项的子选项 气质条件:管理员已经登录后台系统 基本事件流: (1) 管理员进入修改投票信息页面 (2) 管理员单击要删除选项相应的“删除”链接 (3) 系统删除相应的选项 (4) 用例结束 异常事件流: 当剩余选项个数小于等于2时,继续删除系统提示错误 Ø 用例名称:修改投票选项 简要说明:允许管理员修改投票信息 前置条件:管理员已经登录后台系统 基本事件流: (1) 管理员进入修改投票信息页面 (2) 管理员修改投票信息并单击“更新”按钮 (3) 系统更新投票信息 (4) 用例结束 异常信息流: 输入信息有误,系统给出提示 Ø 用例名称:修改密码 简要说明:允许管理员修改本人的登录密码 前置条件:管理员已经登录后台系统 基本事件流: (1) 管理员进入修改密码页面 (2) 管理员输入信息并提交 (3) 系统显示现修改成功 (4) 用例结束 异常信息流: (1) 输入信息有误,系统给出错误提示 (2) 旧密码输入不正确,系统给出提示 (3) 两次输入新密码不一致,系统给出提示 Ø 用例名称:创建新管理员 简要说明:允许管理员创建一个新管理员 前置条件:管理员已经登录了后台系统 基本事件流: (1) 管理员进入创建新管理员页面 (2) 管理员输入信息并提交 (3) 系统显示创建成功 (4) 用例结束 异常信息流: (1) 输入信息有误,系统给出错误提示 (2) 两次输入密码不一致,系统给出提示 (3) 新管理员用户名已存在,系统给出提示 二、详细设计过程 到目前为止我们已经对于整个投票系统的需求有了一定的了解,下面将要设计到具体的实现方案。本节将从两个方面入手进行系统设计,包括技术方案(使用什么样的技术来开发设计这个系统)和数据库设计(本系统设计到的数据信息如何存取)。下面就是系统设计的详细内容。 通过前面的分析设计,我们已经对整个投票管理系统的工作流程、工程构架有了深入的了解,下面开始进入详细设计和代码的实现过程。 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-collections.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类的每一个对象。在面向对象术语中,这个ID属性被称为对象标识符(OID,Object Identifier),通常它都用整数表示。 l Hibernate要求持久化类必须提供一个不带参数的默认构造方法。 ² 创建对象关系映射文件 对应持久化类我们也需要创建4个映射文件,分别为Admin.hbm.xml、Vote.hbm.xml、Voter.hbm.xml、Votecontext.hbm.xml。它们各自对应的代码将在具体的实现小节中提供。 ² 创建Hibernate配置文件hibernate.cfg.xml 2.3 添加Spring应用 ² 引入jar包 包括spring.jar和sturts2-spring-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 业务层设计 业务层是一个典型的Web应用程序中是作为中间组件而存在的。 2.4.3 表示层设计 ² 管理员登录模块设计 后台管理员登录是后台系统管理的入口,只有成功登录系统后才可以进行信息管理。 首先管理员进入登录界面。输入用户名、密码以及图形校检码并单击“确定”按钮,如果信息无误则进入后台管理系统这页面;如果输入信息有误,系统将给出提示信息。 ² 创建投票模块 该模块主要用于系统中添加一个新的投票,包括投票主题,投票类型、投票是否发布、投票选项内容。 输入投票的主题、子选项个数、选择投票类型以及是否马上开放并单击“下一步”按钮。如过输入有误,系统给出提示信息。 创建投票选项的代码。确定并单击“下一步”,创建投票流程结束。 ² 查看投票信息模块 该模块用来显示目前系统中已经存在的所有投票信息内容。当管理员单击系统主页面的管理投票链接后,系统显示所有的投票信息。显示所有的投票信息代码。 ² 修改投票信息模块 该模块用来修改系统已存在的投票相关信息。为了确保信息的公正性,当某个投票信息被更新时,该投票对应投票记录,包括投票票数以及投票人信息都被清空。当单击投票编号对应的编辑链接,进入修改投票信息界面。 单击新增加一个投票选项,可以为当前投票增加子选项。增加投票选项的代码。 观察发现,在员原选项下面增加了一个新的选项。单击投票选项后面的“删除”链接,可以删除对应的选票选项。 ² 查找信息模块 该模块允许管理员根据投票主题查找对应的投票信息。当单击后台主页查找投票链接后,进入查找投票界面。输入查询的内容并单击“确定”按钮,系统显示符合条件的投票信息。 ² 修改密码模块 通过该模块可以修改登录管理员的登录密码。单击修改密码连接进入修改界面。输入提示信息并单击“确认”按钮即可修改密码,如果旧密码不正确或者两次输入的新密码不一致,系统会给出错误的提示信息。 ² 创建新管理员模块 通过该模块可以创建一个新的管理员。单击创建新管理员链接,进入创建管理员的界面。输入相关的信息并单击“确定”按钮可以创建一个新的管理员,如果输入有误或者所输入用户名已经不存在,系统给出错误的提示信息。 ² 投票模块 该模块负责显示投票信息给用户并处理投票过程。当投票人进入投票页面。选择并单机::下一步“按钮,系统显示投票结果界面。 三、结论和体会 3.1 结论 随着网络应用的日益普及,投票的形式也发生了很大的变化。目前在很多的场合,投票已经开始由原始方式转变为网上投票。由于具有方便、快捷、成本低、调查范围广等优点,网上投票已经被广泛的应用。如何管理好网上投票信息内容也变得十分的重要,我们所设计开发的投票管理系统,正是基于这种需求诞生的。 本投票管理系统分为用户提供网上投票和投票信息管理两大类功能。通过投票管理功能可以完成增加新投票、修改原有投票信息、查找投票等功能。本系统的界面友好、操作简便,适用于任何网站进行投票调查。 3.2 体会 这次数据库课程设计给我的最大的印象就是如果自己有了兴趣,就动手去做,困难在你的勇气和毅力下是抬不了头的。从做这个课程设计开始无论遇到什么困难,我都没有一丝的放弃的念头。出于对知识的渴望,出于对新技术的好奇,出于对一切未知的求知。我完成了这次课程设计,不过这只是我学习路上的驿站,我会继续学习它,包括jave公司的j2ee我也很想试试,语言本来就是相通的,just do it!语言并不重要毕竟它仅仅是工具,用好一个工具并不是一件值得为外人道的事情,主要是了解学习思想。古语说的好:学无止境啊! 我很庆幸我参加了这次课程设计,让我确实打开了眼界。 四、附录 附录 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 { private static final String CREATEADMINERROR = "createAdminError"; @Override public String execute() throws Exception { //通过用户名查找管理员信息 Admin a = adminService.findAdminByName(name); //如果不为空,说明已经存在 if (a != null) { addActionError(getText("adminexist")); return CREATEADMINERROR; } else { Date date = Calendar.getInstance().getTime(); 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.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; @SuppressWarnings("serial") public class Login extends AdminRoot { @Override public String execute() throws Exception { HttpSession session = ServletActionContext.getRequest().getSession(); if(session.getAttribute("rand")==null){ return ERROR; } //获得图形校验码 String sf = (String) session.getAttribute("rand"); //如果图形校验码正确,判断帐号、密码是否正确 if (sf.equals(safecode)) { Admin admin = adminService.findAdmin(name, password); if (admin == null) { addActionError(getText("loginerror")); return ERROR; } else { //将admin信息存入session session.setAttribute("admin", admin); Count count2 = new Count(); //设置单选投票个数 count2.setSingleCount(voteService.findVoteCountByType(new Integer(1))); //设置多选投票个数 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-dd 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.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; @SuppressWarnings("serial") public class Logout extends ActionSupport { @Override public String execute() throws Exception { HttpSession session = ServletActionContext.getRequest().getSession(); session.invalidate(); return SUCCESS; } } 投票根目录 package 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 ActionSupport { /** * @param context * 子选项内容,数组类型 * @param voteId * 投票编号 * @param list * @param list2 * 封装投票结果信息 * @param votecontextId * 投票子选项编号 * @param type * 投票类型 * @param publish * 是否发布 * @param map * 封装投票选项编号及内容 */ protected VoteContextService voteContextService; protected VoteService voteService; protected String[] context; protected Integer voteId; protected List<VotingInfo> 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 type; } 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; } public 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; } public 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<VotingInfo> getList2() { return list2; } public void setList2(List<VotingInfo> list2) { this.list2 = list2; } } 五、参考文献 [1].张桂珠 刘丽 陈爱国 Java面向对象程序设计(第2版)北京邮电大学出版社 [2]毕广吉.Java程序设计实例教程[M]. 北京:冶金工业出版社,2007年 [3].王保罗.Java面向对象程序设计[M]. 北京:清华大学出版社,2003年 [4].高林,周海燕.Jsp网上书店系统与案例分析[M]. 北京:人民邮电出版社,2004年 [5].刘腾红,孙细明.信息系统分析与设计[M]. 北京:科学出版社,2003年 目 录 第一章 总论 1 1.1项目提要 1 1.2结论与建议 3 1.3 编制依据 4 第二章 项目建设背景与必要性 5 2.1项目背景 5 2.2 项目建设必要性 7 第三章 市场与需求预测 8 3.1 优质粮食供求形势分析 8 3.2 本区域市场需求预测 8 3.3 服务功能 10 3.4 市场竞争力和市场风险预测与对策 10 第四章 项目承担单位情况 12 4.1 基本情况 12 4.2 主要业务范围和业务能力 12 4.3 人员构成 12 4.4 主要技术成果获奖情况及转化能力 13 4.5 现有基础和技术条件 15 4.6 资产与财务状况 16 4.7 项目技术协作单位情况 16 第五章 建设规模与产品方案 17 5.1建设规模确定的原则和依据 17 5.2建设规模及服务种类 18 第六章 项目选址与建设条件 19 6.1 项目选址原则与要求 19 6.2 项目建设用地情况 19 6.3项目用地位置 20 6.4自然与资源条件 20 6.5水资源优势 21 6.6 社会经济条件 22 6.7 粮田基本情况 22 6.8项目实施的有利条件 26 6.9 对环境的影响 26 第七章 工艺技术方案和设备选型 27 7.1 工艺技术方案 27 7.2 设备选型 29 第八章 项目建设方案与建设内容 32 8.1 项目建设方案 32 8.2 项目建设内容与规模 34 第九章 环境保护与安全生产 36 9.1 环境保护 36 9.2 安全生产 36 第十章 组织管理与实施进度 38 10.1 项目组织管理 38 10.2 项目实施各阶段的管理方案 39 10.3 工程招投标方案 39 10.4 项目建成后的运行管理与机制 40 10.5 运行经费解决方案 41 10.6 实施进度 41 第十一章 投资估算与资金来源 44 11.1 投资估算 44 11.2资金来源 45 第十二章 效益分析 46 12.1 经济效益 46 12.2 社会效益 47 12.3 生态效益 47 第十三章 结论与建议 48 13.1 综合评价 48 13.2 结论意见 48 13.3 问题与建议 48展开阅读全文
咨信网温馨提示:1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。




基于struts2、spring、hibernate构建一个网上投票系统.doc



实名认证













自信AI助手
















微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/2490197.html