第二次个人作业1.0

1、仓库代码地址:https://gitee.com/XMHbb/software_engineering

2、PSP表格:

PSP2.1Personal 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,只有换行字符的行不算是有效行数

posted @ 2019-01-10 09:32  gaofenzi  阅读(145)  评论(0)    收藏  举报