【Java】FileUtils综合难题3

期末考试结束了,现在根据四个阶段分数对所有学生进行分班。
四个阶段所有的学生成绩都已经分别保存到:

第一阶段考试成绩.txt
期中考试成绩.txt
第三阶段考试成绩.txt
期末考试成绩.txt

所有学生的编号、姓名、性别、班级、生日已经保存到:
学生登记表.txt

1、定义一个方法run1,方法内要求把每个人所有信息(编号、姓名、性别、班级、生日、四个阶段的成绩)从文件中读取,并且保存起来。(保存为静态成员变量)
   要求五个txt文件的所有数据,最终保存进一个集合中。
   提示:定义学生Student类
        编号:sid
    姓名:sname
    性别:sex
    班级:cname
    生日:birthday
    四个阶段的成绩:slist
    最终成绩:score
   注意:如果某个阶段考试没有某同学成绩,说明该同学那次阶段考试缺考,无成绩(缺考必须用null表示)

2、定义一个方法run2,方法内要求:计算每个人的最终成绩,展示并保存起来,
   最终成绩 = (四次成绩总和)/4
   某次阶段考缺考一次: (三次成绩总和)/3
   某两次阶段考缺考:   (两次成绩总和)/2

真实缺考人数如下:(以下仅供做题参考,禁止硬编码到题目中)
    第一阶段考试成绩:s95缺考
    第一阶段考试成绩:s135缺考
    期中考试成绩:s84缺考
    期中考试成绩:s157缺考
    第三阶段考试成绩:s14缺考
    第三阶段考试成绩:s69缺考
    第三阶段考试成绩:s149缺考
    第三阶段考试成绩:s168缺考
    期末考试成绩:s83缺考
    期末考试成绩:s173缺考


3、定义一个方法run3,方法内进行分班和分别数据保存:
   已知现在有"一班","二班","三班","四班"四个班级,
    其中: 名次 1-60 进入 一班(60人)
          名次 61-120 进入 二班(60人)
          名次 121-170 进入 三班(50人)
          名次 171-200 进入 四班(30人)
   请将四个班的分班数据分别保存进对应的txt文件中:
    一班.txt
    二班.txt
    三班.txt
    四班.txt

   保存的数据格式:学生编号,学生姓名,学生最终成绩,学生名次
   注意:一个人一行信息。

4、定义一个方法run4,方法内读取第三题生成的txt数据文件,并计算原一班、原二班、原三班、原四班,考入新一班、新二班的总入班率,并计算出原几班的 新一班、新二班总入班率 最高,展示控制台
    总入班率计算公式= 原班级考入新一、二班人数/120
    示例(该结果非真实结果):
        原一班,考入新一班、新二班的总入班率:10%
        原二班,考入新一班、新二班的总入班率:5%
        原三班,考入新一班、新二班的总入班率:35%
        原四班,考入新一班、新二班的总入班率:50%
        原四班,新一班、新二班总入班率最高

5、定义一个方法run5,方法内读取第三题生成的txt数据文件,计算新一、二、三、四班的平均分,并计算两班差值:
    新一班平均分:90分
    新二班平均分:80分
    新三班平均分:70分
    新四班平均分:50分

    一、二班差值:10分
    二、三班差值:10分
    三、四班差值:20分


6、定义一个方法run6,方法内读取第三题生成的txt数据文件,对宿舍进行重新分派:
    宿舍分派要求:
        ①、
        新一班宿舍楼层2层
        新二班宿舍楼层3层
        新三班宿舍楼层4层
        新四班宿舍楼层5层
        ②、男生一个宿舍,女生一个宿舍(禁止混宿)
        ③、A栋、B栋随机分派楼号和宿舍号,已经分派过的宿舍不能重复分派
            例如:A221已经被分派,A221就不能被重复分派
            例如:A221已经被分派,B221因为不是同一个宿舍,不影响分派
        ④、每层宿舍号20~50(包含20和50)
        ⑤、一个班的学生尽可能一个宿舍,如果某宿舍人数不足,可以和其他班同性别学生混宿,但不能差班太多。
           例如:一个宿舍可以1、2班同宿 或2、3班同宿 或3、4班同宿
           例如:某宿舍分配了1个一班同学,一班同学不足,可以进驻3个二班同学(禁止差班进驻二班、三班、四班同学)

   最终将分配宿舍情况保存到“宿舍分派表.txt”中
        例如:
        A221宿舍:
        s01,张三,男,一班
        s02,李四,男,一班
        s03,王五,男,一班
        s04,赵六,男,一班
        A249宿舍:
        s11,小小,男,一班
        s12,大大,男,一班
        s13,菲菲,男,一班
        s15,舅舅,男,二班

