【Java】FileUtils综合难题3

简介: 【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();
    }
相关文章
|
Java
【Java】FileUtils练习题3
【Java】FileUtils练习题3
92 0
|
Java BI
【Java】FileUtils练习题2
【Java】FileUtils练习题2
105 0
|
Java
【Java】FileUtils练习题
【Java】FileUtils练习题
99 0
|
安全 Java Unix
【小家java】Java之Apache Commons-IO使用精讲(FileUtils、IOUtils、FileFilter全覆盖)(上)
【小家java】Java之Apache Commons-IO使用精讲(FileUtils、IOUtils、FileFilter全覆盖)(上)
【小家java】Java之Apache Commons-IO使用精讲(FileUtils、IOUtils、FileFilter全覆盖)(上)
|
Java API Apache
Java - 使用 FileUtils 简化文件操作
Java - 使用 FileUtils 简化文件操作
349 0
|
安全 Java Unix
【小家java】Java之Apache Commons-IO使用精讲(FileUtils、IOUtils、FileFilter全覆盖)(下)
【小家java】Java之Apache Commons-IO使用精讲(FileUtils、IOUtils、FileFilter全覆盖)(下)
|
Java Apache
Java IO流学习总结七:Commons IO 2.5-FileUtils
Java IO流学习总结七:Commons IO 2.5-FileUtils 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/54972773 本文出自【赵彦军的博客】 在上面的几篇文章中,介绍了IO的常规用法,今天介绍Commons IO框架的使用。
1092 0
|
10天前
|
安全 Java
java 中 i++ 到底是否线程安全?
本文通过实例探讨了 `i++` 在多线程环境下的线程安全性问题。首先,使用 100 个线程分别执行 10000 次 `i++` 操作,发现最终结果小于预期的 1000000,证明 `i++` 是线程不安全的。接着,介绍了两种解决方法:使用 `synchronized` 关键字加锁和使用 `AtomicInteger` 类。其中,`AtomicInteger` 通过 `CAS` 操作实现了高效的线程安全。最后,通过分析字节码和源码,解释了 `i++` 为何线程不安全以及 `AtomicInteger` 如何保证线程安全。
java 中 i++ 到底是否线程安全?
|
1天前
|
安全 Java 测试技术
Java并行流陷阱:为什么指定线程池可能是个坏主意
本文探讨了Java并行流的使用陷阱,尤其是指定线程池的问题。文章分析了并行流的设计思想,指出了指定线程池的弊端,并提供了使用CompletableFuture等替代方案。同时,介绍了Parallel Collector库在处理阻塞任务时的优势和特点。