1.(1)概述与引言
本次大作业之所以选择考试管理系统是因为想要更了解java的语法操作和深层次的java调用。题目理解与分析: 个人认为该考试系统是一个主要提供考试查询,方便管理的网上的信息查阅平台,学生可以通过该系统查阅与自己相关的考试信息。教师可以通过考试管理系统查阅监考信息,申请修改监考的信息。系统管理员可以实现以上的所有功能,还有对学生的添加、删除、修改、教师的添加、删除、修改,考试的添加、删除、修改,数据库的备份、数据库的还原等相关操作。目前,学校工作繁杂、资料重多。目前,考试管理信息系统已进入高校,但还未普及,而对于考试管理来说,目前还没有一套完整的、统一的系统。因此,开发一套适和大众的、兼容性好的系统是很有必要的。考试管理系统:(1)管理员,老师,学生子系统 (2)管理员子系统包括1修改密码 2查看个人信息 3用户管理 4考试管理 5监考管理 功能(3)老师子系统包括1修改密码 2查看个人信息 3考试安排 4申请监考替换 功能(4)学生子系统包括1修改密码 2查看个人信息 3查看考试安排 功能。
本次系统程序全程使用IntelliJ IDEA开发。
1.(2)程序概要设计
首先输入账号和密码登录三大子系统之一,然后给出用户可选择的项目,用户可以通过选择该项前的代码来实现想要实现的功能。
1、用户管理:A、用户的增加、删除和修改B、权限控制,主要权限包括:①系统管理权、②考试管理权、③考试安排查询:能查看考试时间及监考名单、④考试安排查询:只能查看考试时间,不能查看监考、⑤申请监考替换权限。(管理员拥有所有权限,教师拥有权限③⑤,学生只有权限④)
2、考试管理:
A、考试的增加、删除和修改 B、考试时间安排
3、监考安排:监考教师的安排与修改。
4、考试安排查询:
为教师、学生提供两种不同的查询结果。教师可对自己的监考安排提出监考替换申请。
管理员可根据监考替换申请执行审批,同意则替换,不同意则驳回。
系统流程图:
部分功能流程图:
文件框架等
1.(3)程序详细设计
public static void objectToFile(Object obj,String outputFile){//读入文件
ObjectOutputStream oos = null;
FileOutputStream fos = null;
try {
fos = new FileOutputStream(new File(outputFile));
oos = new ObjectOutputStream(fos);
oos.writeObject(obj);
FileInputStream fis = null;
ObjectInputStream ois =null;
try {
fis = new FileInputStream(fileName);
ois = new ObjectInputStream(fis);
Object object = ois.readObject();
return object;
}catch (Exception e){
e.printStackTrace();
}finally {
java文件读写类(使用二进制流读写数据)在写的时候与编译时都无错误,但在运行的时候报错为java.io.WriteAbortedException: writing aborted;使用特别的序列与反序列标记后解决该问题。
public static Object fileToObject(String fileName){
FileInputStream fis = null;
ObjectInputStream ois =null;
try {
fis = new FileInputStream(fileName);
ois = new ObjectInputStream(fis);
Object object = ois.readObject();
return object;
}catch (Exception e){
e.printStackTrace();
}finally {
if (fis!= null)
{
try {
fis.close();
}catch (IOException e1){
e1.printStackTrace();
}
}
if (ois!= null){
try {
ois.close();
}catch (IOException e2){
e2.printStackTrace();
Exite x = ee.get(i);
System.out.println("请输入想替换的老师的时间");
String an=in.next();
System.out.println("请输入当前您监考的时间");
String en=in.next();
System.out.println("请输入您的名字");
String cn=in.next();
System.out.println("请输入想替换的老师的名字");
String dn=in.next();
while (i<ee.size())
{
if((x.getJiK().equals(cn))&&x.getKXTime().equals(an))
k++;
}
if(k==0)
{setApplyReplacement(an);
setApplyReplacement1(en);
setApplyReplacement1(cn);
setApplyReplacement3(dn);
System.out.println("提交申请");
}else {
System.out.println("无法申请");
}
Exite x = ee.get(k);
while (i<a.size()) {
if(a.get(i).getApplyReplacement1()!=null)
{for (k=0;k<ee.size();k++)
{if((x.getJiK().equals(a.get(i).getApplyReplacement3()))&&(x.getKXTime().equals(a.get(i).getApplyReplacement1())))
j++;}}
if(j==0)
{System.out.println("是否同意该申请");
if(in.nextBoolean()) {
for (k = 0; k < ee.size(); k++) {
if ((x.getJiK().equals(a.get(i).getApplyReplacement2())) && (x.getKXTime().equals(a.get(i).getApplyReplacement1())))
ee.get(i).setJiK(a.get(i).getApplyReplacement3());
if ((x.getJiK().equals(a.get(i).getApplyReplacement3())) && (x.getKXTime().equals(a.get(i).getApplyReplacement())))
ee.get(i).setJiK(a.get(i).getApplyReplacement2());
}
System.out.println("执行申请");
a.get(i).setApplyReplacement3(null);
a.get(i).setApplyReplacement2(null);
a.get(i).setApplyReplacement1(null);
a.get(i).setApplyReplacement(null);
}
else {System.out.println("驳回申请");}
}
i++;
}
书写申请功能的时候考虑了两个不同的且不具有继承关系的类如何调用信息和如何多重对比去实现申请与审批功能,最后反而设计增加几个基本属性和小技巧就能解决。
1.(4)使用情况
用户管理操作
考试和监考功能操作