Blog3
一、前言
这是我Java六、七、八次大作业的总结,思考和一些其他的想法。
这几次作业和以前的不同是,除了课程成绩的系列外,还增加了一些其他的小题目用来学习和巩固JAVA编程语言的知识。这几周学到了许多,做的题目中有不满意的地方,我做了一些改进,虽然现在提交入口已经关闭,但我还是对这几周做过的题目仔细思考回味了一下,有一些想法心得,下面的代码是改进后的代码,增添了一些注释,第二板块中的设计与分析是我对之前作业和我写出代码和设计的一些思考。总体来说,最近三次pta的主要知识点还是在设计类和学习java语言,以及用面向对象的思维方式。对只接触过一点java语言的我们还是很有挑战的。最近三次pta作业虽然题类似,但是难度较大,这三次作业不再是菜单的设计,而是改为学生成绩的统计,但还是有很多类的调用,还有很多读取和输出的变化,十分复杂,还需要使用很多函数,要有继承和传参,对我来说确实较为困难。
我析取上次互评博客的经验,我这次把题目用图片形式表示。
二、设计与分析


对题目的思考、分析与设计:


首先创建一个Course类用于存储课程的信息,包括课程名称、性质、考核方式和成绩等。 创建一个Student类用于存储学生的信息,包括学号、姓名和所选的课程及成绩信息。创建一个班级类用于存储班级的信息,包括班级号和班级内学生的成绩信息。创建一个成绩管理系统的类,用于解析输入的数据、计算成绩和生成输出结果。
在成绩管理系统类中,首先读取输入的课程信息,创建课程对象,并将其存储在一个课程列表中。接着读取输入的成绩信息,创建学生对象,并将其存储在一个学生列表中。同时,根据成绩信息更新课程对象中的成绩信息。根据输入的成绩数量和课程的考核方式进行匹配,并根据计算公式计算每个学生的总成绩。根据学生的总成绩进行排序,并生成学生总成绩的输出结果。计算每门课程的平时成绩平均分、期末考试平均分和总成绩平均分,并生成课程成绩的输出结果。
根据班级号对学生进行分类,并计算班级所有课程总成绩的平均分。生成班级总成绩平均分的输出结果。捕获并处理输入格式错误的异常情况,并输出"wrong format"。捕获并处理课程名称不在已输入的课程列表中的异常情况,并输出相应的结果。捕获并处理输入的成绩数量和课程的考核方式不匹配的异常情况,并输出相应的结果。捕获并处理输入的课程性质和课程的考核方式不匹配的异常情况,并输出相应的结果。输出最终的结果。
定义一个课程类(Course),包含课程名称、课程性质、考核方式以及成绩列表。定义一个学生类(Student),包含学号、姓名以及课程成绩列表。定义一个班级类(Class),包含班级号以及学生列表。定义一个成绩管理类(GradeManager),负责处理输入输出和进行成绩计算。在GradeManager类中,定义一个成绩解析函数(parseGrades)用于解析输入的成绩信息,并将成绩信息存储在课程对象和学生对象中。
在GradeManager类中,定义一个成绩计算函数(calculateGrades)用于计算各种平均分值,包括学生所有课程总成绩的平均分、单门课程成绩平均分、单门课程总成绩平均分、班级所有课程总成绩平均分。在GradeManager类中,定义一个成绩输出函数(outputGrades)用于按照要求输出成绩信息。在主函数中,实例化一个GradeManager对象,并调用parseGrades函数解析输入的成绩信息。然后调用calculateGrades函数计算各种平均分值,最后调用outputGrades函数输出成绩信息。
另外,为了满足输入的约束,可以在解析过程中进行错误的检查,并输出相应的错误信息。例如,对于输入课程信息时,可以检查课程性质和考核方式是否匹配;对于解析成绩信息时,可以检查课程名称是否在已输入的课程列表中,并检查成绩数量和考核方式是否匹配等。

