`
lw4135
  • 浏览: 44751 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

从键盘录入学生成绩存入电脑硬盘并自定义排序

阅读更多
package com.microsoft.io;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Collections;
import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;

/**
 * 学生类实现比较器
 * 
 * @author liuwang
 */
class Student implements Comparable<Student> {
	private String name;
	private int math;
	private int english;
	private int chinese;
	private int sum;

	Student(String name, int math, int english, int chinese) { // 构造方法
		this.name = name;
		this.math = math;
		this.english = english;
		this.chinese = chinese;
		this.sum = math + english + chinese;
	}

	public String getName() {
		return name;
	}

	public int getMath() {
		return math;
	}

	public int getEnglish() {
		return english;
	}

	public int getChinese() {
		return chinese;
	}

	public int getSum() {
		return sum;
	}

	/**
	 * 重写hashCode方法。现比较两个学生对象的hashCode是否一致。如果一致才会继续比较equals。
	 */
	public int hashCode() {
		return name.hashCode() + sum * 37;
	}

	/**
	 * 重写equals方法
	 */
	public boolean equals(Object obj) {
		if (!(obj instanceof Student))
			throw new ClassCastException("类型不匹配!");
		Student s = (Student) obj;
		return this.name.equals(s.name) && this.sum == s.sum;//如果姓名和总分都相同则为同一个人。
	}
	/**
	 * 重写toString,指定一个输出格式。
	 */
	public String toString() {
		return "Student[" + name + "," + chinese + "," + math + "," + english
				+ "]";
	}
	/**
	 * 重写比较器。先比总分,如果相等再比较两个人都姓名。
	 */
	public int compareTo(Student s) {
		int num = new Integer(this.sum).compareTo(s.sum);
		if (num == 0) {
			return this.name.compareTo(s.name);
		}
		return num;
	}

}
	/**
	 * 学生工具类测试。
	 */
public class StudentTool {
	/**
	 * 方式一:默认比较器,总分是从低到高的不符合需求。
	 */
	public static Set<Student> getStudent() throws IOException {

		return getStudent(null);

	}
	/**
	 * 方式二:传一个自定义的比较器。
	 */
	public static Set<Student> getStudent(Comparator<Student> cmp)
			throws IOException {
		BufferedReader bufr = new BufferedReader(new InputStreamReader(
				System.in));  
		String line = null;
		Set<Student> stus;
		if (cmp == null)
			stus = new TreeSet<Student>();
		else
			stus = new TreeSet<Student>(cmp);

		while ((line = bufr.readLine()) != null) {
			if (("over").equals(line))  //读到"over"循环终止。
				break;
			String[] info = line.split(",");  //将读到的数据用","切割,装进info字符串数组。
			Student stu = new Student(info[0], Integer.parseInt(info[1]),
					Integer.parseInt(info[2]), Integer.parseInt(info[3]));//新建学生对象并运用构造函数进行初始化。
			stus.add(stu);//将学生对象添加到TreeSet集合当中。
		}
		bufr.close();//关闭缓冲区。
		return stus;//返回学生集合。
	}
	/**
	 * 将学生写入文件
	 */
	public static void writeToFile(Set<Student> stus) throws IOException {
		BufferedWriter bufw = new BufferedWriter(new FileWriter("stuinfo.txt"));//新建一个文件输入流
		for (Student stu : stus) {  //循环写入
			bufw.write(stu.toString() + "\t");//“\t”制表
			bufw.write(stu.getSum() + "");
			bufw.newLine();//换行
			bufw.flush();//刷新
		}
		bufw.close();//关闭缓冲区
	}

	public static void main(String[] args) throws IOException {
		Comparator<Student> cmp = Collections.reverseOrder();// 强行逆转默认比较器
		writeToFile(getStudent(cmp));
	}
}
分享到:
评论

相关推荐

    C#程序开发范例宝典(第2版).part13

    实例185 异步加载并播放声音文件 269 5.3 动画播放 270 实例186 播放Flash动画 270 实例187 制作AVI播放器 272 实例188 播放GIF动画 273 实例189 利用Image制作小动画 274 5.4 媒体控制 275 实例190 检测是否...

    C#程序开发范例宝典(第2版).part08

    实例185 异步加载并播放声音文件 269 5.3 动画播放 270 实例186 播放Flash动画 270 实例187 制作AVI播放器 272 实例188 播放GIF动画 273 实例189 利用Image制作小动画 274 5.4 媒体控制 275 实例190 检测是否...

    C#程序开发范例宝典(第2版).part02

    实例185 异步加载并播放声音文件 269 5.3 动画播放 270 实例186 播放Flash动画 270 实例187 制作AVI播放器 272 实例188 播放GIF动画 273 实例189 利用Image制作小动画 274 5.4 媒体控制 275 实例190 检测是否...

    C#程序开发范例宝典(第2版).part12

    实例185 异步加载并播放声音文件 269 5.3 动画播放 270 实例186 播放Flash动画 270 实例187 制作AVI播放器 272 实例188 播放GIF动画 273 实例189 利用Image制作小动画 274 5.4 媒体控制 275 实例190 检测是否...

    会计理论考试题

    14.选择“重新启动计算机并切换到MS-DOS方式”,在DOS提示符下键入“VER”,屏幕显示____D____。 A、DOS6.22 B、DOS7.0 C、Windows3.2 D、Windows98 15.计算机病毒主要破坏计算机系统的 ___C__ 。 A、显示器 B、软盘...

    C#编程经验技巧宝典

    103 &lt;br&gt;0167 锁定文本框内的文本 103 &lt;br&gt;0168 使用Message.Show输出用户信息 104 &lt;br&gt;5.3 图片数据处理技巧 104 &lt;br&gt;0169 如何将图片存入数据库 104 &lt;br&gt;0170 如何将图片从数据库中读取...

    Delphi开发范例宝典目录

    实例071 在TListView控件中对数据排序或统计 84 实例072 在TListView组件中绘制底纹 86 实例073 在列表视图中拖动视图项 87 2.6 TTreeView控件应用典型实例 88 实例074 将数据库数据显示到树视图中 88 ...

Global site tag (gtag.js) - Google Analytics