第一次Blog作业
题目集1~3的总结性Blog
前言:
(因为该文主要为在学习面对对象程序时的总结和体会,所以笔者采用随笔的形式发布。)
总结题目集
第一次题目集
(这个编程任务要求实现一个相对复杂的系统,涉及多个方面的知识点,对编程者的综合能力有一定的要求。有一说一,初学者一开始就要进行该体量的编程,而且有不少知识都需要额外自学,难度较高。个人感觉是吃不消的。)
1.知识点:
输入/输出处理:程序需要能够读取和解析特定格式的输入,并能够以特定格式输出结果。
字符串处理:程序需要解析包含特定标识符(如"#N:", "#Q:", "#A:")的字符串,并从中提取相关信息。
数据结构:可能需要使用字典、列表或其他数据结构来存储题目信息、答案和判题结果。
逻辑判断:程序需要根据输入的标准答案来判断用户的答题结果是否正确。
循环和条件语句:在处理多个题目和答案时,需要使用循环结构;在判断答案是否正确时,需要使用条件语句。
2.题量:
题目数量是可变的,由用户输入决定。
答题信息的数量与题目数量相等。
3.难度:
虽然个人感觉较难,但是客观来说该题属于中等难度:程序需要处理多种格式的输入,解析并存储题目信息和答案,最后还需要进行逻辑判断。这要求编程者具有一定的编程基础,能够处理字符串、使用数据结构和控制流语句。
4.注意:
输入格式较为特殊,需要仔细解析字符串以获取所需信息。
题目数量、题目内容和答题信息是分开输入的,需要妥善管理和匹配这些信息。
判题结果的输出顺序需要与答题信息的输入顺序相对应。
第二次题目集
(第二次题目集在第一次题目集的基础上添加了新的要求,个人明显感觉上强度了,需要创建新的类来满足题目要求,开始逐渐向本课课题面对对象程序靠齐。)
1.知识点:
输入/输出处理:与第一次题目集相似,程序需要能够读取和解析特定格式的输入,并能够以特定格式输出结果。
字符串处理:需要解析包含特定标识符(如"#N:", "#Q:", "#A:", "#T:", "#S:"等)的字符串,提取相关信息。
数据结构:需要使用字典、列表或其他数据结构来存储题目信息、试卷信息、答案和判题结果。此外,可能需要设计专门的类来管理这些信息。
逻辑判断与条件语句:在判断答案是否正确以及计算得分时,需要使用条件语句。
异常处理:对于输入格式错误或试卷号不存在等情况,需要进行适当的异常处理。
面向对象编程:题目建议增加答题类,这需要理解面向对象编程的概念,包括类、对象、属性和方法等。
2.题量:
题目数量、试卷数量和答题数量都是可变的,由用户输入决定。
需要处理多种信息类型(题目信息、试卷信息、答题信息等),每种信息可能有多条记录。
3.难度:
高:相比第一次题目集,第二次题目集需要处理更复杂的逻辑和更多的数据类型。特别是需要设计并实现一个答题类,并管理不同类之间的关联。此外,还需要处理各种异常情况,如试卷总分不为100的警示、答案缺失或试卷号不存在等。这些要求都增加了编程的难度。
4.注意:
输入格式更加复杂,需要仔细解析字符串以获取所需信息。
题目信息、试卷信息和答题信息是分开输入的,需要妥善管理和匹配这些信息。
判题结果和得分的输出顺序需要与输入信息的顺序相对应。
需要考虑多种异常情况和边界条件,确保程序的健壮性和准确性。
第三次题目集
(这回是真的上强度哩,直接给我干趴了。题目要求更加复杂,要考虑许多不同情况,这是新手写的题目???(个人吐槽))
1.知识点:
输入/输出处理:程序需要读取特定格式的输入,并能够以特定格式输出结果。
字符串处理:解析包含特定标识符的字符串,提取题目编号、内容、标准答案,试卷信息,学生信息,答卷信息和删除题目信息。
数据结构:使用字典、列表或其他数据结构来存储和管理题目信息、试卷信息、学生信息和答卷信息。
逻辑判断:判断答案是否正确,以及根据试卷信息和学生答卷进行计分。
异常处理:对于输入格式错误、试卷号或学号不存在、题目被删除等异常情况进行处理。
2.题量:
题目数量、试卷数量、学生数量和答卷数量都是可变的,由用户输入决定。
3.难度:
必须是非常高:程序需要处理复杂的输入格式,管理多种数据类型(题目、试卷、学生和答卷信息),实现判题逻辑,并处理各种异常情况。此外,还需要设计合理的数据结构来存储和检索信息,这增加了编程的复杂性。
4.注意:
判题结果和得分的输出顺序需要与输入信息的顺序相对应。
删除题目信息的处理:需要实现一个机制来标记和识别被删除的题目,并在判题时给予相应的处理(计0分)。
多种异常情况的提示信息:根据题目要求,需要为各种异常情况提供准确的提示信息,如试卷总分不为100、题目被删除、题目引用错误、学号引用错误等。
优先级处理:在多种异常情况同时出现时,需要根据题目要求的优先级进行处理和提示。
设计与分析
第一、二次作业难度适中,本人设计了四个类(包括主类),关系如下:

