(一)工程设计时间预计
1.代码编写:1小时30分钟
(1)文件夹的遍历以及筛选;
(2)文件夹的读取,以及对读取字符的操作。
(3)所得结果排序,以及文件输出。
2.程序调试:1小时
(1)编写数据。
(2)测试以及调试。
3.程序优化:1小时;
程序优化主要通过以下几个方面:
(1)排序的优化;
(2)存储数据的优化:通过开更大的空间以换取时间上的优化;
(3)查找算法的优化;
预计总时间:3小时30分钟
(二)工程所用实际时间
1.代码编写:2小时30分钟
(1)文件夹的遍历以及筛选:1小时30分钟;
(2)文件夹的读取,以及对读取字符的操作:1小时;
(3)所得结果排序,以及文件输出:30分钟;
2.程序调试:1小时
(1)编写数据:15分钟;
(2)测试以及调试:45分钟;
3.程序优化:1小时;
程序优化主要通过以下几个方面:
(1)排序的优化;
(2)存储数据的优化:通过开更大的空间以换取时间上的优化;
(3)查找算法的优化;
实际所用总时间:4小时30分钟。
(三)关于实际时间比预计时间长的分析
在这一次的程序编写过程中,代码编写实际所用时间比预计时间多了1个小时,这一个小时主要多在文件夹的遍历以及筛选这一部分上,
由于平时c++用的比较少,所以对于c++的文件操作不太了解,在文件夹的遍历以及筛选这一部分上遇到了很大的问题,
通过查阅《c++prime》,在网上搜索相关答案,以及请教同学顺利的解决了这个问题,虽然在这一部分比预计多花了很多时间,
但是通过这一过程,让我对c++对文件的操作有了更深的了解。
(四)程序优化
1.代码优化分析
通过分析,代码主要分为两部分进行优化:
(1)记录一个单词,与之前所记录的单词进行比较,这一部分的优化是整个程序性能提升的最重要部分。
(2)记录完所有单词之后,进行排序,排序算法可以进行优化。
2.可优化部分代码:
(1)单词查找部分代码
1 if (y6==1) //为拓展
2 {3 while ((y2
4 {5 if (a[y2]==a[m])6 {7 x4=0;8 for (y3=0;y3<=a[m];y3++) //不区分大小写比较
9 {10 ch1=hjk[m][y3];ch2=hjk[y2][y3];11 if (hjk[m][y3]<=90) ch1=hjk[m][y3]+32;12 if (hjk[y2][y3]<=90) ch2=hjk[y2][y3]+32;13 if (ch1!=ch2) x4=1;14 }15
16 if (x4==0) //找到匹配
17 {18 x3=1;19 if (hjk[m]
28 {29 len1=hjk[m].length ();30 while ((y2
36 {37 ch1=hjk[m][y3];ch2=hjk[y2][y3];38 if (hjk[m][y3]<=90) ch1=hjk[m][y3]+32;39 if (hjk[y2][y3]<=90) ch2=hjk[y2][y3]+32;40 if (ch1!=ch2) x4=1;41 }42 if (x4==0) //找到匹配
43 {44 x3=1;45 if (hjk[m]
(2)排序代码
1 for (i=1;i<=m-1;i++)2 for (j=i+1;j<=m;j++)3 if (b[i]
13 {14 if (b[i]==b[j])15 {16 if (hjk[i]>hjk[j])17 {18 xy=b[i];19 b[i]=b[j];20 b[j]=xy;21 sw=hjk[i];22 hjk[i]=hjk[j];23 hjk[j]=sw;24 }25 }26 }
3.优化方法
将记录单词的方式变为有序的记录,这样查找时可以根据当前单词的ASCII码值进行快速的查找,而不必从头到尾逐一查找,
并且由于是有序的存储,在之后的排序过程中省去了字典序的排序,只需要将频率高的单词移动至输出的前端即可。
4.优化前后性能对比
(1)所使用的测试用例:
(2)优化前分析报告
(3)优化后分析报告
(4)优化分析
可以看到,同用一个测试用例,优化前后效率有较大的差距,优化前需要22秒左右,优化后只需要10秒,同时可以认定越大的测试用例优化效果越明显。
(五)所使用的测试用例
(1)测试空文件夹
(2)测试有相同单词的文件
(3)测试有文件中包含文件的文件
(4)测试有不符合后缀的文件
(5)测试-e中数字不同,单词相同的文件
(6)测试-e中大小写不同的文件
(7)测试字母+数字+字母+数字的文件
(8)大规模数据监测
(9)大规模数据监测
(10)大规模数据监测
(六)收获与感想
在这次软件工程作业中,回顾了很多c++的相关知识,尤其是c++的字符串操作和文件操作,在文件夹的遍历以及筛选这一
部分上遇到了很大的问题,通过查阅《c++prime》,在网上搜索相关答案,以及请教同学顺利的解决了这个问题,虽然在这一
部分比预计多花了很多时间,但是通过这一过程,让我对c++对文件的操作有了更深的了解。
总之通过这一次练习,巩固了很多之前学过的知识,也学到了一些新的知识,希望能够在今后的课程中学到更多新的知识。