首页 > 其他分享 >个人项目互评

个人项目互评

时间:2023-09-19 21:25:51浏览次数:33  
标签:std 题目 个人 项目 int void teacher 互评 Teacher

本博客为湖南大学2021级软件工程导论课程的结对小组个人项目互评。根据本课程“做中学”的要求,我们第一周完成了个人项目代码,现在结对完成代码互评。

编程语言:C++

结对成员:顾问、郑雨凡

文章作者(评价人):顾问

代码作者:郑雨凡

 一、个人项目要求:

  用户:

小学、初中和高中数学老师。

  功能:

1、命令行输入用户名和密码,两者之间用空格隔开(程序预设小学、初中和高中各三个账号),如果用户名和密码都正确,将根据账户类型显示“当前选择为XX出题”,XX为小学、初中和高中三个选项中的一个。否则提示“请输入正确的用户名、密码”,重新输入用户名、密码;

2、登录后,系统提示“准备生成XX数学题目,请输入生成题目数量(输入-1将退出当前用户,重新登录):”,XX为小学、初中和高中三个选项中的一个,用户输入所需出的卷子的题目数量,系统默认将根据账号类型进行出题。每道题目的操作数在1-5个之间,操作数取值范围为1-100;

3、题目数量的有效输入范围是“10-30”(含10,30,或-1退出登录),程序根据输入的题目数量生成符合小学、初中和高中难度的题目的卷子。同一个老师的卷子中的题目不能与以前的已生成的卷子中的题目重复;

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

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

  二、代码分析:

  代码作者使用C++面向对象编程。现将逐一分析核心代码。

int main()
{
    using namespace user_namespace;
    Teacher *teacher=new Teacher("1","2","3");
    srand((unsigned int)time(0));
    while(1)
    {
        printf("%s","用户登录\n");
        char id[20];
        char password[20];
        printf("%s","请输入用户名和密码,中间用空格隔开:");
        scanf("%s %s",id,password);
        int result=teacher->CheckUserLogin(id,password);
        if (result==1)
        {
            printf("%s","登陆成功!\n");
            teacher->Menu(teacher);
        }
        else
        {
            printf("%s","请输入正确的用户名、密码\n");
        }
        if (exit_flag==1)
        {
            printf("%s","用户已退出,返回初始界面...");
            exit_flag=0;
            continue;
        }
    }
    return 0;
}

main函数 先通过using引用命名空间,创建一个Teacher类对象并初始化。接着通过while循环设置登录界面,通过类成员函数checkUserLogin检查输入是否正确。整个函数清晰明了,可读性高。使用名字空间,防止程序中的同名冲突。

//抽象类User
class User
{
public:
    virtual int CheckUserLogin(char id[],char password[])=0;
};

//具体类Teacher继承User,实现主要功能,包括登录、出题、题目查重等
class Teacher:public User
{
public:
    Teacher(std::string i,std::string p,std::string t) //构造函数
    {
        strcpy(id_,i.c_str());
        strcpy(password_,p.c_str());
        strcpy(type_,t.c_str());
    }

    int CheckUserLogin(char id[],char password[]);//检查输入用户名密码是否正确
    void Menu(Teacher* teacher);//登录成功后菜单界面
    void ChangeType(Teacher* teacher);//切换试卷类型
    void GetTime(std::string &filename);//获取系统时间
    void CreateTestTXT(Teacher* teacher,std::string &filename);//在对应用户的目录下创建题目文件
    void WriteTestTXT(const std::string &subject,const std::string &filename,int &subject_number);//将题目写进对应名称的文件
    int CheckTwo(Teacher* teacher,const char &symbol_two,std::string &s1,std::string &s2);//检查生成包含两个操作数的算式是否重复
    int CheckNotTwo(Teacher* teacher,const std::string &subject);//检查生成的不是两个操作数的算式是否重复
    void WriteBankTXT(Teacher* teacher,const std::string &subject);//将所生成的题目写入题库,方便查重
    void CreateNumber(std::vector<std::string> &number,std::vector<char> &symbol);//随机生成操作数和加减乘除符号
    void CreateMiddleSymbol(std::vector<std::string> &number);//随机生成平方和根号符号
    void CreateHighSymbol(std::vector<std::string> &number);//随机生成三角函数符号
    void CreateBrackets(std::vector<std::string> &number);//随机生成括号
    int TestBrackets(std::vector<int> &brackets_pos,int &pos);//检查是否有不必要的括号存在
    void CreateSubject(int &question_num,Teacher *teacher);//生成题目

private:
    char id_[20];//账号
    char password_[20];//密码
    char type_[5];//小初高类型
    //所含属性信息
};

 

抽象类接口user,可拓展性高,方便后续添加其他用户类。派生类Teacher继承user类,实现了具体登录出题等功能,功能清晰,易于理解使用。

三、运行测试:

开始界面:

 

 

登录成功:

 

 

切换类型:

 

 

重新登陆:

 

生成题目:

 

 

 

  四、总结:

 

