首页 > 其他分享 >与结对队友的个人项目互评

与结对队友的个人项目互评

时间:2023-09-20 21:33:05浏览次数:37  
标签:结对 string question System 互评 队友 type Teacher cout

与我结对的队友是木拉迪力.艾海提同学,接下来我来分析一下他的个人项目:

#include <iostream>
#include <string>
#include <fstream>
#include <ctime>
#include <cstdlib>
using namespace std;

class Teacher {
public:
Teacher();
Teacher(string username, string pwd, string type);
~Teacher();
string GetName();
string Getpwd();
string Gettype();
void Setpwd(string pwd);
string GetTime();
private:
string type_;
string username_;
string password_;
};

Teacher::Teacher() {
}

Teacher::~Teacher() {
}

Teacher::Teacher(string username, string pwd, string type) {
this->username_ = username;
this->password_ = pwd;
this->type_ = type;
}

string Teacher::GetName() {
return this->username_;
}

string Teacher::Getpwd() {
return this->password_;
}

string Teacher::Gettype() {
return this->type_;
}

void Teacher::Setpwd(string pwd) {
this->password_ = pwd;
}

string Teacher::GetTime() {
time_t now = time(0);
tm* ltm = localtime(&now);
string time = to_string(1900 + ltm->tm_year) + "-" + to_string(1 + ltm->tm_mon) + "-" + to_string(ltm->tm_mday) + " " + to_string(ltm->tm_hour) + ":" + to_string(ltm->tm_min) + ":" + to_string(ltm->tm_sec);
return time;
}

class System {
public:
System();
~System();
void openMenu();
void LogTeacher(string t_name, string t_pwd, string t_type);
string CreatePrimaryPaper();
bool CheckPaper(string name, string question);
int ProduceTheExamination(string name, string pwd, string type);
string Changetype();
string intTostring(int num);
};

System::System() {
}

System::~System() {
}

void System::openMenu() {
cout << "欢迎使用自动生成数学试卷系统" << endl;
cout << "1. 生成试卷" << endl;
cout << "2. 修改密码" << endl;
cout << "3. 切换类型" << endl;
cout << "0. 注销" << endl;
cout << "请输入选项:";
}

string System::intTostring(int num) {
string str = "";
if (num == 0) {
str = "0";
}
while (num) {
str = char(num % 10 + '0') + str;
num /= 10;
}
return str;
}

string System::CreatePrimaryPaper() {
string question;
int Preparentheses = 0;
int temp = rand() % 11;
if (temp == 9) {
question += "(";
Preparentheses++;
}
temp = (rand() % 100) + 1;
question += intTostring(temp);
int operatorNum = (rand() % 4) + 1;
for (int i = 0; i < operatorNum; i++) {
temp = rand() % 4;
switch (temp) {
case 0:
question += "+";
break;
case 1:
question += "-";
break;
case 2:
question += "*";
break;
case 3:
question += "/";
break;
}
temp = rand() % 11;
if (temp == 9) {
question += "(";
Preparentheses++;
}
temp = (rand() % 100) + 1;
question += intTostring(temp);
temp = rand() % 11;
if (temp == 10 && Preparentheses > 1) {
question += ")";
Preparentheses--;
}
}
for (int i = 0; i < Preparentheses; i++) {
question += ")";
}
question += "=";
return question;
}

bool System::CheckPaper(string name, string question) {
ifstream ifs;
string temp;
ifs.open(("教师账户\\" + name + "\\CheckPaper.txt").c_str(), ios::in);
if (!ifs.is_open()) {
return false;
}
while (ifs >> temp) {
if (temp == question) {
return true;
}
}
ifs.close();
return false;
}