详细代码如图(仅列出部分代码):




第三次作业的题目难度明显增大,程序需要处理复杂的输入格式,管理多种数据类型(题目、试卷、学生和答卷信息),实现判题逻辑,并处理各种异常情况。必须增加新的类来满足题目要求,受本人能力有限,目前只设计了基本的框架。SourceMonitor的测试结果如下:

(之前设计的类结构不合理,只能重写结构了,难度太大,目前仍暂未完全实现具体的功能QAQ)
踩坑心得
(因为第三次作业暂未完成,所以只能提供一些代码片段,请见谅。)
1.(首当其冲的就是正则表达式,因为刚学就用所以不太熟练,经常搞错题目之间的关系。)输入信息的格式非常具体,且有多种可能的输入格式。这要求在实现程序时对输入进行严格的格式验证。我最初的做法是使用正则表达式进行匹配,但很快发现这种方式既复杂又难以维护。
对于复杂的格式验证,可以考虑分步验证。先验证基本信息,如每行数据的开头标识(#N, #T, #S等),然后再根据每种信息的特定格式进行详细验证。

2.在开始时,我混淆了题目编号和试卷中的题目顺序号,导致答案匹配错误。
一定要明确区分题目编号和试卷中的题目顺序号。在处理答卷信息时,需要使用试卷中的题目顺序号来匹配答案。

3.当题目被删除后,忘记将判题计零分。
被删除的题目在判题时应计零分,并在输出时给出提示。在处理删除题目信息时,可以维护一个被删除题目的列表或标记。在判题和输出时,检查题目是否在该列表中。

4.学号和姓名未严格匹配,导致在处理答卷时判分时出现错误。
创建一个学生信息的字典或映射,以学号为键,姓名为值。在处理答卷时,通过学号快速查找对应的姓名进行匹配。

5.在设计判分逻辑时总是报错,要么编译错误要么语法错误,说实话有点搞烦了,最终也只能写出大体的框架。判分逻辑需要考虑多种情况,如答案是否存在、答案是否正确、题目是否被删除或不存在等。
为了简化判分逻辑,可以将其拆分为多个小函数或方法。例如,一个函数用于检查答案是否存在,另一个函数用于验证答案的正确性,还有一个函数用于处理被删除或不存在的题目。

改进建议
1.使用正则表达式来简化和统一输入格式的验证过程。
创建一个专门的格式验证类,将验证逻辑封装起来,提供简洁的接口供其他部分调用。
2.明确区分题目编号和试卷题目顺序号,可以在数据库中或数据结构中为两者设置不同的字段。
3.在删除题目时,同时更新所有与该题目相关的数据结构和逻辑。
引入一个标记字段来表示题目是否已被删除,而不是直接从数据库中移除,这样在处理时可以检查该标记。
4.在输入学生信息时,进行实时验证,确保学号和姓名一一对应。
创建一个学生信息验证函数,在保存或更新学生信息时进行检查。
5.将判分逻辑拆分成多个小函数,每个函数处理一种特定情况,如答案存在性检查、正确性验证等。
使用单元测试来验证每个判分函数的正确性。
总结
说实在话,刚上来就搞这样的强度,多多少少有点不适应。
通过解答这三个题目,我巩固并应用了所学的知识点,提升了分析和解决问题的能力。
同时,我也认识到了自己在某些方面的不足,需要进一步深入学习和实践。
知识的深度和广度需要拓展,以便更好地解决实际问题。
需要加强创新思维和自主学习能力的培养。
改进建议:
希望教师能在课堂上引入更多实际案例,加强理论与实践的结合。
课程设置可以更加灵活,结合当前行业发展和前沿技术进行教学。
作业布置上希望可以先以巩固学过的知识点为主,由浅入深,给学生多一点信心和循序渐进的空间。从巩固基础开始,之后再布置一些具有挑战性的题目。

浙公网安备 33010602011771号