输入5个学生的信息(包括学号,姓名,英语成绩,计算机语言成绩和数据库成绩), 统计各学生的总分,然后将学生信息和统计结果存入test.txt文件中

时间:2021-10-11 12:21:50

题目分析:

1.首先想到的是数组存放数据,数组肯定是String类型.

2.String类型的数组,5行6列.要把从第0行第2列到第4行第4列的数据取出转换成数值型,再统计三科总分.最后把计算出的总分转换成String类型放回数组的第5列.

3.将string类型的数组写入到文件,再从文件读出显示到控制台

遇到的困难:

1.反复的类型转换

 import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.util.Scanner;
public class Test2 {
public static void main(String[] args) throws Exception{
float sum=0f;
Scanner input=new Scanner(System.in);
File f = new File("D:"+File.separator+"test.txt");
PrintStream ps = new PrintStream(f);
ps.println("姓名 学号 英语 计算机语言 数据库 总分");
OutputStream out = new FileOutputStream(f,true);
//用FileOutputSteam包装文件,并设置文件可追加
String[][] stu=new String[5][6];
float[][] score=new float[5][5];//接收各科分数 System.out.println("请依次输入学生的学号,姓名,英语,计算机语言和数据库的成绩");
for(int i=0;i<5;i++){
System.out.println("第"+(i+1)+"位:");
for(int j=0;j<5;j++){
stu[i][j]=input.nextLine(); //从键盘接收数据,以回车分隔
}
}
for(int i=0;i<5;i++){
for(int j=2;j<5;j++){
score[i][j]=Float.parseFloat(stu[i][j]);//String类型转换为Float类型
sum+=score[i][j];//总分
}
stu[i][5]=(String.valueOf(sum));//float类型转换为string类型放回String数组
sum=0; //计算完一位同学的总分后清零
}
for(int i=0;i<5;i++){
for(int j=0;j<6;j++){
out.write(stu[i][j].getBytes()); //将String转换为byte类型,向文件中写入数据
out.write('\t');//各数据之间的分隔,相当于tab
}
out.write('\r');//换行符
}
out.close(); //关闭输出流
System.out.println("写入成功!"); FileReader fr = new FileReader("d:\\test.txt");
char[] bchar= new char[1024];
int len = 0;
while((len = fr.read(bchar)) != -1){//直到文件读取结束
System.out.print(new String(bchar,0,len));//输出文件所有内容
}
fr.close();
}
}