zoukankan      html  css  js  c++  java
  • 软件工程实践第二次作业

    第二次软件工程实践作业

    一、Github链接

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

    二、解题思路描述

    答:首先看到这个题目,先查阅了资料文件输入输出流的具体编码要求和规定,采用一个个字符读取的方式,统计字符数。

    第二步就是筛选单词,将4个字母及以上的单词保留下来,这里还要注意开头是数字的单词也要筛选掉,最后要考虑全是空格的情况,将他的ascii码值作为筛选条件即可筛除。

    最后一步就是统计频数最高的10个单词以及依次输出他们并输出他们的频率。这里查阅资料以及同学之间相互学习了解到了map的用法,map的用法比较贴切本题要求,故采用map来做这道题。

    三、设计实现过程

    首先写一个getfile函数,实现对文件的读取,用get()函数对每一个字符进行读取到程序中。

    其次是统计函数与单词数,写一个函数,遇到特定字符(例如‘ ’),行数++,但是这样做会有些特殊情况会多加到,因此后面加了一个布尔变量来控制特殊情况的处理。单词数的话用vector来实现,vector是成倍开辟空间,可能会浪费一些空间,但是对于存取字符串比较好用。

    最后是找出频数最高的10个单词并依次输出。采用map去解决这个问题会比较快。而且map的性质符合此题要求,所以采用map来解决,最后遍历10遍依次输出即可。

    四、改进思路

    通过向同学请教得知,C++用于文件读写的ifstream和ofstream函数改为C语言的fopen性能会提升很多,消耗时间会降低一点。查阅相关资料后,代码改进方面可以改成C语言的fopen函数时间会快一点。

    五、代码说明

    打开文件并且统计字符函数

    void agefile(string filename)//打开文件统计字符函数
    {
    	char c;
    	ifstream s(filename);
    	if (!s)
    	{
    		flag1 = false;
    	}
    	while (s.get(c))//采用get函数读取字符
    	{
    		b[j++] = c;
    	}
    	if (flag1 == true)
    	{
    		d << "characters: " << j << endl; //输出字符数
    	}
    	else
    	{
    		d << "error" << endl;
    	}
    }
    

    统计频率最高的10个单词并且输出单词及频数

    void addword(bool flag = true, int max = -999)//统计单词数词频最多的10个单词以及输出单词
    {
    	bool flag2 = false;
    	q = strmap.begin();
    	for (int s1 = 0; s1 < 10; s1++)//采用遍历10次的的方式,如果不足十次bool值置false跳出循环
    	{
    		flag2 = false;
    		if (flag == false)
    		{
    			break;
    		}
    		flag = true;
    		max = -999;
    		while (q != strmap.end())//采用map函数进行存取遍历
    		{
    			if (q->second > max)
    			{
    				flag2 = true;
    				max = q->second;
    				a = q->first;
    			}
    			q++;
    		}
    		if (flag2 == true)
    		{
    			d << "<" << a << ">: " << max << endl;
    		}
    		q = strmap.begin();
    		strmap[a] = -10;
    		for (int j1 = 0; j1 < str_shorted.size(); j1++)//判断
    		{
    			if (strmap[str_shorted[j1]] == -10)
    			{
    				w++;
    			}
    		}
    		if (w == str_shorted.size())
    		{
    			flag = false;
    		}
    		w = 0;
    	}
    }
    

    六、单元测试

    选取了比较极端的情况测试。共采用5组类似极端数据测试,经过与同学比对,没有出现太大问题。

    测试图如下:

    七、异常处理

    1.没有输入文件时造成的停滞。解决:新增布尔变量和error机制

    2.文件中统计单词数异常的问题。解决:更改了判定机制,原先的判定机制不足以应付所有特殊情况。

    八、项目收获

    从这次实践中学到了比较多的东西,了解了程序读写文件的方法,程序的内测等。加强了代码能力,缺点在于编码的规范真的很差劲,编码的习惯也有所不足,以后需要慢慢改正以及多加练习。

  • 相关阅读:
    T-SQL部分函数(转)
    sql server中触发器
    sql server中查询结果集顺序问题
    sql server中的TimeStamp时间戳与UniqueIdentifier数据类型
    SQL
    SQL表的最基本操作练习
    增删改查 T-SQL最基本操作
    SQL表的默认常用数据类型
    算法训练 P1102
    算法训练 最短路
  • 原文地址:https://www.cnblogs.com/Cleveland/p/9631942.html
Copyright © 2011-2022 走看看