软件工程实践第二次作业——个人实战

这个作业属于哪个课程 2022年福大-软件工程;软件工程实践-W班
这个作业要求在哪里 软件工程实践第二次作业——个人实战
这个作业的目标 完成对冬奥会的赛事数据的收集,
并实现一个能够对国家排名及奖牌个数统计的控制台程序
其他参考文献 邹欣老师博客关于单元测试和回归测试
Gitcode-fork签入 项目克隆与提交
微软官方帮助文档
CSDN中的多篇文章

本文章中的爬取行为仅用于课程教学

Gitcode项目地址

这是一个可以点击的地址
这是地址链接:https://gitcode.net/Kedar1/personalproject-c

PSP表格

PSP Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 16 16
• Estimate • 估计这个任务需要多少时间 16 16
Development 开发 3150 1630
• Analysis • 需求分析 (包括学习新技术) 40 369
• Design Spec • 生成设计文档 50 116
• Design Review • 设计复审 10 10
• Coding Standard • 代码规范 (为目前的开发制定合适的规范) 50 54
• Design • 具体设计 60 21
• Coding • 具体编码 1880 150
• Code Review • 代码复审 60 34
• Test • 测试(自我测试,修改代码,提交修改) 1000 876
Reporting 报告 390 336
• Test Report • 测试报告 60 67
• Size Measurement • 计算工作量 30 5
• Postmortem & Process Improvement Plan • 事后总结, 并提出过程改进计划 300 264
合计 3556 1982

解题思路描述

1. 在编程前

  • 首先是对本次作业内容的分析,第一遍看下来是头皮发麻的,感觉自己好像什么都不懂,但是沉下心来在多看几遍就发现其实是可以循序渐进的做下去,在做的过程中慢慢学习。
  • 选C++的原因是因为可能我第一个接触的编译器是VS,在大部分同学都使用devC++的时候VS2019真的像神兵天降。虽然写C语言由于VS的SDL检查增添了很多的麻烦,但是C++就很少有这个困扰,而且我最喜欢的还是它idea过期了还没去申请 ,所以这次理所当然的选了C++!
  • 首先要弄懂的是gitcode的fork。虽然在上次的作业中使用了gitcode,但是对于git的使用等等依然不是很熟悉。在搜索之后学会了fork,但是在之后的提交过程中发现在fork下来的文件夹里居然不能提交!但是在上次的文件夹里随便写什么都可以提交!我百思不得其解还很纳闷,在经历了一两天的痛苦搜索解决不了之后,先开始放弃解决摆烂开始编写代码,在准备第一次commit时又去研究了研究,还是行不通,最后尝试从问题的根源入手把git卸载重装但是依旧失败。最后不抱希望的把fork下来的文件夹删了,重新克隆了一份,居然提交就成功了!不过虽然成功了,但是我还是很疑惑的在群里提出了问题,老师发了一篇文章:这才是真正的Git——Git内部原理揭秘!让我看看有没有帮助。我看完了之后感觉自己学到了很多有关于git的知识,但是这个问题还是存在疑问,我最后把它归结于软件奇奇怪怪的bug。

2. 实现基本功能

  • 在撰写完代码规范之后,就开始本次代码的编写。通过作业的要求,基本功能就是根据读取input文件中两种不同的指令,然后程序读取data中的文件并输出到output中。这时候就要进行对json文件的读取,虽然git折磨了我很久,但是刚好磨到了助教老师宣布可以使用第三方的json库的时候,于是很爽快地决定使用json-c。
  • 然而这个比git还折磨人,网上对于VS安装使用json的甚少,很多资料让我无从下手,这时候扼腕叹息该用Java的。但是我又很不很甘心,所以又花了两三天,单独用json的压缩包导入失败不能使用json.h,最后装了开源库集成器vcpkg使用这个去下载安装编译json包。但是由于众所周知的原因,从Github上clone的速度已经很抽象了而vcpkg在PowerShell中的下载速度更是让人吐血,还会下载一半突然报错。最后只能使用魔法把安装编译json需要的各种包插件什么的下载下来,再在放进vcpkg中安装编译。
  • 不过安装编译很痛苦,用上json库编写的过程就很顺利了,一个功能接着一个功能的实现。
  • 爬取15号之后的数据因为之前没有过经验,在各种搜索下依然很茫然所以求助了舍友,伟大的舍友教会了我用F12去获取网站上需要的信息,最后再对数据进行处理(比如json文件在VSCode中格式化,将Unicode格式转换成中文,去除奇怪的"\/"符号),成功获得需要的完美数据。

3. 接口封装

由于在大一下在wch老师的教授下学习(有乖乖听话),后面也有要求自己编程时注意代码可读性和结构,所以在编写时有进行了接口封装。

4. 单元测试和性能分析

VS2022中有相应的功能,在百度学习了大佬们的文章之后再自己上手,大概掌握了如何使用。

接口设计和实现过程

1. 代码文件

头文件有一个,为OlympicSearch.h(引用库、std命名空间和所有函数的函数定义)
共有九个函数

头文件

cpp文件一共有两个,分别为functions.cpp(头文件中所有函数的实现)和OlympicSearch.cpp(主程序,可以从命令行接收参数,作为程序入口)

2. 函数设计

  • 首先我先建立inputtxt_deal()函数用于处理input文件中的输出指令,一开始暂时先不考虑指令输入是否正确,只分成total和schedule两种情况,然后编写函数instructionTotal_output()用于total指令对应的输出,编写函数instructionConcrete_output(string instruction)用作指令为其他具体指令的输出。
  • 在输入输出完成后,我开始进行了错误指令的处理。除去一些简短的选择分支语句以外,我编写了函数is_errorDate(string behind)作为日期错误的判断,errorInsturction_deal(string instruction)对错误指令判断和处理。在对错误指令处理时,我发现有很多不同分支中输出N/A或者Error的情况,所以我把输出Error的代码封装为onlyError_write(),输出N/A的代码封装为onlyNA_write()。
  • 然后是处理空格,我想到了一个好主意就是我先进行一次首尾空格的去除,再解决掉total的判断,当判断前面有“schedule”时就剪掉字符串的前八位,然后再进行一次首尾空格的去除,就可以解决掉schedule和日期中间有很多空格的问题。首尾空格去除封装为函数correctBlank_delete(string instruction)。
  • 由于指令在循环中不停读取可能产生新的输出,所以最后去掉output文件末尾的换行放在每次的输出并不恰当,所以放在所有指令输出完毕之后,进行换行的去除,保证输出的无误。在那天需求在群里提出之后,大佬许同学发了一张Java的实现图,我看了一眼就四五行代码看着很简单,结果在C++中没想到是个极为复杂的问题,因为在C++中并没有可以修改文件大小或者裁剪文件的函数,最后经过一段时间的尝试和学习,最终采取了C++和C语言混用的方式(为什么混用具体在性能测试位置解释),封装为函数lastLine_delete()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值