zoukankan      html  css  js  c++  java
  • 编程作业_词频统计

    这个作业属于哪个课程 软工-2018级计算机4班
    这个作业要求在哪里 202103226-1 编程作业
    这个作业的目标 1、锻炼编程能力 2、项目设计规范学习 3、程序设计满足要求
    作业正文 README.md
    其他参考文献 《构建之法》、 《软件工程》、 参考词语频率统计

    ❤️、目录

    一、码云 项目地址

    二、PSP预算表单

    三、解题思路描述

    四、代码规范的链接

    五、设计实现过程

    六、计算模块接口部分的性能改进

    七、测试设计过程

    八、计算模块部分异常处理说明

    九、PSP表格

    十、心路历程与收获


    一、码云 项目地址。

    ❤️、码云fork仓库链接

    二、PSP预算表单

    PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
    Planning 计划
    • Estimate • 估计这个任务需要多少时间 960
    Development 开发
    • Analysis • 需求分析 (包括学习新技术) 100
    • Design Spec • 生成设计文档 60
    • Design Review • 设计复审 30
    • Coding Standard • 代码规范 (为目前的开发制定合适的规范) 10
    • Design • 具体设计 100
    • Coding • 具体编码 240
    • Code Review • 代码复审 120
    • Test • 测试(自我测试,修改代码,提交修改) 60
    Reporting 报告
    • Test Repor • 测试报告 60
    • Size Measurement • 计算工作量
    • Postmortem & Process Improvement Plan • 事后总结, 并提出过程改进计划 30
    合计

    三、解题思路描述

    看到题目,对题意有点模糊,所以在csdn上搜索了一些文档,渐渐理清思路。

    • 浏览题目后,就决定用C语言去做这个项目,因为自己学习的高级语言只有C和Java,对于C语言的话更有把握一些。
    • 在开始着手做这个项目时,我先通过网上资源得知这个项目的关键知识点是对文件的操作,如fgetc和fgets函数,于是就花了一些时间在文件操作的学习上。
    • 在学习完相关文件操作后,就开始进行相关模块的开发,之后再汇总成一个大模块。
    • 模块总可分为:文件单词数、文件字符数、语句行数以及出现频率超过10的单词,核心是处理得到想要的结果

    四、代码规范的链接

    ❤️、codestyle.md

    五、设计实现过程

    1、字符数的计算实现

    if( !strcmp(argv[1],"-c") ) { //字符数
    	char temp;
    	int num = 0;
    	temp = fgetc(fp);
    	while( temp != EOF ) {
    		//putchar(temp);
    		temp = fgetc(fp);
    		num++;
    	}
    	printf("该文本文件的字符数为:%d
    ",num);
    
    }
    

    2、统计单词数量

    else if( !strcmp(argv[1],"-w") ) { //单词数
    	int w = 0;
    	char a = fgetc(fp);
    	while( a != EOF) {
    		if( (a >='a' && a <='z') || ( a >='A' && a <='Z') || ( a >='0' && a <='9') ) {
    			while( (a >='a' && a <='z') || ( a >='A' && a <='Z') || ( a >='0' && a <='9') )
    				a =fgetc(fp);
    			w++;
    			a =fgetc(fp);
    
    		} else
    			a =fgetc(fp);
    	}
    	printf("该文本文件的单词数为:%d
    ",w);
    
    }     
    

    3、统计行数,句子数量

    else if( !strcmp(argv[1],"-l") ) { //行数
    	char temp;
    	int num = 1;
    	temp = fgetc(fp);
    	while( temp != EOF ) {
    
    		//putchar(temp);
    		if(temp == '
    ') { //字符需要用单引号扩住
    			num++;
    		}
    		temp = fgetc(fp);
    
    
    	}
    	printf("该文本文件的行数为:%d
    ",num);
    
    }
    

    4、统计单词重复最高的10个,并依次输出

    else if( !strcmp(argv[1],"-f") ) { //频率
    	char tmp[1000];
    	Str words[10000]; //单词数量
    	int num=0;//实际单词数量
    	int i,j,neww=1;//neww标志位,判断是否为新单词
    
    	fp = fopen(argv[2],"r");
    	//fscanf从文件中获取单个字符串
    	while ( fscanf(fp,"%s",tmp)!=EOF ) {
    		neww=1;
    		for (i=0; i<num; i++) {
    			//重复的单词
    			if ( strcmp(tmp, words[i].str)==0 ) {
    				neww=0;
    				words[i].cnt++;
    			}
    		}
    		if (neww) {
    			// 复制字符串
    			for (j=0; tmp[j]!=''; j++) {
    				words[num].str[j] = tmp[j];
    			}
    			//单词末尾添加结束符
    			words[num].str[j] = '';
    			// 新单词数量+1
    			words[num++].cnt = 1;
    		}
    	}
    	printf("一共%d个不同的单词,10个最高频率单词出现如下:
    ",num);
    	for (i=num-1; i>=0; i--) {
    		if(words[i].cnt >= 10 ) {
    			//fprintf(fp1,"%-10s %-4d
    ", words[i].str, words[i].cnt);
    			printf("%-10s %-4d
    ", words[i].str, words[i].cnt);
    		}
    	}
    }
    

    六、计算模块接口部分的性能改进。

    • 测试的时候可以通过输入"-w,-c,-l,-f"来实现自己想要的功能

    • 测试时主要考虑了
      1)框架逻辑的正确性。
      2)各个模块是否能正确衔接得到最终结果。

    七、测试设计过程。

    1、将代码工程放在电脑的D盘

    2、用cmd命令进入project-c20188521src

    3、src文件夹内部内容

    4、“test.txt”是用于统计的目标文件,“结果.txt”是用于接收程序返回结果的文件

    5、测试程序

    6、字符数统计测试

    7、单词数统计测试

    8、行数统计测试

    9、单词重复超过10的统计测试

    10、总览

    八、计算模块部分异常处理说明。

    • 开始的时候在处理单词,提取,指针分别存储时,位于最后的符号前的单词,会携带标点符号一起计算长度与字符,之后上网查看类似设计,借鉴修改了过来。

    九、PSP表格。

    PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
    Planning 计划
    • Estimate • 估计这个任务需要多少时间 960 3000+
    Development 开发
    • Analysis • 需求分析 (包括学习新技术) 100 400
    • Design Spec • 生成设计文档 60 90
    • Design Review • 设计复审 30 40
    • Coding Standard • 代码规范 (为目前的开发制定合适的规范) 10 30
    • Design • 具体设计 100 200
    • Coding • 具体编码 240 600
    • Code Review • 代码复审 120 30
    • Test • 测试(自我测试,修改代码,提交修改) 60 480
    Reporting 报告
    • Test Repor • 测试报告 60 90
    • Size Measurement • 计算工作量
    • Postmortem & Process Improvement Plan • 事后总结, 并提出过程改进计划 30 40
    合计 810 1990

    十、心路历程与收获。

    
      写代码之前的详细设计要有,七分文档三分代码,没有充分的计划,逻辑结构没有建立就直接写代码,反而会事倍功半。
    
      不会的就查,不懂得就实践,
     
      测试很重要。既能帮你检测错误,非常规错误,也能让自己更好理清思路,逻辑设计与文档想和。
    这一周都经常熬夜,都是因为发现一些bug出现像某个函数的错误导致后面部分的错误,花费大量时间。
    如果代码庞大一点,后期就更麻烦了,好在也有专门的测试工具。
  • 相关阅读:
    Product of Array Except Self
    如果裸写一个goroutine pool
    fasthttp 的 goroutine pool 实现探究
    golang实现权重轮询调度算法
    golang学习资料
    获取本机ip
    dnscache --源码笔记
    xsrftoken--源码笔记
    forwardport--源码笔记--注释
    golang 通过exec Command启动的进程如何关闭的解决办法 以及隐藏黑色窗口
  • 原文地址:https://www.cnblogs.com/youlanghua/p/14608380.html
Copyright © 2011-2022 走看看