zoukankan      html  css  js  c++  java
  • 个人项目中小学数学卷子自动生成程序——队友代码点评

    结对编程队友代码分析


    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平台无法直接运行,不利于该代码的移植。


    总结

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

  • 相关阅读:
    求有序数组中不重复数字的出现次数
    ThreadLocal在Spring事务管理中的应用
    spring声明式的事务管理
    bootstrap-table 下一页点击失效
    IE浏览器下ajax和缓存的那些事儿
    vue学习第二步——目录结构
    vue学习第一步——自动化构建项目
    bootstrap-select 默认搜索
    webuploader的一些坑
    easyUI combobox 添加空白项
  • 原文地址:https://www.cnblogs.com/baoweijie99/p/13754141.html
Copyright © 2011-2022 走看看