7、定义一个方法run7,方法内求出新一、二、三、四班每个班级的平均年龄,并展示
    新一班,平均年龄:22岁
    新二班,平均年龄:23岁
    新三班,平均年龄:22岁
    新四班,平均年龄:22岁

8、定义一个方法run8,方法内求出所有班级的每个月的过生日的寿星(当月无人生日即为无),
最终保存为生日.txt文件
保存格式为:新班级名,姓名,生日

    例如:
        一月寿星:
        一班,小张,1999/01/28
        三班,小米,1998/01/20
        二月寿星:
        三班,小w,1998/02/20
        .....
        十一月寿星:
        无
        十二月寿星:
        无

======================================================
生成题目数据的代码:
/*
    * 生成考试数据
    * */
    public static void run1(String fileName,String title) throws IOException {
        //1、定义StringBuilder对象
        StringBuilder builder = new StringBuilder();
        //2、填写题目
        builder.append(title+"\r\n");
        //3、生成随机分数
        Random r = new Random();
        for (int i = 1; i <=200 ; i++) {
            //随机缺考:
            if(i!=200 && r.nextInt(100)==0){
                System.out.println(title+":"+"s"+(i<10?"0"+i:i)+"缺考");
                continue;
            }
            builder.append("s"+(i<10?"0"+i:i)+",");
            builder.append(r.nextInt(101));
            if(i!=200){
                builder.append("\r\n");
            }
        }
        //4、输出文件
        FileUtils.writeStringToFile(new File("综合测试题3\\"+fileName),builder.toString(),"utf-8");
    }

    //生成每个人的编号、姓名、性别、班级、生日
    public static void run2() throws IOException {
        //1、定义姓名字典
        String str = "致远雨泽烨磊文昊修洁黎昕远航旭尧鸿涛伟祺荣轩越泽浩宇瑾瑜皓轩擎苍擎宇志泽子轩睿渊弘文哲瀚雨泽楷瑞建辉晋鹏天磊绍辉鑫磊泽洋鹏" +
                "煊昊强伟宸博超君浩子骞鹏涛炎彬鹤轩越彬风华靖琪明辉伟诚明轩健柏修杰志泽弘扬峻熙嘉懿城懿轩烨伟苑博伟泽熠彤鸿煊博涛烨霖烨华煜祺智宸正豪昊然明杰立诚立辉鸿煊烨霖哲瀚鑫鹏鑫昊天思聪展鹏笑愚志强炫明雪松思源智渊晓啸天宇浩然文轩鹭洋振家乐驹晓博立果金鑫锦程嘉熙鹏飞子默思远浩轩语堂忆柳之桃慕青问兰尔岚元香初夏沛菡傲珊曼文乐菱痴珊恨玉惜";
        //2、定义班级字典
        String[] carr = {"一班","二班","三班","四班"};
        //3、定义随机数对象
        Random r = new Random();
        //定义StringBuilder进行拼接
        StringBuilder builder = new StringBuilder();
        builder.append("传智专修学院-软件工程系-XX方向学生信息登记表\r\n");
        //定义日期格式化类
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        //4、遍历生成数据
        for (int i = 1; i <=200 ; i++) {
            //编号
            builder.append("s"+(i<10?"0"+i:i)+",");
            //姓名
            builder.append(""+str.charAt(r.nextInt(str.length()))+str.charAt(r.nextInt(str.length()))+",");
            //性别
            builder.append((r.nextInt(2)==0?"男":"女")+",");
            //班级
            builder.append(carr[r.nextInt(carr.length)]+",");
            //生日
            Calendar c = Calendar.getInstance();
            c.set(Calendar.YEAR,1997);
            c.add(Calendar.DAY_OF_MONTH,r.nextInt(1095));
            builder.append(sdf.format(c.getTime()));
            if(i!=200){
                builder.append("\r\n");
            }
        }
        FileUtils.writeStringToFile(new File("综合测试题3\\学生登记表.txt"),builder.toString(),"utf-8");
    }
    public static void main(String[] args) throws IOException {
        run1("第一阶段考试成绩.txt","第一阶段考试成绩");
        run1("期中考试成绩.txt","期中考试成绩");
        run1("第三阶段考试成绩.txt","第三阶段考试成绩");
        run1("期末考试成绩.txt","期末考试成绩");
        run2();
    }
 

posted @ 2022-11-09 08:10  陶然同学  阅读(10)  评论(0编辑  收藏  举报