最近了解了网上自测试系统项目,在这个平台记录一下这个网上自测试系统项目,方便以后再次使用或学习的时候能够及时的翻阅。在完成这个项目的时候,考虑了很多框架。最终决定选用SSM(MYECLIPSE),该框架具有极强的移植性,多平台性,便于操作性等优点。此框架能在MYECLIPSE开发工具中完美的编写和运行,网上自测试系统为一个 后台项目。这个项目的描述是这样的:论述了基于JAVA技术的网上自测试系统的设计方法。系统采用 B/S模式 ,服务器端采用了 JAVA技术来完成动态页面的生成和数据库的访问 ,系统的后台数据库采用MYSQL。系统包括智能组卷、自动批卷、成绩发布等功能 ,。详细介绍了一种智能组卷的算法 ,可根据测试者的要求提供一份内容及难度分布科学、合理的试卷。
在对网上自测试系统项目进行需求分析的时候,得出系统的登录角色包括了管理员、用户。对应用户可以通过登录自己的账号,进行入系统。系统对不同角色拥有不同权限。

总结得出该系统所有数据为:管理员(admin)、用户(yonghu)、科目(kemu)、试题(shiti)

管理员表

字段名 | 类型 | 属性 | 描述
id | INT(11) | PRIMARY KEY | 管理员id
username | VARCHAR(255) | | 账号
password | VARCHAR(255) | | 密码

用户表

字段名 | 类型 | 属性 | 描述
id | INT(11) | PRIMARY KEY | 用户id
xingming | VARCHAR(255) | | 姓名
nianling | VARCHAR(255) | | 年龄
zhiye | VARCHAR(255) | | 职业
quanxian | VARCHAR(255) | | 权限
username | VARCHAR(255) | | 账号
password | VARCHAR(255) | | 密码

科目表

字段名 | 类型 | 属性 | 描述
id | INT(11) | PRIMARY KEY | 科目id
zhonglei | VARCHAR(255) | | 种类
leixing | VARCHAR(255) | | 类型

试题表

字段名 | 类型 | 属性 | 描述
id | INT(11) | PRIMARY KEY | 试题id
neirong | VARCHAR(255) | | 内容
biaoti | VARCHAR(255) | | 标题
shijian | VARCHAR(255) | | 时间
chengji | VARCHAR(255) | | 成绩
SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------

-- ----------------------------

-- Table structure for ggwangshangziceshixt

-- ----------------------------

DROP TABLE IF EXISTS `t_admin`;

CREATE TABLE `t_admin` (`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '管理员id',`username` VARCHAR(255) DEFAULT NULL COMMENT '账号',`password` VARCHAR(255) DEFAULT NULL COMMENT '密码',PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='管理员';

-- ----------------------------

DROP TABLE IF EXISTS `t_yonghu`;

CREATE TABLE `t_yonghu` (`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '用户id',`xingming` VARCHAR(255) DEFAULT NULL COMMENT '姓名',`nianling` VARCHAR(255) DEFAULT NULL COMMENT '年龄',`zhiye` VARCHAR(255) DEFAULT NULL COMMENT '职业',`quanxian` VARCHAR(255) DEFAULT NULL COMMENT '权限',`username` VARCHAR(255) DEFAULT NULL COMMENT '账号',`password` VARCHAR(255) DEFAULT NULL COMMENT '密码',PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='用户';

-- ----------------------------

DROP TABLE IF EXISTS `t_kemu`;

CREATE TABLE `t_kemu` (`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '科目id',`zhonglei` VARCHAR(255) DEFAULT NULL COMMENT '种类',`leixing` VARCHAR(255) DEFAULT NULL COMMENT '类型',PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='科目';

-- ----------------------------

DROP TABLE IF EXISTS `t_shiti`;

CREATE TABLE `t_shiti` (`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '试题id',`neirong` VARCHAR(255) DEFAULT NULL COMMENT '内容',`biaoti` VARCHAR(255) DEFAULT NULL COMMENT '标题',`shijian` VARCHAR(255) DEFAULT NULL COMMENT '时间',`chengji` VARCHAR(255) DEFAULT NULL COMMENT '成绩',PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='试题';

添加科目模块:

在kemuController中定义tianjiakemuact接收页面传入的科目参数,定义为kemu。其中kemu包含字段:种类,类型,使用tianjiakemuact将该科目对象存入数据库中,在kemuMapper中定义了insert方法,匹配数据库中的insert into kemu语句实现将科目数据存入数据库的操作。该部分核心代码如下:

通过kemudao的insert方法将页面传输的科目添加到数据库中 kemudao.insert(kemu);

将添加科目成功信息,保存到request的message中,在页面中给出用户提示 request.setAttribute("message", "添加科目成功");

返回科目管理界面

return "forward:/tianjiakemu.action";

查询科目模块:

科目的查询模块实现方式为,在页面中发起kemuguanli.action请求。通过该请求,响应服务器kemuController类中的kemuguanli,在该方法中通过selectByexample进行数据的查询操作。将所有的科目信息查询后,保存到request中的kemuall中,在页面中进行展示,返回kemuguanli.jsp,该部分核心代码如下所示:

生成科目样例类,通过example定义查询条件 KemuExample example = new KemuExample();

通过kemudao的selectByExample方法查询出所有的科目信息 List kemuall = kemudao.selectByExample(example);

将科目信息,保存到request中,在页面通过foreach方法进行展示 request.setAttribute("kemuall", kemuall);

返回科目管理界面

return "forward:/kemuguanli.action";

修改科目模块:

点击修改按钮,可以跳转到科目修改页面。在科目修改页面中,将初始化该科目的所有信息,并将信息一一对应填充到对应编辑栏中。编辑完科目信息后,页面通过post方法将数据封装为一个科目实体,传入到kemuController中。在xiugaikemu中进行接收,接收完毕后,调用kemuMapper中的updateByPrimaryKeySelective方法进行修改。该部分代码如下:

通过kemudao的修改方法根据id修改对应的科目 kemudao.updateByPrimaryKeySelective(kemu);

将修改科目成功信息,保存到request的message中,在页面中给出用户提示 request.setAttribute("message", "修改科目信息成功");

返回科目管理界面

return "forward:/kemuguanli.action";

删除科目模块:

删除科目功能的实现方式为,通过点击删除科目按钮,向服务器发起get请求。请求中包含科目的id信息,在kemuController中使用int接受该id,并将该id传入kemudao的deleteByPrimaryKey方法中。该方法的作用为根据id删除对应科目。最后将删除科目成功的信息返回页面,该部分核心代码如下:

通过kemudao的删除方法根据id删除对应的科目 kemudao.deleteByPrimaryKey(id);

将删除科目成功信息,保存到request的message中,在页面中给出用户提示 request.setAttribute("message", "删除科目成功");

返回科目管理界面

return "forward:/kemuguanli.action";

02-01 12:34