zoukankan      html  css  js  c++  java
  • 软件工程的202103226-1编程作业

    软件工程

    这个作业属于哪个课程 软件工程班级
    这个作业要求在哪里 202103226-1 编程作业要求
    这个作业的目标 初步学会码云和Github、git的使用以及通过工程软件进行编程
    学号 20188424
    我的仓库 码云项目地址

    1、PSP表格

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

    3、解题思路描述

    (1)首先我们需要将指定的文件中的内容读取出来,我采用的是FILE指针的方法。
    (2)然后就是按照题目所给需求来,基本上是每个要求定义了一个函数来满足相应要求。
    (3)比较难的是单词的判断与高频率单词输出,在判断是否为单词时我分了情况讨论:前一个字符是分隔符,当前的为分隔符时,不做处理;前一个字符是分隔符,当前为数字时,继续往后读,直到再次读到分隔符,则跳出;前一个字符是分隔符,当前为字母时,记录连续的字母个数,当个数大于等于4时,就认为找到一个单词并且将其记录到数组中,为记录频率准备,在这其中还需判断是否有数字的存在,有的话就要丢弃。
    (4)对于高频词我用一个二位数组存储它的频率,在找到一个最大频率的词时取出单词,同时将该二维数组的频率置0,为下一次判断避免不会出现重复的单词。

    4、代码规范的链接:制定的代码规范

    5、计算模块接口的设计与实现过程

    该实现程序开始时,我是直接用一个.cpp文件写的,没有拆开,写好后我才开始将它拆分为四个头文件(fengechudanci.h、jisuanhangshu.h、bxyjtjxtdc.h、shuchudanci.h)和一个主函数(WordCount.cpp),整个流程就是通过fengechudanci.h这个分割头文件将字符串分割,然后在通过shuchudanci.h头文件进行输出高频单词,我觉得我最核心和最巧妙的部分是下面的代码,shuchudanci.通过题目要求使用分支结构逐步分割字符串,shuchudanci.h运用一个二维数组存放记录单词位置的数和单词频率数,解释看下面代码中的注释,完整代码见码云(有头文件的注释)。

    shuchudanci.h

    #pragma once
    void fenge() {
    	int x = 0, flag = 1;
    	if ((str[i] >= 'A' && str[i] <= 'Z') || (str[i] >= 'a' && str[i] <= 'z') || (str[i] >= '0' && str[i] <= '9')) {//字母数字符号:A-Z, a-z,0-9能进入
    		if (y < 4 && (str[i] >= '0' && str[i] <= '9')) {//判断前4个字符中是否有数字
    			flag = 0;
    		}
    		else if (flag == 1) {//在前4个字符没有数字的前提下将字符都输入数组
    			ctr[x][y] = str[i];
    		}
    		y++;
    	}
    	else {//其他字符进入
    		if (y < 4) {//输入的字符下标小于4则不符合题目给出的单词定义,二维数组的行不加,列置0
    			ctr[x][0] = '';
    			ctr[x][1] = '';
    			ctr[x][2] = '';
    			ctr[x][3] = '';
    			y = 0;
    		}
    		if (y >= 4 && flag == 1) {//输入的字符符合要求,则x++
    			ctr[x][y] = '';
    			x++;
    			y = 0;
    		}
    		else//输入的字符中有数字,则该段字符不符合单词的要求,将数组的列y置0
    		{
    			y = 0;
    			flag = 1;
    		}
    	}
    }
    

    shuchudanci.h

    #pragma once
    void dancishuchu() {
    	int xiabiao = 0, f = 1, max, q = 0, p = 0;
    	for (int h = 0; h < x - d + 1; h++) {
    		while (jilu[1][q] == 0) {//跳过记录单词位置为0的比较
    			q++;
    		}
    		max = jilu[1][q];
    		xiabiao = q;
    		p = q + 1;
    		while (jilu[1][p] == 0) {//同上
    			p++;
    		}
    		for (int s = p; s < x - d + 1; s++) {
    			if (max < jilu[1][s]) {
    				max = jilu[1][s];//找到单词频率最大的
    				xiabiao = s;//保存记录该单词位置的下标
    			}
    			if (max == jilu[1][s]) {
    				if (strcmp(ctr[jilu[0][s]], ctr[jilu[0][xiabiao]]) < 0) {//频率相等时比较字典序靠前的单词
    					xiabiao = s;
    				}
    			}
    		}
    		fprintf(fp1, "word%d: %s
    ", f++, ctr[jilu[0][xiabiao]]);
    		jilu[1][xiabiao] = 0;//输出一个单词,将记录该单词的位置的下标置0
    		q = 0;
    		if (f > 10) {//输入前10个
    			break;
    		}
    	}
    }
    

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

    调试过程中出现过数组越界,后发现是自己代码书写有问题,写正确后就不报错了,然后在不断的修改下,数据能更快的显示出来。

    7、计算模块部分单元测试展示

    对于测试这方面了解的不多,也缺少编写测试程序的能力,但是我会多多调试代码验证其正确性。下面是一些测试截图,就不展示过多测试用例了。


    如需验证,放在VS中,要通过项目 -> 属性 -> C/C++ -> 预处理器 -> 预处理器定义 -> 编辑,在框内写入 _CRT_SECURE_NO_WARNINGS才能运行,或者通过DEV直接就能验证。(如出现bug,可能是我有没考虑到的地方吧,请忽略)

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

    在编写过程中出现了许多问题导致程序运行不了,但都通过网上搜索或者调试改进了,在实现过程中只想着做出来没有留下异常截图。

    9、在附录提供的PSP表格记录下你在程序的各个模块上实际花费的时间

    见上面1中PSP表格

    10、心路历程与收获

    通过今天几天的学习,让我体会到了长期打代码的重要性,如果很久不编程,再来编程就会慢很多,很多东西也会忘记。同时明白了在写之前先将代码的架构讨论清楚,需要哪些函数,方法,需要定义哪些变量等,这样在写代码的时候思路就会很清晰。测试过程多使用一些测试案例很容易就检差出了一些问题等,然后改进,大大提高了代码的正确性以及稳定性。

  • 相关阅读:
    Nodejs下载和第一个Nodejs示例
    永久关闭Win10工具栏的TaskbarSearch控件
    对称加密,非对称加密,散列算法,签名算法
    【转】TTL和RS232之间的详细对比
    zlg核心板linux系统中查看系统内存等使用信息
    Power BI后台自动刷新数据报错 The operation was throttled by Power BI Premium because there were too many datasets being processed concurrently.
    剪切板和上传文件内容获取
    CSS, LESS, SCSS, SASS总结
    文字程序
    electron 打包“ERR_ELECTRON_BUILDER_CANNOT_EXECUTE”
  • 原文地址:https://www.cnblogs.com/leisidiya/p/14607509.html
Copyright © 2011-2022 走看看