软工第二次作业

githup地址:https://github.com/chendebin/personal-project

PSP表格:

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

 

解题思路

用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的东西,越学习真的就越发现自己不会的东西实在是太多了。真的要更加努力才行。

转载于:https://www.cnblogs.com/chendebin/p/9637895.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值