问题如下:
1.首先,有一个用记事本记录的文本文档,里面记录的是学生的成绩信息。记录的信息为:实验中学初中或者高中(用代码表示10字节),年级(代码表示),班级,学号,姓名,语文成绩,数学成绩,物理成绩,化学成绩,生物成绩。记录格式如下:
123456789实验中学初中11156789张三100100100099099
223456789实验中学高中23178963李四099100100100100
.
.
.
123456789实验中学初中22156987小王100100100099099
注:记录信息数量很多
2.用程序读这个文件,将学生总成绩按升序排列,并打印出到另一个文本文档。
要求为:(1)要按升序排列,并且要按由初中到高中、年级由低到高、班级顺序排列显示
(2)分别按班和按年级、按初中、高中统计出平均成绩
(3)统计出各班前三名学生
3.最后输出格式大致为:
初中/高中 年级 班级 姓名 语文 数学 物理 化学 生物 总分
实验中学初中 1 1 张三 100 100 100 99 99 498
实验中学初中 1 1 小三 99 100 100 99 99 497
实验中学初中 1 1 张里 100 100 99 98 99 496
实验中学初中 1 1 班平均 88 87 84 86 90 435
.
.
.
实验中学高中 2 3 李四 99 100 100 100 100 499
实验中学高中 2 3 CC 99 99 100 100 100 498
实验中学高中 2 3 VV 99 99 100 99 100 497
实验中学高中 2 3 班平均 80 82 80 85 88 415
.
.
.
希望大家一起来讨论如何解决这个问题,达到最后的输出结果。盼望各位大侠、猛将兄们,将你们的解决方案提供出来,大家学习,探讨。在这个过程中,大家学习如何对文件进行读写,以及对于大量数据如何进行快速有效的排序。
1.首先,有一个用记事本记录的文本文档,里面记录的是学生的成绩信息。记录的信息为:实验中学初中或者高中(用代码表示10字节),年级(代码表示),班级,学号,姓名,语文成绩,数学成绩,物理成绩,化学成绩,生物成绩。记录格式如下:
123456789实验中学初中11156789张三100100100099099
223456789实验中学高中23178963李四099100100100100
.
.
.
123456789实验中学初中22156987小王100100100099099
注:记录信息数量很多
2.用程序读这个文件,将学生总成绩按升序排列,并打印出到另一个文本文档。
要求为:(1)要按升序排列,并且要按由初中到高中、年级由低到高、班级顺序排列显示
(2)分别按班和按年级、按初中、高中统计出平均成绩
(3)统计出各班前三名学生
3.最后输出格式大致为:
初中/高中 年级 班级 姓名 语文 数学 物理 化学 生物 总分
实验中学初中 1 1 张三 100 100 100 99 99 498
实验中学初中 1 1 小三 99 100 100 99 99 497
实验中学初中 1 1 张里 100 100 99 98 99 496
实验中学初中 1 1 班平均 88 87 84 86 90 435
.
.
.
实验中学高中 2 3 李四 99 100 100 100 100 499
实验中学高中 2 3 CC 99 99 100 100 100 498
实验中学高中 2 3 VV 99 99 100 99 100 497
实验中学高中 2 3 班平均 80 82 80 85 88 415
.
.
.
希望大家一起来讨论如何解决这个问题,达到最后的输出结果。盼望各位大侠、猛将兄们,将你们的解决方案提供出来,大家学习,探讨。在这个过程中,大家学习如何对文件进行读写,以及对于大量数据如何进行快速有效的排序。
解决方案 »
- java 关于事件监听的问题,急!!!!!!!!
- 在线急求集合问题
- 高手赐教!请问权限修饰符deafult与继承的关系?
- 请教高手Myfaces中的visibleOnUserRole,enabledOnUserRole怎么用?
- 烦死了,mac下如何替换系统自带的jdk
- 一个关于线程同步的基础问题
- 用Java如何在有菜单和按钮的情况下显示JPG图形文件(要求有垂直和水平的滚动条),而菜单和按钮仍可见????
- 初学者的烦恼,请各位高手指点迷津。
- C3P0 : 报错 An attempt by a client to checkout a Connection has timed out.
- 与socket = serverSocket.accept();同一个class下引用其他gui类总是显示白屏
- Eclipse新手问题
- in关键字的问题
package stu;import java.io.*;
/**
*
* @author new
*
*/
class Reading{
//定义变量
long X_code;
String X_name;
int Gla_num;
int Cla_num;
long S_num;
String S_name;
long yuwen,shuxue,wuli,huaxue,shengwu;
long zhonghe;
int i=0,j=0;//计算学校名和学生名的长度
String xueming=" ";
String mingcheng=" ";
String chengji=" ";
String num=" ";
String banping=" ";
String nianping=" ";
String xueping=" ";
//构造函数
/**
* @param s
*/
Reading(String s){
String yw;
String sx;
String wl;
String hx;
String sw;
String xcode;
String glassnum;
String classnum;
String snum;
char[] ch=s.toCharArray();
//取学校编码
xcode=new String(ch,0,9);//6666
try{
X_code=Long.parseLong(xcode);
}
catch(NumberFormatException e)
{
System.out.println("学校的编码有误,请输入正确的学校的编码。");
System.exit(1);
}
if(Character.isDigit(ch[10]))
{
System.out.println("学校的编码过长。");
System.exit(1);
}
//取学校名
else
{
while(!Character.isDigit(ch[10+i]))
{
i++;
}
X_name=new String(ch,10,i).toString();//777777
}
//取年级
glassnum=new String(ch,(10+i),1);
try{
Gla_num=Integer.parseInt(glassnum);
}
catch(NumberFormatException e){
System.out.println(glassnum);
System.out.println("班号有误");
System.exit(1);
}
if(Gla_num==0){
System.out.println("年级号有误");
System.exit(1);
}
//取班级
else
{
if(!Character.isDigit(ch[11+i])){
System.out.println("班号有误");
System.exit(1);
}
else
{
classnum=new String(ch,(11+i),1);
try{
Cla_num=Integer.parseInt(classnum);
}
catch(NumberFormatException e)
{
System.out.println("年级号不对");
System.exit(1);
}
if(Cla_num==0){
System.out.println("班号有错误");
System.exit(1);
}
}
}
//取学号
snum=new String(ch,(12+i),6);
try{
S_num=Long.parseLong(snum);
}
catch(NumberFormatException e)
{
System.out.println("学号有错误");
System.exit(1);
}
if(Character.isDigit(ch[18+i])){
System.out.println("学号过长");
System.exit(1);
}
//取学生名
while(!Character.isDigit(ch[18+i])){
i++;
j++;
}
{
S_name=new String(ch,(18+i-j),j);//888
}
//取语文成绩
yw=new String(ch,(18+i),3);
try{
yuwen=Long.parseLong(yw);
}
catch(NumberFormatException e){
System.out.println("语文成绩出错");
System.exit(1);
}
if(yuwen<0||yuwen>100){
System.out.println("语文成绩分数有错");
System.exit(1);
}
//取数学成绩
sx=new String(ch,(21+i),3);
try{
shuxue=Long.parseLong(sx);
}
catch(NumberFormatException e){
System.out.println("数学成绩有错");
System.exit(1);
}
if(shuxue<0||shuxue>100){
System.out.println("数学成绩分数有错");
System.exit(1);
}
//取物理成绩
wl=new String(ch,(24+i),3);
try{
wuli=Long.parseLong(wl);
}
catch(NumberFormatException e){
System.out.println("物理成绩出错");
System.exit(1);
}
if(wuli<0||wuli>100){
System.out.println("物理成绩分数有错");
System.exit(1);
}
//取化学成绩
hx=new String(ch,(27+i),3);
try{
huaxue=Long.parseLong(hx);
}
catch(NumberFormatException e){
System.out.println("化学成绩出错");
System.exit(1);
}
if(huaxue<0||huaxue>100){
System.out.println("化学成绩分数出错");
System.exit(1);
}
//取生物成绩
sw=new String(ch,(30+i),3);
try{
shengwu=Long.parseLong(sw);
}
catch(NumberFormatException e){
System.out.println("生物成绩出错");
System.exit(1);
}
if(shengwu<0||shengwu>100){
System.out.println("生物成绩分数有错");
System.exit(1);
}
else
{
zhonghe=yuwen+shuxue+wuli+huaxue+shengwu;
}
}
public String geshi(String s1,String s2){
if(s2.length()<s1.length()){
return s2+s1.substring(s2.length());
}
return s2;
}
void printqiansanming(){
System.out.println(geshi(xueming,X_name)+" "
+geshi(num,Integer.toString(Gla_num))+" "
+geshi(num,Integer.toString(Cla_num))+" "
+geshi(mingcheng,S_name)+" "
+geshi(chengji,Long.toString(yuwen))+" "
+geshi(chengji,Long.toString(shuxue))+" "
+geshi(chengji,Long.toString(wuli))+" "
+geshi(chengji,Long.toString(huaxue))+" "
+geshi(chengji,Long.toString(shengwu))+" "
+geshi(chengji,Long.toString(zhonghe)));
}
void printbanpingjun(int bren){
System.out.println(geshi(xueming,X_name)+" "
+geshi(num,Integer.toString(Gla_num))+" "
+geshi(num,Integer.toString(Cla_num))+" "
+geshi(banping,"班級平均")+" "
+geshi(chengji,Long.toString(yuwen/bren))+" "
+geshi(chengji,Long.toString(shuxue/bren))+" "
+geshi(chengji,Long.toString(wuli/bren))+" "
+geshi(chengji,Long.toString(huaxue/bren))+" "
+geshi(chengji,Long.toString(shengwu/bren))+" "
+geshi(chengji,Long.toString(zhonghe/bren)));
}
void printnianpingjun(int nren){
System.out.println(geshi(xueming,X_name)+" "
+geshi(num,Integer.toString(Gla_num))+" "
+geshi(nianping,"年級平均")+" "
+geshi(chengji,Long.toString(yuwen/nren))+" "
+geshi(chengji,Long.toString(shuxue/nren))+" "
+geshi(chengji,Long.toString(wuli/nren))+" "
+geshi(chengji,Long.toString(huaxue/nren))+" "
+geshi(chengji,Long.toString(shengwu/nren))+" "
+geshi(chengji,Long.toString(zhonghe/nren)));
}
void printxuepingjun(int xren){
System.out.println(geshi(xueming,X_name)+" "
+geshi(xueping,"学校平均")+" "
+geshi(chengji,Long.toString(yuwen/xren))+" "
+geshi(chengji,Long.toString(shuxue/xren))+" "
+geshi(chengji,Long.toString(wuli/xren))+" "
+geshi(chengji,Long.toString(huaxue/xren))+" "
+geshi(chengji,Long.toString(shengwu/xren))+" "
+geshi(chengji,Long.toString(zhonghe/xren)));
}
}
public class Student{
public static void main(String arg[]){
String ss;
Reading r0=new Reading();
int X_renshu,G_renshu,C_renshu;
Reading r1,r2,r3,r4,r5,r6,r7;
RandomAccessFile rb;
try{
rb=new RandomAccessFile("D:\\代码保存\\stu.txt","r");
ss=rb.readLine();
if(ss!=null){
System.out.println(r0.geshi(r0.xueming,"学校名")
+" "+r0.geshi(r0.num,"年级")+" "
+r0.geshi(r0.num,"班")+" "+r0.geshi(r0.mingcheng,"姓名")
+" "+r0.geshi(r0.chengji,"语文")+" "+r0.geshi(r0.chengji,"数学")+" "
+r0.geshi(r0.chengji,"物理")+" "+r0.geshi(r0.chengji,"化学")+" "
+r0.geshi(r0.chengji,"生物")+" "+r0.geshi(r0.chengji,"总分"));
r1=new Reading(ss);//取出班上第一名成绩
r2=new Reading();//取出班上第二名成绩
r3=new Reading();//取出班上第三名成绩
r4=new Reading(ss);//取出同一个班的总成绩
r5=new Reading(ss);//取出同一个年级的总成绩
r6=new Reading(ss);//取出同一个学校的总成绩
r7=new Reading(ss);//取出当前总成绩
C_renshu=1;
G_renshu=1;
X_renshu=1;
ss=rb.readLine();
while(ss!=null){
r7=new Reading(ss);
if(r4.X_code!=r7.X_code){
r1.printqiansanming();
r2.printqiansanming();
r3.printqiansanming();
r4.printbanpingjun(C_renshu);
r5.printnianpingjun(G_renshu);
r6.printxuepingjun(X_renshu);
X_renshu=1;
G_renshu=1;
C_renshu=1;
r1=new Reading(ss);;
r2=new Reading();
r3=new Reading();
r4=new Reading(ss);;
r5=new Reading(ss);;
r6=new Reading(ss);;
}
else
{
X_renshu++;
//学校人数增加的话,增加学校内各科成绩和取出当前的各科成绩
r6.yuwen=r6.yuwen+r7.yuwen;
r6.shuxue=r6.shuxue+r7.shuxue;
r6.wuli=r6.wuli+r7.wuli;
r6.huaxue=r6.huaxue+r7.huaxue;
r6.shengwu=r6.shengwu+r7.shengwu;
r6.zhonghe=r6.zhonghe+r7.zhonghe;
if(r4.Gla_num!=r7.Gla_num){
r1.printqiansanming();
r2.printqiansanming();
r3.printqiansanming();
r4.printbanpingjun(C_renshu);
r5.printnianpingjun(G_renshu);
G_renshu=1;
C_renshu=1;
r1=new Reading(ss);;
r2=new Reading();
r3=new Reading();
r4=new Reading(ss);;
r5=new Reading(ss);;
}
else
{
G_renshu++;
//年级人数增加的话,增加年级内各科成绩和取出当前的各科成绩
r5.yuwen=r5.yuwen+r7.yuwen;
r5.shuxue=r5.shuxue+r7.shuxue;
r5.wuli=r5.wuli+r7.wuli;
r5.huaxue=r5.huaxue+r7.huaxue;
r5.shengwu=r5.shengwu+r7.shengwu;
r5.zhonghe=r5.zhonghe+r7.zhonghe;
if(r4.Cla_num!=r7.Cla_num){
r1.printqiansanming();
r2.printqiansanming();
r3.printqiansanming();
r4.printbanpingjun(C_renshu);
C_renshu=1;
r1=new Reading(ss);;
r2=new Reading();
r3=new Reading();
r4=new Reading(ss);
}
else
{
C_renshu++;
//班级人数增加的话,增加班级内各科成绩和取出当前的各科成绩
r4.yuwen=r4.yuwen+r7.yuwen;
r4.shuxue=r4.shuxue+r7.shuxue;
r4.wuli=r4.wuli+r7.wuli;
r4.huaxue=r4.huaxue+r7.huaxue;
r4.shengwu=r4.shengwu+r7.shengwu;
r4.zhonghe=r4.zhonghe+r7.zhonghe;
if(r7.zhonghe>r1.zhonghe){
r3=r2;
r2=r1;
r1=r7;
}
else
{
if(r7.zhonghe>r2.zhonghe){
r3=r2;
r2=r7;
}
else
{
if(r7.zhonghe>r3.zhonghe){
r3=r7;
}
}
}
}
}
}
ss=rb.readLine();
}
r1.printqiansanming(); if(C_renshu>1)
r2.printqiansanming();
if(C_renshu>2)
r3.printqiansanming();
r4.printbanpingjun(C_renshu);
r5.printnianpingjun(G_renshu);
r6.printxuepingjun(X_renshu);
}
rb.close();
}
catch(IOException e){
System.out.println("输出完毕");
System.exit(1);
}
}
}