结对第二次作业

结对第二次作业

成员

  • 媛 528
  • 佳莹 516

github

设计说明

内部实现设计
类图

匹配算法
1.思路分析
我们将社团录取社员的影响因素列举出来,分别是:绩点、志愿数(填报志愿越多得分越低)、Tag匹配度、时间匹配度共四个影响因素。
因为四个因素的对于录取的影响强度不同,我们准备为个因素分配不同的权重值用来计算学生的最后得分。参考了这篇文章,我们最终选定第三种对偶比较法来分配权重,结果为:绩点:0.18 志愿数:0.25 Tag匹配度:0.32 时间匹配度:0.25.
每个社团加权计算出报名学生的得分后,依据得分高低录取学生,得到最终的录取列表。
2.流程图

评价算法
算法是按照比较公平的方式决定录用那些学生,对于社团来说,有助于招收到更适合自己的成员,但对于学生来说,会有一大部分人最终无法成功加入社团且测试结果表明,学生总数越多,最后无社团人数占比越大,这是一个很大的不足的地方。

关键代码
按照定好的公式算出得分并放入列表
void calculate(Students stu)
{
int i = 0;
for (vector::iterator it_s = stu.aspi.begin(); it_s != stu.aspi.end(); ++it_s)
{
double sum = 0;
int k;
k = get_department(*it_s);

	sum += stu.gpa * 0.18;   
	sum += point_num_aspi(stu) * 0.25;	

	sum += point_num_tag(stu ,depart[k]) * 0.32;	
	
	sum += stu_dep_time(stu ,depart[k]) * (-3) * 0.25;		
	
	depart[k].csm_list.push_back(sum);
	depart[k].ID_list.push_back(stu.stuID);
	depart[k].num_mem += 1;
}		

}

运行结果

s200-d20-in.json

S200-d20-out.json

posted @ 2017-10-15 19:55  su`  阅读(157)  评论(1编辑  收藏  举报