[置顶] I/O流读取文本中学生成绩并统计符合条件的学生信息

时间:2022-09-03 07:51:11
package com.bagao.axiba;

import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;
import java.util.Set;

public class Test02 {
/**某班级的连续两次考试成绩,请写个程序,计算出上次考试不及格本次考试超过70分的同学数量及详细信息~~
打印格式:
上次考试不及格,本次超过70分的学生总共有: 2 位!
详细信息如下:
孙允阔 同学: 上次考试成绩为: 58.0 ,本次考试成绩为: 70.0 ,进步很大~~
孟阳 同学: 上次考试成绩为: 18.0 ,本次考试成绩为: 74.0 ,进步很大~~
*/
/**
* @param args
* @author xuke
* @throws IOException
*/
public static void main(String[] args) throws IOException {
//创建集合prop1存储上次考试成绩的文本数据
Properties prop1 =new Properties();
//关联文件
FileReader fr1 =new FileReader("C:\\Users\\xuke\\Desktop\\Desktop\\成绩统计-2016-05-28.txt");
//将数据加载到集合中
prop1.load(fr1);
//关流
fr1.close();


//创建集合prop2存储本次考试成绩的文本数据
Properties prop2 =new Properties();
FileReader fr2 =new FileReader("C:\\Users\\xuke\\Desktop\\Desktop\\成绩统计-2016-06-04.txt");
prop2.load(fr2);
fr2.close();

//定义计数器计数
int count=0;

//调用方法 目的只是将两次考试的文本数据进行处理 使其得到我想要的数据 并将数据存储在HashMap集合中
HashMap<String, Double> hm1 =getHashMap(prop1);
HashMap<String, Double> hm2 =getHashMap(prop2);

//通过遍历两个集和 得到相应的键和值
for (String key1 : hm1.keySet()) {
for (String key2 : hm2.keySet()) {
if(hm1.get(key1)<60.0&&hm2.get(key2)>=70.0&&key1.equals(key2)){
count++;
System.out.println(key1+"同学,上次考试成绩为:"+hm1.get(key1)+",本次考试成绩为:"+hm2.get(key2)+",进步很大~~");
}
}
}

System.out.println("上次考试不及格,本次超过70分的学生总共有:"+count+"位!");
}
/*自定义方法getHashMap():
* 1.返回值类型HashMap<String, Double> 其中键String存储学生姓名 Double存储学生成绩
* 2.参数列表Properties集合
* */
public static HashMap<String, Double> getHashMap(Properties prop){
//定义一个返回的HashMap集合
HashMap<String, Double> hm = new HashMap<>();
//迭代器遍历prop集合
Set<Map.Entry<Object,Object>> entrySet =prop.entrySet();
Iterator<Map.Entry<Object,Object>> it =entrySet.iterator();
while(it.hasNext()){
Map.Entry<Object,Object> en =it.next();
//获得键和值 其中值是包含学生成绩和学生IP的
String key =(String)en.getKey();
String value =(String)en.getValue();
//处理值 得到我想要的分数值
String[] s =value.split("\t");
String score =s[0];
double d =Double.parseDouble(score);
hm.put(key, d);
}
return hm;

}
}