使用字符流和和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的截图: