科技进步的飞速发展引起人们日常生活的巨大变化,电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流,人类发展的历史正进入一个新时代。在现实运用中,应用软件的工作规则和开发步骤,采用Java技术建设学生竞赛管理系统。
本设计主要实现集人性化、高效率、便捷等优点于一身的学生竞赛管理系统,完成用户管理、竞赛帖子管理、老师管理、老师竞赛选择管理、竞赛公告管理、学生管理、学生竞赛竞赛选择管理等功能模块。系统通过浏览器与服务器进行通信,实现数据的交互与变更。本系统通过科学的管理方式、便捷的服务提高了工作效率,减少了数据存储上的错误和遗漏。学生竞赛管理系统使用Java语言,采用基于 MVC模式的SSM技术进行开发,使用 Eclipse 2017 CI 10 编译器编写,数据方面主要采用的是微软的MySQL关系型数据库来作为数据存储媒介,配合前台HTML+CSS 技术完成系统的开发。
功能需求分析
学生竞赛管理系统在对需求做解析后,整个系统主要分为两个部分:管理员和学生、老师,每个模块下的分支功能不一样。对功能做出如下说明:
学生模块:
账号注册。
账号登录认证。
管理个人资料信息,修改可修改的信息项。
竞赛报名,同时查看历史已报名的记录。
老师竞赛选择查看,同时查看历史已竞赛选择的记录。
老师模块:
账号注册。
账号登录认证。
管理个人资料信息,修改可修改的信息项。
老师竞赛选择,同时查看历史已竞赛选择的记录。
管理员模块:
维护学生,审核学生的账号,可以冻结学生的登录权限,或者删除学生账号。
发布竞赛,并可以销毁某个竞赛,更新竞赛数据,模糊搜索竞赛数据等。
发布老师,并可以销毁某个老师,更新老师数据,模糊搜索老师数据等。
管理竞赛报名数据。
维护老师竞赛选择数据。
查看学生提交的竞赛报名数据,管理员有权利维护它。
系统用户管理关键代码如下所示。
public List<HashMap> select(String sql)
{
System.out.println(sql);
List<HashMap> list = new ArrayList();
try {
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(sql);
ResultSetMetaData rsmd = rs.getMetaData();
while(rs.next())
{
HashMap map = new HashMap();
int i = rsmd.getColumnCount();
for(int j=1;j<=i;j++)
{
if(!rsmd.getColumnName(j).equals("ID"))
{
String str = rs.getString(j)==null?"": rs.getString(j);
if(str.equals("null"))str = "";
map.put(rsmd.getColumnName(j), str);
}
else
map.put("id", rs.getString(j));
}
list.add(map);
}
rs.close();
st.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
if(sql.equals("show tables"))
list = select("select table_name from INFORMATION_SCHEMA.tables");
else
e.printStackTrace();
}
return list;
}
系统功能结构
系统设计的目的是分析系统包括的所有功能结构,为开发人员设计开发和实现系统做好准备工作。经过前期的需求调查、分析和整理之后,确定的总体需求主要包括多个模块,分别是:用户管理、竞赛帖子管理、老师管理、老师竞赛选择管理、竞赛公告管理、学生管理、学生竞赛报名管理。系统整体角色分为三个部分,一是教师、二是学生、最后是管理员。权限分布也是很明显,学生是在除去浏览信息之外还具有查询和管理自己账户信息、竞赛帖子、老师竞赛选择、竞赛公告、竞赛报名、竞赛报名查询、竞赛帖子查询、竞赛选择、学生竞赛报名审核等权限;管理员是最高权限拥有者。
老师竞赛选择关键代码如下所示。
Connection conn = this.getConn();
try {
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery("select * from "+tablename);
ResultSetMetaData rsmd = rs.getMetaData();
int i = rsmd.getColumnCount();
for(int j=1;j<=i;j++)
{
if(rsmd.getColumnName(j).equals("id"))continue;
if(rsmd.getColumnName(j).equals("ID"))continue;
if(rsmd.getColumnName(j).equals("iD"))continue;
if(rsmd.getColumnName(j).equals("Id"))continue;
typemap.put(rsmd.getColumnName(j)+"---", rsmd.getColumnTypeName(j));
collist.add(rsmd.getColumnName(j));
sql+=rsmd.getColumnName(j)+",";
}
sql = sql.substring(0,sql.length()-1);
sql+=") values(";
rs.close();
st.close();
} catch (SQLException e) {
e.printStackTrace();
}
功能模块设计
用户管理模块
该模块是为所有用户登录设计的,如学生登录后只能进行自己的普通功能操作(如个人信息修改),管理员和超级管理员登录后有不同的权限,管理员不能超越权限。超级管理员能对整个系统的数据进行管理,主要是用户的登录权限以及用户登录后在系统里的操作权限。
竞赛报名模块
学生和竞赛存在报名关系,关系为一对多,根据竞赛编号来将竞赛数据传入到报名数据中,操作人为学生,然后生成报名列表,学生查看个人历史报名列表,可以进行数据销毁。
竞赛维护模块
操作人来录入竞赛数据,点击竞赛录入按钮,依次填写要录入的竞赛数据,点击提交按钮,将数据提交至数据库,然后刷新竞赛数据页面,每条数据右边有删除和编辑按钮,来完成相应的删除和更新功能。
老师维护模块
操作人来录入老师数据,点击老师录入按钮,依次填写要录入的老师数据,点击提交按钮,将数据提交至数据库,然后刷新老师数据页面,每条数据右边有删除和编辑按钮,来完成相应的删除和更新功能。
竞赛选择模块
操作人来录入竞赛选择数据,点击选择录入按钮,依次填写要录入的选择数据,点击提交按钮,将数据提交至数据库,然后刷新选择数据页面,每条数据右边有删除和编辑按钮,来完成相应的删除和更新功能。
打印和导出模块
系统多个页面可以进行打印功能,包括信息详细页,信息列表页,打印时调用外部打印机,完成打印设置即可打印,在信息列表页可以将该信息列表导出至excel中,用户选择保存excel文件的路径,既可以下载至本地,在excel中可以自由编辑。
竞赛报名关键代码如下所示。
Connection conn = this.getConn();
try {
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery("select * from "+tablename);
ResultSetMetaData rsmd = rs.getMetaData();
int i = rsmd.getColumnCount();
for(int j=1;j<=i;j++)
{
if(rsmd.getColumnName(j).equals("id"))continue;
if(rsmd.getColumnName(j).equals("ID"))continue;
if(rsmd.getColumnName(j).equals("iD"))continue;
if(rsmd.getColumnName(j).equals("Id"))continue;
typemap.put(rsmd.getColumnName(j)+"---", rsmd.getColumnTypeName(j));
collist.add(rsmd.getColumnName(j));
sql+=rsmd.getColumnName(j)+",";
}
sql = sql.substring(0,sql.length()-1);
sql+=") values(";
rs.close();
st.close();
} catch (SQLException e) {
e.printStackTrace();
}