结对编程项目之队友代码分析

结对编程项目之队友代码分析

阅读了队友的代码,觉得他的代码有很多值得学习的地方,也有不少可以改进的地方,虽然和我的代码用的语言不同,但是思路大同小异。

优点:

  1. 修改用户和命令较为方便:采用了字符串数组来存储账号密码和各种命令,如果需要修改,直接更改存储的元素即可。

    1
    2
    3
    4
     
    const string Userchart[3][3]={"张三1 123","张三2 123","张三3 123",
    "李四1 123","李四2 123", "李四3 123",
    "王五1 123","王五2 123","王五3 123"};
  2. 可以方便改进生成文件的路径:字符数组存储路径,,如果需要对之进行修改,可以直接对之进行修改。

  1. 命名较标准比如对于括号的判断变量,用了judgebackets,让代码更加容易理解。就以其中的括号生成部分为例,一目了然。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    judgebackets=rand()%3;
    if (judgebackets==0)
    {
    //考虑同时有多个括号的情况
    while (judgebackets==0&&((operatenumber-j)>backetsnumber))
    {
    judgebackets=rand()%3;
    backetsnumber++;
    ofile<<'(';
    };
    ofile<<rand()%100+1<<g_Operatechar[rand()%4];
    }

缺点

  1. 去重:可能由于时间问题,去重函数只写了一个伪代码,并未具体实现。所以我就简单说一下我自己的思路。我采用了先搜索原文件夹,按顺序打开文件,之后按行读取。我之前先是生成了一个字符串,之后一行一行搜索查重,相同的话(尽管概率较小),就重新生成,不然就写入文本,这样就可以实现去重的要求。

  2. 生成文件文件名时间较为麻烦,他是采用了一种繁琐的方法做的,虽然这样编辑较为方便,但是略显冗杂。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

void Creattime()
//获取当前系统时间,用g_timenow来表示
{
SYSTEMTIME sys;
//利用windowsAPI获取系统时间
GetLocalTime(&sys);
g_timenow[0]=sys.wYear/1000+'0';
g_timenow[1]=(sys.wYear/100)%10+'0';
g_timenow[2]=(sys.wYear/10)%10+'0';
g_timenow[3]=sys.wYear%10+'0';
g_timenow[4]='-';
g_timenow[5]=sys.wMonth/10+'0';
g_timenow[6]=sys.wMonth%10+'0';
g_timenow[7]='-';
g_timenow[8]=sys.wDay/10+'0';
g_timenow[9]=sys.wDay%10+'0';
g_timenow[10]='-';
g_timenow[11]=sys.wHour/10+'0';
g_timenow[12]=sys.wHour%10+'0';
g_timenow[13]='-';
g_timenow[14]=sys.wMinute/10+'0';
g_timenow[15]=sys.wMinute%10+'0';
g_timenow[16]='-';
g_timenow[17]=sys.wSecond/610+'0';
g_timenow[18]=sys.wSecond%10+'0';
}
  1. 可能会生成双重括号,经常会出现在两个操作数外围同时出现两对括号,对于题目的简洁造成了影响。这里我觉得可以采用一种判断方式,如果两个前括号已经在一起,那么两个后括号就不能在一起,强制将后一个后括号向后移位,如果已经是最后一位就重新生成题目;或者如果检索到双重括号就直接重新生成。
---本文结束,感谢阅读---