zoukankan      html  css  js  c++  java
  • 软工第二次作业

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

    PSP表格:

    PSP2.1Personal 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] == '
    ')
             {
                 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的东西,越学习真的就越发现自己不会的东西实在是太多了。真的要更加努力才行。

  • 相关阅读:
    JavaScript获取键盘事件
    Java 虚拟机的内存结构
    Java 实现 Http 请求工具类
    HTML5之FileReader文件读取接口
    使用 PLSQL 连接 Oracle9i 数据库
    使用 Navicate 连接 Oracle9i 数据库
    Eclipse 刚检出的项目 Build path 的时候提示 No action available
    Eclipse 中 Debug 调试 java 代码一直报 Source not found
    mongodb 客户端工具
    spring 国际化
  • 原文地址:https://www.cnblogs.com/chendebin/p/9637895.html
Copyright © 2011-2022 走看看