对题目的思考、分析与设计:


首先,需要创建一个Course类来表示课程,该类包含课程名称、课程性质和考核方式等属性。同时,还需要在该类中定义方法来计算课程成绩的平均分。
接下来,要创建一个Student类来表示学生,该类包含学号、姓名和成绩等属性。可以在该类中定义方法来计算学生所有课程总成绩的平均分。
然后,创建一个GradesManager类来管理成绩信息。在该类中,可以定义方法来解析输入的成绩信息,并将其存储在合适的数据结构中。同时,还可以在该类中定义方法来计算单门课程成绩平均分和班级所有课程总成绩平均分,并按要求输出结果。
最后,可以在Main类中编写程序入口,从标准输入读取数据,并调用GradesManager类中的方法来进行成绩统计。
我要使用一个HashMap保存已输入的课程信息,键为课程名称,值为课程对象。
使用一个HashMap保存班级信息,键为班级号,值为班级对象。
读取输入信息,并根据输入类型进行处理:
如果是课程信息,则创建课程对象,并将其保存至课程信息的HashMap中。
如果是考试或考察成绩信息,则创建成绩对象,并将其添加至成绩列表。
如果是实验成绩信息,则计算实验总成绩,创建成绩对象,并将其添加至成绩列表。
如果输入结束,计算各种平均分并输出结果:
对成绩列表根据学号排序,并逐个计算每位学生的总成绩平均分,并输出。
对课程列表根据课程名称排序,并逐个计算各种平均分,并输出。
对班级列表根据班级号排序,并逐个计算班级总成绩平均分,并输出。
还有:在处理成绩信息时,需要进行多种判断,如课程是否存在、成绩数量是否匹配、课程性质和考核方式是否匹配,以及输入格式是否正确等。
在计算平均分时,需要注意整数除法,即除法结果需要进行取整操作。
需要按照题目要求对输入信息进行解析和处理,包括错误信息的输出。
可以使用各种数据结构来存储课程、成绩和班级信息,以便进行统计和排序。

对题目的思考、分析与设计:


