简单实现在线考试
核心代码:
生成一组可用随机数,对数据库中的id进行了对比,防止id不连续。
//生成指定随机数
public static List<Integer> subId(Integer number) {
SubjectService subjectService = new SubjectServiceImpl();
//list集合用来储存产生的可用的随机数
List<Integer> list = new ArrayList();
//得到带有id的集合
List<Subject> list1 = subjectService.selectId();
//用于储存id的集合
List<Integer> list2 = new ArrayList<>();
//将ID存入list2集合
for (int i = 0; i < list1.size(); i++) {
list2.add(list1.get(i).getId());
}
//获取最大的id值和最小的id值
int max = list1.get(0).getId();
int min = list1.get(0).getId();
for (int i = 0; i < list1.size(); i++) {
if (max < list1.get(i).getId()) {
max = list1.get(i).getId();
}
if (min > list1.get(i).getId()) {
min = list1.get(i).getId();
}
}
Random random = new Random();
int u = 0;
//当传入的number参数不为空时进入循环
if (number != null) {
//循环的目的产生number个不重复并且属于数据库中sub表的id
while (number != list.size()) {
//产生一个指定期间的随机数
int rand = random.nextInt(max - min) + min;
//判断id是否存在
if (list2.contains(rand)) {
//当list集合没有值时
if (list.size() == 0) {
list.add(rand);
} else {
//不重复时存入随机id值
if (list.contains(rand) == false) {
list.add(rand);
}
}
}
/* for (int i = 0; i < list1.size(); i++) {
if (rand == list1.get(i).getId()) {
if (list.size() == 0) {
list.add(rand);
System.out.println("rand=" + rand);
} else {
for (int j = 0; j < list.size(); j++) {
if (rand != list.get(j)) {
list.add(rand);
System.out.println(j + "=" + rand);
System.out.println(list.size());
}
}
}
}
}*/
}
}
return list;
}
扩展:
扩展中的功能资源中并没有
功能扩展:
1、登录功能、注册功能、题库的增删改查、
2、用户类型:最终管理员、二级管理员、教师端、学生端、题库编辑员
最终管理员:对二级管理员、教师端、学生端、题库编辑员、等账户的管理,也包括其他表
二级管理员:对教师端、学生端账户管理
教师端:个人题库(增删改查),共享题库(查,调用),班级管理、个人中心(账号,密码修改,历史记录查看)
学生端:考试答题功能,考试记录查看,练习、个人中心(账号,密码修改,历史记录查看)
题库编辑员:对题库的增删改查
数据库表:
用户表(id,账号,密码,用户类型,状态,同时在线数)
用户类型表(id,类型)
状态表(id,状态)
题库表:
单选题(id,题目、答案、题目类型、题类型、权限、比对码、 A、B、C、D )
多选(id,题目、答案、题目类型、题类型、权限、比对码、A、B、C、D、E、F、G、H)
判断题(id,题目、答案、题目类型、题类型、权限、比对码)
填空题(id,前半段题目、后半段题目、答案、题目类型、题类型、权限、比对码)
简答题(id、题目、答案、题目类型、题类型、权限、比对码)
教师题库表(id、题号id、比对码用户id)
学生答题记录表(id、题号id、题目、题类型id、答案、得分情况)
题目类型(id 、类型)
题类型(id 、类型)