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

个人项目互评

时间:2023-09-19 17:37:31浏览次数:34  
标签:std 题目 string 个人 项目 int 生成 互评 type

一、简介

1、 项目名称:中小学数学卷子自动生成程序

2、 编程语言:C++

3、 完成情况:按照个人项目需求完成了要求的功能

4、 完成同学:贾媛媛,评价者:黄婉珊

二、功能及完成情况测试

1、 登录功能:在输入错误的用户名和密码时会提示错误,并能在输入正确后正常登入,功能完整、正确。

 

2、 题目生成功能:能正确生成文件名为当时时间的txt文档;

 

小学、初中、高中题目符合要求(如下图)

 

输入题目数量错误时会提示错误

 

可见生成题目功能完整、正确。

3、 切换类型功能:

输入正确的用户名和密码后,根据提示输入切换为xx,可以正确修改题目类型,可以看到正确切换后就能生成新更改类型的题目了。

 

如果输入的不符合格式,会提示错误。

 

总的来说,切换类型功能完整、正确。

三、代码结构

一共有三个cpp文件和两个.h头文件,分别负责登录、生成题目、切换类型

 

四、核心代码分析

头文件:

头文件中分别为Generator类和Teacher类;在public中存放函数,在private中存放变量。使用private能更好地保护数据,提供更好的封装性。

#ifndef INC_202126010313PERSONALPROJECT_GENERATOR_H
#define INC_202126010313PERSONALPROJECT_GENERATOR_H
#include <string>
class Generator{
private:
    std::string directory_path_;//文件夹路径
    std::string question_type_;//试题难度
    int question_account_{};//需要生成的题目的数量
public:
     Generator();
     Generator(const std::string& directory_name,std::string question_type);
     bool SetQuestionAccount(int num);//设置题目数量
     bool DirectoryGenerator();//生成文件夹
    void PaperGenerator();//生成试卷
    std::string GetTime();//获取系统时间
    void FileGenerator(const std::string& file_name);//生成文件
    static bool QuestionCheck(const std::string& generated_question,const std::string& existing_question);//题目重复性比对
    std::string QuestionGenerator();//生成题目
    bool GetExistingQuestions(std::string generating_question);//将当前生成题目与已存在的题目比对
};
View Code
#ifndef INC_202126010313PERSONALPROJECT_TEACHER_H
#define INC_202126010313PERSONALPROJECT_TEACHER_H
#include <string>
class Teacher{
private:
    std::string my_type_;
    std::string my_account_;
    std::string my_password_;
public:
     Teacher();
     Teacher(std::string type,std::string account,std::string password);
     std::string GetType();
     std::string GetAccount();
     bool ChangeType(std::string new_type);
     bool LoginCheck(std::string input_account,std::string input_password);
};
View Code

Generator.cpp:

生成题目只用了一个函数,可以按照需求生成小学、初中或高中题目,不需要使用三个函数分别生成,使得代码有较强的复用性。

std::string Generator::QuestionGenerator() {
    char low_symbol[4]={'+','-','*','/'};
    std::string moderate_symbol[2]={"^2","√"};
    std::string high_symbol[3]={"sin","cos","tan"};
    int num_operator=rand()%4+2;//随机生成2-5的数字作为操作数个数
    std::string result[num_operator*2-1];//用来保存题目生成的最终结果
    std::string operators[num_operator];//保存生成题目中的操作数
    std::string symbols[num_operator-1];//保存生成题目中的符号
    for(int i=0;i<num_operator;i++) {
        operators[i] = std::to_string(rand() % 100 + 1);//随机生成1-100的数字作为操作数
        if (this->question_type_ == "高中") {
            if (rand() % 2 == 0) {
                operators[i] = high_symbol[rand() % 3] + operators[i];//随机在操作数前加上三角函数符号
            }
        }
        if (this->question_type_ == "初中" || this->question_type_ == "高中")
            if (rand() % 2 == 0)
                if (rand() % 2 == 0) {
                    operators[i] = operators[i] + moderate_symbol[0];//随机在操作数加上平方符合
                } else {
                    operators[i] = moderate_symbol[1] + operators[i];//随机在操作数前加上根号符号
                }


        result[i * 2] = operators[i];//将操作数保存到结果数组的对应位置
    }
    for(int i=0;i<num_operator-1;i++){
        symbols[i]=low_symbol[rand()%4];//随机生成题目中的运算符
        result[i*2+1]=symbols[i];//将运算符保存到结果数组的对应位置
    }
    if(num_operator>=3){
        int left=rand()%(num_operator-1)*2;//确定左括号的位置
        int tmp=num_operator-(left/2+1);
        int length=0;
        if(left!=0){
            length=(rand()%tmp+1)*2;//随机生成括号长度
        }
        else{
            length=(rand()%(tmp-1)+1)*2;//随机生成括号长度
        }
        int right=left+length;//确定右括号位置
        result[left]="("+result[left];
        result[right]=result[right]+")";//在操作数前后加上左右括号
    }
    std::string res;
    for(int i=0;i<num_operator*2-1;i++){
        res+=result[i];
    }
    res+="=( )";
    return res;
   /* if(GetExistingQuestions(res)){
        return res;
    }else{
        QuestionGenerator();
    }
*/
}
View Code