定义一个Course类,包含课程名称、课程性质、考核方式、分项成绩数量和每个分项成绩的权重。定义一个Grade类,包含学号、姓名、课程名称、平时成绩、期末成绩和实验成绩。定义一个Student类,包含学号、姓名和成绩列表。定义一个Classroom类,包含班级号和学生列表。
根据输入的课程信息,创建课程对象,并将其存储在一个课程列表中。 根据输入的成绩信息,创建成绩对象,并将其存储到学生列表对应的学生对象中。根据学生列表和课程列表,计算并输出学生所有课程总成绩的平均分,单门课程总成绩平均分和班级所有课程总成绩平均分。
创建一个空列表`courses`来存储课程对象。创建一个空列表`students`来存储学生对象。通过循环来读取输入,分析课程和成绩信息。如果输入以"end"结尾,则跳出循环。
否则,进一步处理输入字符串。对于课程信息,使用`split`函数根据空格拆分字符串,并从拆分结果中提取课程名称、课程性质、考核方式、分项成绩数量和每个分项成绩的权重。如果课程性质和考核方式不匹配,则输出错误信息并继续下一个输入。
如果是实验课程,则还需要处理分项成绩的权重值。创建一个Course对象,并将其添加到课程列表`courses`中。对于成绩信息,使用`split`函数根据空格拆分字符串,并使用拆分结果提取学生信息和成绩。
如果课程名称不存在于课程列表`courses`中,则输出错误信息并继续下一个输入。如果输入的成绩数量和课程的考核方式不匹配,则输出错误信息并继续下一个输入。解析学生信息,并创建一个Grade对象来存储成绩信息。将Grade对象添加到对应学生对象的成绩列表中。 分别计算并输出学生所有课程总成绩的平均分、单门课程总成绩平均分和班级所有课程总成绩平均分。对学生列表中的每一个学生对象进行循环。
对每个学生的成绩列表进行循环,计算总成绩。 输出学生的学号、姓名和总成绩平均分,并按学号从低到高排序。输出课程名称和总成绩平均分,并按课程名称的字符顺序排序。 输出班级号和总成绩平均分,并按班级号从低到高排序。
需要注意处理异常情况,并输出相应的错误信息。
在计算总成绩时,保留小数位,然后舍弃小数部分,只保留整数部分。于学生和课程的排序,可以使用Python的`sort()`函数和`lambda`表达式进行排序。 可以使用字典和集合来快速查找课程和学生。在输出时,需要注意按照要求的格式进行输出。
三、思考与心得
这几周的题目有些我做的不尽如人意,一个困难是写出来的程序总是编译不过去,有时候会出一些很奇怪的报错,找不到原因在哪,我用了IDEA,但有时候就是找不到出错原因在哪,不知道为什么编译不过去,可能有结构上的问题,另外一个困难是有时候不知道该怎么实现题目要求的功能,不知道怎么办,题目要求的功能用代码实现出来,并与以前的代码相契合,我经常会加了某一个功能之后就代码运行不了,要么是编译错误,要么是逻辑错误。好在现在我已经优化了一些地方,弥补了一些遗憾,正如上面展示的代码和分析一样。
我觉得产生以上问题的主要原因应该是我对应用JAVA编程不够熟练,各种语法不能够全面的了解,熟练的运用。
在日常编码中,充分利用Java自带的函数库可以使我们更加高效地解决一些问题,避免不必要的麻烦,并且让我们的代码更具优雅性。因此,我们需要注重学习Java标准库中提供的各种方法和类,这些方法和类通常都有详细的文档说明,对于快速解决实际应用问题非常有帮助。最终,我们应该力求让自己的代码既能表达自己的意图,又能为其他人所理解,这也是一个好的编程习惯。
为了写出易于阅读和维护的代码,我们需要关注命名规范,并且在对类名、对象名取名以及注释时都要遵循见名知意的原则。特别是在编写大型程序时,这一点更加重要,因为你可能会忘记前面写过什么。Java 自带了丰富的类库,它们实现了许多常用的功能并提供了方便的接口,使得我们在解决问题时能够更轻松地应对。通过熟练使用这些库,我们可以提高编程效率,将精力集中在核心算法和程序逻辑上,避免不必要的重复劳动。最终,一个好的编码习惯包括了良好的标识符和注释以及牢牢掌握了相关的 Java 类库,这样我们才能写出简洁明了、易于维护的解决方案。
为使我们的代码更加易读易维护,我们需要在对类名、对象名的取名以及注释中注重见名知义的原则。这一点会变得更加明显,尤其是当我们写了很长的代码后,回忆前面写的内容也会变得困难。Java语言提供了许多文档和类库,通过熟练掌握这些文档和库函数,既可以减少不必要的工作量,又可以提高代码效率和质量,让我们的代码更加整洁易懂。
四、总结
总的来说,这几周的题目对我来说有挑战性,从中我认识到了自己的不足,也学会了很多知识,我要更努力的在java这上方面下功夫。
编写易于阅读和维护的代码是每个程序员的目标之一。对于命名规范和见名知意原则的注重,有助于构建清晰的代码结构,并且在后续的修改或升级中能够轻松地理解和操作。Java 标准库中提供的各种类和方法不仅能实现基本功能,还具有高效和安全等优点,对于大多数场景都有适配的解决方案。因此,在编写任何代码之前,我们应该充分利用 Java 库中所提供的这些资源,尤其是在面临繁琐问题和复杂逻辑时更应密切关注。最终,良好的编程习惯包括了规范明确的标识符和注释,充实的掌握 Java 类库,以及对每一个行为进行精益求精的努力,这样我们才能构建出更加完善的程序。

浙公网安备 33010602011771号