文档库 最新最全的文档下载
当前位置:文档库 › 投票系统

投票系统


1.1 系统概述
本系统是一个简单的投票系统,主要提供以下功能:系统首页上显示所有投票选项的列表,用户可以通过选中某个选项并点击“投票”按钮进行投票操作。另外,还提供查看投票详细信息的超链接,用户点击后可在另一页面上看到各个投票选项目前的投票情况,主要包括各选项所得的票数、占总票数的百分比等信息,并且以柱形图显示各选项的得票率,可以让用户从直观上看到各项的得票情况。最后,还提供系统维护功能,当用户以合法的管理员身份登录后,可以利用该功能来添加、删除投票选项。

1.2 系统运行环境
1. 硬件环境

l 处理器: Inter Pentium 166 MX 或更高

l 内存: 32M

l 硬盘空间:1GB

l 显卡: SVGA显示适配器

2. 软件环境

l 操作系统: Windows 98/ME/2000/XP

l Web服务器:Tomcat 4.1.2或以上版本

l 数据库: Access

l 客户端: IE 5.0 或以上版本

l 开发语言: JSP、Java

1.3 功能需求描述
投票系统主要是为用户提供一个方便易用的投票界面,同时还具有查看投票、添加和删除投票选项的功能。

投票系统主要需要实现以下一些基本功能:

1. 投票:用户在投票系统首页上可以通过选中每个投票项前面的单选按钮并单击“投票”按钮来进行投票。

2. 查看投票情况:用户在投票系统首页上可以通过点击“查看投票”超链接来查看当前的最新投票情况,包括各投票项的得票数、得票率等。

3. 管理员登录:当用户在投票系统首页上点击“投票系统维护”超链接时,需要用户输入合法的用户名和密码,成功登录后,可以使用系统维护功能。

4. 删除投票选项:用户做为管理员进入系统维护页面后,可以通过单击显示在每个投票项右边的“删除”超链接来删除对应的投票选项。

5. 添加投票选项:用户做为管理员进入系统维护页面后,可以通过在文本框中输入新的投票项名称并点击“提交”按钮来添加新的投票选项。

2 总体设计
2.1 开发与设计的总体思想
现在在许多网站都提供用户投票功能,本系统可做为一个子模块链入到任何一个需要投票功能的网站中,因此系统界面的设计应该尽量做到简洁友好,方便用户的使用。

系统采用B/S模式,使用JSP进行服务器端动态网页的开发。

2.2 系统模块结构图
依据需求分析结果,投票系统可以分为三个模块:数据库访问模块、投票功能模块和系统维护模块。如图2-1所示:


图2-1 系统模块结构图

2.3 模块设计
1. 数据库访问模块:提供连接、访问数据库的功能,利用JavaBean实现,当JSP页

面中需要访问数据库时直接调用这个JavaBean。模块功能树如图2-2所示:




图2-2 数据库访问模块

2. 投票功能模块:提供投票功能以及查看投票功能,用户通过“投票”按钮对选中项进行投票操作,还可以通过“查看投票”链接查看各个投票选项目前的得票情况。模块功能树如图2-3所示:


图2-3 投票功能模块

3. 系统维护模块:包括管理员的登录、投票选项的添加、删除功能。系统维护模块功能树如图2-4所示:


图2-4 系统维护模块

2.4 系统流程描述
系统的流程图如图2-5所示:


图2-5 系统流程图

2.5 界面设计
界面设计应遵循简洁美观、方便易用的基本原则,具体设计如下:

1.投票系统主页面设计,具体设计效果图如图2-6所示:


图2-6 投票系统主页面设计效果图

2.查看投票情况页面设计,具体设计效果如图2-7所示:


图2-7 查看投票情况页面设计效果图

3.管理员登录页面设计,具体设计效果如图2-8所示:


图2-8 管理员登录页面设计效果图



4.系统维护页面设计,具体设计效果如图2-9所示:


图2-9 系统维护页面设计效果图

2.6数据库设计
本系统采用Access数据库,在数据库vote中使用的数据表结构设计如下:

(1)名称:投票信息表

表名称标识:vote

数据表vote用来存储所有投票选项的id号、名称、得票数等信息,表的结构如表2-1所示:

表2-1数据表vote的结构

