Java:学生成绩打分工具

注意:该系统是将每个学生文件进行按逗号(,)分割成字符串数组
如果文件不是按照此标准会报空指针异常

package com.pointtest.tool;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;

public class DaFenTool {
	static Map<Integer,Integer> mapError = new HashMap<>();

	public static void main(String[] args) throws Exception {

		//System.out.println("请输入文件夹路径");
		String answerPath = "D:/abc/hjzy/answer.txt"; //答案文件路径
		File answerFile = new File(answerPath); //答案文件File对象

		String hjPath = "D:/abc/hjzy"; //作业文件夹路径
		File hjDir = new File(hjPath); //封装保存作业的文件夹路径
		File[] AllStudentFiles = hjDir.listFiles(new FileFilter() { //将文件夹内所有文件对象封装成数组
			@Override
			public boolean accept(File p) { //利用过滤器将答案文件answer.txt进行过滤」
				if(p.getName().equals("answer.txt")) {
					return false;
				}
				return true;
			}
		}); 

		for (int i = 1; i <= 70; i++) { //初始化错题计数的HashMap,防止Null指针异常
			mapError.put(i, 0);
		}

		String[] answer = fileProces(answerFile); //对正确答案文件单独处理封装

		for (File f : AllStudentFiles) { //遍历打印学生成绩
			String studentName = f.getName().substring(0, f.getName().lastIndexOf(".")); //每一个学生姓名
			int score = DaFen(answer,fileProces(f)); //每一个学生的成绩
			System.out.println(studentName+" : "+score+"分"); //←打印成绩,可换成输出流到文本中
		}
		System.out.println(mapError); //打印错题数量汇总


	}

	//方法区
	private static int DaFen(String[] answer, String[] stuAnswer) { //打分方法
		//记数
		int count = 0;
		for (int i = 0; i < answer.length; i++) {

			String str1 = answer[i].split("\\.")[1]; //必须写双反斜杠
			String str2 = stuAnswer[i].split("\\.")[1];
			if(str1.equalsIgnoreCase(str2)) {
				count++; //正确分数计数
			}else {
				mapError.put(i+1, mapError.get(i+1)+1); //错题目全部放进map中
			}
		}
		return count; //该方法返回分数

	}

	//方法区
	private static String[] fileProces(File file) throws Exception { //文件对象处理方法
		//  BR--ISR-FIS--xxx.txt
		BufferedReader in = 
				new BufferedReader(
						new InputStreamReader(
								new FileInputStream(file))); //字符输入流
		StringBuilder sb = new StringBuilder(); //创建一个StringBuilder获得一个对象
		String b ;
		while((b=in.readLine())!=null) {
			sb.append(b);
		}
		//利用正则去除换行、空格
		String regex = " |\\n";
		String matches = sb.toString().replaceAll(regex, "");
		//System.out.println(matches);
		//将字符串封装进数组(总共70对数据)
		String[] splits = matches.split(","); //数组:70对
		//System.out.println(Arrays.toString(splits)); //测试成功
		in.close();
		return splits; //返回字符串数组
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值