假如有如下学生成绩表:
课后作业 - 图1
其中姓名和三门考试的成绩数据存于文本文件score1.txt中。请编写程序,从score1.txt中读出学生成绩,计算所有科目平均分数,然后将原有数据及平均分放入另一个文件score2.txt中。
需求:
1、使用对象流,将4个学生的考试成绩,存入到score1.txt 中
2、使用对象流,从score1.txt中,将考试成绩读取到程序中来
3、计算所有科目的平均分数,然后将 每个学生的原有考试成绩,以及平均分数存入到score2.txt中 使用BufferWriter流
eg:
张三 Java考试分数(80)分 平均成绩 (75)分,数据库考试分数(65)分 平均成绩(70)分,C考试分数(90)分 平均成绩(85)分
李四 Java考试分数(80)分 平均成绩 (75)分,数据库考试分数(65)分 平均成绩(70)分,C考试分数(90)分 平均成绩(85)分
王五 Java考试分数(80)分 平均成绩 (75)分,数据库考试分数(65)分 平均成绩(70)分,C考试分数(90)分 平均成绩(85)分
步骤:
1、StudentBean类,创建4个属性:String name,int javaScore,int sqlScore,int cScore 提供getter() setter() tostring() 提供构造器,并实现序列化接口,添加序列化ID
2、定义MainEnter 类,定义main() 在方法中定义 writeFirst()
3、使用对象输出流,将4个学生数据分别进行写入到 score1.txt中
4、定义全局 Student[] 学生数组,长度是4
5、定义方法read() 在方法中,使用对象输入流,将4个学生数据进行分别循环读出,并将读出的数据 填充到Student[] 中,在循环时,分别统计每个科目的总成绩
6、循环以外的地方,计算每个科目平均成绩(总成绩/总人数)
7、定义 writeTwo() ,循环 Student[],分别将学生的数据以及平均成绩,进行字符串的拼接(StringBuffer),拼接完毕之后,使用BufferedWrite 进行输出,每次都换一个行 nextLine()
8、在main() 中,依次调用 writeFirst(),read(),writeTwo() 测试结果

StudentBean

  1. mport java.io.Serializable;
  2. public class StudentBean implements Serializable{
  3. /**
  4. *
  5. */
  6. private static final long serialVersionUID = 4453511199058043587L;
  7. private String name ;
  8. private int javaScore;
  9. private int dbScore;
  10. private int cScore;
  11. public StudentBean(String name, int javaScore, int dbScore, int cScore) {
  12. super();
  13. this.name = name;
  14. this.javaScore = javaScore;
  15. this.dbScore = dbScore;
  16. this.cScore = cScore;
  17. }
  18. public StudentBean() {
  19. super();
  20. // TODO Auto-generated constructor stub
  21. }
  22. public String getName() {
  23. return name;
  24. }
  25. public void setName(String name) {
  26. this.name = name;
  27. }
  28. public int getJavaScore() {
  29. return javaScore;
  30. }
  31. public void setJavaScore(int javaScore) {
  32. this.javaScore = javaScore;
  33. }
  34. public int getDbScore() {
  35. return dbScore;
  36. }
  37. public void setDbScore(int dbScore) {
  38. this.dbScore = dbScore;
  39. }
  40. public int getcScore() {
  41. return cScore;
  42. }
  43. public void setcScore(int cScore) {
  44. this.cScore = cScore;
  45. }
  46. @Override
  47. public String toString() {
  48. return "StudentBean [name=" + name + ", javaScore=" + javaScore + ", dbScore=" + dbScore + ", cScore=" + cScore
  49. + "]";
  50. }
  51. }

MainEnter

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStreamWriter;
import java.util.Arrays;

public class MainEnter {
    //全局变量,平均分
    private static int java = 0, db = 0, c = 0;

    public static void main(String[] args) {
        //学生信息
        StudentBean[] sb = { new StudentBean("张三", 80, 65, 90), 
                new StudentBean("李四", 77, 59, 72),
                new StudentBean("王二", 65, 88, 88), 
                new StudentBean("刘五", 98, 90, 78) };
        //输出方法
        out(sb);
        //输入方法
        StudentBean[] sb2 = in();
        //输出分数平均分方法
        outputScore(sb2);

    }

    private static void outputScore(StudentBean[] sb2) {
        // TODO Auto-generated method stub
        File f = new File("C:\\JavaFileTest\\score2.txt");
        BufferedWriter bw = null;
        try {
            if (!f.exists()) {
                f.createNewFile();
            }
            bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(f)));
            for (int i = 0; i < sb2.length; i++) {
                StringBuffer sb = new StringBuffer();
                sb.append(sb2[i].getName() + "Java考试分数(" + sb2[i].getJavaScore() + "分)平均成绩( " + java + ")分 ,");
                sb.append("数据库考试得分(" + sb2[i].getDbScore() + ")分 平均成绩(" + db + ")分,");
                sb.append("C考试得分(" + sb2[i].getcScore() + ")分,平均成绩(" + c + ")分");
                String str = sb.toString();
                bw.write(str);
                bw.newLine();
                System.out.println(str);
            }
            bw.flush();

        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        } finally {
            try {
                bw.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

    private static StudentBean[] in() {
        // TODO Auto-generated method stub
        File f = new File("C:\\JavaFileTest\\score1.txt");
        ObjectInputStream ois = null;
        StudentBean[] sb = new StudentBean[4];

        try {

            ois = new ObjectInputStream(new FileInputStream(f));
            for (int i = 0; i < sb.length; i++) {
                sb[i] = (StudentBean) ois.readObject();
                java += sb[i].getJavaScore();
                db += sb[i].getDbScore();
                c += sb[i].getcScore();
            }
            java /= 4;
            db /= 4;
            c /= 4;

        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        } finally {
            try {
                ois.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        return sb;

    }

    private static void out(StudentBean[] sb) {
        // TODO Auto-generated method stub
        File f = new File("C:\\JavaFileTest\\score1.txt");
        ObjectOutputStream oos = null;
        try {
            if (!f.exists()) {
                f.createNewFile();
            }
            oos = new ObjectOutputStream(new FileOutputStream(f));
            for (int i = 0; i < sb.length; i++) {
                oos.writeObject(sb[i]);
            }

        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        } finally {
            try {
                oos.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

}