输入学生的姓名,语文成绩,数学成绩,英语成绩,按照成绩进行排序,并放到文本文档中

时间:2024-03-21 07:29:41

键盘录入学生信息(姓名,语文成绩,数学成绩,英语成绩),按照分数从高到低进行排序。如果总分相等,按照语文成绩进行排序;如果语文成绩相等,按照数学成绩进行排序;如果数学成绩相等,按照英语成绩进行排序。

分析:

  1. 创建学生类
  2. 创建集合对象
    TreeSet<Student>
  3. 键盘录入学生信息存储到集合中
  4. 遍历集合,把数据写到文本文件

代码:

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.util.Comparator;
import java.util.Scanner;
import java.util.TreeSet;
public class Test2 {

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

		//创建集合对象
		TreeSet<Student> ts=new TreeSet<Student>(new MyComparator());
		//键盘录入学生信息存储到集合
		for(int x=1;x<=5;x++){
			Scanner sc=new Scanner(System.in);
			System.out.println("请录入第"+x+"个学生信息");
			System.out.println("姓名:");
			String name=sc.nextLine();
			System.out.println("语文成绩:");
			int chinese=sc.nextInt();
			System.out.println("数学成绩:");
			int math=sc.nextInt();
			System.out.println("英语成绩:");
			int english=sc.nextInt();
			
			//创建学生对象
			Student s=new Student();
			s.setName(name);
			s.setChinese(chinese);
			s.setMath(math);
			s.setEnglish(english);
			
			//把学生信息添加到集合中
			ts.add(s);
		}
		//遍历集合,把数据写到文本文件
		BufferedWriter bw=new BufferedWriter(new FileWriter("student.txt"));
		bw.write("学生信息如下:");
		bw.newLine();
		bw.flush();
		bw.write("姓名,语文成绩,数学成绩,英语成绩:");
		bw.newLine();
		bw.flush();
		for(Student s:ts){
			StringBuilder sb=new StringBuilder();
			sb.append(s.getName());
			sb.append(",");
			sb.append(s.getChinese()).append(",").append(s.getMath()).append(",").append(s.getEnglish());
			bw.write(sb.toString());
			bw.newLine();
			bw.flush();
		}
		//释放资源
		bw.close();
		System.out.println("学生信息存储完毕!");
	}

}
//创建比较器
class MyComparator implements Comparator{

	@Override
	public int compare(Object o1, Object o2) {
		// 强转
		Student s1=(Student)o1;
		Student s2=(Student)o2;
		//比较总分  
		
		int num=new Integer(s2.getSum()).compareTo(new Integer(s1.getSum()));
		if(num==0){
			//如果总分相同,按照语文比较
			int num1=s2.getChinese()-s1.getChinese();
			if(num1==0){
				//如果语文相同,按照数学比较
				int num2=s2.getMath()-s1.getMath();
				if(num2==0){
					//如果数学相同,按照英语比较
					int num3=s2.getEnglish()-s1.getEnglish();
					if(num3==0){
						//如果英语也相同,按照姓名比较
						int num4=s2.getName().compareTo(s1.getName());
						if(num4==0){
							return 0;
						}else if(num4>0){
							return 1;
						}
					}else if(num3>0){
						return 1;
					}
				}else if(num2>0){
					return 1;
				}
				
			}else if(num1>0){
				return 1;
			}
		}else if(num>0){
			return 1;
		}
		return -1;
	}

	
}
class Student{

	//姓名
	private String name;
	//语文成绩
	private int chinese;
	//数学成绩
	private int math;
	//英语成绩
	private int english;
	
	//构造函数
	public Student() {
		super();
	}
	public Student(String name,int chinese,int math,int english){
		super();
		this.name=name;
		this.chinese=chinese;
		this.math=math;
		this.english=english;
	}
	//基本方法
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getChinese() {
		return chinese;
	}
	public void setChinese(int chinese) {
		this.chinese = chinese;
	}
	public int getMath() {
		return math;
	}
	public void setMath(int math) {
		this.math = math;
	}
	public int getEnglish() {
		return english;
	}
	public void setEnglish(int english) {
		this.english = english;
	}
	public int getSum(){
		return this.chinese+this.math+this.english;
	}	
	
}

执行结果:
在控制台上录入五个学生信息。在当前目录下,生成了student.txt文件。文件中的内容为:输入学生的姓名,语文成绩,数学成绩,英语成绩,按照成绩进行排序,并放到文本文档中