结对编程代码分析

结对编程个人项目代码互评

1.概述

本文为对队友mmk的个人项目代码的分析。

该项目采用了C++作为开发语言,采用了面向对象的思想实现了多个类以在主程序中调用,实现了预期功能。

2.组成结构

目录结构描述
├── main.cpp 
├── system.cpp 
├── system.h 
├── teacher.cpp 
├── teacher.h
├── administer                      
│   ├── 用户文件夹(如李四1)
│   └── manager.txt				//账号

其中有一个主函数main.cpp以及systemteacher两个类

  • system类:

    class System {
     public:
      System();
      ~System();
      bool Check(string t_name, string item);                      //检查题目是否重复
      int CreatePaper(string t_name, string &t_type);              //出题
      int RandomNumber();             //随机数
      int ToNumber(string s_input);   //字符串转数字
      void LoadTeacher();             //导入老师名单
      void TeacherLogin();            //老师登录
      void TeacherSite(string t_name, string t_code, string t_type);             //老师界面
      void SecondSite();              //界面
      string GetRealTime();           //得到现在的时间
      string CreateHighPaper();       //高中题
      string CreatePrimaryPaper();    //初中题
      string CreateMiddlePaper();     //小学题
      vector<Teacher> manager;        //老师容器
      string operator_[11] = {"+", "-", "*", "/", "^2", "√", "sin", "cos", "tan", "(", ")"};
    };
    

    在该类中实现了如上所示的用户加载、登陆、题目生成、题目查重等方法。

    对部分函数的分析:

    • Check():

      使用ifstream读取历史文件,查验是否存在重复题目。

    • LoadTeacher():

      ifstream读取用户信息文件内容,对每行字符串进行切割,再将信息加入用户vector

    • CreatePaper(string t_name, string &t_type):

      写入与检查使用了ofstream,根据用户年级,先生成题目,再调用check()函数进行查重

    • ToNumber(std::string s_input):

      通过stringstream将字符串转化为整型,简单高效。

  • teacher类:

    class Teacher {
     public:
      Teacher();
      ~Teacher();
      void FitinTeacher(string kind, string accout, string code);  //赋值
      string GetType() const;
      string GetAccount() const;
      string GetPassword() const;
     private:
      string type;
      string log_in_account;
      string log_in_password;
    };
    

​ 定义了教师用户的账户、密码与年级。

  • main.cpp主函数:

    int main() {
      system("chcp 65001");  //UTF-8
      System sys;
      sys.LoadTeacher();  //加载老师名单
      while (1) {
        cout << "                 中小学数学卷子自动生成程序 \n";
        cout << "******************************************************\n";
        cout << "*\\                     Welcome                      /*\n";
        cout << "*/                                                  \\*\n";
        cout << "*\\                     1.登  录                      /*\n";
        cout << "*/                                                  \\*\n";
        cout << "*\\                     2.退  出                      /*\n";
        cout << "*/                                                  \\*\n";
        cout << "******************************************************\n";
        cout << "请输入你的选择:\n";
        int choice;
        cin >> choice;
        switch (choice) {
          case (1): {
            sys.TeacherLogin();
            break;
          }
          case (2): {
            cout << "Bye Bye\n";
            system("pause");
            return 0;
          }
          default: {
            cout << "输入有误,请重新输入:";
            system("cls");
            break;
          }
        }
      }
      system("pause");
      return 0;
    }
    

    在main函数中生成初始界面,根据输入内容调用用于登陆的TeacherLogin()或退出应用

3.优缺点分析

优点:

  • 界面美观,操作逻辑人性化
  • 对边界和不合法输入处理较好,提高了程序的稳定性
  • 代码在相应位置上有注释,且函数变量命名、代码块的格式等遵守了规范,可读性较好
  • 采用面向对象编程方法,封装了多个类和方法,易于调试与修改

缺点:

  • 对一个变量有多个值的情况有时使用了过多的if/else,若换成switch会提高代码的可读性。
  • 在生成小/初/高题目的三个函数中,有较长的重复或类似代码段,可将该代码块提取成方法,缩短代码长度使代码更简洁。

总结

在该项目中,我选择了Java进行开发。

在分析对方代码的过程中我发现虽然采用了不同的语言,但开发逻辑有很多相似之处,如采用面向对象思维对类和方法的封装等,也了解学习到了两种语言的开发规范,同时发现C++Java在该项目开发时的优缺点,如Java有比较多现成封装好的库与方法,在开发上较为便利,而在c++中有的方法需要自己去实现(如字符串转整型)

posted @ 2022-09-13 21:40  We1len  阅读(150)  评论(0)    收藏  举报