结队项目——第二次作业

031502533 熊立强
031502538 俞鋆
作业
github


###最好的数据及分析 [数据](https://github.com/juin1997/Couple-Homework-/blob/master/Project_IntelligebtPairing/input_data.txt) 随机生成的数据分布教均匀,最大差距在20左右。 ![](http://images2017.cnblogs.com/blog/1011927/201710/1011927-20171009214653668-708748452.png) ![](http://images2017.cnblogs.com/blog/1011927/201710/1011927-20171009214709199-500383790.png) ![](http://images2017.cnblogs.com/blog/1011927/201710/1011927-20171009214729262-1228922629.png) ![](http://images2017.cnblogs.com/blog/1011927/201710/1011927-20171009214742152-1822634196.png) ![](http://images2017.cnblogs.com/blog/1011927/201710/1011927-20171009214755105-1600277791.png) ![](http://images2017.cnblogs.com/blog/1011927/201710/1011927-20171009214805559-737441224.png) ![](http://images2017.cnblogs.com/blog/1011927/201710/1011927-20171009214820387-181377669.png)
  • 原理
    学生编号和部门编号都是固定的,只需要有一个初始值,后面一个一个加上去即可。
    其他的数据都是用随机数生成的,为了使随机数分布均匀,先使用srand(time(NULL))让生成的随机数不容易重复,时间中的星期几用字符串数组随机生成,开始时间随机一个822的数字,使生成的时间合理化,结束时间随机一个从开始时间后到23点的时间,选择的部门也只要在019间随机就行,标签用字符串数组,随机数字即可选中。

  • 考虑因素
    数据是不是固定的,有没有范围限制,这样的数据合不合理,一般人的数据会是怎么样的。

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

  • 思路
    数据建模的问题主要是需要生成分布比较均匀合理的数据,不能太多人选同一个部门,也不能一个部门没人选,学生的空闲时间和部门的活动时间都不能是大晚上,一个人和部门的标签在现实中也不会太多;而匹配程序的问题主要在于优先级,标签,志愿和时间这三个的优先级,根据这三个的数据给部门分配学生。

  • 实现方式
    我数据建模的实现方式很直接,固定的数据就用一个初始值,后面一个一个加上去即可。其他数据就随机生成。匹配的实现方式就是将学生部门时间的匹配程度,标签匹配程度,学生的志愿都算出一定的分数,学生进入志愿中分数最高的部门,如果一个部门满了就将分数低的踢出去。

时间随机生成

for(tLoop=0;tLoop<i;tLoop++)
			{
				if(tLoop==0) tWeek=Rand(0,7);
				else tWeek=(tWeek+1)%7;
				tString=Week[tWeek];
			        tStart=Rand(8,22);        //活动开始时间限制在8点到22点
				tString+=ToString(tStart);
				tString+=":00~";
				tString+=ToString(Rand(tStart+1,24));        //活动结束时间限制在24点
				tString+=":00\"";
				if(tLoop==i-1) 
					fout<<"                \""+tString<<endl;
				else
				fout<<"                \""+tString+","<<endl;
			}

读取文件,用cJSON解析文件

    string d;
    ifstream infile;
    infile.open("input_data.txt");        //打开输入文件
    string s;
    while(getline(infile,s))        //将文件中的内容全部转为字符串               
    {
        d=d+s;
    }
    cJSON* json = cJSON_Parse(d.c_str());  

代码规范

1.标识符的命名要清晰、明了,有明确含义,同时使用完整的单词或大家基本可以理解的缩写,避免使人产生误解。
实例:

        int i,stu,         //定义学生循环的变量
	tLoop,         //定义循环生成时间的变量
	tWeek,       //定义生成时间是星期几的变量
	tStart,          //定义时间开始时间的变量
	appliDepart,          //定义学生报的部门循环的变量
	appliDepartNum,         //定义学生报的部号
	depart,                   //定义部门循环的变量
	tags,                        //定义标签循环的变量
	tagStart;                 //定义开始标签的变量
        string tString;           //定义用来输出的字符串
  1. 一般情况下,源程序有效注释量必须在20%以上。

  2. 注释的内容要清楚、明了,含义准确,防止注释二义性。

  3. 边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。不再有用的注释要删除。

  4. 注释应与其描述的代码相近,对代码的注释放在其上方或者右边,不可放在下面,放于上方则需与其上面的代码用空行隔开。

  5. 数据结构声明(包括数组、结构、类、枚举等),如果其命名不是充分自注释的,必须加以注释。对数据结构的注释应放在其上方相邻位置,不可放在下面;对结构中的每个域的注释放在此域的右方.

实例:

struct Student                                   //定义学生结构体
{
	LISTSTRING FTDay;               //定义学生空闲时间是星期几
	LISTINT FTStart;                      //定义学生空闲时间的开始时间   
	LISTINT FTEnd;                        //定义学生空闲时间的结束时间
	string StudentNo;                      //定义学生的学号
	string ApliDepart[5];                   //定义学生报的部门
	LISTSTRING Tag;                      //定义学生的兴趣标签
};

结果评估(完成中)

结对感受

  • 感受
    首先,我觉得本次结对作业我和我的队友是很失败的。失败的理由有三:
    一、我们就只在放假前讨论了一下,之后都是线上交流,有时候等对方回一句话都要几个小时,效率十分低下。
    二、分工的时候我写生成和读取数据程序,我的队友写匹配程序,这样的话如果我不写完的话,他根本无法对程序进行评估,有什么不足,最终导致了我们的程序无法在规定的时间完成,只写了生成和读取数据程序。
    三、我们的积极性不够,放假期间没怎么做作业,等到假期快结束才开始做,也是无法完成作业的重要原因。
    在本次作业中,我也学到了很多,比如了解到了JSON的格式和使用方法,学会使用C语言的第三方库cJSON来解析文件,中途遇到了很多编译上的困难,最终大都克服了。
  • 建议
    不要应该是同学就不好意思开口,有些时候只要问一下对方就能解决问题了,但由于是同学不好意思开口,就自己一个人搞呀搞,最后发现一直在做无用功,太浪费时间了。在学校的时候就应该多在一起讨论问题,不能依赖于线上交流,在线上注意力不够集中,完全不能专心讨论。
posted @ 2017-10-09 21:55  龙套1997  阅读(241)  评论(2编辑  收藏  举报