第三次作业总结
一·前言
本次包含三次作业:课程成绩统计程序1.0 课程成绩统计程序2.0 课程成绩统计程序3.0
在经历了数个星期的总结,沉淀之后,这个作业仍旧差的一批无法言语,对此,我做出了以下总结:
课程成绩统计程序1.0
1、输入:
包括课程、课程成绩两类信息。
2、输出:
输出包含三个部分,包括学生所有课程总成绩的平均分、单门课程成绩平均分、单门课程总成绩平均分、班级所有课程总成绩平均分。
参考类图如下:

课程成绩统计程序2.0
在第一次的基础上增加了实验课
参考类图同上
课程成绩统计程序3.0
在第二次的基础上修改了计算总成绩的方式,
要求:修改类结构,将成绩类的继承关系改为组合关系,成绩信息由课程成绩类和分项成绩类组成,课程成绩类组合分项成绩类,分项成绩类由成绩分值和权重两个属性构成。
参考类图同上
二·设计
1.课程成绩统计程序1.0
思路:设计学生类,属性有学号String snum,姓名String sname,总课程平均分double p;课程类,属性有boolean isT是否必修,课程名称String name,课程考察方式int num(1为考试,2为考察);成绩类,属性有Student student学生类对象,Course course课程类对象,平时成绩double p,考试成绩double k;班级类,属性有String gnum班级名称,ArrayList<Student> students学生类对象集合。
创建错误信息字符串集合、输入信息字符串集合、学生类对象集合、课程类对象集合、成绩类对象集合、班级类对象集合、创建Scanner对象。使用NextLine方法进行输入。使用while循环设置为死循环进行输入每一行的数据,输入后使用equals判断是否为end,如果为end则退出循环,否则将添加后的信息添加到输入信息字符串集合中。
循环遍历输入信息集合字符串集合,对其中每一个信息都使用split方法进行分割成字符串数组。使用if-elseif选择结构进行分别处理数据,判断条件为字符串数组的长度,当数组长度小于等于3的时候输入的是课程的信息,进行课程信息的处理,数组长度大于3的时候输入的成绩的信息,进行成绩信息的处理。
课程信息处理,由于有输入信息考试可选输入,所以要分开为长度为2和长度为3的分别处理,长度为2的要确保为考试才可,长度为3的直接进行正常的校验处理,处理完成后添加进课程类对象集合中,校验不符合就使用continue退出该次循环进行下一次。
成绩信息处理,分为数组长度为4和数组长度为5的进行处理,长度为4的是考察只有平时成绩,长度为5的是考试有这考试成绩和平时成绩,进行校验后添加到成绩类对象集合中,校验不符合就使用continue退出该次循环进行下一次。
循环遍历学生类对象集合和班级类对象集合,使用冒泡排序进行处理,使得符合要求;遍历课程类对象集合,将其课程名都加入到一个数组中,然后创建一个Comparator对象,Comparator comp = Collator.getInstance(java.util.Locale.CHINESE);根据中文字符循序进行排序,然后在遍历整个数据将对应的课程对象添加到一个新的集合中。
遍历输出排序后的学生类对象集合、课程类对象集合、班级类对象集合,按要求进行计算和输出对应的信息。
类图:

