按照老师的要求, 对队友的代码进行解析, 先说缺点在看优点, 改正缺点学习优点, 一起进步!
1. 首先打开代码的时候, 关于账号密码的存储, 将账号和密码直接存储在了一个数组中. 按照 "用户名 密码" 的格式, 这在之后的登陆检测中确实可以方便检测, 但是个人感觉将账号密码直接存储在一起会造成一些安全问题.
- string allUser[]={
- "张三 1 123","张三 2 123","张三 3 123","李四 1 123","李四 2 123","李四 3 123","王五 1 123","王五 2 123","王五 3 123"
- };
- // 用户账号密码信息
2. 在用户登录的部分, 默认了只拥有 9 个用户, 不考虑增加用户的问题, 用户的类型选择只是用了用户编号除三的选择方式, 在增加用户后可能会导致问题, 拓展性不强.
- string UserType[]={"小学","初中","高中"}; // 用户类型信息
- while(getline(cin,Account)){ // 用户登录处理
- for(user=0;user<9;user++){
- if(Account==allUser[user]){
- cout<<"当前选择为"<<UserType[user/3]<<"出题"<<endl;
- flag_Account=1;
- break;
- }
- else if(user==8){
- cout<<"请输入正确的用户名, 密码"<<endl;
- }
- }
- if(flag_Account==1)
- break;
- }
- usertype=user/3; //0-2 号用户为小学, 3-5 号用户为初中, 6-8 号用户为高中
3. 关于高耦合的问题, 没有将生成不同阶段题目的代码分离出 main 函数, 只在 main 函数中使用了一个 switch 语句控制, 导致 main 函数非常庞大, 不利于修改和扩展.
4. 在生成特殊符号的三个函数部分, 观察到了许多相似的代码, 或许可以专门分离出一个函数解决冗余问题.
关于函数的优点
1. 在生成特殊符号的部分, 使用了二维数组的方式来解决, 将每个数字的座位二维数组的一行, 用二维数组内的 0,1 值来判断是否会出现特殊符号, 与我的暴力判断输出不同, 这样的方式更加的精巧, 虽然也会出现一些问题, 但是能更加清晰的了解问题进行修改.
- int Creat_list_bra(int oper_num,int list_bra[][2]){ // 产生括号标志数组, 数组每一行代表一个操作数, 第一个元素为 1 表示操作数左边有左括号, 第二个元素为 1 表示操作数右边有有括号
- while(1){
- int sum_fbra=0,sum_bbra=0;
- for(int i=0;i<oper_num;i++){
- if(i!=oper_num-1){
- list_bra[i][0]=rand()%2;
- if(list_bra[i][0]==1){
- list_bra[i][1]=0;
- sum_fbra++;
- }
- else if(list_bra[i][0]==0 && i!=0 && sum_fbra>sum_bbra){
- list_bra[i][1]=rand()%2;
- if(list_bra[i][1]==1)
- sum_bbra++;
- }
- }
- else{
- if(list_bra[0][0]!=1)
- {
- list_bra[i][1]=rand()%2;
- if(list_bra[i][1]==1)
- sum_bbra++;
- }
- }
- }
- if(sum_fbra==sum_bbra){ // 当左右括号数量相等时结果合法
- return 1;
- }
- }
- }
2. 关于变量和函数的命名方式十分简洁易懂, 规范使用, 不会对读代码的人造成误解.
3. 代码内的缩进十分规范, 在一些部分的分割也让人看得非常舒服, 代码的注释部分也解释的十分到位, 没有多余的部分.
来源: http://www.bubuko.com/infodetail-2784084.html