结对编程队友代码分析
2022/9/14 14:17:24
本文主要是介绍结对编程队友代码分析,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
结对编程队友代码分析
项目需求分析
1.用户登录:通过命令行输入用户名和密码,并能够判断用户名和密码都正确,如果都正确,实现登录。
2.类型转化:能够实现用户类型切换,共三种类型:小学、初中、高中。
3.试卷生成:实现试卷自动生成,不同类型难度不同,具体见下表。试卷题目数量范围为10-30,每个题目操作数为1-5,且题目不能重复。
小学 | 初中 | 高中 | |
---|---|---|---|
难度要求 | +,-,*./ | 平方,开根号 | sin,cos,tan |
备注 | 只能有+,-,*./和() | 题目中至少有一个平方或开根号的运算符 | 题目中至少有一个sin,cos或tan的运算符 |
4.试卷保存:生成的题目将以“年-月-日-时-分-秒.txt”的形式保存,每个账号一个文件夹。每道题目有题号,每题之间空一行。
功能实现
1.用户登录
void User::SignIn() { //用户登录函数 while(1){ cout << "请输入用户名和密码:"; cin >> user_name_ >> user_pswd_; string user_name = user_name_.substr(0,user_name_.length()-1); if(user_name == "张三") { user_type_ = "小学"; } else if(user_name == "李四") { user_type_ = "初中"; } else if(user_name == "王五") { user_type_ = "高中"; } else { cout << "请输入正确的用户名、密码!" << endl << endl; continue; } if(user_pswd_ == "123"){ break; } else { cout << "请输入正确的用户名、密码!" << endl << endl; } } cout << endl << "*****当前选择为" << user_type_ << "出题*****" << endl << endl; folder_path_ = user_name_; if (0 != access(folder_path_.c_str(), 0)) { mkdir(folder_path_.c_str()); // 返回 0 表示创建成功,-1 表示失败 } User::CreateFile(); User::CreatePaper(); }
2.类型转化
void User::SwitchType() { // 切换类型选项 while(1) { cout << endl << "以下为类型切换选项"; cout << "(若需要切换类型,请输入\"切换为XX\",若不需要,输入\"否\",若退出登录请输入\"-1\")"; cout << endl << "请输入:"; string type_switch; // 存储转化类型 cin >> type_switch; if(type_switch == "否" || type_switch == "") { User::CreateFile(); User::CreatePaper(); // 生出符合输入的数学试卷 continue; } else if(type_switch == "-1") { break; // 退出操作 } if(type_switch.substr(0,6)=="切换为") { user_type_ = type_switch.erase(0,6); User::CreateFile(); User::CreatePaper(); continue; } else { while(1) { cout<<"请输入小学、初中和高中三个选项中的一个:"; cin>>type_switch; if(type_switch=="小学"||type_switch=="初中"||type_switch=="高中") { user_type_ = type_switch; User::CreateFile(); User::CreatePaper(); break; } else if(type_switch=="-1") { break; } } } if(type_switch=="-1") break; } cout << "您已退出本次登录!" << endl << endl; User::SignIn(); }
3.试卷生成
void User::CreatePaper() { cout << "准备生成" << user_type_ << "数学题目..." << endl; cout << "请输入生成题目数量(输入-1将退出当前用户,重新登录):"; cin >> exa_numb_; while(exa_numb_ < 10 || exa_numb_ > 30) { if(exa_numb_ == -1) { cout << "您已退出,请重新登录!" << endl; cout << endl; User::SignIn(); break; } cout << endl << "输入的题目数量无效,请重新输入:"; cin >> exa_numb_; } paper_.open(file_path_.c_str(), ios::out); string check_path = folder_path_+"\\Check.txt"; check_.open(check_path.c_str(), ios::out|ios::app); cout << "这是一张" << user_type_ << "卷子,共有" << exa_numb_ << "道题目。" << endl << endl; int number = exa_numb_; string symbol[] = {"+", "-", "*", "/", "√", "^2", "sin", "cos", "tan"}; while(number--) { int operand_number = rand() % 4 + 2; // 随机生成2-4个操作数 int bracket_number = operand_number / 2 - 1; // 括号生成数量 int bracket_index = -1; for(int i = 0; i < (operand_number * 2 - 1); i++) { if(i % 2 == 0) { if(i < operand_number && bracket_number != 0 && rand() % 2 == 1) { question << "("; bracket_index = i + 3; bracket_number --; } question << (rand() % 100 + 1); } else { if(i == bracket_index) { question << ")"; } question << symbol[rand() % 4]; } } if(user_type_ == "初中") { int junior = rand() % 2 + 4; if(junior != 4) { question << symbol[junior]; } else { question << symbol[rand() % 4]; question << symbol[junior]; question << (rand() % 100 + 1); } } else if(user_type_ == "高中") { int senior = rand() % 3 + 6; question << symbol[rand() % 4]; question << symbol[senior]; question << (rand() % 100 + 1); } cout << exa_numb_ - number << "、" << question.str()<<endl; bool check_flag = User::Check(); if(check_flag = true) { paper_ << exa_numb_ - number << "、" << question.str() << '=' <<endl; check_ << question.str() << '=' << endl; question.str(""); } } paper_.close(); check_.close(); }
4.试卷保存
void User::CreateFile() { // 给文件命名的函数 char file_name[100]; struct tm *ptr; time_t It=time(NULL); ptr=localtime(&It); strftime(file_name,30,"%y-%m-%d-%H-%M-%S.txt",ptr); // 以年月日时分秒对输出文件命名 file_path_ = folder_path_ +"\\"+file_name; }
5.代码测试
优点
1.功能实现完全
项目需求的所有功能基本完全实现,且除编码外,基本符合Google代码编写规范。
2.可读性强
代码简洁,注释较多,变量命名规范,因此可读性较强
3.能自动生成文件夹
能自动生成用户文件夹保存用户试卷,同时每个文件夹内都有Check.txt,方便之后题目查重。
缺点
1.未使用utf-8编码方式
未使用utf-8编码方式,不符合题目要求。队友utf-8编码不能实现字符输出,输入字符也不能匹配,原因未知。
2.题目创建不随机
题目创建操作数只能为2-5个,一个操作数的题目不能创建。初中、高中题目仅仅是题目最后随机生成对应难度的操作符,高中题目也不会生成根号和平方根,不够随机。
3.题目查重效率不高
题目查重是通过遍历每一条题目,随着题目数量的增加,难免会影响性能。
4.数据和代码未实现分离
用户名和密码是通过代码写死的,保存在代码内,之后用户的增加和删减都不能方便实现。
5.可扩展性弱
所有功能仅用一个类实现,可扩展性弱。
这篇关于结对编程队友代码分析的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-27数据结构与算法面试题详解及练习
- 2024-12-27网络请求面试题详解与实战
- 2024-12-27数据结构和算法面试真题详解与实战教程
- 2024-12-27网络请求面试真题解析与实战教程
- 2024-12-27数据结构和算法大厂面试真题详解与实战指南
- 2024-12-27TS大厂面试真题解析与应对策略
- 2024-12-27TS大厂面试真题详解与解析
- 2024-12-27网站安全入门:如何识别和修复漏洞
- 2024-12-27SQL注入基础教程
- 2024-12-27初学者指南:理解和修复跨域漏洞