计算与软件工程 作业四
计算与软件工程
作业要求 | https://edu.cnblogs.com/campus/jssf/infor_computation17-31/homework/10534 |
---|---|
课程目标 | 在学习过程中加强实践能力的培养与软件工程思想的思考 |
该次作业在程序效能方面实现我的目标 | 针对要求,并按照代码规范(风格规范、设计规范)要求评判其他学生的程序,同时进行代码复审 结对编程 |
参考文献 | https://www.cnblogs.com/xinz/archive/2011/11/20/2255971.html https://www.cnblogs.com/teamshit/archive/2012/12/13/2817205.html https://www.cnblogs.com/buaashine/archive/2012/12/13/2815630.html https://www.cnblogs.com/helinsen/archive/2012/07/26/2609251.html |
本次作业 | https://i-beta.cnblogs.com/posts/edit;postId=12563976 |
作业一
代码复审
每个人针对之前两次作业所写的代码,针对要求,并按照代码规范(风格规范、设计规范)要求评判其他学生的程序,同时进行代码复审(按照代码复审核表 https://www.cnblogs.com/xinz/archive/2011/11/20/2255971.html)
代码规范与代码复审
-代码风格的原则是:简明,易读,无二义性。
(1)代码风格规范:可以从缩进、行宽、括号、断行和空白的{}行、分行、命名、下划线问题、大小写问题和注释方面来改进。
(2)代码设计规范:代码设计规范不光是程序书写的格式问题,而且牵涉到程序设计、模块之间的关系、设计模式等方方面面,这里有不少与具体程序设计语言息息相关的内容(如C、C++、Java、C#),但是也有通用的原则,这里主要讨论通用的原则。这里有函数、goto、错误处理、如何处理C++中的类。
(3)代码复审的正确定义:看代码是否在“代码规范”的框架内正确地解决了问题
目的:找出代码的错误;发现逻辑错误;发现算法错误;发现潜在的错误和回归性错误;发现可能改进的地方;教育(互相教育)开发人员,传授经验,让更多的成员熟悉项目各部分的代码,同时熟悉和应用领域相关的实际知识。
总结
代码复审的目的在于:1、找出错误的代码,比如: 1)编程错误,如一些恰巧骗过了编译器的错误 2)不符合团队代码的地方2、发现逻辑错误,程序可以编译通过,但是代码的逻辑是错误的3、发现错误算法,比如使用的算法不够优化,边界条件没有处理好4、发现潜在的错误和回归性错误--当前的修改导致以前的缺陷又重复出现5、发现可能需要改进的地方
评价截图
作业二:结对编程
结对
一、图片
二、过程简述
这是我们第一次体验结对编程,不可否认结对编程的好处显而易见,两个人一起完成这项任务,有助于对作业更全面的认识,包括经验的共享与知识的共享、对于为什么做、怎么做和做什么会有更深入的理解。首先在开始编程之前,我们各自先做了一番准备,查阅相关网页文献和程序代码,了解别人是如何去做的。发现大家大多都是用Python实现的,由于现学一门语言有一定压力,我们选择继续使用C++来完成。接着我们陆陆续续花了几天在网络上找了一些关于简单读写文本文件、统计文件的行数、读取文件数据的方法,并且互相分享学习。在正式编程的时候,先是各抒己见讨论了一下如何下手,然后选择在现有代码的基础上实现改动,同时使用了QQ的屏幕共享的功能,过程中队友的支持与鼓励非常重要,我们也出现过懈怠和拖沓,但有一方的认可便支撑着整个项目继续进行下去。我们与此同时会有更高的生产率——更好地集中精力及更高的工作强度、彼此促进并激励来达到最好的结果、更少的拖延和时间浪费,一起思考,一起设计。
蒋文锦同学是一个非常好的队友,为我们的项目做出了非常多的贡献,并且从中她也帮助我学习到了很多,她的技术能力非常强,所以主要负责程序的编改工作,我在一旁搜搜资料做一些小的工作。结对编程真的能够带来1+1>2的效果吗?我认为这很大程度上取决于我们自己的规划,像是这种学校中的项目,结对编程两个人共同完成可以互相督促,一起成长进步,但是如果真正到岗位上,虽然益处不少,但是双倍的人力消耗——这意味着如果编程效率不能达到2*max(参与者1效率,参与者2效率),则单纯从产出上来看是亏本的;而且社会人际关系远比在学校中复杂,花费时间在处理人-人关系而非处理代码问题上——同样是巨大的成本。
总之,我非常高兴也非常荣幸在这次结对编程中与蒋文锦同学合作,让我受益颇丰。
编程
一、代码
#include <iostream>
#include <cstdlib>
#include <string>
#include <vector>
#include <fstream>
#include <sstream>
#include <assert.h>
using namespace std;
const int rangeNum = 10;
const int bufferSize = 409699;
char buffer[bufferSize];
char print[rangeNum][100] = {"宝玉","黛玉","贾母","凤姐","袭人","探春","宝钗","贾琏","平儿","贾政"};
int ans[rangeNum];
int main()
{
ifstream fin;
fin.open("D:\\红楼梦.txt"); //将文件流对象与文件连接起来
memset(ans, 0, sizeof(ans));
int ch, t = 0;
char c,cc,ccc,cccc;
cout << "请输入统计的章节号:";
cin >> ch;
//第 回
bool flg;
while (fin.getline(buffer, bufferSize))//查找章节
{
flg = false;
int k;
for (k = 0; k < 12; k++)
{
if (buffer[k] != '-') break;
}
if (k == 12)
{
t++;
if (t == (ch + 1))
{
flg = true;
break;
}
}
}
if(flg)
{
c = fin.get();
cc = fin.get();
ccc = fin.get();
while (c != EOF && c != '-')
{
cccc = fin.get();
for (int i = 0; i < rangeNum; i++)
{
if (c == print[i][0]&&cc == print[i][1]&& ccc == print[i][2]&& cccc== print[i][3])
{
++ans[i];
}
}
c = cc;
cc = ccc;
ccc = cccc;
}
}
for (int i = 0; i < rangeNum; ++i)
{
cout << print[i] << ":" << ans[i] << endl;
}
fin.close(); //关闭文件输入流
// 写文件
ofstream outFile;
outFile.open("Role.csv", ios::out); // 打开模式可省略
//outFile << "第"<<ch<<"回"<< endl;
outFile << "名称" << ',' << "第" << ch << "回出现次数" << endl;
for (int i = 0; i < rangeNum; i++)
{
outFile << print[i] << ',' << ans[i] << endl;
}
outFile.close();
getchar();
system("pause");
return 0;
}
二、运行结果截图
三、码云的链接
https://gitee.com/Rachelee/firstwarehouse/blob/master/Chinese statistics.cpp
https://gitee.com/Rachelee/firstwarehouse/blob/master/shz.cpp