Java输入输出系统练习

使用字符流和和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的截图:
在这里插入图片描述

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值