结对编程个人项目分析

Posted sorvon

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了结对编程个人项目分析相关的知识,希望对你有一定的参考价值。

 项目需求

个人项目:中小学数学卷子自动生成程序

用户:

小学、初中和高中数学老师。

功能:

1、命令行输入用户名和密码,两者之间用空格隔开(程序预设小学、初中和高中各三个账号,具体见附表),如果用户名和密码都正确,将根据账户类型显示“当前选择为XX出题”,XX为小学、初中和高中三个选项中的一个。否则提示“请输入正确的用户名、密码”,重新输入用户名、密码;

2、登录后,系统提示“准备生成XX数学题目,请输入生成题目数量(输入-1将退出当前用户,重新登录):”,XX为小学、初中和高中三个选项中的一个,用户输入所需出的卷子的题目数量,系统默认将根据账号类型进行出题。每道题目的操作数在1-5个之间,操作数取值范围为1-100;

3、题目数量的有效输入范围是“10-30”(含10,30,或-1退出登录),程序根据输入的题目数量生成符合小学、初中和高中难度的题目的卷子(具体要求见附表)。同一个老师的卷子中的题目不能与以前的已生成的卷子中的题目重复(以指定文件夹下存在的文件为准,见5);

4、在登录状态下,如果用户需要切换类型选项,命令行输入“切换为XX”,XX为小学、初中和高中三个选项中的一个,输入项不符合要求时,程序控制台提示“请输入小学、初中和高中三个选项中的一个”;输入正确后,显示“”系统提示“准备生成XX数学题目,请输入生成题目数量”,用户输入所需出的卷子的题目数量,系统新设置的类型进行出题;

5、生成的题目将以“年-月-日-时-分-秒.txt”的形式保存,每个账号一个文件夹。每道题目有题号,每题之间空一行;

6、个人项目9月17日早上8点以前提交至各自负责的助教处。提交方式:工程文件打包,压缩包名为“几班+姓名.rar”。

 

附表-1:账户、密码

账户类型

账户

密码

备注

小学

张三1

123

 

张三2

123

 

张三3

123

 

初中

李四1

123

 

李四2

123

 

李四3

123

 

高中

王五1

123

 

王五2

123

 

王五3

123

 

附表-2:小学、初中、高中题目难度要求

 

小学

初中

高中

 

难度要求

+,-,*./

平方,开根号

sin,cos,tan

 

备注

只能有+,-,*./和()

题目中至少有一个平方或开根号的运算符

题目中至少有一个sin,cos或tan的运算符

 

 

代码分析

 优点

使用结构体对用户信息进行初始化,十分方便

struct Student

    char name[20];
    char degree[5];
    char password[20];    
;


Student stu[9] ="张三1","小学","123","张三2","小学","123","张三3","小学","123",
                 "李四1","初中","123","李四2","初中","123","李四3","初中","123",
                 "王五1","高中","123","王五2","高中","123","王五1","高中","123";

反例

class UserDB
public:
    string name;
    string password;
    string grade;
;
UserDB user_db[9];
void load_db()
    user_db[0].name="张三1";
    user_db[0].password="123";
    user_db[0].grade="小学";

    user_db[1].name="张三2";
    user_db[1].password="123";
    user_db[1].grade="小学";

    user_db[2].name="张三3";
    user_db[2].password="123";
    user_db[2].grade="小学";

    user_db[3].name="李四1";
    user_db[3].password="123";
    user_db[3].grade="初中";

    user_db[4].name="李四2";
    user_db[4].password="123";
    user_db[4].grade="初中";

    user_db[5].name="李四3";
    user_db[5].password="123";
    user_db[5].grade="初中";

    user_db[6].name="王五1";
    user_db[6].password="123";
    user_db[6].grade="高中";

    user_db[7].name="王五2";
    user_db[7].password="123";
    user_db[7].grade="高中";

    user_db[8].name="王五3";
    user_db[8].password="123";
    user_db[8].grade="高中";

使用strftime函数获取格式化日期信息

static string getCurrentTimeStr()

    time_t t = time(NULL);
    char ch[64] = 0;
    strftime(ch, sizeof(ch) - 1, "%Y-%m-%d-%H-%M-%S", localtime(&t));     //年-月-日-时-分-秒
    return ch;

  strftime是一种计算机函数,根据区域设置格式化本地时间/日期,函数的功能将时间格式化,或者说格式化一个时间字符串。我们可以根据format指向字符串中格式命令把timeptr中保存的时间信息放在strDest指向的字符串中,最多向strDest中存放maxsize个字符。该函数返回向strDest指向的字符串中放置的字符数。

  头文件:time.h

size_t strftime(
char *strDest,
size_t maxsize,
const char *format,
const  struct tm *timeptr
);

 

出题逻辑完整,能随机生成任意形式的题目

技术图片
1.cos(7)+32+cos(tan(17))*cos(cos(tan(20)))

2.cos(76)+5-32+sin(cos(66))+cos(sin(cos(96)))

3.√(cos(5))*cos(tan(47))/√(cos(cos(tan(81))))

4.tan(25)+tan(41)+tan(75)

5.√(73)*89/53/tan(63)-√(tan(93))

6.tan(sin(cos(tan(18))))/sin(cos(tan(95)))

7.sin(tan(sin(tan(82))))

8.cos(47)-cos(63)

9.√(sin(sin(57)))/sin(19)

10.√(sin(sin(cos(tan(87)))))/sin(cos(tan(46)))

11.(cos(64))/77/sin(cos(1))^2 -(cos(sin(cos(77)))^2 )

12.sin(tan(sin(tan(5))))

13.35*(58)*73/tan(40)/tan(27)

14.√(sin(sin(tan(51))))

15.(√(sin(cos(32))))*sin(cos(35))-sin(cos(sin(cos(1))))^2 

16.√(tan(sin(tan(29))))-sin(tan(95))

17.tan(sin(cos(tan(2))))

18.57/cos(23)*cos(82)

19.√(sin(tan(sin(tan(14)))))/sin(tan(33))

20.tan(tan(56))

21.(6)/tan(39)-tan(54)

22.cos(tan(100))+55*cos(tan(70))-cos(tan(cos(tan(60))))

23.38*56/tan(75)*tan(53)

24.(tan(61))-sin(tan(29)^2 )-(sin(tan(54)))^2 

25.(35)/tan(22)^2 /(tan(37))^2 

26.(59)+sin(cos(tan(62)^2 ))/(sin(cos(tan(97))))^2 

27.17*(37)-64-sin(19)/sin(92)

28.49-(11)+cos(tan(36))*cos(tan(77))

29.tan(sin(tan(47)))

30.sin(93)+sin(55)/sin(74)
View Code

缺点

出题函数长达500行,将小学、初中、高中题目完全分开,导致了大量功能相似的代码行

技术图片
  1 void Chuti(Student stu,char *degree0,int num)
  2 
  3     int num0=1;
  4     cout<<degree0<<"出题成功"<<endl;
  5     srand((unsigned)time(NULL));
  6     ofstream outfile;
  7     const char *filename1=getCurrentTimeStr().c_str();
  8     char filename[100]="";
  9     strcat(filename,filename1);
 10     strcat(filename,".txt");
 11     char path[100]="";
 12     char *xiegang="\\\\";
 13     const char *file=getFile();
 14     strcat(path,file);
 15     strcat(path,stu.name);
 16     char path0[100]="";
 17     
 18     strcat(path,xiegang);
 19     strcat(path,degree0);
 20     strcpy(path0,path);
 21     strcat(path,xiegang);
 22     strcat(path,filename);
 23     outfile.open(path);
 24     if(!outfile)
 25     
 26         char command[100]="mkdir ";
 27         strcat(command,stu.name);
 28         strcat(command,xiegang);
 29         strcat(command,degree0);
 30         system(command);
 31         outfile.open(path);
 32     
 33     if(strcmp(degree0,"小学")==0)
 34     
 35         while(num0<=num)
 36         
 37             outfile<<num0<<.;
 38             int cznum=rand()%5+1;
 39             bool kuohao=rand()%2;
 40             bool shoukuohao=0;
 41             
 42             if (cznum<3)
 43             
 44                 kuohao=0;
 45             
 46             int count=0;
 47             int kuohaouse=0;
 48             int cznum0=cznum-1;
 49             while(cznum--)
 50             
 51                 bool choose0=rand()%2;
 52                 bool choose1=rand()%2;
 53                 int temp=rand()%100+1;
 54                 int jjcc=rand()%4+1;
 55                 if(kuohao&&cznum>=2&&choose0&&!kuohaouse)
 56                 
 57                     outfile<<"(";
 58                     kuohaouse=1;
 59                     if(cznum0==cznum)
 60                     
 61                         shoukuohao=1;
 62                     
 63                 
 64                 outfile<<temp;
 65                 count++;
 66                 if(kuohao&&kuohaouse&&choose1&&count>=2)
 67                 
 68                     outfile<<")";
 69                     kuohao=0;
 70                     kuohaouse=0;
 71                 
 72                 if(kuohao&&kuohaouse&&cznum==0)
 73                 
 74                     outfile<<")";
 75                     kuohaouse=0;
 76                 
 77                 if(shoukuohao&&kuohaouse&&cznum==1)
 78                 
 79                     outfile<<")";
 80                     kuohaouse=0;
 81                 
 82                 if(cznum>0)
 83                 
 84                     if(jjcc==1) outfile<<"+";
 85                     else if(jjcc==2) outfile<<"-";
 86                     else if(jjcc==3) outfile<<"*";
 87                     else if(jjcc==4) outfile<<"/";
 88                 
 89             
 90             num0++;
 91             outfile<<endl<<endl;
 92         
 93      
 94     if(strcmp(degree0,"初中")==0)
 95     
 96         while(num0<=num)
 97         
 98         //    bool kuohao=rand()%2+1;
 99             
100             bool pingfang=rand()%2;
101             bool genhao=rand()%2; 
102             while(!(pingfang||genhao))
103             
104                 pingfang=rand()%2;
105                 genhao=rand()%2; 
106             
107             outfile<<num0<<.;
108             int cznum=rand()%5+1;
109             bool kuohao=rand()%2;
110             bool shoukuohao=0;
111             
112             bool pingfangout=rand()%2;
113             bool genhaoout=rand()%2;
114             
115             bool pingfanguse=0;
116             bool genhaouse=0;
117             
118             int numkh=0;
119             if (cznum<3)
120             
121                 kuohao=0;
122             
123             int count0=0;
124             int count1=0; 
125             int count=0;
126             int kuohaouse=0;
127             int cznum0=cznum-1;
128             while(cznum--)
129             
130                 
131                 bool choose0=rand()%2;
132                 bool choose1=rand()%2;
133                 int temp=rand()%100+1;
134                 int jjcc=rand()%4+1;
135                 if(pingfang&&pingfangout&&!pingfanguse)
136                 
137                     outfile<<"(";
138                     numkh++;
139                     pingfanguse=1;
140                 
141                 
142                 if(genhao&&genhaoout&&!genhaouse)
143                 
144                     outfile<<"√(";
145                     numkh++;
146                     genhaouse=1;
147                 
148                 
149                 if(cznum==0||cznum==1)
150                 
151                     if(pingfang==1)
152                     
153                         outfile<<"(";
154                         numkh++;
155                         pingfanguse=1;    
156                     
157                     if(genhao==1)
158                     
159                         outfile<<"√(";
160                         numkh++;
161                         genhaouse=1;
162                     
163                 
164                 
165                 
166                 
167                 if(kuohao&&cznum>=2&&choose0&&!kuohaouse)
168                 
169                     outfile<<"(";
170                     numkh++;
171                     kuohaouse=1;
172                     if(cznum0==cznum)
173                     
174                         shoukuohao=1;
175                     
176                 
177                 outfile<<temp;
178                 count++;
179                 count0++;
180                 count1++;
181                 
182                 if(genhao&&genhaouse&&cznum==0&&numkh>0)
183                 
184                     outfile<<")";
185                     numkh--;
186                     genhaouse=0;
187                 
188                 if(genhao&&genhaoout&&genhaouse&&count1>=1&&numkh>0)
189                 
190                     outfile<<")";
191                     numkh--;
192                     genhaouse=0;
193                     count1=0;
194                 
195                 
196                 if(pingfanguse&&cznum==0&&numkh>0)
197                 
198                     outfile<<")^2 ";
199                     numkh--;
200                     pingfanguse=0;
201                 
202                 if(pingfang&&pingfangout&&pingfanguse&&count0>=1&&numkh>0)
203                 
204                     outfile<<")^2 ";
205                     numkh--;
206                     pingfanguse=0;
207                     count0=0;
208                 
209                 
210                 if(kuohao&&kuohaouse&&choose1&&count>=2&&numkh>0)
211                 
212                     outfile<<")";
213                     numkh--;
214                     kuohaouse=0;
215                     count=0;
216                 
217                 if(kuohao&&kuohaouse&&cznum==0&&numkh>0)
218                 
219                     outfile<<")";
220                     numkh--;
221                     kuohaouse=0;
222                 
223                 if(shoukuohao&&kuohaouse&&cznum==1&&numkh>0)
224                 
225                     outfile<<")";
226                     numkh--;
227                     kuohaouse=0;
228                 
229                 
230                 while(numkh>0)
231                 
232                     numkh--;
233                     outfile<<")";
234                     
235                  
236                 
237                 if(cznum>0)
238                 
239                     if(jjcc==1) outfile<<"+";
240                     else if(jjcc==2) outfile<<"-";
241                     else if(jjcc==3) outfile<<"*";
242                     else if(jjcc==4) outfile<<"/";
243                 
244                 
245             
246             num0++;
247             outfile<<endl<<endl;
248         
249      
250     if(strcmp(degree0,"高中")==0)
251     
252         while(num0<=num)
253         
254             bool pingfang=rand()%2;
255             bool genhao=rand()%2; 
256             bool sincal=rand()%2;
257             bool coscal=rand()%2;
258             bool tancal=rand()%2; 
259             while(!(sincal||coscal||tancal))
260             
261                 sincal=rand()%2;
262                 coscal=rand()%2;
263                 tancal=rand()%2; 
264             
265             int numkh=0;
266             outfile<<num0<<.;
267             int cznum=rand()%5+1;
268             bool kuohao=rand()%2;
269             bool shoukuohao=0;
270             
271             bool pingfangout=rand()%2;
272             bool genhaoout=rand()%2;
273             
274             bool pingfanguse=0;
275             bool genhaouse=0;
276             
277             bool sinout=rand()%2;
278             bool cosout=rand()%2;
279             bool tanout=rand()%2;
280             
281             bool sinuse=0;
282             bool cosuse=0;
283             bool tanuse=0;
284             
285             if (cznum<3)
286             
287                 kuohao=0;
288             
289             int count0=0;
290             int count1=0; 
291             int count=0;
292             int count2=0;
293             int count3=0;
294             int count4=0;
295             int kuohaouse=0;
296             int cznum0=cznum-1;
297             while(cznum--)
298             
299                 
300                 bool choose0=rand()%2;
301                 bool choose1=rand()%2;
302                 int temp=rand()%100+1;
303                 int jjcc=rand()%4+1;
304                 if(pingfang&&pingfangout&&!pingfanguse)
305                 
306                     outfile<<"(";
307                     numkh++;
308                     pingfanguse=1;
309                 
310                 
311                 if(genhao&&genhaoout&&!genhaouse)
312                 
313                     outfile<<"√(";
314                     numkh++;
315                     genhaouse=1;
316                 
317                 
318                 
319                 if(sincal&&sinout&&!sinuse)
320                 
321                     outfile<<"sin(";
322                     numkh++;
323                     sinuse=1;
324                 
325                 if(coscal&&cosout&&!cosuse)
326                 
327                     outfile<<"cos(";
328                     numkh++;
329                     cosuse=1;
330                 
331                 if(tancal&&tanout&&!tanuse)
332                 
333                     outfile<<"tan(";
334                     numkh++;
335                     tanuse=1;
336                 
337                 
338                 if(cznum==0||cznum==1)
339                 
340                     if(sincal==1)
341                     
342                         outfile<<"sin(";
343                         numkh++;
344                         sinuse=1;    
345                     
346                     if(coscal==1)
347                     
348                         outfile<<"cos(";
349                         numkh++;
350                         cosuse=1;    
351                     
352                     if(tancal==1)
353                     
354                         outfile<<"tan(";
355                         numkh++;
356                         tanuse=1;    
357                     
358                 
359                 
360                 if(kuohao&&cznum>=2&&choose0&&!kuohaouse)
361                 
362                     outfile<<"(";
363                     numkh++;
364                     kuohaouse=1;
365                     if(cznum0==cznum)
366                     
367                         shoukuohao=1;
368                     
369                 
370                 outfile<<temp;
371                 
372                 if(sinuse&&cznum==0&&numkh>0)
373                 
374                     outfile<<")";
375                     numkh--;
376                     sinuse=0;
377                 
378                 if(sincal&&sinout&&sinuse&&count2>=2&&numkh>0)
379                 
380                     outfile<<")";
381                     numkh--;
382                     sinuse=0;
383                     count2=0;
384                 
385                 if(sincal&&sinout&&genhaouse&&count2==1&&numkh>0)
386                 
387                     outfile<<")";
388                     numkh--;
389                     sinuse=0;
390                 
391                 
392                 if(cosuse&&cznum==0&&numkh>0)
393                 
394                     outfile<<")";
395                     numkh--;
396                     cosuse=0;
397                 
398                 if(coscal&&cosout&&cosuse&&count3>=2&&numkh>0)
399                 
400                     outfile<<")";
401                     numkh--;
402                     cosuse=0;
403                     count2=0;
404                 
405                 if(coscal&&cosout&&genhaouse&&count3==1&&numkh>0)
406                 
407                     outfile<<")";
408                     numkh--;
409                     cosuse=0;
410                 
411                 
412                 if(tanuse&&cznum==0&&numkh>0)
413                 
414                     outfile<<")";
415                     numkh--;
416                     tanuse=0;
417                 
418                 if(tancal&&tanout&&tanuse&&count4>=2&&numkh>0)
419                 
420                     outfile<<")";
421                     numkh--;
422                     tanuse=0;
423                     count2=0;
424                 
425                 if(tancal&&tanout&&genhaouse&&count4==1&&numkh>0)
426                 
427                     outfile<<")";
428                     numkh--;
429                     tanuse=0;
430                 
431                 
432                 
433                 if(genhaouse&&cznum==0&&numkh>0)
434                 
435                     outfile<<")";
436                     numkh--;
437                     genhaouse=0;
438                 
439                 if(genhao&&genhaoout&&genhaouse&&count1>=2&&numkh>0)
440                 
441                     outfile<<")";
442                     numkh--;
443                     genhaouse=0;
444                     count1=0;
445                 
446                 if(genhao&&genhaoout&&genhaouse&&count1==1&&numkh>0)
447                 
448                     outfile<<")";
449                     numkh--;
450                     genhaouse=0;
451                 
452                 
453                 
454                 if(pingfanguse&&cznum==0&&numkh>0)
455                 
456                     outfile<<")^2 ";
457                     numkh--;
458                     pingfanguse=0;
459                 
460                 if(pingfang&&pingfangout&&pingfanguse&&count0>=2&&numkh>0)
461                 
462                     outfile<<")^2 ";
463                     numkh--;
464                     pingfanguse=0;
465                     count0=0;
466                 
467                 if(pingfang&&pingfangout&&pingfanguse&&count0==1&&numkh>0)
468                 
469                     outfile<<")^2 ";
470                     numkh--;
471                     pingfanguse=0;
472                 
473                 
474                 
475                 if(kuohao&&kuohaouse&&choose1&&count>=2&&numkh>0)
476                 
477                     outfile<<")";
478                     numkh--;
479                     kuohao=0;
480                     kuohaouse=0;
481                 
482                 if(kuohao&&kuohaouse&&cznum==0&&numkh>0)
483                 
484                     outfile<<")";
485                     numkh--;
486                     kuohaouse=0;
487                 
488                 if(shoukuohao&&kuohaouse&&cznum==1&&numkh>0)
489                 
490                     outfile<<")";
491                     numkh--;
492                     kuohaouse=0;
493                 
494                 count0++;
495                 count1++;
496                 count++;
497                 count2++;
498                 count3++;
499                 count4++;
500                 while(numkh>0)
501                 
502                     numkh--;
503                     outfile<<")";
504                 
505                 if(cznum>0)
506                 
507                     if(jjcc==1) outfile<<"+";
508                     else if(jjcc==2) outfile<<"-";
509                     else if(jjcc==3) outfile<<"*";
510                     else if(jjcc==4) outfile<<"/";
511                 
512             
513             num0++;
514             outfile<<endl<<endl;
515         
516      
517 
View Code

如果能将这些相似功能的代码整合成一个模块,多次调用(如+、-、*、/、括号、幂运算的添加)代码量至少能缩短1/3还便于维护

总结

  通过这次结对编程对对方代码的分析,收获良多。和其他人合作,能让你观察到其他人的思考过程。你还可以看到他们写代码的方式。你能学会他们使用的工具。对于很多人来说,找到其他开发者一起合作,是一件奢侈的事情。但是所有人都可以用一种另外的方式学习别人的经验和技巧:仔细研读其他人写的代码。阅读高质量代码,就像是阅读一本好的小说。

以上是关于结对编程个人项目分析的主要内容,如果未能解决你的问题,请参考以下文章

结对编程 --- 分析搭档个人项目代码

结对编程队友个人项目分析

总结如何复用个人项目实现结对编程项目,以及结对编程的经验教训。

结对编程 搭档个人项目分析

结对编程队友个人项目优缺点分析

结对编程队友的个人项目代码分析