结对编程代码分析
结对编程个人项目代码互评
1.概述
本文为对队友mmk的个人项目代码的分析。
该项目采用了C++作为开发语言,采用了面向对象的思想实现了多个类以在主程序中调用,实现了预期功能。
2.组成结构
目录结构描述
├── main.cpp
├── system.cpp
├── system.h
├── teacher.cpp
├── teacher.h
├── administer
│ ├── 用户文件夹(如李四1)
│ └── manager.txt //账号
其中有一个主函数main.cpp以及system、teacher两个类
-
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++中有的方法需要自己去实现(如字符串转整型)
浙公网安备 33010602011771号