8、使用IO流完成學生信息的輸入輸出

編程題目:

8.有五個學生,每個學生有3門課的成績,從鍵盤輸入以上數據(包括學生號,姓名,三門課成績),計算出平均成績,將原有的數據和計算出的平均分數存放在磁盤文件”student.txt”中。

示例代碼:

package program.stream.exercise08;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * 8.有五個學生,每個學生有3門課的成績,從鍵盤輸入以上數據(包括學生號,姓名,三門課成績),
 * 計算出平均成績,將原有的數據和計算出的平均分數存放在磁盤文件"student.txt"中。
 */

public class StudentInformation {
    public static void main(String[] args) {

        Student[] students = new Student[5];
        inputInformation(students);
        outputInformation(students);

    }

    //靜態內部學生類
    static class Student { //定義學生模型

        private int id; //學生的學號
        private String name; //學生的姓名
        private double[] grades = new double[3]; //學生的三門成績
        private double sum; //學生總成績

        public Student(){}
        public Student(int id, String name, double[] grades, double sum) {
            this.id = id; 
            this.name = name;
            this.grades[0] = grades[0];
            this.grades[1] = grades[1];
            this.grades[2] = grades[2];
            this.sum = sum; 
        } 

    }

    //學生信息的輸入:學號,姓名,成績
    private static void inputInformation(Student[] students) {

        int id = 0; //學號
        String name = null; //姓名
        double[] grades = new double[3]; //三門成績
        double sum = 0; //總成績

        //輸入學生信息
        BufferedReader br = null;

        try {
            br = new BufferedReader(new InputStreamReader(System.in));

            for (int i=0; i<students.length; i++) {
                System.out.print("輸入第"+(i+1)+"名學生的學號:");
                id = Integer.parseInt(br.readLine());//將String轉換成int類型
                System.out.print("輸入第"+(i+1)+"名學生的姓名:");
                name = br.readLine();
                sum = 0;//注意:每計算一名學生的總成績後,總成績要重新歸零
                //輸入成績,注意:此處使用grades.length而不使用students[i].grades.length
                //否則出現空指針,原因:此時學生類中還沒有寫入信息,長度爲0
                for (int j=0; j<grades.length; j++) { 
                    System.out.print("輸入第"+(i+1)+"名學生的第"+(j+1)+"門成績:");
                    grades[j] = Double.parseDouble(br.readLine());//將String轉換成Double類型
                    sum += grades[j]; //計算總成績
                }
                System.out.println();
                students[i] = new Student(id, name, grades, sum);
            }
            System.out.println("輸入完成!");

        }catch(Exception e) {
            e.printStackTrace();
        } finally {
            try {
                br.close();

            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    //學生信息的輸出:學號,姓名,成績
    private static void outputInformation(Student[] students) {

        //寫入學生信息
        BufferedWriter bw = null;

        try {
            bw = new BufferedWriter(new FileWriter("src\\program\\stream\\exercise08\\student.txt"));

            bw.write("Id\t"+"Name\t"+"Grade1\t"+"Grade2\t"+"Grade3\t"+"Average\t\r\n");//\r\n:換行
            for (int i=0; i<students.length; i++) {
                bw.write(students[i].id+"\t");
                bw.write(students[i].name+"\t\t");
                for (int j=0; j<students[i].grades.length; j++) {
                    bw.write(students[i].grades[j]+"\t");
                }
                bw.write(students[i].sum/3+"\t\r\n");
            }
            System.out.println("寫入完成!");

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                bw.close();

            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

}

結果顯示:

這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章