软件工程第二次作业
一、
1.本周PSP, 类型、任务、开始时间、结束时间、中断时间,delta时间。要求开始和结束时间包括日期。
2.本周进度条: 代码行,博文字数,用到的知识点
3.累积进度图: 到本周为止的代码累积折线图,到本周为止的博文字数累积折线图
4.本周PSP饼状图,按任务类别分类,给出时间所占比例
二、本次软件工程作业主要以C#进行编译,大致内容为:
1.编写一个程序实现一个文件中单词统计。
2.从控制台输入文件的名字,然后统计单词的数目。
3.指定文件目录进行遍历,分别对每一个文件中的单词进行统计,输入前十个出现频次最高的单词及相应的次数。
4.控制台显示数据。
Coding代码链接地址:https://coding.net/u/MR__Chen/p/Demo/git
本程序中主要编写了两个方法,一个statis(char s[])的统计方法,一个sort()的排序方法。statis()方法主要是对单词数目进行统计,sort()对单词出现的频次进行排序,然后在main()函数中先读取文件中的单词数据,然后调用statis()和sort()方法,输出数据在控制台显示。
(一)、statis(char s[])统计方法,具体代码显示如下:
void statis(char s[]) { int i,j; int flag=0; //flag为零时没有重复的 for(i=0;i<=sum;i++) { if(strcmp(A[i].str,s)==0) { A[i].num++; //重复单词个数加一 flag=1; //有重复 //sum++; } } if(flag==0) { for(j=0;j<30;j++) A[sum].str[j]=s[j]; A[sum].num++; sum++; } }
(二)、sort()排序方法,具体代码显示如下:
void sort() { int i,j; struct word a; for(i=0;i<sum;i++) { for(j=i+1;j<sum;j++) if(A[i].num<A[j].num) { a=A[j]; A[j]=A[i]; A[i]=a; } } }
(三)、main()函数调用statis(char s[])和sort()方法实现程序,具体代码如下:
void main() { char ch,plan[30],s[30]; int i,m=1,flag=0; FILE *fp; while(m<10)
{ scanf("%s",&plan); getchar(); if((fp=fopen(plan,"r+"))==NULL){ printf("Open the file failure...\n"); } fp=fopen(plan,"r");
sum=0; ch=NULL; for(i=0;i<1000;i++) A[i].num=0;
while(ch!=-1) { for(i=0;i<30;i++) s[i]='\0'; ch=fgetc(fp); if((65<=ch&&ch<=90)||(ch>=97&&ch<=122)) { for(i=0;;i++) { s[i]=ch; ch=fgetc(fp); if((65<=ch&&ch<=90)||(ch>=97&&ch<=122))continue; else break; } statis(s); } } sort(); printf("total %d words\n",sum); for(i=0;i<10;i++) printf("%s\t%d\n",A[i].str,A[i].num); printf("---\n"); m++; } }
(四)通过以上代码实现,具体的截图分为以下三个部分:
功能一
功能描述:test.txt中包括单词 My English is very very poor.计数total数值,对于重复出现的very只显示一次。
具体实现截图如下:
功能二
功能描述:支持命令行输入英文作品的文件名,以runbinson.txt文件为例。
具体实现截图如下:
功能三
功能描述:支持命令行输入存储有英文作品文件的目录名,批量统计。(在此,特此说明因为C语言编程能力差,对于C格式调试不擅长,所以没有完全一次性实现添加多个目录后进行集体显示,只实现了一个文件一个文件进行输入,可输入多个文件。)
具体实现截图如下:
(五)本项目的psp图,功能实现因为只达到了功能三,前期功能四有尝试编译,但是发现编译出来后和要求不太符合,所以后期测试也就没有了。
总结:本次作业通过C语言进行编程,目的测试文件中单词不重复总数和TOP10的单词数量,通过本次编程也暴露出自己的C编程的能力较差,只能尽可能去完成自己可以做完的功能。但愿以后可以运用所学在这些短处有所弥补。