名称
字段名称
数据类型
主键
非空

投票项id号
id
数字(自动编号)
Yes
Yes

投票项名称
item
文本
No
No

投票项的得票数
count
数字
No
Yes


表vote中的测试数据如图2-10所示:


图2-10 数据表vote中的测试数据

(2)名称:管理员信息表

表名称标识:admin

数据表admin来存储管理员的用户名和密码信息,表的结构如表2-2所示:

表2-2 数据表admin的结构

名称
字段名称
数据类型
主键
非空

管理员id号
id
数字(自动编号)
Yes
Yes

管理员用户名
name
文本
No
No

管理员口令
password
文本
No
No




表admin中的测试数据如图2-11所示:


图2-11 数据表admin中的测试数据

本系统采用JDBC-ODBC桥的方式连接数据库,因此要首先配置一个ODBC数据源,数据源名定为vote。

3 详细设计
基于系统需求分析与系统总体设计的结论,下面按照模块的划分来分别阐述系统的详细设计和实现过程。

3.1 应用部署图
投票系统对应于一个名为vote的Web应用,具体的部署情况及目录结构如图2-12所示:


图2-12 应用部署图

3.2 访问数据库的JavaBean
本系统使用一个JavaBean

来专门完成数据库的连接、访问等操作,当在某几个JSP页面中需要访问数据库时,就可以直接调用这个JavaBean而不是把重复的代码都重写一遍,这样使得整个程序变得更加简洁、清晰。接下来,我们来实现访问数据库JavaBean。

1.模块描述

负责完成与数据库的连接、访问、关闭等操作。

2.类的设计与实现

(1)名称:DBBean.java

(2)功能:负责完成与数据库的连接、访问、关闭操作。

(3)属性设计:如表2-3所示。

表2-3 类属性定义表

属性名
属性类型
访问控制
描述

driverStr
String
私有(private)
要加载的驱动程序类名

ConnStr
String
私有(private)
连接得数据库url

Conn
Connection
私有(private)
驱动程序和指定数据库之间的连接对象

Stmt
Statement
私有(private)
语句对象


(4)构造方法设计

1)方法定义:public DBBean()

2)IPO图:

输入:无。

处理:加载由属性driverStr指定的驱动程序,若加载中出现异常,则显示异常描述信息。

输出:无。

3)程序清单:

public DBBean()

{

try {

//加载驱动程序

Class.forName(driverStr);

}

catch(ClassNotFoundException ex) {

System.out.println(ex.getMessage());

}

}

(5)主要方法设计

方法一:executeQuery方法

1)方法定义:public ResultSet executeQuery(String sql)

2)IPO图:

输入:要执行的SQL语句。

处理:创建驱动程序和指定数据库间的连接对象,建立语句对象,利用语句对象的executeQuery()方法执行SQL语句,并将执行结果存放于局部变量rs中。

输出:查询结果集rs。

3)程序清单:

//执行查询SQL语句,返回值是一个满足查询条件的结果集

public ResultSet executeQuery(String sql)

{

ResultSet rs = null;

try {

//获取驱动程序对象和指定数据库之间的连接对象

conn = DriverManager.getConnection(connStr);

//建立语句对象

stmt = conn.createStatement();

//执行SQL语句,返回一个结果集对象

rs = stmt.executeQuery(sql);

}

catch(SQLException ex) {

System.out.println(ex.getMessage());

}

return rs;

}

方法二:executeUpdate方法

1)方法定义:public int executeUpdate(String sql)

2)IPO图:

输入:要执行的SQL语句。

处理:创建驱动程序和指定数据库间的连接对象,建立语句对象,利用语句对象的executeUpdate()方法执行SQL语句,并将执行结果存放于局部变量result中。

输出:更新的记录个数result。

3)程序清单:

//执行添加、修改和删除SQL

语句,返回值是受到此次操作影响的记录个数

public int executeUpdate(String sql)

{

int result=0;

try{

conn = DriverManager.getConnection(connStr);

stmt = conn.createStatement();

result = stmt.executeUpdate(sql);

}

catch(SQLException ex){

System.out.println(ex.getMessage());

}

return result;

}

方法三:close方法

1)方法定义:public void close()

2)IPO图:

输入:无。

处理:调用Connection