# make-appointments
Make appointments to learn course!
#需求(学生、老师、班级、课程)
- 假设共有n节课
- 一堂课可以最多4个学生1个老师
- 但学生需要按需选择时间学习
- 老师有自己固定的教课时间
- 以周为单位进行选课
- 1周最多有7天可学,1天最多有4节课,上午下午各两节
? 如何设计使效率更高,资源利用率更高
#设计思路
- 先确定老师的可用时间;
- 根据老师时间确定每个时间段的最大学生数;
- 采用抢选策略,选满为止
#代码实现-- “测试驱动开发”(TDD:Test-Driven Development)
- 选用mocha单元测试框架
mocha是JavaScript的一种单元测试框架,既可以在浏览器环境下运行,也可以在Node.js环境下运行。使用mocha,我们就只需要专注于编写单元测试本身,然后,让mocha去自动运行所有的测试,并给出测试结果。
- 创建make-appointments-for-teacher.js引入断言库
const assert = require('assert');
- 编写第一个测试可能(假设所有老师都不选择可用时间)
describe('Make Appointments for teachers:', () => {
it('1.Week schedule should be [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]', () => {
assert.deepEqual(teacherDecide([[], [], []]), [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]);
})
});
- 编写测试函数teacherDecide(这里有些跳步,不符合TDD开发流程,大家自己研究具体开发过程)
const teacherDecide = (decision) => {
let maximumSchedule = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]];
for (i = 0; i < decision.length; i++) {
for (j = 0; j < decision[i].length; j++) {
const element = decision[i][j];
maximumSchedule[parseInt(element / 10) - 1][element % 10 - 1]+=4;
};
}
return maximumSchedule;
}
- 运行测试
mocha make-appointments-for-teacher.js
- 成功后编写其他可能测试(假如选择[32,43]则代表该老师选择了周三第二节和周四第三节):
describe('Make Appointments for teachers:', () => {
it('1.Week schedule should be [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]', () => {
assert.deepEqual(teacherDecide([[], [], []]), [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]);
})
it('2.Week schedule should be [[0, 0, 0, 0], [0, 0, 0, 0], [0, 4, 0, 0], [0, 0, 4, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]', () => {
assert.deepEqual(teacherDecide([[32, 43], [], []]), [[0, 0, 0, 0], [0, 0, 0, 0], [0, 4, 0, 0], [0, 0, 4, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]);
})
it('3.Week schedule should be [[0, 0, 0, 0], [0, 0, 0, 0], [0, 8, 0, 0], [0, 0, 4, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]', () => {
assert.deepEqual(teacherDecide([[32, 43], [32], []]), [[0, 0, 0, 0], [0, 0, 0, 0], [0, 8, 0, 0], [0, 0, 4, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]);
})
it('4.Week schedule should be [[0, 0, 0, 0], [0, 0, 0, 0], [0, 12, 0, 0], [0, 0, 4, 0], [4, 4, 0, 0], [0, 0, 8, 0], [0, 0, 0, 4]]', () => {
assert.deepEqual(teacherDecide([[32, 43,51], [32,52,63], [32,63,74]]), [[0, 0, 0, 0], [0, 0, 0, 0], [0, 12, 0, 0], [0, 0, 4, 0], [4, 4, 0, 0], [0, 0, 8, 0], [0, 0, 0, 4]]);
})
})
- 同理创建make-appointments-for-learner.js并执行测试
网友评论