编写一个成绩排名程序(GUI)

本文介绍了一个简单的Java程序,用于从文件中读取学生的姓名、学号和成绩,并对成绩进行排序后保存到新文件中,同时添加了排名信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:编写一个成绩排名程序。首先从一个文件中读入一组学生的姓名、学号和成绩,其中,姓名为一个字符串,学号为一个整数,成绩为一个实数,每位学生的信息占用一行,如“Yueying 20050923 95.5”。然后对这些学生的成绩进行排序,并将排序后的结果保存在另一个文件中。在该文件中,除了原有的姓名、学号和成绩以外,再增加排名信息。

import java.io.*;
import java.util.*;

public class Test5 {
    
    static int num = 0;
    
    public static void main(String[] args) throws FileNotFoundException{
        //读入"student.txt"文件
        Scanner input = new Scanner(new File("student.txt"));
        double []arr = new double[100];
        while(input.hasNext()){
            if(input.hasNextDouble()){
                //将文件内容存入数组中
                arr[num++] = input.nextDouble();
            }
            else input.next();
        }
        System.out.print("学生成绩分别为");
        //打印学生为排名成绩
        for(int i = 0;i < num;i++){
            System.out.print(" " + arr[i]);
        }
        try{
            //复制"student.txt"内容并粘贴到新文件"newDemo.txt"中
            FileReader fr = new FileReader("student.txt");
            FileWriter fw = new FileWriter("newDemo.txt");
            int ch;
            while((ch = fr.read()) != -1){
                fw.write(ch);
            }
            fr.close();
            fw.close();
            //保证在"newDemo.txt"新添加的内容不覆盖原来的内容
            FileOutputStream fos = new FileOutputStream("newDemo.txt",true);
            fos.write(sort(arr).getBytes());
            fos.close();//关闭文件流
        }catch(IOException ex){
            System.out.println("无法打开文件!");
        }
    }
    
    //将学生成绩进行排序
    public static String sort(double score[]){
        int i;
        String str = "\r\n成绩排名为: ";
        for(i = num - 2;i >= 0;i--){
            for(int j = 0;j <= i;j++){
                if(score[j] < score[j+1]){
                    double temp;
                    temp = score[j];
                    score[j] = score[j+1];
                    score[j+1] = temp;
                }
            }
        }
        for(int n = 0;n < num;n++){
            str += score[n] + " ";
        }
        return str;
    }
}

程序运行成功后创建的"newDemo.txt"文本:

ACM/ICPC比赛成绩会按照一定的规则计算各位参赛者的名次并实时显示排行榜,计算规则主要参考解题的数量及罚时,解题数量越多,罚时越少,则排名越高。 解题数量很容易计算,只需考察比赛中标记为“Accepted”的题数即可。罚时计算则相对复杂,对于提交到竞赛系统中的每道题目,系统会给出一个罚时,为从比赛开始到该题提交的代码第一次被“Accepted”的时间。请注意,只是第一次“Accepted”。对于“Accepted”之前的每次提交,都有20分钟的罚时,但如果该题目最终未解出,则不计罚时。 先在有一个比赛的题目通过情况记录,请生成该比赛的排行榜。 示例输入: 2008-04-25 18:00:00 2008-04-25 23:30:00 1000 1001 1002 1003 1004 38 602203621 1002 Accepted 756K 30MS C++ 2008-04-25 18:04:59 37 liheyuan 1002 Wrong_Answer 768K 10MS C++ 2008-04-25 18:28:05 36 ftest 1000 Accepted 888K 10MS C++ 2008-04-25 21:30:32 35 ftest 1000 Accepted 904K 10MS C++ 2008-04-25 21:30:55 34 gaojianwei 1000 Accepted 768K 10MS C 2008-04-25 22:15:58 33 gaojianwei 1001 Wrong_Answer 904K 10MS C 2008-04-25 22:18:01 32 gaojianwei 1004 Accepted 768K 10MS C 2008-04-25 22:24:23 31 lzz 1000 Accepted 904K 10MS C++ 2008-04-25 23:29:27 30 lzz 1001 Wrong_Answer 904K 10MS C++ 2008-04-25 23:30:17 示例输出: Rank Name Solved 1000 1001 1002 1003 1004 Penalty 1 gaojianwei 2 4:15:58 -1 0 0 4:24:23 8:40:21 2 602203621 1 0 0 0:04:59 0 0 0:04:59 3 ftest 1 3:30:32 0 0 0 0 3:30:32 4 lzz 1 5:29:27 0 0 0 0 5:29:27 5 liheyuan 0 0 0 -1 0 0 0:00:00
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值