第二次个人作业1.0
1、仓库代码地址:https://gitee.com/XMHbb/software_engineering
2、PSP表格:
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | 20 | |
| · Estimate | · 估计这个任务需要多少时间 | 20 | |
| Development | 开发 | 130 | |
| · Analysis | · 需求分析 (包括学习新技术) | 50 | |
| · Design Spec | · 生成设计文档 | 20 | |
| · Design Review | · 设计复审 | 30 | |
| · Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 10 | |
| · Design | · 具体设计 | 30 | |
| · Coding | · 具体编码 | 50 | |
| · Code Review | · 代码复审 | 90 | |
| · Test | · 测试(自我测试,修改代码,提交修改) | 30 | |
| Reporting | 报告 | 30 | |
| · Test Repor | · 测试报告 | 30 | |
| · Size Measurement | · 计算工作量 | 20 | |
| · Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 30 | |
| 合计 | 600 |
3、每日日志
1)学习时段:1月6日 1430-1730
2)学习内容:编写作业的随笔,建立仓库Readme文件,对Wordcount程序进行思路整理,编写程序
3)学习体会:对做一个小型程序的过程有一个切身的体会,感觉如果编程能力能更上一层楼,会对这门课程抱有更浓厚兴趣!
4)自我效率评价:对时间和多项事情之间的安排不够妥当,总是会因为手头上的事情,而不能够每天花时间在学习编程语言上,等到用起来的时候,又无从下手!
1)学习时段:1月7日 1630-1730
2)学习内容:C语言规则学习
3)学习体会:用的是谭浩强的C语言辅导书,觉得规则再熟悉熟悉,看懂C语言程序应该没有问题!
4)自我效率评价:从目录下手,直接看定义类型,定义数组,三种程序结构等编程规则,效率不错,有兴趣学下去。
1)学习时段:1月8日 1930-2130
2)学习内容:编写作业的博客,编写程序,补充博客里的内容;
3)学习体会:在网上看别人的程序,先看懂,了解规则之后,自己慢慢开始动手写程序。
4)自我效率评价:碰到程序要花点时间,然后对一些功能点,没有很好的思路去解决,效率不高!
1)学习时段:1月10日 2130-2430
2)学习内容:编写作业的博客,编写程序,补充博客里的内容;
3)学习体会:百度查找资料,自己在visualC++中,试着编写找到的程序中没有的功能点,但是碰到“系统找不到指定文件”的问题,暂时没有解决。
4)自我效率评价:再花时间在了解C语言的规则上,慢慢熟悉程序的编写,应该慢慢可以上手,现在感觉最重要的是自己有思路去解决问题,再考虑代码怎么编写。
4、解题思路
1.看到这个题目,首先,编写博客的要求、编码的要求以及程序功能都比较复杂,所以我把整个题目重新在纸上整理一遍,然后开始把博客的大点都列出来,再一一往里面填充内容;
2.由于Wordcount这个程序十分经典,在网上有很多相关的资料,所以百度上就可以找到程序的代码,甚至是类似的作业。
5、设计实现思路
1.首先,考虑用C语言进行编程。整个wordcount程序功能分为几个模块,分别是统计文件的字符数;统计文件的单词总数;统计文件的有效行数;统计文件中各单词的出现次数,最终只输出频率最高的10个;
2.关于统计文件字符数的功能,先要打开文件,用if语句判断是否打开成功,将打开的文件里面的字符赋值给ch,利用while语句,当ch不等于文件结尾字符EOF,即让c加一,最后关闭文件再输出c,得到整个文件的字符数;
3.关于统计文件单词总数的功能,同样要打开文件,因为不区分大小写,所以先可以将文件中所有字符均变为小写字母,创建新数组集合ch[ ],将字符串依次放入其中,在赋值之前,先判断是否与数组中的字符串相同,相同即舍弃,不同则赋值并使得w加一,最后关闭文件再输出w,得到整个文件的单词总数,且不重复。
4.关于统计文件有效行数,利用if-else语句,将空行的特征(只含有‘\n’一个字符)作为条件,如果符合,则赋值给ch,但r不加一,如果不符合,仍赋值给ch,r加一。将打开的文件关闭,并输出r,得到文件的有效行数。
5.整个程序代码中有两个类,一个是整数型,一个是字符类型;有五个函数,一个主函数输出最终的结果,四个可调用函数独立执行某一个功能;统计字符数、单词总数、有效行数的功能函数不需要画出流程图。
6、性能分析图
7、代码说明
1.文件字符数统计:
void CharCount()
{
FILE *fp;
int c = 0;
char ch;
if((fp = fopen("H:\C\Wordcount\Wordcount\file.txt","r")) == NULL)
{
printf("Failure!");
}
ch = fgetc(fp);
while(ch != EOF)
{
c ++;
ch = fgetc(fp);
}
printf("char count is :%d.\n",c);
fclose(fp);
}
2.文件单词总数统计(不区分大小写且不重复):
void WordCount()
{
FILE *fp;
int w = 0;
char ch;
if((fp = fopen("H:\C\Wordcount\Wordcount\file.txt","r")) == NULL)
{
printf("Failure!");
}
if(ch>='A'&&ch<='Z')
{
ch+=32;
ch = fgetc(fp);
}
else:
ch = fgetc(fp);
while(ch != EOF)
{
if ((ch >= 'a'&&ch <= 'z')||(ch >= 'A'&&ch <='Z'))
{
while ((ch >= 'a'&&ch <= 'z')||(ch >= 'A'&&ch <= 'Z')||(ch >= '0'&&ch <= '9')||ch == ' ')
{
ch = fgetc(fp);
}
w ++;
ch = fgetc(fp);
}
else
{
ch = fgetc(fp);
}
}
printf("文件单词数为:%d.\n",w);
fclose(fp);
}
3.文件有效行数的统计:
void LineCount()
{
FILE *fp;
int line = 1;
char ch;
if((fp = fopen("H:\C\Wordcount\Wordcount\file.txt","r")) == NULL)
{
printf("Failure!");
}
ch = fgetc(fp);
while(ch != EOF)
{
if (ch == '\n')
{
line ++;
ch = fgetc(fp);
}
else
{
ch = fgetc(fp);
}
}
printf("文件有效行数为:%d.\n",line);
fclose(fp);
}
8、总结和体会
1.整理好思路,一步一步规划好,对于做项目有很大的帮助,就像是在写程序之前,画一个流程图一样,思路清晰,做起事来就很快;
2.编程能力还是一般,在这一方面,耗费了大量的时间和精力;
9、测试用例
1.abb abc
排序的时候,abb排在abc的前面
2.@#¥
统计特殊字符时,单词数为0,字符数为3
3.123a a+a A234 你a a我
单词数为1
4.THE the
单词数为1
5.I
\n
am
行数为2,只有换行字符的行不算是有效行数

浙公网安备 33010602011771号