软件工程个人项目--Word frequency program
(一)工程设计时间预计
1.代码编写:2小时
(1)文件夹的遍历以及筛选;
(2)文件夹的读取,以及对读取字符的操作;
(3)所得结果排序,以及文件输出。
2.程序调试:1小时
(1)编写数据。
(2)测试以及调试。
3.预计总时间:3小时
(二)工程所用实际时间
1.代码编写:4小时
(1)文件夹的遍历以及筛选;
(2)文件夹的读取,以及对读取字符的操作;
(3)所得结果排序,以及文件输出。
2.程序调试:3小时
(1)编写数据。
(2)测试以及调试。
实际所用总时间:7小时
(三)关于实际时间比预计时间长的分析
在这一过程中对于文件的递归遍历始终无法做到,最终只能用cmd命令在windows环境下dir这个指令和列出文件目录有关
(四)程序部分代码
遍历文件
void Init(int argc,char *argv[]){ string baseDir,command; baseDir=argv[argc-1]; if (baseDir[baseDir.length()-1]!='\\') baseDir+='\\'; command="dir "+baseDir+"*.txt "+baseDir+"*.cpp "+baseDir+"*.h "+baseDir+"*.cs"+" /S"+" /B > result.txt"; system(command.c_str()); return; }
模式选择
for(i=0;i<(*count);i++){ if(argc==2){ //模式一 for(k=0;w[i].danci[k]!='\0'&&str[k]!='\0';k++) if(w[i].danci[k]!=str[k] && w[i].danci[k]+'A'-'a'!=str[k] && w[i].danci[k]!=str[k]+'A'-'a') break; if(w[i].danci[k]=='\0'&&str[k]=='\0'){ flag1=1; w[i].times++; if(w[i].danci[0]>str[0]) strcpy_s(w[i].danci,str); break; } } else if(argc==3){ //模式二 int m,n; for(m=strlen(w[i].danci)-1;m>=0;m--) if(w[i].danci[m]>='a'&&w[i].danci[m]<='z' || w[i].danci[m]>='A' &&w[i].danci[m]<='Z') break; for(n=strlen(str)-1;n>=0;n--) if(str[n]>='a'&&str[n]<='z' || str[n]>='A'&&str[n]<='Z') break; if(m!=n) break; else{ for(k=0;k<=m;k++) if(w[i].danci[k]!=str[k] && w[i].danci[k]+'A'-'a'!=str[k] && w[i].danci[k]!=str[k]+'A'-'a') break; if(k=m+1){ flag1=1; w[i].times++; if(strcmp(w[i].danci,str)>0) strcpy_s(w[i].danci,str); break; } } } }
(五)代码分析
1.分析报告
(六)所使用的测试用例
测试空文件夹
测试有相同单词的文件
测试有文件中包含文件的文件
测试有不符合后缀的文件
测试-e中数字不同,单词相同的文件
测试-e中大小写不同的文件
测试字母+数字+字母+数字的文件
(七)感想
这次的编程与预计差别非常大,让我了解了很多自己不懂得知识。通过网上搜索和查阅《c++prime》这本书让我了解了很多。