int System::ProduceTheExamination(string name, string pwd, string type) {
cout << "准备生成" + type + "数学题目,请输入生成题目数量(输入-1将退出当前用户,重新登陆):" << endl;
int paperNum = 0;
while (1) {
cin >> paperNum;
if (paperNum == -1) {
cout << "退出登陆,请重新登陆" << endl;
system("pause");
system("cls");
return -1;
}
else if (paperNum < 10 || paperNum > 30) {
cout << "输入有误,题目范围在【10,30】" << endl;
}
else {
string time = this->GetTime();
ofstream ofs1, ofs2;
ofs1.open(("教师账户\\" + name + "\\" + time).c_str(), ios::out);
ofs1 << "这是" << name << "老师出的一份" << type << "试卷" << endl;
if (type == "小学") {
for (int i = 0; i < paperNum; i++) {
string question = this->CreatePrimaryPaper();
if (this->CheckPaper(name, question) == true) {
i--;
}
else {
ofs2.open(("教师账户\\" + name + "\\CheckPaper.txt").c_str(), ios::app);
ofs2 << question << endl;
ofs2.close();
ofs1 << "(" << i + 1 << ") " << question << endl;
}
}
ofs1.close();
}
cout << "生成成功" << endl;
system("pause");
system("cls");
break;
}
}
return 0;
}

string System::Changetype() {
cout << "选择需要切换的类型(小学、初中、高中),输入:切换为XX" << endl;
string newtype;
while (1) {
cin >> newtype;
newtype = newtype.substr(newtype.size() - 4, 4);
if (newtype != "小学" && newtype != "初中" && newtype != "高中") {
cout << "请输入小学、初中和高中三个选项中的一个" << endl;
}
else {
break;
}
}
return newtype;
}

void System::LogTeacher(string t_name, string t_pwd, string t_type) {
string type = t_type;
int state = 0;
while (state != -1) {
this->openMenu();
int select = 0;
cin >> select;
switch (select) {
case 1:
cout << "生成试卷中..." << endl;
state = this->ProduceTheExamination(t_name, t_pwd, type);
break;
case 2:
cout << "修改密码" << endl;
// 修改密码的逻辑
break;
case 3:
cout << "切换类型" << endl;
type = this->Changetype();
cout << "切换成" + type + "成功" << endl;
system("pause");
system("cls");
break;
case 0:
cout << "注销成功" << endl;
system("pause");
system("cls");
return;
}
if (state == -1) {
return;
}
}
}

int main() {
string username, password, type;
cout << "请输入用户名:";
cin >> username;
cout << "请输入密码:";
cin >> password;
cout << "请输入类型(小学、初中、高中):";
cin >> type;

Teacher teacher(username, password, type);
System system;
system.LogTeacher(teacher.GetName(), teacher.Getpwd(), teacher.Gettype());

return 0;
}

这段代码在整体上符合谷歌编码规范,但还有一些可以改进的地方。下面对代码进行分析,并解释其优点和缺点。

1. 符合谷歌编码规范的方面:
- 使用了合理的命名规范,变量和函数名使用小写字母和下划线的组合,类名使用驼峰命名法。
- 使用了适当的缩进和空格,增强了代码的可读性。
- 使用了头文件保护宏,避免了重复包含头文件的问题。
- 使用了类的封装,将相关的数据和函数封装在一起,提高了代码的可维护性和可复用性。
- 使用了合适的访问修饰符,将类的成员变量设置为私有,通过公有的成员函数进行访问和修改。
- 使用了合适的数据类型,例如使用string来存储用户名、密码等信息。

2. 代码的优点:
- 代码结构清晰,将Teacher类和System类分别定义,使得功能模块化,易于理解和维护。
- 通过Teacher类封装了教师的相关信息,提供了获取和设置密码的接口,增加了代码的安全性。
- System类提供了生成试卷、修改密码和切换类型等功能,通过openMenu函数实现了简单的用户交互界面,提升了用户体验。
- 使用了随机数生成题目,增加了试卷的多样性和难度。

3. 代码的缺点:
- 缺乏注释,没有对关键代码进行注释说明,降低了代码的可读性和可维护性。
- 缺少错误处理机制,例如在文件操作中没有对打开文件是否成功进行判断,可能导致程序崩溃或产生错误结果。
- 缺少异常处理机制,例如在输入不合法的选项时没有进行异常处理,可能导致程序崩溃或产生错误结果。
- 缺少代码的模块化和重用性,例如生成试卷的逻辑和生成题目的逻辑没有进行分离,导致代码耦合度较高。

综上所述,这段代码在整体上符合谷歌编码规范,具有一定的优点,但还有一些可以改进的地方。通过添加注释、完善错误处理和异常处理机制,以及优化代码的模块化和重用性,可以进一步提升代码的可读性、可维护性和健壮性。