存放题目时采用的是相对路径

Teacher.cpp:

在切换类型时提前在main函数中抽取了“切换为”三个字,所以ChangeType简洁易懂。

bool Teacher::ChangeType(std::string new_type) {
    if(new_type=="小学"||new_type=="初中"||new_type=="高中"){
        this->my_type_=new_type;
        return true;
    }else{
        printf("%s\n","请输入小学、初中和高中三个选项中的一个");
        return false;
    }
}
View Code

Main.cpp:

Main函数里只有三行,调用login函数登录;main()函数应该专注于启动程序和协调不同模块或功能之间的交互,很符合单一职责原则。

五、代码优点

  1. 代码结构清晰简介,各功能分文件实现,耦合度较低,模块之间的依赖性低,代码更灵活、易于修改、维护。
  2. 生成的题目饱满、完整、合理,括号随机且正确
  3. 代码基本符合google编码规范,在关键操作处有注释
  4. 重用性高,函数的实现简洁高效

六、存在不足

1、 可以在函数声明处添加函数的功能注释

2、 可以进一步完善查重功能

 

标签:std,题目,string,个人,项目,int,生成,互评,type
From: https://www.cnblogs.com/hwssss/p/17715206.html

相关文章

  • vue2.0 项目创建和配置
    项目的框架概述:前端:1、采用vue2.02、采用elementui后端:1、Jave一、前端1、创建项目vuecreateweb_admin创建成功后的项目结构2、安装elementui指定版本[email protected]、在main.js入口文件引入elementui插件importVuefrom'vue'importAppfro......
  • HNU个人项目评测—中小学数学试卷自动生成程序
    目录一.简介二.测试与分析1.黑盒测试2.白盒测试三.总结合理性不合理性四.一点小小展望一.简介本博客是针对结对编程队友苟怀炜同学的个人项目代码所写的分析与总结,代码使用语言为Java,与本人项目所用编程语言一致。为了更好的实现结对项目功能,在评价苟怀炜同学的代码时,我会学习他......
  • 用jenkins构建HBuilder创建uni-app项目打包成H5发版
    此文章可以打包h5,但缺少index.css引用。1、用HBuilderX工具创建uni-app项目选择默认模板 生成项目名为:my-project 2、在linux环境下在安装好node 和npm 前提下(去官网:https://nodejs.org/en/download 下载:node-v14.18.1-linux-x64.tar.xz 或wgethttps://nodejs.or......
  • 软件工程导论个人项目互评
    软件工程导论个人项目互评本博客记录湖南大学2021级软件工程导论个人项目互评与代码分析成员:评价人:软件5班谢昶皓项目作者:软件5班杨虎强需求:命令行输入用户名和密码,两者之间用空格隔开(程序预设小学、初中和高中各三个账号,具体见附表),如果用户名和密码都正确,将根据账户类型......
  • 微信小程序转换成uniapp项目
    1.把微信小程序转换成uniapp项目1.1 安装miniprogram-to-uniapp插件打开cmd,运行【npminstallminiprogram-to-uniapp-g】进行安装,因为这个包是工具,要求全局都能使用,所以需要-g进行全局安装。npminstallminiprogram-to-uniapp-g如果运行npm报错,请先安装Node.js,下载地......
  • IDEA一个项目启动多个实例,以集群启动
    在微服务开发场景下,服务大多是以集群方式部署的。在本地开发时有时候会需要以集群的方式启动项目,同时启动多个实例来测试一些相关功能(例如分布式锁),此时不需要打包之后再仍到测试环境去启动多个实例,在IDE中就可以同时启动多个实例。首先用idea打开项目,不用打开多个idea,因为你会......
  • nginx配置多个web项目
    location/{roothtml;indexindex.htmlindex.htm;try_files$uri$uri//index.html;}location/mobile{#多层目录时不能用root,要用aliasaliashtml/mobile;indexindex.html......
  • 个人项目互评
    个人项目互评总体评价:杨智杰同学的代码完成了题目的基本要求,并且代码风格符合Google编码规范,每个函数总行数少于40行,且运用了接口。小学、初中、高中出题系统均满足题目难度要求,且可以多次出题;查重,文件保存功能均符合要求,并且没有出现其他bug。优势:1.用户登录系统之后会产生一个......
  • 项目部署到Tomat报异常:jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offend
    项目部署到Tomcat报这样的异常:Java代码  1.jarnotloaded.SeeServletSpec2.3,section9.7.2.Offendingclass:javax/servlet/Servlet.class造成这种情况的原因很可能是: 一、项目的WEB-INF/lib下有servlet-api.jar。二、项目的WEB-INF/lib下有包含ja......
  • 02_实战项目Zlog日志框架
    Zlog日志注释控制日志打印//printf("appstart\n");printf("appstart\n");printf("appstart\n");//printf("appstart\n");printf("appstart\n");//printf("appstart\n");printf("appstart\n&quo......