个人项目中小学数学卷子自动生成程序——队友代码点评

结对编程队友代码分析


Github代码链接

方浩楠同学代码链接


项目实现功能

  1. 登入系统

    如果用户名和密码都正确,将根据账户类型显示“当前选择为XX出题”,XX为小学、初中和高中三个选项中的一个。否则提示“请输入正确的用户名、密码”,重新输入用户名、密码

  1. 根据账号类型进行出题

    题目数量10~30,-1则退出

    1. 小学出题,参数:生成题目数量
    1. 根据题目数量出题
    2. 目的操作数为1~5个,操作数取值在1~100
    3. 涉及运算+,-,*,/
    1. 为初中出题,参数:生成题目数量
    1. 根据题目数量出题
    1. 目的操作数为1~5个,操作数取值在1~100
    2. 涉及运算+,-,*,/;再加上至少一个平方或开根号的运算符

    ​ 3. 为高中出题,参数:生成题目数量

    1. 根据题目数量出题
    2. 目的操作数为1~5个,操作数取值在1~100
    3. 涉及运算+,-,*,/,平方,开根号;题目中至少有一个sin,cos或tan的运算符
  2. 在登入状态下,可以进行账户切换

    在登录状态下,如果用户需要切换类型选项,命令行输入“切换为XX”,XX为小学、初中和高中三个选项中的一个,输入项不符合要求时,程序控制台提示“请输入小学、初中和高中三个选项中的一个”;输入正确后,显示“”系统提示“准备生成XX数学题目,请输入生成题目数量”,用户输入所需出的卷子的题目数量,系统新设置的类型进行出题;

  3. 生成的题目以txt文件形式保存

    1、生成的题目将以“年-月-日-时-分-秒.txt”的形式保存,每个账号一个文件夹。每道题目有题号,每题之间空一行;


优点分析

  1. 代码变量命名符合规范。全局变量使用了g_xxx命名,局部变量使用了m_xxx命名。可以很清楚每个参数的作用域。

    string g_type;       //当前生成试卷的类型(小学、初中、高中)
    int g_opernum;       //每道题目的操作数的个数
    int g_oper;         //操作数本身
    int g_number;        //试卷内题目的数量(取值范围10~30)
    string g_path;       //保存生成文件的路径
    string g_checkpath;   //每个账户的查重文件路径
    bool g_signflag = 0; //登录标志位,为0则为未登录;为1则为已登录
    int g_i;               //当前为第g_i个用户登录
    
  2. 代码的函数命名符合规范。每个函数都由一个动词加上名词组成,可以很清楚的知道每个函数的基本功能。

    void SignIn();				//用于用户登入。
    void AskType();				//询问当前需要出题的类型。
    void MakePaper();			//生成试卷。
    void InitUser();			//初始化用户信息。
    void MainFace();     	//生成主界面
    void MakeFilePath(); 	//生成文件路径
    bool IsRepetitive(string exercise, string filepath); //判断这道题目是否重复的函数
    
  3. 代码的逻辑清晰,排版工整。例如在MakePaper()函数中,先调用SignIn()进行用户登入;再调用MakeFilePath()获取这个用户所对应文件夹路径,并且转到这个文件夹下;再根据老师的类型(小学,初中,高中)生成相应的一道题目;调用IsRepetitive()进行题目查重。

  4. 生成题目部分函数,编写的很巧妙。对于初中和高中的题目,先对每个操作数加上平方、开方或是三角函数,然后再将它们用四个运算符连接成一道题目。

  5. 用户交互功能优秀。在运行代码时,有清晰的操作介绍和操作反馈。还能在同一个页面框内,不显示上一条指令,仅显示当前操作,如下图从登入到生成题目:





缺点分析

  1. 所有的代码,都放在了一个cpp文件中。并没有进行封装,代码的测试与维护性较差。

  2. 函数的模块化不足。例如MakePaper()函数,达到了278行之多。而这个函数的功能也冗杂,把为小学、初中、高中出题目的操作放在了一起。应该先分别实现为小学、初中、高中出题,然后在MakePaper()函数中调用它们。

  3. 生成的小部分题目有些歧义。例如下图中出现的题目12-74-cos12/45,cos部分是cos(12/45)还是cos(12)/45没表达清楚。

  1. 一个不算是缺点的缺点。包含了两个仅在windows平台才有的头文件<io.h>、<direct.h>,使得该代码在Linux,mac平台无法直接运行,不利于该代码的移植。


总结

​ 在本次项目实现中,在对比了方浩楠同学的代码后,发现我没有在用户交互方面下功夫。导致这个出题程序的用户用户体验可能不太好,在之后的编程中我应该完善这一方面。

原文地址:https://www.cnblogs.com/baoweijie99/p/13754141.html