队友选择使用C++来编写个人项目,先说缺点在看优点,改正缺点学习优点,一起进步!
1、对于用户,队友选择使用结构体,这个选择是正确的,但是没必要小学、初中、高中分别使用结构体,这个都是用户,用一个结构体即可。对于用户的验证,应该分离成一个模块,这样便于日后的扩展,比如,当用户量多,需要存在数据库或者文件中时,只需改用户验证模块即可。
struct Primary {//小学用户结构体 public: string name;//小学用户名 string password;//小学用户密码 Primary(string na,string pas) {//构造函数 name = na; password = pas; } }; struct Junior {//初中用户结构体 public: string name;//初中用户名 string password;//初中用户密码 Junior(string na,string pas) {//构造函数 name = na; password = pas; } }; struct Senior {//高中用户结构体 public: string name;//高中用户名 string password;//高中用户密码 Senior(string na,string pas) {//构造函数 name = na; password = pas; } };
2. 题目生成算法过于繁琐,可以看到题目生成的方法中,一些变量名的规范还是有待提高,自己看了好久没看懂这个逻辑,同时,还有很多重复的语句,建议将函数在分解成不同的功能单元,不同的单元复用,可减少代码重复。
void PQue(int num) {//生成小学题目 int temp1,temp2,temp3,temp4,temp5;//五个操作数 int j = 0; srand((unsigned)time(0)); char fuhao[4] = {'+','-','x','/'};//加减乘除 for (j = 0;j < num;j++) { cout<<j + 1<<"."; outfile<<j + 1<<"."; onum = MIN + rand() % (MAX1-MIN) + 1;//如果四则运算里面只有一个操作数 ,将没有意义,故操作数定义为 (1,5] switch(onum) { case 2: temp1 = MIN + rand() % (MAX2-MIN+1);//随机生成第一个操作数 temp2 = MIN + rand() % (MAX2-MIN+1);//随机生成第二个操作数 cout<<temp1<<fuhao[rand() % 4]<<temp2<<endl<<endl;//随机生成含有两个操作数的算式 outfile<<temp1<<fuhao[rand() % 4]<<temp2<<endl<<endl; break; case 3: temp1 = MIN + rand() % (MAX2-MIN+1);//随机生成第一个操作数 temp2 = MIN + rand() % (MAX2-MIN+1);//随机生成第二个操作数 temp3 = MIN + rand() % (MAX2-MIN+1);//随机生成第三个操作数 cout<<temp1<<fuhao[rand() % 4]<<temp2<<fuhao[rand() % 4]<<temp3<<endl<<endl;//随机生成含有三个操作数的算式 outfile<<temp1<<fuhao[rand() % 4]<<temp2<<fuhao[rand() % 4]<<temp3<<endl<<endl; break; case 4: temp1 = MIN + rand() % (MAX2-MIN+1);//随机生成第一个操作数 temp2 = MIN + rand() % (MAX2-MIN+1);//随机生成第二个操作数 temp3 = MIN + rand() % (MAX2-MIN+1);//随机生成第三个操作数 temp4 = MIN + rand() % (MAX2-MIN+1);//随机生成第四个操作数 cout<<temp1<<fuhao[rand() % 4]<<temp2<<fuhao[rand() % 4]<<temp3<<fuhao[rand() % 4]<<temp4<<endl<<endl;//随机生成含有四个操作数的算式 outfile<<temp1<<fuhao[rand() % 4]<<temp2<<fuhao[rand() % 4]<<temp3<<fuhao[rand() % 4]<<temp4<<endl<<endl; break; case 5: temp1 = MIN + rand() % (MAX2-MIN+1);//随机生成第一个操作数 temp2 = MIN + rand() % (MAX2-MIN+1);//随机生成第二个操作数 temp3 = MIN + rand() % (MAX2-MIN+1);//随机生成第三个操作数 temp4 = MIN + rand() % (MAX2-MIN+1);//随机生成第四个操作数 temp5 = MIN + rand() % (MAX2-MIN+1);//随机生成第五个操作数 cout<<temp1<<fuhao[rand() % 4]<<temp2<<fuhao[rand() % 4]<<temp3<<fuhao[rand() % 4]<<temp4<<fuhao[rand() % 4]<<temp5<<endl<<endl;//随机生成含有五个操作数的算式 outfile<<temp1<<fuhao[rand() % 4]<<temp2<<fuhao[rand() % 4]<<temp3<<fuhao[rand() % 4]<<temp4<<fuhao[rand() % 4]<<temp5<<endl<<endl; break; } } }
3. 项目设计
对于不同的模块的功能还是用不同的方法来完成,但是个人觉得还是可以在进行分解,现在的每个函数的作用还不够单一,扩展性不强。对于这个项目,还是可以当成一个小工程来对待,也就是前期要进行设计,简单设计下整个系统的架构,将不同的功能模块想清楚,然后进行不同的实现。同时,建议使用面向对象的方法来构建整个项目,扩展性会更强。