结队项目——第二次作业

第二次作业链接在这里

结对成员

  • 031502240 杨艺
  • 031502212 符天愉

代码链接

github链接在这里

采用编程语言

  • c语言

生成最“好”的数据

数据在这里

  • 数据生成"程序的原理
    采用随机生成,学生的free_time和部门的event_schedules我们设置了几个比较符合“大学生”和部门可能比较有空的时间段来随机选择,然后tags总共8个,同时部门的event_schedules的时间个数少于学生free_time的时间个数,这样会比较符合实际。
    在生成free_time的时候,就先随机生成free_time的个数n,在随机生成n个数去匹配我们设置的free_time的时间段。其他数据的生成原理也都类似。生成json格式的实现,我们使用的是cJSON库。

数据建模及匹配程序的思路及实现方式

  • 匹配原则:以兴趣标签匹配优先,学生标签与部门标签匹配数目越高,就越先被部门选中,但是如果学生的free_time和部门的event_schedules没有一个匹配,则不能被选中。考虑学生兴趣优先而不以部门活动时间优先匹配的原因,是兴趣更容易让学生在部门中发展并且参与活动,而部门的活动时间在现实中也比较灵活,除了可能有一两个固定的时间,但是大部分的部门活动时间都是比较灵活的,因此优先匹配兴趣标签。

  • 流程图

  • 利用c语言的json库解析output_data文件后,将数据存入了结构体数组中,包括三百个学生和20个部门的信息,还设置了d_student[21][300]来存储每个部门申请学生的编号,以及applications_number[21]存取每个部门申请的学生数,每次将不断循环部门的申请学生,遍历学生的兴趣标签,找到和部门标签相同的个数,以兴趣标签个数越多的越优先选中为原则,在学生的free_time存在和部门的活动时间有匹配的前提下,就收取该申请学生。当然这里面还涉及到时间匹配问题,我们将学生和部门的时间都化为了分钟来比较,只要部门的活动开始时间小于学生的空闲开始时间并且部门的活动结束时间大于学生的空闲结束时间,就认为时间匹配成功。这样就完成了分配问题。

代码规范

这次作业完成是由两个人共同编码,而不是各自完成各自的任务,所以代码风格都会考虑到队友的习惯,延续队友的风格。

//时间匹配+部门选择学生
	     if(strcmp(s_day,d_day)==0)
			{
				if(time2[1]*60+time2[2]<= time2[5]*60+time2[6] &&  time2[3]*60+time2[4] <= time2[7]*60+time2[8] )
						{
							if(test == stu[d_student[i][max_number]].student_no) 
							{
								n2++; break;
							}
							test = stu[d_student[i][max_number]].student_no;
							dep[i].member[d_member] = stu[d_student[i][max_number]].student_no;
							stu[d_student[i][max_number]].department=1;
							d_member++;
						}
			}

结果评估

我们在最后的时间进行了结果评估,我们认为有两点不足。

  • 在进行编码的时候,我们降低了学生5个(最多5个)志愿的优先考虑,我们更加看重部门的兴趣标签,采用这样的匹配的匹配,就会发生: 学生A1在第一志愿没有被部门B录取,而学生A2在第五志愿却被部门B录取的情况了。在志愿优先的前提下再来匹配兴趣标签数,结果可能会更好点。
  • 程序在编码的时候,没有考虑到,如果兴趣标签数目一样的,该如何处理(意识到这个问题的时候已经没什么时间来修改程序了)。这个bug会导致如果兴趣标签匹配个数相同的时候,先选择了学号在前的学生。
    总的来说,部门的人数如果收满了,就会使上述两个问题的缺点极大的暴露出来了。

结对感受

  • 两个人debug的效率真的比一个人debug的效率高多了。
  • 和PHP这种弱类型的语言来生成json数据相比,c语言来生成真的是....
  • 处理字符串特别痛苦
  • 在匹配编码的时候,遇到了一个bug,结果两个人找了特别久依旧没有找出bug,最后的方法是,重新来过-.- ,都是泪啊。
  • 两个人编码一个人看,一个人写,可以实现互补,在思路比较清晰的地方,就负责编码,另外一个负责看逻辑
  • 好多bug都是对友解决的,超级给力。
  • 很少用c写过生成输入程序+匹配程序这么长的代码。
  • 提前结束了假期,发现提的不够前。
posted @ 2017-10-09 21:07  tyfu  阅读(145)  评论(3编辑  收藏  举报