优点:

  1. 面向对象编程,使用抽象类和继承,灵活、重复可用、可拓展性强。使用user类和派生类Teacher,随着用户增加可以拓展用户类。代码容易维护和开发,方便接下来结对项目使用。
  2. 代码安全性、封闭性好。Teacher类中对关键信息和函数采用private保护,防止信息泄露。使用名字空间,防止函数变量重名,有利于后续开发。
  3. 关于查重功能,将生成的题建立题库,方便后续查重。查重不仅仅是读入字符串相互比较,对于两个操作数的题目有额外查重。
  4. 生成题目时,先随机生成的操作数和加减乘除符号放入vector容器中,再看题目类型,初高中题目就向容器中加入相应符号,实现起来很清晰简便。
  5. 代码设计合理,所有方法函数相辅相成,而不是写在一起,便于理解、使用和维护。函数不超过40行,便于阅读。符合谷歌代码规范,代码格式正确、注释清晰、命名符合规定,便于阅读和修改。
  6. 代码功能完备,能实现不同类型出题和切换。命令行文字提示清晰明了,便于用户使用。

缺点:

  1. 只有两个类,user抽象类和Teacher派生类。把许多方法函数写在Teacher类中,包括出题和存放文件的方法函数。其实可以多写几个类,让方法函数可重复利用。
  2. 方法函数之间相互调用,注释没有十分清晰注明方法函数功能,阅读有一点困难。

标签:std,题目,个人,项目,int,void,teacher,互评,Teacher
From: https://www.cnblogs.com/guwenblogs/p/17715821.html

相关文章

  • HNU个人项目中小学数学卷子自动生成程序互评
    一、简介本博客是对结对编程队友代码的分析与总结,代码使用语言为JAVA。完成情况:很好的实现了项目的需求,功能完整。同时每个页面的提示信息都比较完整,在不需要他人协助的情况下,可以根据屏幕上的提示信息进行操作,如果用户输入不正确,系统会出现指示,显示正确输入格式,用户可根据提示......
  • 【HNU 个人项目互评】结对编程互评-Java
    【结对编程互评-Java】中小学数学卷子自动生成程序项目名称:中小学数学卷子自动生成程序编程语言:Java代码作者:张钉评价人:张诗泉目录1项目要求1.1目标用户1.2实现功能2代码分析3功能测试3.1登录功能测试3.2出题功能测试3.3保存与查重功能测试4优缺......
  • uniapp项目实践总结(十八)自定义多列瀑布流组件
    导语:有时候展示图片等内容,会遇到图片高度不一致的情况,这时候就不能使用等高双列或多列展示了,这时候会用到瀑布流的页面布局,下面就一起探讨一下瀑布流的实现方法。目录准备工作原理分析实战演练案例展示准备工作在pages/index文件夹下面新建一个waterfall.vue的组件;按......
  • 个人项目互评
    这两天完成了和谢文琛同学的个人项目作业互评。一.功能测试: 能够正常登录各用户且出题符合要求小学难度: 初中难度: 高中难度: 切换难度可以正常实现 输入-1后退出到登录界面 二.优点:1.首先非常完整地实现了系统所需要的功能,生成题目也符合要求。    ......
  • hnu个人编程项目评价
    一、简介1.项目名称:中小学数学卷子自动生成程序2.编程语言:JAVA3.完成情况:按照个人项目需求完成了要求的功能4.完成同学:朱智星,评价者:杨安然5.项目需求:5.1、命令行输入用户名和密码,两者之间用空格隔开(程序预设小学、初中和高中各三个账号,具体见附表),如果用户名和密码都正确,将根......
  • 中小学数学卷子生成程序-个人项目互评
    一、项目需求用户:小学、初中和高中数学老师。功能:命令行输入用户名和密码,两者之间用空格隔开(程序预设小学、初中和高中各三个账号,具体见附表),如果用户名和密码都正确,将根据账户类型显示“当前选择为XX出题”,XX为小学、初中和高中三个选项中的一个。否则提示“请输入正确的用户......
  • [完结22章]2023版全新高质量商业级小程序全栈项目实战
    点击下载——[完结22章]2023版全新高质量商业级小程序全栈项目实战  提取码:ztnk[完结22章]2023版全新高质量商业级小程序全栈项目实战,又名:Vue3+Uni+Node+MySQL从零实现跨端小程序的全栈应用!在现代社会中,移动互联网的发展必将为人们的生活产生重要影响。微信小程序全栈开发是......
  • 分析队友个人项目:中小学数学卷子自动生成程序
    一、前言  上周完成了个人项目的编写。这里对伙伴的个人项目代码稍作分析,学习她的长处,分析不足,使我们都能得到进步。二、分析(一)功能需求:  总的来说,队友的项目实现了老师给出的需求,可以进行登录、切换登录、出题、题目查重、切换试卷类型等功能。在对细节的处理上,队友的......
  • 湖南大学结对编程个人项目互评
    湖南大学结对编程个人项目互评分析对象:鲁旭同学的个人项目分析人:王明扬一、项目需求用户:小学、初中和高中数学老师。功能:1、命令行输入用户名和密码,两者之间用空格隔开(程序预设小学、初中和高中各三个账号,具体见附表),如果用户名和密码都正确,将根据账户类型显示“当前选择为X......
  • HNU软件工程导论个人项目互评
    湖南大学结对编程之个人项目互评本次博客主要内容是分析结对编程队友的个人项目分析代码作者:谢昶皓分析人:杨虎强目录湖南大学结对编程之个人项目互评本次博客主要内容是分析结对编程队友的个人项目一、分析项目需求中的“坑”1、出题之“坑”1)每个用户出的题目是否符合用......