结对第二次作业
2017-10-09 21:49
148 查看
结对成员:031502538 俞鋆 | 031502533 熊立强
项目链接
原理
学生编号和部门编号都是固定的,只需要有一个初始值,后面一个一个加上去即可。
其他的数据都是用随机数生成的,为了使随机数分布均匀,先使用srand(time(NULL))让生成的随机数不容易重复,时间中的星期几用字符串数组随机生成,开始时间随机一个8~22的数字,使生成的时间合理化,结束时间随机一个从开始时间后到23点的时间,选择的部门也只要在0~19间随机就行,标签用字符串数组,随机数字即可选中。
考虑因素
数据是不是固定的,有没有范围限制,这样的数据合不合理,一般人的数据会是怎么样的。
算法实现:
首先扫描全体学生的信息,提取需要的相关数据存入“学生”结构体当中。
计算每个学生相对应与每个部门的得分。
部门之间没有优先级,分配的到每个学生的“申请表”,并对学生进行排序,符合程度越高的排名越前。
筛选:每个部门进行正式的筛选,录取学生,若学生还有报名其他部门,且在入选队列中,则根据学生的志愿进行筛选。判断是否删除。
对于没有入选部门的同学,进行统一的输出。
定义了一个结构体,用于在部门接收队列中进行接受学生,并用于之后排序选择匹配的学生。
部门接受队列的排序,采用C自带的快速排序,在计算完得分之后,对数据进行输出,自己编写了一个传入第三个参数的比较函数。
相对独立的程序块之间、变量说明之后必须加空行。
较长的语句(>80字符)要分成多行书写,长表达式要在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读。
不允许把多个短语句写在一行中,即一行只写一条语句。
if、for、do、while、case、switch、default等语句自占一行,且if、for、do、while等语句的执行语句部分无论多少都要加括号{}。
函数或过程的开始、结构的定义及循环、判断等语句中的代码都要采用缩进风格,case语句下的情况处理语句也要遵从语句缩进要求。
注释的内容要清楚、明了,含义准确,防止注释二义性。
边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。不再有用的注释要删除。
注释应与其描述的代码相近,对代码的注释放在其上方或者右边,不可放在下面,放于上方则需与其上面的代码用空行隔开。
数据结构声明(包括数组、结构、类、枚举等),如果其命名不是充分自注释的,必须加以注释。对数据结构的注释应放在其上方相邻位置,不可放在下面;对结构中的每个域的注释放在此域的右方.
全局变量要有较详细的注释,包括对其功能、取值范围、哪些函数或过程存取它以及存取时注意事项等的说明。
注释与所描述内容进行同样的缩排。
避免在一行代码或表达式的中间插入注释。
例如:
自己特有的命名风格,要自始至终保持一致,不可来回变化。
函数名应准确描述函数的功能。避免使用无意义或含义不清的动词为函数命名。使用动宾词组为执行某操作的函数命名。
检查函数所有参数输入的有效性。
结对编程要求对分工要比较明确,约定好如何使用对方的函数,如何把两人的代码合成到同一个项目里面,所以所以我们也找了相关的代码规范,在编程的时候更多的注重了可读性。
在使用github的时候也尝试了fork队友的仓库,然后修改好之后在pull给队友来合并。
项目链接
数据建模以及匹配程序
数据原理
学生编号和部门编号都是固定的,只需要有一个初始值,后面一个一个加上去即可。
其他的数据都是用随机数生成的,为了使随机数分布均匀,先使用srand(time(NULL))让生成的随机数不容易重复,时间中的星期几用字符串数组随机生成,开始时间随机一个8~22的数字,使生成的时间合理化,结束时间随机一个从开始时间后到23点的时间,选择的部门也只要在0~19间随机就行,标签用字符串数组,随机数字即可选中。
考虑因素
数据是不是固定的,有没有范围限制,这样的数据合不合理,一般人的数据会是怎么样的。
匹配程序原理
我们对于学生申报部门,采用兴趣优先,综合考虑其他各种因素的方法进行分配,使得部门纳入的人数会尽可能的多。算法实现:
首先扫描全体学生的信息,提取需要的相关数据存入“学生”结构体当中。
计算每个学生相对应与每个部门的得分。
部门之间没有优先级,分配的到每个学生的“申请表”,并对学生进行排序,符合程度越高的排名越前。
筛选:每个部门进行正式的筛选,录取学生,若学生还有报名其他部门,且在入选队列中,则根据学生的志愿进行筛选。判断是否删除。
对于没有入选部门的同学,进行统一的输出。
定义了一个结构体,用于在部门接收队列中进行接受学生,并用于之后排序选择匹配的学生。
struct StudentScore{ double tagScore; double otherScore; int tag; string StudentNo; };
部门接受队列的排序,采用C自带的快速排序,在计算完得分之后,对数据进行输出,自己编写了一个传入第三个参数的比较函数。
bool cmp(StudentScore a,StudentScore b){ if (a.tagScore == b.tagScore){ return a.otherScore > b.otherScore; } else{ return a.tagScore > b.tagScore; } }
代码规范
我们团队所遵循的代码规范排版
程序块要采用缩进风格编写,缩进的空格数为4个。相对独立的程序块之间、变量说明之后必须加空行。
例:
struct StudentScore{ double tagScore; double otherScore; int tag; string StudentNo; };
int StringToInt(string s)
{
stringstream ss;
ss<<s;
int i;
ss>>i;
return i;
}
较长的语句(>80字符)要分成多行书写,长表达式要在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读。
不允许把多个短语句写在一行中,即一行只写一条语句。
if、for、do、while、case、switch、default等语句自占一行,且if、for、do、while等语句的执行语句部分无论多少都要加括号{}。
例: if(s[k]>64&&s[k]<123) { tmp+=s[k]; } if(s[k]>47&&s[k]<58) { tmp+=s[k]; } if(s[k]=='"') { dep[i].ESDay.push_back(tmp); tmp=""; }
函数或过程的开始、结构的定义及循环、判断等语句中的代码都要采用缩进风格,case语句下的情况处理语句也要遵从语句缩进要求。
注释
一般情况下,源程序有效注释量必须在20%以上。注释的内容要清楚、明了,含义准确,防止注释二义性。
边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。不再有用的注释要删除。
注释应与其描述的代码相近,对代码的注释放在其上方或者右边,不可放在下面,放于上方则需与其上面的代码用空行隔开。
例: string DepartmentMember[20][15];//对应二十个部门,部门内部有零不输出,对应学号 string unluckyStrudent [300]; //对应学号,为零不输出
数据结构声明(包括数组、结构、类、枚举等),如果其命名不是充分自注释的,必须加以注释。对数据结构的注释应放在其上方相邻位置,不可放在下面;对结构中的每个域的注释放在此域的右方.
例: // 学生数据结构,包括学生所需的基本信息 struct Student { LISTSTRING FTDay; LISTINT FTStart; LISTINT FTEnd; string StudentNo; string ApliDepart[5]; LISTSTRING Tag; };
全局变量要有较详细的注释,包括对其功能、取值范围、哪些函数或过程存取它以及存取时注意事项等的说明。
注释与所描述内容进行同样的缩排。
避免在一行代码或表达式的中间插入注释。
标识符命名
标识符的命名要清晰、明了,有明确含义,同时使用完整的单词或大家基本可以理解的缩写,避免使人产生误解。例如:
自己特有的命名风格,要自始至终保持一致,不可来回变化。
函数
一个函数仅完成一件功能。函数名应准确描述函数的功能。避免使用无意义或含义不清的动词为函数命名。使用动宾词组为执行某操作的函数命名。
检查函数所有参数输入的有效性。
结果评估
待添加结对感受
1.结对编程的收获
通过这次的结对编程作业,真正的体验了一次由两人合作的编程经验。让我的责任感有了一定的提高,对于无法解决的问题,也没有直接的抛在脑后不去解决,直接打开网页搜索,拖到下一刻便会给队友多一点的麻烦。结对编程要求对分工要比较明确,约定好如何使用对方的函数,如何把两人的代码合成到同一个项目里面,所以所以我们也找了相关的代码规范,在编程的时候更多的注重了可读性。
在使用github的时候也尝试了fork队友的仓库,然后修改好之后在pull给队友来合并。
2.这次结对编程的不足
这次由于国庆假期的原因,其实真正在一起编程的时间并没有多少,也就只有国庆后的一两次。其实真正的编程交流还是偏少,没有做到对方写的什么代码我都能了解他是如何编写的。在使用github的过程中也没有从一开始就两个人一起编写,而是到了最后的时候才了解了一下两人合作编写github的基本操作。相关文章推荐
- 第二次作业 —— 结对项目之需求分析与原型模型设计
- 第二次作业——结对项目之需求分析与原型模型设计
- 结对项目第二次作业
- 2017 软件工程 结对第二次作业
- 第六次作业--结对编程第二次
- 第六次作业--结对编程第二次
- 高级软件工程结对第二次作业
- 第二次作业——结对项目之需求分析与原型模型设计
- 第二次作业——结对项目之需求分析与原型模型设计
- 第二次作业——结对项目之需求分析与原型设计
- 第二次作业——结对项目之需求分析与原型设计
- 结对作业——第二次作业
- 软件工程实践2017结对项目——第二次作业
- 软工实践结对作业第二次
- 第二次结对作业
- 结对项目第二次作业
- 第二次作业:结对练习
- 第二次结对作业
- 结对第二次作业
- 结对作业第二次