2021秋软工实践第一次个人编程作业

qq_45702491 2021-09-20 02:59:10
这个作业属于哪个课程https://bbs.csdn.net/forums/fzuSoftwareEngineering2021?category=0
这个作业的要求在哪里https://bbs.csdn.net/topics/600574694
这个作业的目标GitHub的使用,代码规范,完成一个程序
学号031902101

题目要求

  • 基础要求:输出关键字统计信息
  • 进阶要求:输出有几组switch case结构,同时输出每组对应的case个数
  • 拔高要求:输出有几组if else结构
  • 终极要求:输出有几组if,else if,else结构

在完成更高要求的情况前,需完成前置的要求。

 

任务分解

  • 文件的读入
  • 分析读入的文件
  • 字符串的分割以及与关键字的比较
  • 统计总数以及输出结果
PSPPersonal Software Process Stages预估耗时(小时)实际耗时(小时)
Planning计划11
Estimate估计这个任务需要多少时间15.513.7
Development开发--
Analysis需求分析 (包括学习新技术)21.5
Design Spec生成设计文档--
Design Review设计复审 (审核设计文档)--
Coding Standard代码规范 (为目前的开发制定合适的规范)11
Design具体设计21.6
Coding具体编码65
Code Review代码复审11
Test测试(自我测试,修改代码,提交修改)10.6
Reporting报告--
Test Report测试报告--
Size Measurement计算工作量11
Postmortem & Process Improvement Plan事后总结, 并提出过程改进计划0.51
 合计15.513.7

 

GitHub部分

代码流程图

     代码说明

    • 读入文件
    void readtxt(string file)
    {
        ifstream infile; 
        infile.open(file.data());   //将文件对象与文件连接起来 
        assert(infile.is_open());   //假如失败,输出错误消息,并终止程序运行 
    	char c;
        infile >> noskipws;
        while (!infile.eof())
        {
            infile>>c;
            a[n++]=c;
        }
    	 infile.close();    //关闭文件输入
        count();
       for(int i=0;i<n;i++){
       	if(a[i]=='i'&&a[i+1]=='f'&&a[i+2]=='(')
       	;
       }           
    }

     

    • 字符串的提取

      struct key   //构建结构体数组,关键字按顺序排列
      {
       char *word;
       int count;
      } keywords[] = {
      "auto",0,"break",0,"case",0,"char",0,"const",0,"continue",0,"default",0,"do",0,
      "double",0,"else",0,"enum",0,"extern",0,"float",0,"for",0,"goto",0,"if",0,
      "int",0,"long",0,"register",0,"return",0,"short",0,"signed",0,"sizeof",0,"static",0,
      "struct",0,"switch",0,"typedef",0,"union",0,"unsined",0,"void",0,"volatile",0,"while",0,
      };
      
      //关键字的个数等于数组长度除以单个元素的长度
      #define NKEYS (sizeof keywords / sizeof(struct key))
      int j=0;
      int getword(char *word, int lim)
      { 
          char *w = word;
          for( j;j<n;j++)
          {if(isspace(a[j]))
      	continue;
      	else break;}//跳过空白符
              *w++ = a[j];
              if (!isalpha(a[j])) //不是字母的情况
          {
              *w ='\0';
              return a[j++];
          }j++;
          for ( ; --lim > 0; w++)
          {
              if (!isalnum(*w = a[j++])) //输入不是字母或数字时,该单词结束
              {
              j--;
                  break;
              }
          }
          *w = '\0'; //字符串结束符'\0'
      	return word[0]; //返回值为单词的第一个字符
      }

       

    • 统计关键字个数并输出

      void count(){
          int m;
          char word[100000];
          for(int i=0;i<n;i++)
      {
          getword(word, 100000);
          if (isalpha(word[0])) //word的第一个单词为字母
              {
      		if ((m = binsearch(word, keywords, NKEYS)) >= 0)
                  {keywords[m].count++;}//在结构体中查找成功,关键字计数加1   	
      		} 
       }
       int sum=0;
       for (int i = 0; i < NKEYS;i++)
       {sum+=keywords[i].count; 
       }
       cout<<"total num:"<<sum<<endl;
      }

      代码测试

    • 样例代码的覆盖率

       

    • 自己以前的代码的覆盖率

       

    • 样例代码的性能测试

      遇到的问题及解决方法

    • 首先肯定是如何将一个cpp文件或TXT文件读入程序中,因为之前写过的代码都是直接编译运行后输入输出的,没有通过文件路径读取文件的内容后执行的。通过查阅博客园与CSDN的相关内容后,在阅读读取TXT文件之后,通过open函数对文件进行读取。
    • 然后是对文件中的字符提取为字符串后与关键字进行匹配计数。最开始是想通过以空格、分号、回车等为分割点进行字符串的提取,然后再与关键字进行匹配。但是试了一下发现这样操作难以进行。于是转变思路,对装有代码文件的数组进行解析,忽略掉空格、“//”等符号,遇到第一个字母进行提取,直到遇到不是数字或字母的字符时停下,然后记为一个字符串与关键字进行匹配。
    • 最后是性能测试及覆盖率的使用。进行性能测试的时候,参考性能测试教程后,没有困难的完成了性能测试。但是在覆盖率测试的时候,首先忘记安装opencppcoverage,导致在状态栏找半天。安装好相关的插件后,点击运行,系统报错了,一开始以为是代码有地方出错了,但是编译了多次,代码没有问题,在网上查阅了许多资料后,也不知问题所在。后面向着干脆要不放弃输入了,直接打开指定路径的文件运行,试了一下,成了。 

         总结

            这次作业花费了挺多的时间,也是第一次完成的一个项目吧,因为自己之前学习时候的不牢固,只能完成最基础的要求,但也学到了许多新东西,比如说Git的使用,如何用c++进行文件的读取,还有就是vs的一些应用。希望自己以后能学更多的东西,完善好这次的个人作业,努力从基础level提升到终极level。

    ...全文
    300 1 打赏 收藏 转发到动态 举报
    AI 作业
    写回复
    用AI写文章
    1 条回复
    切换为时间正序
    请发表友善的回复…
    发表回复
    KimSton 2021-10-08
    • 打赏
    • 举报
    回复

    流程图不够明确,图中没有开始终止,或又没有文字进行说明,从图中看只是一个循坏部分

    189

    社区成员

    发帖
    与我相关
    我的任务
    社区描述
    福州大学软件工程教学,推行邹欣老师“构建之法”。
    软件工程 高校
    社区管理员
    • Dawnfox
    • REP1USONE
    • 纪华裕
    加入社区
    • 近7日
    • 近30日
    • 至今
    社区公告
    暂无公告

    试试用AI创作助手写篇文章吧