队友个人项目代码分析

我的队友在本次编程任务中使用的语言是c++,并且使用了类来实现。我们先分析一下他的代码中的几个缺点。

  1. 命名不规范。具体体现在下面几个方面:

    类名首字母没有大写:

      

     函数名没有按驼峰命名法:

     

       2.缺少注释

    代码中缺少注释且不能从函数、类和变量的命名中直接理解其用法和作用。

       3.大括号的用法和缩进容易让人暴躁,具体可以看下图体会一下。

     

除了这些编码习惯上的缺点外,在别的方面我的队友还是有很多优点值得我学习的。

  1. 使用类而不是直接用一个个函数来实现需求,这样的好处就是可拓展性强,增加、修改一些功能都很方便,不需要进行太多的改动。这对于qq群中变来变去的需求来说就显得很有必要了。
  2. 把账号和密码保存在文档中而不是程序中,实现了创建新的账户的功能。把数据保存在文档中可以方便对数据进行修改二不需要改动程序。

   

  1 #include<iostream>
  2 #include<stdlib.h>
  3 #include<sstream>
  4 #include<ctime>
  5 #include<windows.h>
  6 #include <fstream>
  7 using namespace std;
  8 class shijuan{
  9     public: 
 10     int X,N;
 11     string zhang;
 12     string fuhao[6]={"+","-","*","/","^2",""};
 13     shijuan(string z, int x,int n){
 14             X=x;
 15             zhang=z;
 16             N=n;
 17     }
 18     string creatcao(int max,int min){
 19         stringstream T;
 20             int k=-1;
 21             string TT;
 22             double temp=0;
 23             int m=rand()%max+min;
 24             for(int j=0;j<m;j++){
 25                 if(k==-1){
 26                 int f=rand()%4;                    
 27                 if(f==0&&m>2&&j<=m-2&&j!=0){
 28                 T<<"(";
 29                 k=j;
 30             }
 31                 }
 32                 int cao=rand()%100+1;
 33                 T<<cao;        
 34                 if(k!=-1)                
 35                 if(k!=-1&&j>=k+1){
 36                 int f=rand()%3;    
 37                 int J;
 38                 if(k==0)
 39                  J=m-2;
 40                 else
 41                  J=m-1;
 42                 if((f==0)||j==J){    
 43                 T<<")";            
 44                 k=-1;}
 45                 }
 46                 if(j!=m-1){
 47                 int fh=rand()%4;
 48         
 49                 T<<fuhao[fh];
 50                 }        
 51                 }        
 52             TT=T.str();
 53             return TT;
 54         }
 55         string creatchu(int max,int min,int K){
 56             stringstream T;
 57             int k=K;
 58             int m=rand()%max+min;
 59             for(int j=0;j<m;j++){
 60                 int r=rand()%4;
 61                 int fu=rand()%4;
 62                 if(r==0){
 63                 T<<fuhao[5];
 64                 T<<creatcao(1,1);
 65                 if(j!=m-1)T<<fuhao[fu];
 66                 k=1;    
 67                 }
 68                 else if(r==1){                    
 69                     T<<creatcao(1,1)<<fuhao[4];
 70                     if(j!=m-1)T<<fuhao[fu];
 71                     k=1;
 72                 }
 73                 else{
 74                 T<<creatcao(1,1);
 75                 if(j!=m-1)
 76                 T<<fuhao[fu];
 77                 else{                    
 78                     if(k==0){
 79                     T<<fuhao[fu];
 80                     int o=rand()%2;
 81                     if(o==0){
 82                         T<<fuhao[5];
 83                 T<<creatcao(1,1);
 84                     }    
 85                     else{
 86             T<<creatcao(1,1)<<fuhao[4];
 87                     }
 88                     }        
 89                 }
 90                     }
 91             }
 92             string TT=T.str();
 93             return TT;
 94         }
 95         
 96         string creat(int n){
 97         srand((unsigned)time(NULL));
 98         stringstream T;        
 99     if(X==0){//小学难度 
100         for(int i=0;i<n;i++){
101             T<<"("<<i+1<<")";
102             string ss=creatcao(5,2);//查重!!! 
103             
104                 string name=zhang+"\\已有所有试题.txt";
105                 ifstream fp(name.c_str());
106                 string h="";string H="";
107                 int k=0;
108                 for(int ii=0;;ii++){
109                     fp>>h;
110                     if(h==H)
111                     break;
112                     H=h;
113                     int l=h.length();
114                     int jj=0;
115                     for(int j=0;j<l;j++)
116                     if(h[j]==')'){
117                         jj=j;
118                         break;
119                     }
120                     string hh=h.substr(jj+1,l-jj+3);
121                     if(ss==hh)
122                      k=1;
123                     
124                 } 
125                 if(k==0){T<<ss;
126             T<<"=?";
127             T<<"\n\n";    
128                 }else
129                 i--;
130                         
131         }
132     } 
133     else if(X==1){//初中难度 
134         for(int i=0;i<n;i++){
135             
136             T<<"("<<i+1<<")";
137 
138                 string ss=creatchu(5,2,0);//查重!!! 
139             
140                 string name=zhang+"\\已有所有试题.txt";
141                 ifstream fp(name.c_str());
142                 string h="";string H="";
143                 int k=0;
144                 for(int ii=0;;ii++){
145                     fp>>h;
146                     if(h==H)
147                     break;
148                     H=h;
149                     int l=h.length();
150                     int jj=0;
151                     for(int j=0;j<l;j++)
152                     if(h[j]==')'){
153                         jj=j;
154                         break;
155                     }
156                     string hh=h.substr(jj+1,l-jj+3);
157                     if(ss==hh)
158                      k=1;
159                     
160                 } 
161                 if(k==0){T<<ss;
162             T<<"=?";
163             T<<"\n\n";    
164                 }else
165                 i--;
166         }
167         }
168     else if(X==2){//高中难度 
169         for(int i=0;i<n;i++){
170             T<<"("<<i+1<<")";
171             
172             stringstream TTT;
173             int m=rand()%5+1;
174             
175             for(int j=0;j<m;j++){
176                 int t=rand()%6;
177                 int k=0;
178                 int ff=rand()%4;
179                 if(t==0){
180                     TTT<<"sin"<<creatchu(1,1,1)<<"π"; 
181                     k=1;
182                 }
183                 else if(t==1){
184                     TTT<<"cos"<<creatchu(1,1,1)<<"π"; 
185                     k=1;
186                 }
187                 else if(t==2){
188                     TTT<<"tan"<<creatchu(1,1,1)<<"π"; 
189                     k=1;
190                 }
191                 else{
192                     TTT<<creatchu(1,1,1);
193                 }
194                 if(j!=m-1)TTT<<fuhao[ff];
195                 else{
196                     if(k==0){    TTT<<fuhao[ff];
197                         int o=rand()%3;
198                         if(o==0)
199                     TTT<<"sin"<<creatchu(1,1,1)<<"π"; 
200                 else if(o==1)
201                     TTT<<"cos"<<creatchu(1,1,1)<<"π"; 
202                 else if(o==2)
203                     TTT<<"tan"<<creatchu(1,1,1)<<"π";
204                     }
205                 }
206             }
207                 string ss;//查重!!! 
208                     TTT>>ss;
209                 string name=zhang+"\\已有所有试题.txt";
210                 ifstream fp(name.c_str());
211                 string h="";string H="";
212                 int k=0;
213                 for(int ii=0;;ii++){
214                     fp>>h;
215                     if(h==H)
216                     break;
217                     H=h;
218                     int l=h.length();
219                     int jj=0;
220                     for(int j=0;j<l;j++)
221                     if(h[j]==')'){
222                         jj=j;
223                         break;
224                     }
225                     string hh=h.substr(jj+1,l-jj+3);
226                     if(ss==hh)
227                      k=1;
228                     
229                 } 
230                 if(k==0){T<<ss;
231             T<<"=?";
232             T<<"\n\n";    
233                 }else
234                 i--;
235         }
236     } 
237 string TT=T.str();
238 return TT;
239     }
240     };
241 class zhanghu{
242     private:
243         string zhanghao,mima;int n=0;int X=0;int NN=0;
244     public:
245         shijuan *a[1000];
246         zhanghu(string z,string mi,int N=0,int x=0){
247             zhanghao=z;
248             mima=mi;
249             n=N;
250             X=x;            
251         string filePath = ""; 
252         string saveCompareRaw = filePath + zhanghao;
253         
254         bool flag = CreateDirectory(saveCompareRaw.c_str(), NULL);
255         
256         
257             ofstream outFile;
258                 
259         
260         
261             string sjs=""+zhanghao+"\\已有试卷数.txt";
262         
263                 outFile.open(sjs.c_str());
264         outFile<<n;
265         outFile.close();
266         string name=""+zhanghao+"\\类型.txt";
267         outFile.open(name.c_str());
268         outFile<<X;
269         outFile.close();
270         }
271         zhanghu(){
272             n=getn();
273         }
274         void lei(int x=0){
275             X=x;
276         ofstream outFile;
277         string name=""+zhanghao+"\\类型.txt";
278         outFile.open(name.c_str());
279         outFile<<X;
280         outFile.close();
281         }
282         int getlei(){
283             return X;
284         }
285         void creatsj(int m){
286             
287             a[n]= new shijuan(zhanghao,X,NN);
288             string S=a[n]->creat(m);
289             NN+=m;
290             n++;
291         
292         time_t tt = time(NULL);//这句返回的只是一个时间cuo
293          tm* t= localtime(&tt);
294          stringstream ti;
295  
296         ti<<t->tm_year + 1900<<"-"<< t->tm_mon + 1<<"-"<<t->tm_mday<<"-"<<t->tm_hour<<"-"<<t->tm_min<<"-"<<t->tm_sec;
297 
298  
299           string Time=ti.str();
300         
301         
302         
303         string name=""+zhanghao+"\\"+Time+".txt";
304         string sjs=""+zhanghao+"\\已有试卷数.txt";
305         
306         string syt=""+zhanghao+"\\已有所有试题.txt";
307             ofstream outFile;
308         outFile.open(syt.c_str(),ios::app);
309         outFile<<"||"<<Time<<"\n\n";
310         
311         outFile<<S;
312         outFile.close();
313         
314         outFile.open(name.c_str());
315         outFile<<S;
316         outFile.close();
317         outFile.open(sjs.c_str());
318         outFile<<n;
319         outFile.close();    
320         }
321     int  getn(){
322         string name=""+zhanghao+"\\已有试卷数.txt";
323         ifstream fp(name.c_str());
324         int s;
325         fp>>s;
326         return s;
327     }     
328         
329         
330 };
331 
332 class ht{
333     private:
334         int N=0;
335     public:
336         zhanghu *zh[1000];
337     ht(string n){
338         N=getN();
339         string name="已有账户.txt";
340         ifstream fp(name.c_str());
341         string z="",m="";
342         for(int i=0;i<N;i++){
343             fp>>z;
344             fp>>m;
345             string name2=z+"//已有试卷数.txt";
346             ifstream fp2(name2.c_str());
347             int s;
348             fp2>>s;     
349             string name3=z+"//类型.txt";
350             ifstream fp3(name3.c_str());
351             int ss;
352             fp3>>ss; 
353             zh[i]=new zhanghu(z,m,s,ss);
354         }
355         
356     }
357     
358         int  getN(){
359         string name="已有账户数.txt";
360         ifstream fp(name.c_str());
361         int s;
362         fp>>s;
363         return s;
364     }     
365     
366     int creatzh(string zhanghao,string mima,int X){
367         int n=getN();
368              string name="已有账户.txt";
369         ifstream fp(name.c_str());
370         string s="";
371         int k=0;    
372         for(int i=0;i<n;i++){
373                 
374                 fp>>s;
375                 if(s==zhanghao){    
376                 cout<<"已存在的账户,创建   "<<zhanghao<<"  失败\n";
377                 k=1;
378                 break;
379                 }
380                 fp>>s;
381         }
382         if(k==0){
383         zh[N]=new zhanghu(zhanghao,mima,0,X);
384         N++;
385         string zhs="已有账户数.txt";
386         string yyzh="已有账户.txt";
387             ofstream outFile;
388                 outFile.open(zhs.c_str());
389                 
390         outFile<<N;
391         outFile.close();
392     
393                 outFile.open(yyzh.c_str(),ios::app);
394         outFile<<zhanghao<<endl;
395         outFile<<mima<<endl;
396         outFile.close();
397     cout<<"创建账户    "<<zhanghao<<"    成功,请重新登录此账户\n";
398     return N-1;    
399     }
400     else
401     return 9999;
402     }
403     int creatzzz(){
404             cout<<"请输入新账户名,密码,和试卷类型(小学请输入0,初中1,高中2)\n"
405         <<"中间使用空格隔开\n";
406         string z,m;int X;
407         cin>>z>>m>>X;
408             int i=creatzh(z,m,X);
409             if(i==9999)
410             return creatzzz();
411             else
412             return denglu(); 
413             
414                 
415     }
416 
417     
418     int  denglu(){
419         int N;
420         cout<<"请输入帐户和密码,中间用空格隔开;\n"
421         <<"可输入“#”加空格加“#”来注册新账户\n";
422         string z,m;int X;
423         cin>>z>>m;
424         if(z=="#"&&m=="#"){
425             return creatzzz();
426         } 
427         else{
428         
429         int n=getN();
430         string name="已有账户.txt";
431         ifstream fp(name.c_str());
432         string s="";
433         int k=0;    
434         for(int i=0;i<n;i++){
435                 fp>>s;
436                 if(s==z){    
437                 fp>>s;
438                 if(m==s){
439                 N=i;
440                 k=2;
441                 }
442                 else{
443                 cout<<"密码错误!\n";
444                 k=1;}
445                 break;
446                 }
447                 fp>>s;
448         }
449         if(k==0){
450             cout<<"此账户尚未注册\n";
451             return denglu();
452         }
453         else if(k==1)
454         return denglu();
455         else if(k==2){
456             cout<<"您好!,亲爱的 "<<z<<"  当前选择为";
457             switch(zh[N]->getlei()) 
458             {
459                 case 0:
460                 cout<<"小学出题\n"; 
461                 break;    
462                 case 1:
463                 cout<<"初中出题\n"; 
464                 break;
465                 case 2:
466                 cout<<"高中出题\n"; 
467                 break;
468             }
469             
470             return N;
471         }
472 }
473     }
474     
475     void Ti(int N){
476             cout<<"准备生成";
477         switch(zh[N]->getlei()) 
478             {
479                 case 0:
480                 cout<<"小学数学题目,请输入题目数量(10~30)\n"; 
481                 break;    
482                 case 1:
483                 cout<<"初中学题目,请输入题目数量(10~30)\n"; 
484                 break;
485                 case 2:
486                 cout<<"高中学题目,请输入题目数量(10~30)\n"; 
487                 break;
488             }
489         int m;
490         cin>>m;
491         while(m>30||m<10)
492         {cout<<"输入正确的题目数量(10~30)\n";
493         cin>>m; 
494         }
495         zh[N]->creatsj(m);
496         cout<<"生成题目成功\n";
497     
498     }
499 };
500 
501 int main(){
502     ht a("初始化");
503     int n=a.denglu();
504     a.Ti(n);int k=1;
505         do{
506         
507         cout<<"请选择操作:\n输入“c”为继续当前题目类型出题\n";
508          cout<<"输入“小学”或“初中”或“高中”切换出题模式出题\n";
509          cout<<"输入“switch”切换账户\n";
510            cout<<"输入“quit”退出程序\n";
511            string sss;
512            cin>>sss;int ss=6;
513            if(sss=="c")ss=0;
514            else if(sss=="小学")ss=1;
515             else if(sss=="初中")ss=2;
516              else if(sss=="高中")ss=3;
517               else if(sss=="switch")ss=4;
518                else if(sss=="quit")ss=5;
519                else ss=6;
520             switch(ss){
521                 case 0:
522                 a.Ti(n);
523             break;
524         case 1:
525             a.zh[n]->lei(0);    
526             a.Ti(n);
527             break;
528         case 2:
529             a.zh[n]->lei(1);    
530             a.Ti(n);
531             break;
532         case 3:
533             a.zh[n]->lei(2);    
534             a.Ti(n);
535             break;
536         case 4:
537              n=a.denglu();
538              break;
539         case 5:
540             k=0;
541             break;
542         case 6:
543              cout<<"请输入正确的操作\n";
544             }
545     }while(k!=0);
546         
547     return 0;
548 } 
View Code

    

      

猜你喜欢

转载自www.cnblogs.com/watkot/p/9715067.html
今日推荐