從文件中讀取學生信息和分數,求出平均分後升序寫入另一個文件。

Student類,代碼如下:

package student;

import java.text.DecimalFormat;

public class Student {
	private int id;//學號
	private String name;//姓名
	private int score1;//成績1
	private int score2;//成績1
	private int score3;//成績1
	private double avg;//平均值
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getScore1() {
		return score1;
	}
	public void setScore1(int score1) {
		this.score1 = score1;
	}
	public int getScore2() {
		return score2;
	}
	public void setScore2(int score2) {
		this.score2 = score2;
	}
	public int getScore3() {
		return score3;
	}
	public void setScore3(int score3) {
		this.score3 = score3;
	}
	public double getAvg() {
		return avg;
	}
	public void setAvg(double avg) {
		this.avg = avg;
	}
	@Override
	public String toString() {
		return id + " " + name + " " + score1 + " " + score2 + " " + score3 + " " +new DecimalFormat("0.00").format(avg) + "\r\n";
	}

}
ReadData類,代碼如下:

package student;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
import java.util.TreeSet;

import student.Student;

public class ReadData {
	public void Read(Map<Double, TreeSet<Student>> map,String txt){
		//讀入數據
		//String fileName="data/11.txt";
		try {
			BufferedReader reader = new BufferedReader(new FileReader(txt));
			String line = null;
	        
	        while((line=reader.readLine())!=null){//循環賦值讀入
	        	String str[] = line.split("\\s+");
	        	Student op=new Student();
	        	op.setId( Integer.parseInt(str[0].trim()));
	        	op.setName( str[1].trim());
	        	op.setScore1(Integer.parseInt(str[2].trim()));
	        	op.setScore2(Integer.parseInt(str[3].trim()));
	        	op.setScore3(Integer.parseInt(str[4].trim()));
	        	double k=(Integer.parseInt(str[2].trim())+Integer.parseInt(str[3].trim())+Integer.parseInt(str[4].trim()))/3.0;
	        	op.setAvg(k);
	        	if(map.containsKey(op.getAvg())){
	        		map.get(op.getAvg()).add(op);
	        	}else{
	        		TreeSet<Student> ts=new TreeSet<Student>();
	        		ts.add(op);
	        		map.put(op.getAvg(), ts);
	        	}
	        }
		}catch (FileNotFoundException e) {
			e.printStackTrace();
		}catch (IOException e) {
			e.printStackTrace();
		}
	}
	public void OutPrint(Map<Double, TreeSet<Student>> map,String str){
		//按一定的順序輸出信息
		//System.out.println("學號  姓名  性別  地址    java語言成績    C語言成績    編譯原理成績    JavaEE成績");
		try {
		BufferedWriter writer = new BufferedWriter(new FileWriter(new File(str), false));
		for(Iterator<Double> it = map.keySet().iterator();
		             it.hasNext();)
		{
			TreeSet<Student> tp2=new TreeSet<Student>();
			tp2.addAll(map.get(it.next()));
			for(Iterator<Student> it1 = tp2.iterator();
             it1.hasNext();)
			{
				writer.write(it1.next().toString()+"\n");
			}
			//writer.write("\n");
			System.out.println("程序執行中!");
		}
		writer.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			}
	}

}

Main類,代碼如下:

package student;

import java.util.Map;
import java.util.TreeMap;
import java.util.TreeSet;

public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Map<Double, TreeSet<Student>> map=new TreeMap<Double, TreeSet<Student>>();
		ReadData op=new ReadData();
		String txt1="score.txt";
		String txt2="scoreSort.txt";
		op.Read(map,txt1);
		op.OutPrint(map, txt2);
		System.out.println("程序執行完畢!");

	}

}

以上代碼可能存在一些冗餘的部分,沒有進行修改,如果需要可以自行拷貝和修改。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章