假如有如下学生成绩表:
其中姓名和三门考试的成绩数据存于文本文件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
mport java.io.Serializable;public class StudentBean implements Serializable{/****/private static final long serialVersionUID = 4453511199058043587L;private String name ;private int javaScore;private int dbScore;private int cScore;public StudentBean(String name, int javaScore, int dbScore, int cScore) {super();this.name = name;this.javaScore = javaScore;this.dbScore = dbScore;this.cScore = cScore;}public StudentBean() {super();// TODO Auto-generated constructor stub}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getJavaScore() {return javaScore;}public void setJavaScore(int javaScore) {this.javaScore = javaScore;}public int getDbScore() {return dbScore;}public void setDbScore(int dbScore) {this.dbScore = dbScore;}public int getcScore() {return cScore;}public void setcScore(int cScore) {this.cScore = cScore;}@Overridepublic String toString() {return "StudentBean [name=" + name + ", javaScore=" + javaScore + ", dbScore=" + dbScore + ", cScore=" + cScore+ "]";}}
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();
}
}
}
}
