使用字符流和和GUI类编程实现以下功能: (1)设计图形化界面,至少包括文本类控件类。接收从键盘输入姓名、学号、成绩,并保存到文本文件中,重复进行。(2)从文件中读取各学生的成绩,并计算所有学生成绩的平均值、最大值和最小值,排序后输出到另一文本文件。 需要注意的几个点: 1.图形化界面并不是必需的,只需实现对于文本文件的相关操作 2.由于要进行排序,学生类必须实现Comparable接口 3.为方便输出,学生类中最好重写一下toString()方法
源代码:
import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; import java.util.Scanner; import java.io.*; import java.util.*; class Student implements Comparable{ // 姓名,学号,成绩 private String num; private String name; private int score; public String getNum() { return num; } public void setNum(String num) { this.num = num; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getScore() { return score; } public void setScore(int score) { this.score = score; } @Override public boolean equals(Object obj) { Student s = (Student)obj; return this.score == s.score; } @Override public String toString() { return name + " , " + num + " , " + score; } @Override public int compareTo(Object o) { Student s1 = (Student)o; return s1.score - this.score; } } public class MyFile { public static void main(String[] args) throws IOException { //1:键盘输入数据,把数据封装成学生对象,存储到集合中 //2: 创建学生集合 ArrayList<Student> students = new ArrayList<Student>(); for (int i = 0; i < 3; i++) { Scanner sc = new Scanner(System.in); //键盘输入数据 System.out.println("请输入姓名:"); String name = sc.nextLine(); System.out.println("请输入学号:"); String num = sc.nextLine(); System.out.println("请输入成绩:"); int score = sc.nextInt(); Student s = new Student(); s.setName(name); s.setNum(num); s.setScore(score); students.add(s); } File destPath = new File("C:\\stu.txt"); BufferedWriter bw = new BufferedWriter(new FileWriter(destPath)); bw.write("姓名\t"); bw.write("学号\t"); bw.write("成绩\t"); bw.newLine(); bw.flush(); for (Student s : students) { String name = s.getName(); String num = s.getNum(); int score = s.getScore(); bw.write(name + "\t"); bw.write(num + "\t"); bw.write(score + "\t"); bw.newLine(); bw.flush(); } //释放资源 bw.close(); File sourceFile = new File("C:\\stu.txt"); File targetFile = new File("C:\\stu2.txt"); try{ Writer out = new FileWriter(targetFile); BufferedWriter bufferedWriter = new BufferedWriter(out); Reader in = new FileReader(sourceFile); BufferedReader bufferedReader = new BufferedReader(in); double sum = 0; int max = students.get(0).getScore(); int min = students.get(0).getScore(); for (Student s : students){ //计算平均值 sum += s.getScore(); } for(int i = 1;i < 3;i++){ //计算最大值 if(students.get(i).getScore() > max) max = students.get(i).getScore(); } for(int i = 1;i < 3;i++){ //计算最小值 if(students.get(i).getScore() < min) min = students.get(i).getScore(); } Collections.sort(students);//排序 String str1 = "平均值是:" + sum/3; bufferedWriter.write(str1); bufferedWriter.newLine(); String str2 = "最大值是:" + max; bufferedWriter.write(str2); bufferedWriter.newLine(); String str3 = "最小值是:" + min; bufferedWriter.write(str3); bufferedWriter.newLine(); String str = null; while((str = bufferedReader.readLine()) != null){ bufferedWriter.write(students.toString()); bufferedWriter.newLine(); } bufferedWriter.close(); out.close(); bufferedReader.close(); in.close(); } catch (IOException e){ System.out.println(e.toString()); } } }源代码中设置的是三个测试数据,自己输入: 我的三个测试数据: 姓名 学号 成绩 Tom 26 99 Peter 52 86 Ben 30 82 在C盘中创建了两个文本文件:stu.txt stu2.txt 运行后stu.txt的截图: stu2.txt的截图:
