分析队友个人项目:中小学数学卷子自动生成程序

发布时间 2023-09-19 19:47:13作者: zyfyyy

一、前言

   上周完成了个人项目的编写。这里对伙伴的个人项目代码稍作分析,学习她的长处,分析不足,使我们都能得到进步。

二、分析

(一)功能需求:

   总的来说,队友的项目实现了老师给出的需求,可以进行登录、切换登录、出题、题目查重、切换试卷类型等功能。在对细节的处理上,队友的项目可以实现保存文件到相对路径、题目存储在正确的文件夹下、题目符合试卷难度类型、处理输入错误等问题。

(二)优点:

  1. 代码模块结构清晰,层次分明。登录和出题模块分离,类设置和功能函数的定义分离,使阅读清晰方便,层次分明。代码逻辑清晰,对功能做了很好的细化,同时又不显繁琐。 队友的项目分为两个cpp文件和三个头文件。

    cpp文件中为功能函数的定义,头文件中包含类的定义。值得一提的是,队友新建了一个question_sys.h文件,在该文件中包含源文件所需的库函数的所有头文件,在源文件中只需包含这一个头文件即可,让代码更加简洁明了,是一个小巧思。
  2. 根据项目类型,队友建立了两个抽象类,分别为Teacher类和Question类。每一个具体类都继承了一个抽象类。如PrimarySchoolQuestion、MiddleSchoolQuestion、HighSchoolQuestion类继承了Question类,这样便于功能的扩展。新建的子类,通过注入接口能够便利的与系统原有架构发生联系。如果日后项目改动,需要加入新要求的题目,如要求包含积分、坐标,可以根据该抽象类再建立出新的子类。这体现了队友良好的抽象概括能力,值得我学习。
  3. 在页面切换之间设置了sleep休眠函数,方便用户观察提示信息。在每个功能切换之间,运行界面会清屏,这样的设计让用户在操作多次的情况下,页面依旧干净整洁,用户观感好。
  4. 队友的代码严格遵循了代码规范。例如,队友的注释写得十分清楚,在每个函数的开头都写明了该函数的功能、输入、返回值,在每个文件的开头写明了该文件所实现的功能,在重要部分也给出了注解。再例如,队友规范使用名字空间,防止污染名字空间。最后,室友的函数名、变量名都很符合规范。诸如此类,让代码看起来赏心悦目。
  5. 在出题方面队友独具匠心。初中、高中的操作符,队友关心用户体验和题目的实用性,用括号来标识根号、平方、三角函数作用的数字范围,即可以出现类似7+(7*8)^2类型的题目,使题目看起来更加清晰明了,也符合实际要求。
  6. 队友熟练使用c_str()函数,实现了string转换到char,解决了scanf读入中文会产生乱码,导致输入正确信息却无法登录的问题出现。

  7. 登录信息、已出过的题目均保存在文件中,日后增加用户非常方便,此外,这样的查重方式为结对项目编写提供了灵感。

(二)缺点:

  1. 生成题目时需要先包含用户名文件夹,否则在生成时会生成错误信息。这样在日后有大量新加入用户的需求时,准备工作会比较繁琐,需要大量创建文件夹。
  2. 每个操作数左边只能有一个左括号,且右边只能有一个右括号。
  3. 在“输入出题数量(-1退出登录)”这里缺少一点提示信息,可以进行改进。

     

三、总结

   通过这次个人项目的编写和结对伙伴对互相项目的分析,让我发现了对方的长处,也认识到了自己的不足。同时,对方的代码为我解决一些困难问题提供了思路。相信我们会一起进步!