第六次作业--结对编程第二次

本次作业deadline: 2017-10-10 21:00

根据上一次结对作业的背景,实现一个分配算法,根据输入信息,输出:

  • 部门和学生间的匹配信息(一个学生可以确认多个他所申请的部门,一个部门可以分配少于等于其要求的学生数的学生)
  • 未被分配到学生的部门
  • 未被部门选中的学生

说明:仅就上述内容,实现一个单独的程序模块。不需要和之前的原型整合在一起。

要求:

  • 1、输入的数据,另外写生成程序随机实现。
  • 2、为输入输出设计接口,为该匹配程序模块后期可能的整合入系统提供便利。
  • 3、输入输出采用 json 文本文件方式,可自由讨论确定细节内容,但需要明确并体现在博客中。
  • 4、需要为匹配算法确立几条分配或排序原则,比如 绩点优先、或兴趣优先、或活动时间优先、或其他等等,请你们结对讨论确定。
  • 5、对不同策略做出评价,并在博客中展示测试结果。提醒:对于同一组输入,输出的未被导师选中的学生数越少越好。
  • 6、博客中列出代码你们的代码规范要求。
  • 7、实现的程序语言以C/C++优先,部分同学如果对Java/C#掌握更加熟练也可接受。
  • 8、代码提交在GitHub上,并在博客中提供项目链接(注意不是Github个人主页)。
  • 9、两人博客中涉及到设计及代码展示可以相同,但是要求使用自己语言加以描述。

博客要求(模板/评分)

  • 结对情况【1分】

    • 自己
      • 学号后3位
      • 名(为保护隐私省去姓)
    • 队友
      • 学号后3位
      • 名(为保护隐私省去姓)
      • 队友博客链接(本次作业链接,不是主页,既然是一个队伍,保持同时发布并获取对方链接)
  • GitHub 项目链接(不是主页)【1分】

  • 设计说明

    • 接口设计(API)【5分】
    • 内部实现设计(类图)【5分】
    • 匹配算法设计(思想/流程等)【5分】
    • 测试数据如何生成?【5分】
    • 如何评价自己的匹配算法?【10分】
  • 关键代码解释

    • 贴出你认为重要的/有价值的代码片段,并解释【5分】
  • 运行及测试结果展示

    • 测试200位同学,20个部门的情况【5分】
    • 测试500位同学,30个部门的情况【8分】
    • 测试1000位同学,50个部门的情况【10分】
    • 测试5000位同学,100个部门的情况【15分】
    • 以上每组测试分别提供:
      • 测试结果概况描述
      • 测试输入数据片段展示及完整数据链接
      • 测试输出数据片段展示及完整数据链接
      • 完整测试数据建议提交到Github项目tests目录内,再提供链接到博客
      • 测试数据文件命名:
        • 输入: sxxx-dxxx-in.json
        • 输出: sxxx-dxxx-out.json
        • sxxx 中的 xxx 替换同学数目
        • dxxx 中的 xxx 替换部门数目
    • 效能分析报告【5分】
  • 遇到的困难及解决方法【5分】

    • 困难描述
    • 做过哪些尝试
    • 是否解决
    • 有何收获
  • 对队友的评价【5分】

    • 有哪些好的地方值得学习
    • 有哪些不好或者需要改进的地方
  • PSP表格【5分】

  • 学习进度条【5分】

关于PSP/学习进度条等模板请参考: http://www.cnblogs.com/vertextao/p/7469789.html


参考输入输出信息

输入信息:

  • 部门
    • 部门编号
    • 部门需要学生数的要求的上限,单个,数值,在[0,15]内;
    • 部门的特点标签,多个,字符;
    • 部门的常规活动时间段,多个;
    • 更多...
  • 学生
    • 绩点信息,单个,数值;
    • 兴趣标签,多个,字符;
    • 每个学生有不多于5个的部门意愿(部门意愿不能空缺);
    • 更多...

参考输入示例

{
    "departments" : 
    [
        {
            "department_no" : "FZU_BL01",
            "department_name" : "balabala",
            "member_limit" : 10,
            "tags": ["singing", "dancing", "guitar", ...],
            "event_schedules" : ["from1-end1", "from2-end2", "from3-end3", ...],
            ...
        },
        {
            "department_no" : "FZU_WL01",
            "department_name" : "wulalala",
            "member_limit" : 15,
            "tags": ["xxx", "yyy", "bbb", ...],
            "event_schedules" : ["from1-end1", "from2-end2", "from3-end3", ...],
            ...
        },
        ...
    ],
    "students" :
    [
        {
            "student_no" : "FUZSTU_00134011",
            "student_name" : "ZHANGSHAN",
            "tags" : ["dangcing", "painting", "running", ...],
            "available_schedules" : ["from1-end1", "from2-end2", "from3-end3", ...],
            ...
        },
        {
            "student_no" : "FUZSTU_00134010",
            "student_name" : "LISI",
            "tags" : ["reading", "abc", "ddd", ...],
            ...
        },
        ...
    ]
}

参考输出示例

{
    "matched_department_view" :
    {
        ...
    },
    "matched_student_view" :
    {
        ...
    },
    "standalone_departments" :
    [
        ...
    ],
    "standalone_students" :
    [
        ...
    ]
}
原文地址:https://www.cnblogs.com/vertextao/p/7616222.html