在线投票系统课程设计报告.docx
- 文档编号:10299784
- 上传时间:2023-02-09
- 格式:DOCX
- 页数:32
- 大小:59.25KB
在线投票系统课程设计报告.docx
《在线投票系统课程设计报告.docx》由会员分享,可在线阅读,更多相关《在线投票系统课程设计报告.docx(32页珍藏版)》请在冰豆网上搜索。
在线投票系统课程设计报告
北京化工大学北方学院
课程设计报告
课程名称 应用软件课程设计
设计题目 在线投票系统
专业、班级 软件0803班
学号 080203082
姓名 王进
指导教师 张玉英
设计时间 2011年10月1日
2011年 10月10 日
一、引言(简要说明设计题目的目的、意义、内容、主要任务等)
摘要
在积极建立科学管理机制的今天,仅仅靠原始的手工管理或简单的单机管理,管理部门面对大量的信息,无法有效率地将其中的重要部分提取出来,并做出相应的判断和处理。
投票管理者的决策只能依据手工表数据,在浪费大量人力、物力的同时无法做到实时监控,难以保证数据的准确性和及时性。
因此,先进的管理思想就成为了一个可望而不可及的目标。
投票非常急需一套既有先进管理思想的系统,作为实现目标和提高现有投票管理水平的一种重要手段。
随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。
作为计算机应用的一部分,在先进的计算机技术、通信技术、控制技术及IC卡技术基础上,采用系统集成方法,逐步建立一个智能化的投票系统。
编写在线投票系统,最重要的一点就是如何从烦琐的投票结果中,导出全部投票项目的票数,然后根据投票项目的各个票数,进行票数百分比计算,最后编辑出在线投票系统。
开发该系统我主要采用JSP技术和数据库相结合的方式。
JSP技术通过在静态HTML内容中嵌入服务器端脚本,实现网页内容的动态改变。
Web服务器从磁盘上读取含有服务器端脚本的网页,在网页发送给客户端浏览器之前,先对其中的服务器端脚本进行解释,输出用户定制内容,从而产生动态网页。
数据库的采用,能够胜投票系统中的数据处理。
本文在相关理论指导下,在分析其他一些系统的基础上,开发出了一个简单的在线投票系统(包括功能模块设计、数据库结构设计等)基本解决了管理人员的烦琐事务。
关键字:
jSP,数据库
一.绪论
开发背景:
如今很多的服务行业都要进行服务的反馈,以便更好的提高产品的质量和作出更好的服务,投票系统就是一个反馈信息的软件,通过它可以更好更快捷方便的反馈信息共服务商参考。
因此开发一个能够供客户反馈信息的平台是很有必要的。
意义:
其一,方便的操作。
原有的手工投票管理基本上是人工操作,效率低下,缺乏方便性,在线投票管理系统运用计算机和其他附加设备,不再需要手工操作,基本上是全自动化,能够节省人力、最大限度地利用各种宝贵的资源,大大的提高了效率。
其二,友好的界面。
友好的用户界面会给人一种亲切的感觉,在使用起来不会觉得沉闷,效率自然也会提高了。
在线投票系统主要用来统计网站用户对某个主题或热门话题的意见。
决策者通过这些统计数据做出相应的决策。
在线投票系统是一般网站必备的程序之一,如果网站开发者想了解用户对该网站的意见和建议。
他可以设计这样一个投票主题:
你认为该网站如何?
(A.很好
B.一般C.不好)然后提供给用户进行投票
二、开发环境
开发环境MyEclipse简介
MyEclipse企业级工作平台(MyEclipseEnterprise Workbench ,简称MyEclipse)是对EclipseIDE的扩展,利用它我们可以在数据库和J2EE的开发、发布,以及应用程序服务器的整合方面极大的提高工作效率。
它是功能丰富的J2EE集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML, Struts,JSF,CSS, Javascript, SQL,Hibernate。
在结构上,MyEclipse的特征可以被分为7类:
1.J2EE模型
2.WEB开发工具
3.EJB开发工具
4.应用程序服务器的连接器
5.J2EE项目部署服务
6.数据库服务
7. MyEclipse整合帮助
对于以上每一种功能上的类别,在Eclipse中都有相应的功能部件,并通过一系列的插件来实现它们。
MyEclipse结构上的这种模块化,可以让我们在不影响其他模块的情况下,对任一模块进行单独的扩展和升级。
简单而言,MyEclipse是Eclipse的插件,也是一款功能强大的J2EE集成开发环境,支持代码编写、配置、测试以及除错。
三、需求分析
随着科学技术的不断提高,计算机科学日渐成熟,互联网技术的不断发展和普及,众多高校,科研机构及个人从理论与实践两个方面进行了大量的研究与开发工作,涌现出了很多在线投票系统,对学院、企业的管理起到了很好的作用。
总之投票系统概括起来就是要通过科学的管理手段和专业化管理技术来实现统一。
本系统是一个简单的投票系统,主要提供以下功能:
系统首页上显示所有投票选项的列表,用户可以通过选中某个选项并点击“投票”按钮进行投票操作。
另外,还提供查看投票详细信息的超链接,用户点击后可在另一页面上看到各个投票选项目前的投票情况,主要包括各选项所得的票数、占总票数的百分比等信息,并且以柱形图显示各选项的得票率,可以让用户从直观上看到各项的得票情况
投票系统主要是为用户提供一个方便易用的投票界面,同时还具有查看投票、投票选项的功能。
投票系统主要需要实现以下一些基本功能:
1. 投票:
用户在投票系统首页上可以通过选中每个投票项前面的单选按钮并单击“投票”按钮来进行投票。
2.查看投票情况:
用户在投票系统首页上可以通过点击“查看投票”超链接来查看当前的最新投票情况,包括各投票项的得票数、得票率等。
二、正文(课程设计的主要内容,包括实验与观测方法和结果、仪器设备、计算方法、编程原理、数据处理、设计说明与依据、加工整理和图表、形成的论点和导出的结论等。
正文内容必须实事求是、客观真切、准确完备、合乎逻辑、层次分明、语言流畅、结构严谨,符合各学科、专业的有关要求。
)
4.1概要设计
1)开发平台:
MicrosoftWindowsXPProfessional版本2002 ServicePack3
开发工具:
MyEclipse
在线投票系统功能:
功能1:
投票
功能 2:
查看投票ﻫ 功能3:
对同一IP地址的用户重复投票的限制
功能4:
管理员功能,实现发布新问题,删除主题,查看所有主题投票统计,修改统计结果。
2)实现该系统可划分为三个模块:
显示投票选项,参与投票和显示投票结果。
下面来分别介绍。
投票界面:
4.2详细设计:
4.2.1数据表的设计
本系统设计了两张表,表tb-temp保存投票用用户信息,表tb-vote保存投票选项信息。
表tb-temp
字段名
数据类型
字段大小
是否为主键
Id
Int
4
是
Voteip
Char
20
Votemsel
Bigint
8
Votetime
Char
50
表tb-vote
字段名
数据类型
字段大小
是否为主键
Id
Smallint
2
是
Vote_title
Char
50
Vote_num
Int
4
Vote_order
Smallint
2
4.2.2值javabean的设计
建一个值JavaBean用来封装存储表tb-temp中的投票选项信息,代码如下:
packagecom.yxq.valuebean;
publicclassVoteSingle{
privateStringid;//存儲選項ID
privateStringtitle;//存儲選項標題
ﻩprivateStringnum;//存儲選項所得票數
ﻩprivateStringorder;//存儲選項的排列序號
publicString getId() {
returnid;
ﻩ}
ﻩpublic voidsetId(Stringid){
ﻩﻩthis.id=id;
ﻩ}
ﻩpublicStringgetNum(){
ﻩﻩreturnnum;
}
ﻩpublicvoidsetNum(Stringnum){
ﻩthis.num=num;
}
public StringgetOrder(){
return order;
ﻩ}
ﻩpublicvoidsetOrder(Stringorder){
ﻩﻩthis.order=order;
}
public StringgetTitle() {
ﻩreturntitle;
}
publicvoidsetTitle(String title) {
this.title=title;
}
}
同样建另一个值JavaBean用来封装存储表tb-vote中的信息:
packagecom.yxq.valuebean;
public classTempSingle{
ﻩprivate Stringid;//存儲投票用戶ID
ﻩprivateStringvoteIp;//存儲投票用戶IP
ﻩprivatelongvoteMSEL;//存儲毫秒數
ﻩprivateStringvoteTime;//存儲yyyy-MM-ddHH:
mm:
ss形式的時間
publiclonggetVoteMSEL() {
return voteMSEL;
}
ﻩpublicvoid setVoteMSEL(longvoteMSEL){
this.voteMSEL =voteMSEL;
}
ﻩpublic StringgetVoteTime() {
returnvoteTime;
}
ﻩpublicvoidsetVoteTime(StringvoteTime){
ﻩthis.voteTime=voteTime;
ﻩ}
ﻩpublic StringgetId(){
ﻩreturnid;
}
ﻩpublicvoidsetId(String id){
this.id=id;
}
ﻩpublicString getVoteIp(){
returnvoteIp;
}
ﻩpublic voidsetVoteIp(String voteIp){
ﻩﻩthis.voteIp =voteIp;
ﻩ}
}
4.2.3数据库操作类的编写
对于查看投票内容,参与投票和显示结果的操作,都涉及了数据库的操作。
这些操作在一个DB类中实现,具体代码入下:
定义属性及构造方法
package com.yxq.toolbean;
import java.sql.Connection;
importjava.sql.DriverManager;
import java.sql.Statement;
importjava.sql.ResultSet;
importjava.util.ArrayList;
import java.util.List;
importcom.yxq.valuebean.TempSingle;
import com.yxq.valuebean.VoteSingle;
publicclassDB {
ﻩprivateStringclassName;//存儲數據庫驅動類路徑
ﻩprivateStringurl;//存儲數據庫URL
privateString username;//存儲登陸數據庫的用戶名
ﻩprivate Stringpassword;//存儲登陸數據庫的密碼
ﻩprivateConnectioncon;//聲明一個Connection對象
ﻩprivateStatementstm;//聲明一個Statement對象用來執行SQL語句
privateResultSetrs;//聲明一個ResultSet對象用來存儲結果集
ﻩpublicDB(){ //通過構造方法為屬性賦值
className="org.apache.derby.jdbc.ClientDriver";
ﻩurl = "jdbc:
derby:
//localhost:
1527/myeclipse";
ﻩusername= "classiccars";
ﻩﻩpassword="classiccars";
}
/**
*@功能加载数据库驱动程序
*/
publicvoidloadDrive() {
ﻩtry{
ﻩﻩClass.forName(className);//加載數據庫驅動程序
ﻩ}catch(ClassNotFoundExceptione){
ﻩSystem.out.println("加载数据库驱动程序失败!
");
ﻩﻩﻩe.printStackTrace(); //向控制臺輸出提示信息
}
}
ﻩ/**获取数据库连接
ﻩ*@功能
ﻩ*/
ﻩpublicvoidgetCon(){
ﻩﻩloadDrive(); //加載數據庫驅動程序
ﻩtry{
ﻩﻩﻩcon =DriverManager.getConnection(url,username,password);//獲取連接
ﻩﻩ}catch(Exceptione){
ﻩﻩSystem.out.println("连接数据库失败!
");
ﻩﻩe.printStackTrace();
ﻩ}
}
ﻩ
ﻩ/**
*@功能 获取Statement对象
*/
publicvoid getStm(){
getCon();//獲取數據庫連接
ﻩtry{
stm=con.createStatement();//獲取Statement類對象
}catch(Exceptione){
ﻩSystem.out.println("获取Statement对象失败!
");
e.printStackTrace();
ﻩﻩ}
ﻩ}
ﻩ/**
ﻩ *@功能 查询数据表,获取结果集
*/
ﻩpublicvoid getRs(Stringsql){
ﻩﻩgetStm();
ﻩtry{
ﻩrs =stm.executeQuery(sql);//執行SQL語句查詢數據表獲取結果集
ﻩ}catch(Exceptione) {ﻩﻩﻩ
ﻩﻩSystem.out.println("查询数据库失败!
");
e.printStackTrace();
}
ﻩ}
ﻩ
ﻩ/**
ﻩ*@功能 查询数据表,获取投票选项
ﻩ*/
publicListselectVote(Stringsql){
ﻩList votelist=null;
ﻩif(sql!
=null &&!
sql.equals("")){
ﻩgetRs(sql);//查詢數據表獲取結果集
ﻩif(rs!
=null) {
ﻩﻩﻩvotelist=newArrayList();
ﻩﻩﻩtry{
ﻩﻩwhile(rs.next()){//依次將結果集中的记录封装到VoteSingle类对象中
ﻩVoteSinglevoteSingle= newVoteSingle();
ﻩﻩﻩvoteSingle.setId(MyTools.intToStr(rs.getInt
(1)));
ﻩﻩﻩﻩvoteSingle.setTitle(rs.getString
(2));
ﻩﻩﻩﻩvoteSingle.setNum(MyTools.intToStr(rs.getInt(3)));
ﻩﻩvoteSingle.setOrder(MyTools.intToStr(rs.getInt(4)));
ﻩvotelist.add(voteSingle);//将VoteSingle类对象存储到List集合中
ﻩﻩ}
ﻩﻩﻩ}catch(Exceptione){
ﻩﻩﻩﻩSystem.out.println("封装tb_vote表中数据失败!
");
ﻩe.printStackTrace();
ﻩ} finally {
ﻩﻩclosed(); //关闭数据库
ﻩ}
ﻩﻩ}
ﻩﻩ}
ﻩﻩreturnvotelist;
}
ﻩ/**
ﻩ* @功能 查询数据表,获取指定IP最后一次投票的记录
ﻩ*/
ﻩpublicTempSingleselectTemp(Stringsql){
TempSingletempSingle=null;
ﻩﻩif (sql!
=null&&!
sql.equals("")) {
ﻩﻩﻩgetRs(sql);//查询数据表获取结果集
ﻩif(rs !
=null){
ﻩtry{
ﻩﻩwhile(rs.next()){//若该结果集中有记录,说明当前用户投过票
ﻩﻩtempSingle =newTempSingle();
ﻩﻩtempSingle.setId(MyTools.intToStr(rs.getInt(1)));
ﻩﻩﻩﻩtempSingle.setVoteIp(rs.getString
(2));
ﻩﻩtempSingle.setVoteMSEL(rs.getLong(3));
ﻩtempSingle.setVoteTime(rs.getString(4));
ﻩﻩ}
ﻩ} catch(Exceptione) {
ﻩSystem.out.println("封装tb_temp表中数据失败!
");
ﻩﻩe.printStackTrace();
ﻩﻩﻩ}finally {
ﻩﻩclosed(); //关闭数据库
ﻩﻩﻩ}
ﻩ}
ﻩ}
ﻩreturn tempSingle;//返回TempSingle类对象中
ﻩ}
ﻩ
/**
*@功能更新数据表,实现票数累加
*/
ﻩpublicint update(Stringsql) {
ﻩinti=-1;
ﻩif(sql!
=null&&!
sql.equals("")){
ﻩgetStm();//获取Statement类对象
ﻩtry{
ﻩi=stm.executeUpdate(sql);//执行SQL语句更新数据表
ﻩ}catch(Exceptione){
ﻩﻩSystem.out.println("更新数据库失败!
");
ﻩﻩﻩﻩe.printStackTrace();
ﻩﻩ}finally{
closed();
ﻩ}
}
ﻩreturni;
ﻩ}
ﻩ/**
ﻩ*@功能关闭数据库连接
ﻩ */
publicvoidclosed(){
ﻩtry{
ﻩif(rs!
=null)
ﻩﻩrs.close();//关闭结果集
ﻩﻩif(stm!
=null)
ﻩﻩﻩstm.close();//关闭Statement类对象
ﻩif(con!
= null)
ﻩﻩcon.close();//关闭数据库连接
ﻩ} catch(Exceptione){
ﻩﻩSystem.out.println("关闭数据库失败!
");
ﻩe.printStackTrace();
}
}
}
4.2.4工具类的编写
该系统涉及了类型的转换,计算时间差等操作,这些操作在一个类中实现,这样可以实现代码的重复使用。
该工具类为mytools,代码如下:
packagecom.yxq.toolbean;
import java.text.SimpleDateFormat;
importjava.util.Date;
publicclass MyTools{
ﻩ/**
ﻩ*@功能将int型数据转换为String型数据
*@参数num为要转换的int型数据
*@返回值 String类型
ﻩ*/
ﻩpublicstaticStringintToStr(intnum){
ﻩreturnString.valueOf(num);
ﻩ}
ﻩ/**
ﻩ *@功能比较时间。
ﻩ*@参数 today当前时间,temp为上次投票时间。
这两个参数都是以毫秒显示的时间
*@返回值String类型
*/
publicstaticStringcompareTime(longtoday,longtemp){
ﻩint limitTime=60;ﻩﻩﻩﻩﻩﻩ//设置限制时间为60分钟
ﻩlongcount=today-temp;ﻩﻩﻩ//计算当前时间与上次投票时间相差的毫秒数(该结果一定是大于等于0)
if(count<=limitTime*60*1000)ﻩﻩﻩﻩ//如果相差小于等于60分钟(1分=60秒,1秒=1000毫秒)
ﻩﻩreturn"no";
ﻩﻩelseﻩﻩﻩﻩﻩ//如果相差大于60分钟
ﻩreturn "yes";
}
ﻩ/**
*@功能格式化时间为指定格式。
首先通过Date类的构造方法根据给出的毫秒数获取一个时间,然后将该时间转换为指定格式,如"年-月-日时:
分:
秒"
ﻩ* @参数ms为毫秒数
*@返回值String类型
*/
ﻩpublicstaticStringformatDate(longms){
ﻩDatedate=newDate(ms);
SimpleDateFormatformat=newSimpleDateFormat("yyyy-MM-ddHH:
mm:
ss");
ﻩﻩStringstrDate=format.format(date);
ﻩreturnstrDate;
ﻩ}
}
4.2.5显示投票选项的设计
当用户访问首页面后,单击“参与投票”就会进入vote.jsp页面显示投票选项,在该页面中先要查询tb_vote数据表获取所有的投票选项,然后逐一显示投票选项的标题
<%@pagecontentType="text/html; charset=UTF-8"%>
<%@pageimport="java.util.List" %>
<%@page import="com.yxq.valuebean.VoteSingle" %>
<jsp:
useBeanid="myDb"class="com.yxq.to
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 在线 投票 系统 课程设计 报告