2.课程成绩统计程序2.0
思路:设计学生类,属性有学号String snum,姓名String sname,总课程平均分double p;课程类,属性有int isT课程类型(1必修,2选修,3实验),课程名称String name,课程考察方式int num(1为考试,2为考察,3为实验);成绩类,属性有Student student学生类对象,Course course课程类对象,平时成绩double p,考试成绩double k;班级类,属性有String gnum班级名称,ArrayList<Student> students学生类对象集合。
创建错误信息字符串集合、输入信息字符串集合、学生类对象集合、课程类对象集合、成绩类对象集合、班级类对象集合、创建Scanner对象。使用NextLine方法进行输入。使用while循环设置为死循环进行输入每一行的数据,输入后使用equals判断是否为end,如果为end则退出循环,否则将添加后的信息添加到输入信息字符串集合中。
循环遍历输入信息集合字符串集合,对其中每一个信息都使用split方法进行分割成字符串数组。使用if-elseif选择结构进行分别处理数据,判断条件为字符串数组的长度,当数组长度小于等于3的时候输入的是课程的信息,进行课程信息的处理,数组长度大于3的时候输入的成绩的信息,进行成绩信息的处理。
课程信息处理,由于有输入信息考试可选输入,所以要分开为长度为2和长度为3的分别处理,长度为2的要确保为考试才可,长度为3的直接进行正常的校验处理,根据输入的信息,生成对应的课程类对象,设定好对应的值,处理完成后添加进课程类对象集合中,校验不符合就使用continue退出该次循环进行下一次。
成绩信息处理,分为数组长度为4、数组长度为5还有长度大于5的进行处理,长度为4的是考察只有平时成绩,长度为5的是考试有这考试成绩和平时成绩,长度大于5的是实验的成绩,在成绩处理的时候直接将其根据要求称出成绩然后添加到p上,进行校验后添加到成绩类对象集合中,校验不符合就使用continue退出该次循环进行下一次。
循环遍历学生类对象集合和班级类对象集合,使用冒泡排序进行处理,使得符合要求;遍历课程类对象集合,将其课程名都加入到一个数组中,然后创建一个Comparator对象,Comparator comp = Collator.getInstance(java.util.Locale.CHINESE);根据中文字符循序进行排序,然后在遍历整个数据将对应的课程对象添加到一个新的集合中。
遍历输出排序后的学生类对象集合、课程类对象集合、班级类对象集合,按要求进行计算和输出对应的信息。
类图:

3.课程成绩统计程序3.0
思路:设计学生类,属性有学号String snum,姓名String sname,总课程平均分double p;课程类,属性有int isT课程类型(1必修,2选修,3实验),课程名称String name,课程考察方式int num(1为考试,2为考察,3为实验),每次实验的成绩权值ArrayList<Double> doubles =new ArrayList<Double>();;成绩类,属性有Student student学生类对象,Course course课程类对象,平时成绩double p,考试成绩double k;班级类,属性有String gnum班级名称,ArrayList<Student> students学生类对象集合。
创建错误信息字符串集合、输入信息字符串集合、学生类对象集合、课程类对象集合、成绩类对象集合、班级类对象集合、创建Scanner对象。使用NextLine方法进行输入。使用while循环设置为死循环进行输入每一行的数据,输入后使用equals判断是否为end,如果为end则退出循环,否则将添加后的信息添加到输入信息字符串集合中。
循环遍历输入信息集合字符串集合,对其中每一个信息都使用split方法进行分割成字符串数组。使用if-elseif选择结构进行分别处理数据,判断条件为字符串数组第一个元素是否为数字,是数字的就是学号是成绩信息,不是数字的话就是课程信息处理。
课程信息处理,根据课程的类型进行分别处理,是考察则直接校验,是考试则需要把考试权重和平时权重添加到对象的权重集合中,是实验就将每次的权重添加到对象权重集合中,根据输入的信息,生成对应的课程类对象,设定好对应的值,处理完成后添加进课程类对象集合中,校验不符合就使用continue退出该次循环进行下一次。
成绩信息处理,分为数组长度为4、数组长度为5还有长度大于5的进行处理,长度为4的是考察只有平时成绩,长度为5的是考试有这考试成绩和平时成绩,考试要遍历课程对象的权重集合然后将其对应乘出成绩添加到p和k上,长度大于5的是实验的成绩,在成绩处理的时候直接将其根据要求遍历课程的权重然后乘出成绩然后添加到p上,进行校验后添加到成绩类对象集合中,校验不符合就使用continue退出该次循环进行下一次。
循环遍历学生类对象集合和班级类对象集合,使用冒泡排序进行处理,使得符合要求;遍历课程类对象集合,将其课程名都加入到一个数组中,然后创建一个Comparator对象,Comparator comp = Collator.getInstance(java.util.Locale.CHINESE);根据中文字符循序进行排序,然后在遍历整个数据将对应的课程对象添加到一个新的集合中。
遍历输出排序后的学生类对象集合、课程类对象集合、班级类对象集合,按要求进行计算和输出对应的信息。
类图:

三·所需改进以及期待
改进:
1.勤于练习,不能只看这一次的作业,自己也要从别的方向吸收知识和习题,菜单的程序尽量写到满分。
2.充分利用时间,主动积极学习,对上课和自学的知识反复琢磨。
3.反复理解作业,将作业中的重点知识理解清楚。
4.上课认真听讲充分理解,课堂作业能写还是积极交作业。
期待:随着题目越来越难,希望有时间自己多加练习,能够避免一些本不该出现的愚蠢问题,
多利用碎片化时间进行学习,拒绝摆烂。

浙公网安备 33010602011771号