软工第二次作业
githup地址:https://github.com/chendebin/personal-project
PSP表格:
Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) | |
---|---|---|---|
Planning | 计划 | 30 | 180 |
· Estimate | · 估计这个任务需要多少时间 | 3 | 3 |
Development | 开发 | 540 | 558 |
· Analysis | · 需求分析 (包括学习新技术) | 5 | 40 |
· Design Spec | · 生成设计文档 | 5 | 0 |
· Design Review | · 设计复审 | 60 | 10 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 3 | 5 |
· Design | · 具体设计 | 120 | 540 |
· Coding | · 具体编码 | 360 | 400 |
· Code Review | · 代码复审 | 60 | 30 |
· Test | · 测试(自我测试,修改代码,提交修改) | 60 | 120 |
Reporting | 报告 | 60 | 180 |
· Test Repor | · 测试报告 | 30 | 20 |
· Size Measurement | · 计算工作量 | 5 | 10 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 10 | 30 |
合计 | 1351 | 2126 |
解题思路
用infile把文件内容输入程序中,字符数逐个统计输出数值;行数用getline每执行一次line++;word统计逐行输入全部记录在word【】数组中,再分别对数组中每个单词(读取的时候碰到分隔符停下把前面读的信息存在新的数组中去比较)统计次数,重复单词跳过。
代码实现
这个题目要求四个目标,字符数,行数,单词数,词频统计。所以用四个函数实现。
求字符数
void readTxtchar(string file)
{
ifstream infile;
infile.open("Text.txt",ios::in);
assert(infile.is_open());
char c;
int characters=0;
infile >> noskipws;
while (!infile.eof())
{
infile >> c;
characters=characters+1;
}
cout << "characters:"<<characters-1<<endl;
infile.close();
}
输入字符,每输入一个characters++。
行数
void readTxtLINE(string file)
{
ifstream infile;
infile.open("Text.txt", ios::in);
assert(infile.is_open());
string s;
int lines = 0;
while (getline(infile, s))
{
lines = lines + 1;
}
cout << "lines:" << lines << endl;
infile.close();
}
getline输入一行,行数line+1,循环直至输入完毕。
单词数
void readTxtwords(string file)
{
ifstream infile;
infile.open("Text.txt", ios::in);
assert(infile.is_open());
char c;
int words =0;
char w[10000];
int i = -1;
int x;
infile >> noskipws;
while (!infile.eof())
{
i = i + 1;
infile >> c;
w[i] = c;
}
for (x = 0; x <= i - 1; x++)
{
if (w[x] == ' ' || w[x] == '\n')
{
if ((w[x + 1] >= 'A'&&w[x + 1] <= 'Z') || (w[x + 1] >= 'a'&&w[x + 1] <= 'z'))
words = words + 1;
}
}
if ((w[0] >= 'A'&&w[0] <= 'Z') || (w[0] >= 'a'&&w[0] <= 'z'))
words = words + 1;
cout << "words:" << words<< endl;
infile.close();
}
逐个输入字符,全部存在w【】数组中,再对w数组遍历,每次遇到分隔符就判断一次下几个字符是不是英文字母,是的话则让words+1;
词频统计
做这小题的时候发生了一些问题,词频统计部分由于要用到的函数过多,再加上时间有点来不及了,心一急干脆就不弄函数了,直接把剩下统计的所有代码都直接打在主函数下面了。尴尬。这样导致了另一个问题就是之后我封装的时候一直出错,后面才想到我的词频统计函数有一大半是在主函数里的。封装之后就出现了一堆变量没定义。难受极了,下次再也不这么做了,本来想省点事的结果反而更加麻烦了。
封装
#pragma once
__declspec(dllexport) void readTxtchar(string file);
__declspec(dllexport) void readTxtLINE(string file);
__declspec(dllexport) void readTxtwords(string file);
从来没用过封装,所以从头学起,自己去网上百度。百度了很多,结果也没一个靠谱的。后来问了舍友蔡子阳,他教我一步一步地完成了封装的全部过程。不过后面由于出现了上述原因,所以词频统计我并没有封装起来,只能先这样交工。一开始真的没想到学这个学了这么久。。。时间没安排好,下次一定注意。在把这次作业交工后我会回去把函数改好重新封装的。
程序运行界面
总结
这是我第一次做软工实践的作业,第一次做软工作业的感觉还不错。花的时间非常的多,但是大多数都是花在学习新的语法,新的工具这方面。这对于自己的自学能力是个非常大的挑战。上学期做数据库的时候用到过vs来做数据库。不过这次用到了更多vs的东西,越学习真的就越发现自己不会的东西实在是太多了。真的要更加努力才行。