【Alpha版本】冲刺阶段——Day 3
我说的都队
031402304 陈燊
031402342 许玲玲
031402337 胡心颖
03140241 王婷婷
031402203 陈齐民
031402209 黄伟炜
031402233 郑扬涛
会议时间:11月9日
一、项目燃尽图
二、项目进展
已完成
- 系负责人个人信息界面的后台实现
- 院负责人个人信息界面的后台实现
- 学生的专业导师初稿界面
- (重点进度)毕设导师分配算法
分配算法代码主体框架如下:
学生结构体:
struct Student {
int student_id; // 学生编号
int teacher_id; // 中选的导师编号
int cur; // 当前分配进程正在考虑第cur个志愿
int want[5]; // 五个志愿
float point; // 绩点
};
导师结构体:
struct Teacher {
int teacher_id; // 导师编号
int want_num; // 期望的学生数
int chose_num; // 已中选的学生数
int student_id[10]; // 中选的学生编号
};
(重点)核心分配算法类:
class DistributeSystem {
private:
int student_number; // 学生总人数
int teacher_number; // 导师总人数
Student* stu;
Teacher* tch;
public:
DistributeSystem() {
stu = NULL;
tch = NULL;
student_number = 0;
teacher_number = 0;
}
DistributeSystem(int stu_num, int tch_num, Student* student, Teacher* teacher) {
student_number = stu_num;
teacher_number = tch_num;
stu = student;
tch = teacher;
}
~DistributeSystem() {
delete[] stu;
delete[] tch;
}
// 根据导师编号返回他在数组中的下标
int get_teacher_index(int teacher_id) {
int index;
for (index = 0; index < teacher_number; ++index) {
if (tch[index].teacher_id == teacher_id) {
break;
}
}
return index;
}
// 根据学生编号返回他在数组中的下标
int get_student_index(int student_id) {
int index;
for (index = 0; index < student_number; ++index) {
if (stu[index].student_id == student_id) {
break;
}
}
return index;
}
// 使用Gale–Shapley算法进行分配
void distribute() {
queue<Student> Que; //未分配到导师的学生队列
for (int i = 0; i < student_number; ++i) {
Que.push(stu[i]); // 初始都是未分配状态,都加进队列
}
while (!Que.empty()) {
Student& s = stu[get_student_index(Que.front().student_id)];
Que.pop();
// 考虑学生s的第cur个志愿(导师为t)
Teacher& t = tch[get_teacher_index(s.want[s.cur++])];
if (t.want_num > t.chose_num) { // 如果导师t还有剩余名额,直接中选
t.student_id[t.chose_num++] = s.student_id;
s.teacher_id = t.teacher_id;
}
else {
int min_stu_id = -1; // 导师t中绩点最低的学生编号
int pos = -1; // 以及他在导师的中选列表中的下标
float min_point = 5.0;
for (int i = 0; i < t.chose_num; ++i) { // 在导师t中查找绩点最低的学生编号
Student tmp = stu[get_student_index(t.student_id[i])];
if (min_point > tmp.point) {
min_point = tmp.point;
min_stu_id = tmp.student_id;
pos = i;
}
}
// 如果导师t不带学生 或者 学生s的绩点比导师t所有已经中选学生的最低绩点还低,那么学生t只好再等下轮
if (t.want_num == 0 || s.point < min_point) {
if (s.cur < 5) { // 如果五个志愿还没考虑完毕的话,放入队列中继续参与分配
Que.push(s);
}
}
else { // 不然学生t就直接替换掉绩点最低的那个学生
Student& min_stu = stu[get_student_index(min_stu_id)];
min_stu.teacher_id = -1;
if (min_stu.cur < 5) { // 被替换掉的学生再放入未分配的队列中去
Que.push(min_stu);
}
t.student_id[pos] = s.student_id;
s.teacher_id = t.teacher_id;
}
}
}
}
};
// 随机生成导师信息
void generate_teacher_information(Teacher* tch, int teacher_number) {
map<int, bool> id;
for (int i = 0; i < teacher_number; ++i) {
int teacher_id = GetRandom(99999); // 编号范围[00001, 99999]
// 随机出一个不重复的编号才停止
while (id[teacher_id] == true) teacher_id = GetRandom(99999);
id[teacher_id] = true;
tch[i].teacher_id = teacher_id;
tch[i].want_num = rand() % 9; // 期望学生数[0, 8]
tch[i].chose_num = 0;
}
}
// 随机生成学生信息
void generate_student_information(Student* stu, Teacher* tch, int student_number, int teacher_number) {
map<int, bool> id;
for (int i = 0; i < student_number; ++i) {
int student_id = GetRandom(99999);
while (id[student_id] == true) student_id = GetRandom(99999);
id[student_id] = true;
stu[i].student_id = student_id;
stu[i].teacher_id = -1; // -1表示未分配到导师
stu[i].cur = 0; // 初始都从志愿1(下标为0)开始考虑
stu[i].point = (rand() % 401 + 100) / 100.0; // 绩点[1.0, 5.0]
map<int, bool> m;
for (int j = 0; j < 5; ++j) { // 生成5个志愿
int want = rand() % teacher_number;
while (m[want] == true) want = rand() % teacher_number;
m[want] = true;
stu[i].want[j] = tch[want].teacher_id;
}
}
}
随机生成导师信息:
// 随机生成导师信息
void generate_teacher_information(Teacher* tch, int teacher_number) {
map<int, bool> id;
for (int i = 0; i < teacher_number; ++i) {
int teacher_id = GetRandom(99999); // 编号范围[00001, 99999]
// 随机出一个不重复的编号才停止
while (id[teacher_id] == true) teacher_id = GetRandom(99999);
id[teacher_id] = true;
tch[i].teacher_id = teacher_id;
tch[i].want_num = rand() % 9; // 期望学生数[0, 8]
tch[i].chose_num = 0;
}
}
随机生成学生信息:
// 随机生成学生信息
void generate_student_information(Student* stu, Teacher* tch, int student_number, int teacher_number) {
map<int, bool> id;
for (int i = 0; i < student_number; ++i) {
int student_id = GetRandom(99999);
while (id[student_id] == true) student_id = GetRandom(99999);
id[student_id] = true;
stu[i].student_id = student_id;
stu[i].teacher_id = -1; // -1表示未分配到导师
stu[i].cur = 0; // 初始都从志愿1(下标为0)开始考虑
stu[i].point = (rand() % 401 + 100) / 100.0; // 绩点[1.0, 5.0]
map<int, bool> m;
for (int j = 0; j < 5; ++j) { // 生成5个志愿
int want = rand() % teacher_number;
while (m[want] == true) want = rand() % teacher_number;
m[want] = true;
stu[i].want[j] = tch[want].teacher_id;
}
}
}
三、站立式会议照片
四、查缺补漏
今日进展 | 存在问题 | 明日安排 | |
---|---|---|---|
王婷婷 | 本来打算写学生/可选导师列表,但是发现自己还不会分页,就直接先写志愿分配结果,然并没有写完 | 对tp框架的使用不够熟练,很多东西都是看一会写一会。果然看教程还是应该边看边写,边学边练才能扎实 | 把昨天没写完的志愿分配结果完成,看看分页 |
许玲玲 | 完成了学生角色的专业导师列表 | 专业导师列表界面不够完善,bootstrap的框架不熟悉,而且学长的一些css和js也不懂 | 完善志愿分配结果,看看分页。 |
胡心颖 | 看完了ThinkPhp5框架的基础、架构、控制器,正在看数据库 | 看框架的时候没注意,把第二部分一些可以暂时省略的内容当成了基础看,看的云里雾里,挣扎了半天才发现不用看 | 把数据库看了,模型和视图过一遍,其他的有时间就先留给印象,没时间先省略掉,看完后开始着手敲代码 |
黄伟炜 | 继续完善了“系负责人时间界面”,看了 bootstrap 网格系统 | 因为之前看了 css 基础,就直接纯手敲css样式来实现界面,这样太费劲!虽然有听说过bootstrap,但是因为太懒,就没有去看使用方法。有了纯手敲css的体验,决定还是花一些时间看看bootstrap,提高一下效率 | 学习bootstrap,为后面的界面编写做准备 |
郑扬涛 | 主要是在改导师分配算法,还有着手进行导师分配情况界面的设计 | 因为ACM的缘故,前端学习的进度较慢 | 打算用模拟数据测试下分配算法,然后继续进行页面设计 |
陈齐民 | 大体完成了匹配设置界面,点击可选导师按钮,弹出可选导师的浮窗 | 分配算法已经实现,但是如果要实现的话还需要把算法单独写成库导入到框架中使用,但是目前不知道如何解决 | 完成匹配设置界面的后台功能,包括正常显示未分配到导师的学生列表和可选导师的列表,并且可以实现手动分配,完成分页功能 |
陈燊 | 冲刺博客的撰写,项目进度的把控 | 运动会的到来,时间安排有点紧 | 根据组员的进度以及安排,继续督促相应任务的完成,把控整体进度 |
五、心得体会
陈燊
这一次的冲刺会议,比较里程碑式的进展便是导师分配算法的完成。我们根据需求分析,然后汲取结对编程时的一些经验,确定了算法的大体思路。分配算法基本都是由ACM大神扬涛完成的,不得不感叹ACMer的强大!一个算法,分分钟就写了出来,而且基本没有BUG,有着得力的队友,作为组长真是放心。
许玲玲
虽然都是php框架,也都是MVC思想,但是不得不说差别真不少啊,之前看完的那些教程,好像基本全忘了,边看边写,总算写了点东西出来。
胡心颖
学习的时候比较赶,很多知识都是草草过一遍,记得不劳,也不透彻,虽然开始做的时候已经把知识大体上过一遍了,但估计还要反复回去学,还是要边学边做,不过好在有个印象,也稍微了解了框架的结构,日后去学习也知道去哪里学,而且组里还有两个PHP老司机,可以请教。
王婷婷
虽然都是php框架,也都是MVC思想,但是不得不说差别真不少啊,之前看完的那些教程,好像基本全忘了,边看边写,总算写了点东西出来。
陈齐民
运动会花了好多的时间,写功能的时间好少,最主要的算法实现分配的功能还不知道要如何导入到框架中实现,准备向其他的phper请教一下。
郑扬涛
就要出发去比赛了,感觉安排的事情又不能如期完成...只想说,各位队友大神们前端求带飞啊!!
黄伟炜
磨刀不误砍柴功!多花点时间熟悉前端框架的使用,可以提高编写页面的效率。
【Alpha版本】冲刺阶段——Day 3的更多相关文章
- 作业七:团队项目——Alpha版本冲刺阶段
本次作业为期三周时间,要求各组结合所选项目并阅读教材<构建之法>第六章内容,完成项目的Alpha版本.本阶段的主要内容如下:(20分) 1. 每天组织一次站立会议,讨论每个成员的昨天进 ...
- 作业七:团队项目——Alpha版本冲刺阶段010
今日安排:组内成员讨论 今日进程:组内成员讨论结束,并有明确的解决办法,每个人准备实践
- 作业七:团队项目——Alpha版本冲刺阶段009
今日安排:组内成员讨论 今日进度:组内成员讨论分工细节以及可能遇到的问题,并提出解决方案
- 作业七:团队项目——Alpha版本冲刺阶段008
今日进度:组内成员讨论 今日安排:组内成员分工
- 作业七:团队项目——Alpha版本冲刺阶段007
今日进展:完善游戏主体代码. 今日安排:让游戏能运行起来.
- 作业七:团队项目——Alpha版本冲刺阶段006
今日进展:完成主体代码. 今日安排:对程序主体进行编写.
- 作业七:团队项目——Alpha版本冲刺阶段005
今日进展:编写代码. 今日安排:完成开始部分代码.
- 作业七:团队项目——Alpha版本冲刺阶段004
今日进展:我们的扫雷基本界面已经差不多了,准备开始编写内部代码. 今日安排:做好界面,准备开始代码编写.
- 作业七:团队项目——Alpha版本冲刺阶段003
今日进展:我们的目标是做一款扫雷游戏,所以我们先去玩了几款游戏,找到了扫雷游戏的一些特点. 今日安排:先进行了一些必要的游戏过程,进行了基本的扫雷界面规划.
- 作业七:团队项目——Alpha版本冲刺阶段002
今日进展:我们终于安装好了软件,今天开始进行作业设计. 今日安排:今天开始我们要开始我们的框架的设计.
随机推荐
- @RestController注解下返回到jsp视图页面
spring4.1中添加了@RestController注解很方便,集成了@ResponseBody注解,无需再在每个方法前添加了..但是却发现个问题..之前用@Controller注解的时候经常会如 ...
- css3 @font-face
很长时间,web设计师总是得用一些“web-safe”字体,英文用body{font-family:"corbel", Arial, Sans-serif; }中文用body{f ...
- 组合使用css选择器
今天看到有网站使用.classA.classB类似的选择器,不知道是否有人和我一样没有用过,所以了解一下,以下记录. 一.用法介绍 在css中.classA.classB指的是一个元素,同时满足cla ...
- 其实今天没有欲望..-MySQLi
hi 中午爽爽的游了会儿泳,但是下午把一拳超人看完了,竟然萌生不出学习的欲望了...强迫自己更新点东西吧,一会儿看书去. 1.MySQLi 二.MySQLi基于OOP的编程 2.1 使用解析 --基本 ...
- C#学习笔记-Windows窗体基本功能(Login登录界面)
本菜鸟由于实习工作的原因,不得不快速接触C#语言,刚刚好又要做毕业设计,所以就通过自学的方式一举两得地完成这两件事情. 故此文字记录或代码中的各种文件名之类均是以毕业设计为模版记录的,看着不方便之处请 ...
- java io (一)
对于文件内容的操作主要分为两大类 分别是:字符流 字节流 其中,字符流有两个抽象类:Writer Reader 其对应子类FileWriter和FileReader可实现文件的读写操作 Buffe ...
- MVC 数据验证[转]
前一篇说了MVC数据验证的例子,这次来详细说说各种各样的验证注解. 一.基础特性 一.Required 必填选项,当提交的表单缺少该值就引发验证错误. 二.StringLength 指定允许的长度 指 ...
- maven-安装配置
Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具. maven是什么maven这个词可以翻译为“知识的积累”,也可以翻译为“专家”或“内行” ...
- luogu[1140]相似基因
题目背景 大家都知道,基因可以看作一个碱基对序列.它包含了4种核苷酸,简记作A,C,G,T.生物学家正致力于寻找人类基因的功能,以利用于诊断疾病和发明药物. 在一个人类基因工作组的任务中,生物学家研究 ...
- class 函数
cocos2d-x 3.3 lua 版本的class函数用法: local FightScene = class("FightScene", function() return c ...