题目要求

考试管理系统
分3种用户角色:教务员(具有管理权限)、教师、学生
 教务员:可以进行用户管理(增加删除修改用户,设置用户权限)、考试管理(增加删除修改考试,安排考试时间)、监考管理(安排、修改监考)
 教师:查看考试、监考,申请监考替换
 学生:查看考试安排
实现功能模块要求:
1、用户管理:
A、用户的增加、删除和修改
B、权限控制,主要权限包括:①系统管理权、②考试管理权、③考试安排查询:能查看考试时间及监考名单、④考试安排查询:只能查看考试时间,不能查看监考、⑤申请监考替换权限。(教务员拥有所有权限,教师拥有权限③⑤,学生只有权限④)
2、考试管理:
A、考试的增加、删除和修改
B、考试时间安排,避免考试时间冲突、同科目考试有多个考场,注意统一时间
3、监考安排:
监考教师的安排与修改,注意避免同期产生冲突的问题。
4、考试安排查询:
为教师、学生提供两种不同的查询结果。
教师可对自己的监考安排提出监考替换申请。
教务员可根据监考替换申请执行审批,同意则替换,不同意则驳回。

程序的所有信息采用文件存储,程序开始运行时将文件信息导入内存中,关闭程序时把内存中信息保存到文件。
推荐使用图形用户界面。
考试参考信息如下:
在这里插入图片描述

开发环境 :

Eclipse
jdk1.8

程序总功能模块

在这里插入图片描述

图1 权限模块图

程序详细设计

public int find1(String e) {
		for(int i = 0 ; i <array.size(); i++) 
			if(array.get(i).geteName().contains(e))
				return i;
		return -1;
	}
public boolean del_Exam(String s,String e)	{  
		int pos1 = find1(s);
		int pos2 = find2(e);
		if (pos1==-1 || pos2==-2 )
			return false;
		if(pos1==pos2) {
			array.remove(pos1);
		}
		return true;
	}
	public void update(Examwork e) {
		int flag1 = find1(e.geteName());
		array.set(flag1, e);
		System.out.print(array.get(flag1).toString());
	}

通过名字查找数组中是否已存在该姓名相关的数据,有则返回该数据在array数组中的位置,无则直接return -1;删除函数是先通过所给条件找到需要删除的数据在arraylist数组中的位置,然后通过remove方法将数据删除;进行数据信息的替换则通过数据的位置然后调用set方法来实现数据的更新;

try {
			FileReader fr = new FileReader("D:\\Java\\Java project\\Exam-system\\src\\考试信息.txt");
			BufferedReader br = new BufferedReader(fr);
			array.clear();
			while((t = br.readLine())!=null) {
				String [] s = t.split("\\s+");
				Examwork exam = new Examwork(s[0],s[1],s[2],s[3],s[4],s[5],s[6],s[7],s[8]); 
				array.add(exam);
			}
			fr.close();
			br.close();


通过文件流的方式将TXT文档中的数据按规定的格式存储到新的数组中;

try {
			fw = new FileWriter("D:\\Java\\Java project\\Exam-system\\src\\考试信息.txt");    
			out = new BufferedWriter(fw);
			for(int i=0;i<array.size();i++){
				String s=array.get(i).exam_fileString();
				out.write(s);
				out.newLine();
				out.flush();
			}
			out.close();
			fw.close();

通过文件流的方式将数据保存到TXT文档中;

public boolean JudgeTime(String time) {
		String pattern ="([01]?[0-9]|2[0-3])(\\:|\\:)[0-5][0-9](\\-|\\-)([01]?[0-9]|2[0-3])(\\:|\\:)[0-5][0-9]";
		boolean isTime = Pattern.matches(pattern,time);
		return isTime;	
	}

采用正则表达式来判断输入的日期是否符合格式;

RowSorter sorter = new TableRowSorter(model);
table.setRowSorter(sorter);

通过继承RowSorter类来进行排列,JTable 支持单击表头按该列进行升序或降序的排序,只需要给表格设置一个表格行排序器TableRowSorter ,其排列的方式是按照字典的顺序进行排序;其排列方式存在缺点,会造成排列出错;
(以上代码均有删减直接复制会出错的)

使用情况

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第一次写这东西有不少错误的地方,题目要求的功能也没有完全实现,以上内容看看就好蛤!写这篇文章主要还是记录一下个人的学习!

源码:Java大作业-考试管理系统(GUI)无数据库-Java课程设计

Logo

助力广东及东莞地区开发者,代码托管、在线学习与竞赛、技术交流与分享、资源共享、职业发展,成为松山湖开发者首选的工作与学习平台

更多推荐