结对成员
031502412 黄若岚
031502414 李佳铭
Github地址
https://github.com/wait4ever/Student_Department
生成程序
一组较好的数据
【https://github.com/wait4ever/Student_Department/blob/master/Project/input_data.text】
- 数据生成程序的原理
通过设置像
string tags[10]={"study","film","English","music","reading","chess","football","dance","programming","basketball"};
这样的标签数组,然后生成一个随机数,范围在2-4之间,通过随机数从数组中获取不重复的标签。学生标签个数规定为2-4个。
而生成的时间段为在8:00到24:00之间。每个时间段为两个小时。规定学生的空闲时间段个数在4到9个之间。
学号从031502001开始,每次递增1。
部门信息和学生信息生成的方式类似,故省略。
- 考虑的因素
考虑的因素主要是通过随机数来随机生成数据。
数据建模及匹配程序的思路及实现方式
数据本来是要通过json读取数据的,因为这个方法直到助教在群里提到才发现。而之前一直不知道要怎么过滤掉冗余的数据,提取有效数据。由于时间太赶,到后面手忙脚乱,jsoncpp下载后配置好却也用不了导致心态有点崩。然后我们就卡在这一步上没能继续进行。但就匹配函数的思路在假期通过语音聊天的方式也讨论出了一个看似可行的方案。
- 匹配程序的思路及实现方式
经过讨论,我们认为志愿是进入部门最重要的因素。只有学生喜欢这个部门,才愿意为部门出力办事。而志愿的优先级也会影响一个学生是否能够进入这个部门(参考大学志愿填报的录取方式)。而学生与部门匹配的标签数作为第二个考虑的因素。而对于时间冲突问题,若在部门会议时间里,学生都没有一个空闲的时间去参加,则学生直接没有进入该部门的资格。根据公式计算每个学生对于志愿部门的权重值,在部门端进行排序,在部门限定的人数范围内,权重足够高的学生进入该部门(权重为0不参与排序)。
if (matchTime==0) Rank=0;
else Rank=3*volunLevel+2*matchTags+1*matchTime;
注:第一志愿volunLevel为5,第二志愿为4,以此类推。
代码规范
我们在网上找到一份关于C++代码规范的文档,比较简洁,我们根据这个规范进行代码规范。链接->http://www.jianshu.com/p/ccc1b1992894
for (int j=0; j<tagsNum; j++)
{
randNum2[j] = rand()%10;
while(state2[randNum2[j]] == 1)
{
randNum2[j] = rand() % 10;
}
state2[ randNum2[j] ] = 1;
}
结果评估
emmm..由于代码编写在进行到json格式的数据读取时卡住了,于是没有结果。
结对感受
第二次结对作业远没有第一次结对作业来得顺利。可能由于电话讨论的效率不及当面讨论。当敲了好多行代码后终于写出一个数据生成程序,到今天看见其他同学交的代码用Json写生成数据程序那么优雅那么简洁就感觉自己国庆几天的辛苦都白费了。心态有点崩,到后面想学json,jsoncpp动态链接库却又一直用不了。有用心去做了也没有做出来,还是挺难受的。我是一个slow learner,希望接下去继续努力吧,毕竟软工实践还没结束,团队作业也才刚开始。好好去学安卓,别拖团队后腿。