这是一次很特别的尝试,相信木拉迪力同学和我一样,都在这次编程项目中收获了许多。

标签:结对,string,question,System,互评,队友,type,Teacher,cout
From: https://www.cnblogs.com/mt1024/p/17718500.html

相关文章

  • hnu个人项目互评
    对同伴宋玉为的个人项目的互评:1.代码运行结果1.1登录效果:1.2出题效果:出题有提示题目文件保存在绝对路径,为txt格式,题目前有序号,但是题目之间没有空行。 1.3切换效果:输入错误的指令有提示,输入正确的指令切换成功。初中题目:  高中题目,某些题目被大括号扩了起来。......
  • 【个人项目互评】——中小学数学试卷生成系统
    项目名称:中小学数学试卷生成系统编程语言:java代码作者:符南山评价人:秦凯一、简介我与符南山同学结对,并且都是采用java语言。因此下面博客,我们以java的角度来测试分析南山同学的代码,功能。通过这次互评来互相学习彼此间的优点,同时认识到自己的不足,来提升自己的编程思维。二......
  • 【HNU个人项目互评】 基于java生成中小学数学卷子自动生成程序代码分析
    【评价者】:金颖希【项目作者】:刘一凡【使用语言】:Java前言【项目简介】本项目为中小学数学卷子自动生成程序,采用java编程语言实现用户登录、用户类型判断、生成题目、题目查重、切换用户类型以及题目保存等简单功能。【评价标准】本文以代码分析为主,主要从代码的可读性、性能......
  • 个人项目互评
    中小学数学卷子自动生成程序分析本次课程任务要求我们在规定时间内完成一个可以自动生成中小学数学题目卷子的程序,用户为老师。主要是实现账户名密码的验证,账户的切换,根据账户类型生成不同难度的试题并查重。在此简单分析一下搭档小天的项目代码。 程序流程我来分析......
  • 个人项目互评
    项目介绍用户:小学、初中和高中数学老师。功能:命令行输入用户名和密码,两者之间用空格隔开(程序预设小学、初中和高中各三个账号,具体见附表),如果用户名和密码都正确,将根据账户类型显示“当前选择为XX出题”,XX为小学、初中和高中三个选项中的一个。否则提示“请输入正确的用户名、密码......
  • Hnu个人项目互评
    一、简介本文是对于编程队友xjm同学的代码互评,本着互相学习,互相进步的想法,学习对方的代码,找出其中的优点,缺点也要提醒队友改正。二、项目结构先简单分析一下队友项目中的类以及功能。项目中包括7个类和一个接口User类中点击查看代码privateStringuserName;private......
  • 个人项目互评
    一、前言本篇博客为对结对编程搭档李宛芸同学的个人项目(中小学数学卷子自动生成程序)的评价。首先感谢李宛芸同学,她在编程过程中多次帮忙检查我的代码并指出不符合规范的地方,省去了我很多查阅规定的时间.其次,我来对李宛芸同学的个人项目稍作评论,争取做到取长补短,共同进......
  • 湖南大学结对编程个人项目互评
    1.简介本博客用于湖南大学结对编程项目中对王明扬同学个人项目的互评工作。个人项目的功能是实现一个中小学数学试卷自动生成程序,基于命令行进行操作。2.代码2.1项目结构项目由多个包组成,分别执行不同的功能:2.1.1controller:接收用户的输入,调用service层进行相应的逻辑......
  • 【个人项目互评】————中小学生题目生成程序
    在完成个人项目的建设后,我和搭档互相交换了代码进行分析。在阅读过程中,看到了她代码的优势,也同时看到了自己代码的不足。再次写下这一次的项目分析;一、题目要求   二、测试与分析功能完成情况: 在输入正确的账户名以及密码后,能够获得当前用户年级信息以及后续操作步骤......
  • 【个人项目互评】结对互评-中小学数学试卷自动生成程序
    目录1.简介2.项目要求3.代码分析4.运行测试5.优缺点分析  1.简介本篇博客是对结对编程队友对于项目《中小学数学卷子自动生成系统》的学习,分析与总结,选用的编程语言为Java.  2.项目要求1、命令行输入用户名和密码,两者之间用空格隔开(程序预设小学、初中和高中......