福州大学软件工程实践个人编程作业
这个作业属于哪个课程 | https://edu.cnblogs.com/campus/fzu/SE2020/ |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/fzu/SE2020/homework/11167 |
这个作业的目标 | 更熟练掌握 Git 和 GitHub 的使用,以及学习 JSON 的含义用处和解析思路,cpp 命令行参数,cpp对文件夹、文件的操作 |
学号 | 031802203 |
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | ||
Estimate | 估计这个任务需要多少时间 | ||
Development | 开发 | ||
Analysis | 需求分析 (包括学习新技术) | 600 | 660 |
Design Spec | 生成设计文档 | 60 | 45 |
Design Review | 设计复审 | 20 | 15 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 120 | 90 |
Design | 具体设计 | 100 | 90 |
Coding | 具体编码 | 300 | 210 |
Code Review | 代码复审 | 20 | |
Test | 测试(自我测试,修改代码,提交修改) | 300 | |
Reporting | 报告 | ||
Test Report | 测试报告 | ||
Size Measurement | 计算工作量 | ||
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 30 | 60 |
合计 | 1520 |
大致思路步骤
- 首先由于题目中对初始化和运行格式有格式要求,所以需要对命令行参数进行解析,以符合要求;
- 其次对于初始化,由于提供的数据是以 JSON 文件形式存储的,所以就涉及到关于 JSON 的解析; (根据需要解析完分别把相关的键值写入 JSON ,这样会方便统计?)
- 然后对数据进行遍历,统计记录用户、项目、事件数量;(遍历肯定时空资源爆炸,但是菜鸡只会遍历了5555 )
学习过程
-
第一次满怀热情点进去作业,浏览完题目的时候,我是一脸懵逼的
- 什么东西?题目需求是什么?它叫我干嘛?
- 我要做什么?
- json?这又是什么?它能干嘛?我怎么用它?
- 运行格式是啥?哪里用?
- 我只会cpp,我能行吗?(男人不能说自己不行!)
-
当天晚上,我兴致勃勃地看了一个晚上 GitHub Actions 怎么回事,以及 JSON 是什么东西、它的用处。然后到了自己去配置 GitHub Actions 的时候,发现认识和实践真的有条鸿沟,包括解析和构建 JSON 的时候也一样。而且因为 C/C++ 不像 Python 那样有内在字典的结构,所以后来截止前这两天直接去找了下 C/C++ 有没有提供解析和构造函数的库。后来编程的时候调了一个 cJSON 库,之前都是单文件编译执行,这次因为要用 cJSON.h 和 cJSON.c ,所以学了一下 cpp 多个文件做成个项目,多个一起编译。
-
之前没用到过关于 FILE 的文件操作,所以又去把 f 系列函数学了一下( C/C++ )
FILE fp; //定义一个文件
FILE fopen (const cahr FilePath, const char type)//打开 FilePath 的文件,并允许其进行 type 操作,返回的是一个FILE
char *fgets (char *s, int n, FILE *fp) //从指定的流中逐行读取,n 一般可以设为 s 数组的大小 -
寻思了一两天没啥思路,决定还是先把 Git 的基本操作和命令学一下,然后花了一下午的时间在B站看了 Git 的教程,然后自己用的时候发现,根本就不用看那么久,做题目用到的也就几条基础命令,不管又没用还是大致记一下吧
git config --global user.name "" //设置用户名
git config --global user.email "" //设置用户邮箱
git init //正式使用前先初始化
git add *** //到Index
git commit -m "" //提交描述
git status //三个区域的状态
git reset --hard //彻底回退
git reset --soft //本地库回退,但其他两个区域不变
git reset --mixed //出了工作区不变,其他回退
...... -
大佬推荐用 Python 写,同学说用 cpp 的快写疯了哈哈哈哈,gan,流泪,我就是用 cpp,也只会用 cpp。我觉得这时候临时仓促去学 Python 来对付作业可能效果不会很好,所以就还是用 cpp。
-
之后就卡在那个题目提供的运行格式那边,不知道究竟是什么,怎么用,自己硬是没反应过来,后来看了同学的思维导图,突然就悟了,然后就开始百度 C/C++ 命令行解析。在 C 的库函数中,提供了两个函数进行命令行参数的解析,‘-’ 开头的短参数使用 getopt(),如 “-u” ;而像 “--user” 之类的 “--” 开头的长参数则需要使用 getopt_long() 函数进行解析,当然,getopt_long() 对短参数也可以。而在本次作业中我的命令行输入采用的都是短参数形式,所以就选择了 getopt();
代码说明
编写过程卡壳,夭折了
单元测试和覆盖率
代码规范
https://github.com/Chenyang-1024/2020-personal-cpp/blob/master/CodeStyle.md
总结
- 在知识的海洋溺水,被生活痛击。。。不觉得码不出来是题目难度,问题出在自己身上,课外没去积累、动手少怪自己,没有经验,完全没有方向,这个是最大的问题。这一周就是在瞎着眼睛乱摸,把一些知识点摸了遍,最后收效甚微。(菜鸡问问老师作业前置学习要求可以稍微稍微再详细一点点吗,就大概完成这个作业要会什么,就大概 ಥ_ಥ )
- 做作业跟在女娲补天一样,虽然有所收获,但是还是没来得及实现出来,基础思路还算简单的,老师说是 easy 级别,还是希望之后经过学习多动手能完整实现出来,还会继续更博的。
- 距离结束还有 3 分钟,大概逛了一圈别人的作业回来,大多数都完成出来了,这种别人都会自己不会的感觉就跟 100 个人开着坦克从身上压过一样。嘴上的总是空谈,希望自己行动起来。