合作者:201631062204 201631062104
代码地址:
基本功能;https://gitee.com/Lin-Ling/WordCount/tree/wc
扩展功能:https://gitee.com/Lin-Ling/wordcount_extension/tree/master
1.任务简述
两人组队完成WordCount的基本功能及扩展功能(可以自行增加功能),并对其进行一系列测试和优化,形成可稳定运行的版本。
2.PSP表格
PSP2.1 |
PSP阶段 |
预估耗时 (分钟) |
实际耗时 (分钟) |
Planning |
计划 |
40 |
30 |
· Estimate |
· 估计这个任务需要多少时间 |
180 |
240 |
Development |
开发 |
360 |
600 |
· Analysis |
· 需求分析 (包括学习新技术) |
120 |
100 |
· Design Spec |
· 生成设计文档 |
0 |
0 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
60 |
30 |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
60 |
20 |
· Design |
· 具体设计 |
60 |
80 |
· Coding |
· 具体编码 |
300 |
420 |
· Code Review |
· 代码复审 |
120 |
150 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
120 |
120 |
Reporting |
报告 |
120 |
60 |
· Test Report |
· 测试报告 |
30 |
40 |
· Size Measurement |
· 计算工作量 |
30 |
40 |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
60 |
50 |
|
合计 |
1660 |
1953 |
3.代码互审
在项目的第一阶段,我们一个用的C语言,一个用的C#语言,后面我们商量的是都用C语言,因为C语言是我们最早接触的编程语言。我们的编码过程是将整体分成小问题,然后通过函数逐步实现,最后在在主函数里面调用,所以在代码互审的时候,我们只需要检查对方的函数是否能够正确实现功能(在主函数里调用即可)。我们两个基本上都实现了基本和扩展功能。
4.代码说明
1 #include<stdio.h> 2 #include<io.h> 3 #include<string.h> 4 5 void writeToFile(char *fileName,char* feature,int num)//打开文件,写数据进去 6 { 7 /*fileName 表示读取的文件名 8 * feature表示记录的内容 单词或者字母或者行数 9 */ 10 FILE *f=NULL; 11 f=fopen("F:\\gcc\\bin\\result.txt","a"); 12 if(f==NULL) 13 { 14 printf("failed when wrinting the count to file\n"); 15 } 16 //写入文件 17 fprintf(f,"%s,%s,%d\n",fileName,feature,num); 18 fclose(f); 19 } 20 21 void c_num(char *file)//统计字符数目 22 { 23 FILE *f; 24 char* a="c_num:"; 25 f=fopen(file,"r"); 26 char c; //char 27 int num=0; //char num 28 if(f==NULL) 29 { 30 printf("file is null"); 31 } 32 else 33 while(!feof(f)) 34 { 35 c=fgetc(f); 36 if(c!=‘ ‘ && c!= ‘\n‘ && c!=‘\t‘) 37 num++; 38 } 39 fclose(f); 40 printf("cnum %d ",num); 41 42 writeToFile(file,a,num); 43 } 44 45 void word_num(char *file)//统计单词个数 46 { 47 FILE *f; 48 char* a="word_num:"; 49 f=fopen(file,"r"); 50 char ch; 51 int aword,cword=0; 52 if(f==NULL) 53 { 54 printf("file is null"); 55 } 56 else 57 while(!feof(f)) 58 { 59 ch=fgetc(f); 60 if((ch>=‘a‘ &&ch <= ‘z‘)||(ch>= ‘A‘&&ch<=‘Z‘) || ch==‘_‘) 61 aword=1; 62 else if(aword) 63 { 64 cword++; 65 aword=0; 66 } 67 } 68 fclose(f); 69 printf("wordnum:%d ",cword); 70 writeToFile(file,a,cword); 71 } 72 73 void crl_num(char *file)//统计行数 74 { 75 FILE *f; 76 f=fopen(file,"r"); 77 char* s="crl_num:"; 78 int crl=1; 79 char a; 80 if(f==NULL) 81 { 82 printf("file is null"); 83 } 84 else 85 while(!feof(f)) 86 { 87 a=fgetc(f); 88 if(a==‘\n‘ || a==‘\t‘) 89 crl++; 90 } 91 fclose(f); 92 printf("crlnum:%d ",crl); 93 writeToFile(file,s,crl); 94 } 95 96 void crl_num(char *file)//统计空行数 97 { 98 FILE *f; 99 f=fopen(file,"r"); 100 char* s="crl_num:"; 101 int crl=1; 102 char a; 103 if(f==NULL) 104 { 105 printf("file is null"); 106 } 107 else 108 while(!feof(f)) 109 { 110 a=fgetc(f); 111 if(a==‘\n‘ || a==‘\t‘) 112 crl++; 113 } 114 fclose(f); 115 printf("crlnum:%d ",crl); 116 writeToFile(file,s,crl); 117 } 118 119 void blankline_num(char *file)//返回文件空行数 120 { 121 FILE *f; 122 int b_num=0;//空行数 123 int ch_num=0;//字符个数 124 char* a="word_num:"; 125 char ch; 126 f=fopen(file,"r"); 127 if(f==NULL) 128 {printf("file is null");} 129 else 130 while(!feof(f)) 131 { 132 ch=fgetc(f); 133 if(ch==‘\n‘) 134 { 135 if(ch_num<=1) b_num++; 136 ch_num=0; 137 } 138 else if(ch!= ‘ ‘&& ch!= ‘\t‘ && ch!= ‘}‘ ) 139 ch_num++; 140 141 else if(ch==‘}‘) 142 b_num++;//只有一个‘}’的空行数 143 144 } 145 fclose(f); 146 printf("blanklinenum:%d ",b_num); 147 writeToFile(file,a,b_num); 148 } 149 150 void noteline_num(char *file)//返回注释行 151 { 152 FILE *f; 153 int ch_num =0; 154 int note_num=0; 155 char ch; 156 const char* a="noteline_num:"; 157 f=fopen(file,"r"); 158 if(f==NULL) 159 { 160 printf("file is null"); 161 } 162 else 163 while(!feof(f)) 164 { 165 ch =fgetc(f); 166 if(ch==‘\n‘) 167 { 168 if(ch_num==2) note_num++; 169 ch_num=0; 170 } 171 else if (ch==‘/‘) ch_num++; 172 else if(ch_num==1) 173 { 174 if(ch==‘/‘) 175 ch_num++; 176 } 177 178 } 179 fclose(f); 180 printf("notelinenum:%d ",note_num); 181 writeToFile(file,a,note_num); 182 } 183 184 void codeline_num(char *file)//统计代码行数 185 { 186 FILE *f; 187 int ch_num=0; 188 int code_num=0; 189 int tag=0; 190 int flag=0; 191 char a; 192 const char* s="codeline_num:"; 193 f=fopen(file,"r"); 194 if(f==NULL) 195 { 196 printf("file is null"); 197 } 198 else 199 while(!feof(f)) 200 { 201 a=fgetc(f); 202 if(flag==2) 203 { 204 flag=0;tag++; 205 } 206 else 207 { 208 if(a==‘\n‘ && ch_num>1) 209 { 210 code_num++; 211 ch_num=0; 212 } 213 else if(a!=‘ ‘ && a!=‘\n‘ && a!=‘\t‘ &&a!=‘/‘) 214 ch_num++; 215 else if(a==‘/‘) 216 flag++; 217 } 218 219 } 220 fclose(f);printf("codelinenum:%d ",code_num); 221 writeToFile(file,s,code_num); 222 } 223 224 void searchfile()//寻找制定行数 225 { 226 struct _finddata_t filefind; 227 long handle; 228 int t=0; 229 if((handle=_findfirst("E:\\wordcount\\*.txt",&filefind))== -1L) 230 { 231 printf("file not found\n"); 232 } 233 else 234 do 235 { 236 t++; 237 printf("find file :%s\n",filefind.name); 238 }while(_findnext(handle,&filefind)==0); 239 240 _findclose(handle); 241 printf("文件数量:%d\n ",t); 242 } 243 244 int main(int argc, char* argv[]) 245 { 246 FILE *fp; 247 while(1) 248 { 249 if((fp=fopen(argv[2],"r"))==NULL) 250 { 251 printf("FileNull\n\n\n"); 252 scanf("%s%s%s",argv[0],argv[1],argv[2]); 253 continue; 254 } 255 else if(!strcmp(argv[1],"-w")) 256 word_num(argv[2]); 257 else if(!strcmp(argv[1],"-c")) 258 c_num(argv[2]); 259 else if(!strcmp(argv[1],"-l")) 260 crl_num(argv[2]); 261 else if(!strcmp(argv[1],"-a")) 262 { 263 blankline_num(argv[2]); 264 noteline_num(argv[2]); 265 codeline_num(argv[2]); 266 } 267 else if(!strcmp(argv[1],"-s")) 268 { 269 searchfile(); 270 } 271 else 272 printf("NullPoint\n"); 273 printf("\n\n"); 274 scanf("%s%s%s",argv[0],argv[1],argv[2]); 275 } 276 return 0; 277 }
5.代码测试以及运行结果
基本功能
扩展功能
测试
6.总结
(1)代码阶段:后面商量一起用C语言写,所以代码都是一起商量着完成的。完成需要的功能模块就好了。
(2)体会:组队合作完成一个代码或者项目这个事情对于我们来说并不陌生,因为上学期也团队合作过完成一个完整的项目,上学期结束的时候还有一个实践活动,也是团队完成一个项目。所以过程还是没有什么矛盾的。有矛盾,我们会解决的比较迅速,所以时间在处理分歧上面并没有浪费太多。这次合作还是学习到了很多,最后谢谢我的队友。
原文:https://www.cnblogs.com/Lin-Ling/p/9823455.html