• 结队项目——第二次作业


    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来解析文件,中途遇到了很多编译上的困难,最终大都克服了。
    • 建议
      不要应该是同学就不好意思开口,有些时候只要问一下对方就能解决问题了,但由于是同学不好意思开口,就自己一个人搞呀搞,最后发现一直在做无用功,太浪费时间了。在学校的时候就应该多在一起讨论问题,不能依赖于线上交流,在线上注意力不够集中,完全不能专心讨论。
  • 相关阅读:
    Xcode 构建规则
    创建带阴影,有圆角的UIView的正确方式
    EffectiveC#12,13,14--成员初始化
    EffectiveC#11--选择foreach循环
    EffectiveC#9--明白几个相等运算之间的关系
    EffectiveC#8--确保0对于值类型数据是有效的(初始化问题)
    NET基础课--泛型(NET之美)
    NET基础课-- 类型基础(NET之美)
    EffectiveC#7--选择恒定的原子值类型数据
    EffectiveC#6--区别值类型数据和引用类型数据
  • 原文地址:https://www.cnblogs.com/yujohn/p/7643223.html
Copyright © 2020-2023  润新知