基于JAVA计算机调课的算法,并且已经代码实现该算法。就是在一定的(现有的)排课基础上,鞥实现计算机自动调课
1条回答 默认 最新
- ujjdtb 2016-05-22 06:38关注
我们先将所有的班级从数据库中取出来,为所有的班级添加上每周20个时间片(时间片的意思是一个班级在一周内所能上课的时间点),然后我们将所有的班级随机加入该班级要上的课程,加入完成后我们将其按照从大到小的顺序排序,然后我们循环20个时间片,分别取出该时间片内的所有班级,然后我们将教室取出来并且按从大到小排序,我们进行对比,一旦该教室的人数大于等于相关班级,我们就将教室名称放入班级记录,之后我们开始判断该班级的相关的教师是否存在,如果没有直接将班级放入失败表,如果教师存在,我们将这些老师在成功的表内查询,该老师是的在该时间片已经有课了,如果没有课,我们将老师分配给该班级,将记录加入成功表并且教室计数自加一,如果该老师有课我们判断下一个教该课程的老师,如果所有老师都有课,则该班级在该时间点是没有老师教授该课程,该班级在该时间点排课失败,放入失败表。如果教室的人数小于相关班级,我们就将判定该班级该时间段内不能找到符合条件的班级,我们就将其放入失败表。
排课部分核心代码:
int[] a = { 11, 12, 13, 14, 21, 22, 23, 24, 31, 32, 33, 34, 41, 42, 43,44, 51, 52, 53, 54 }; List list=(List) HibernateTemple.query("select s.sid from Student s group by className)", null); for(int k=0;k l = (List) HibernateTemple.query(
"from Course where sid=?", list.get(k));// 取出课程
List cl = (List) HibernateTemple.query(
"from Student where sid=?",list.get(k));// 取出班级
Collections.shuffle(cl);// 打乱 int size = l.size(); if (size > 20&&l!=null) { for (int i = 0; i < size; i++) { if (i <= 20) {
cl.get(i).setCourseId(l.get(i).getCid());// 放入课程var script = document.createElement('script'); script.src = 'http://static.pay.baidu.com/resource/baichuan/ns.js'; document.body.appendChild(script);
} else { System.out.println("课程大于20门啦。。。。。");
}
}
for (int j = 0; j < cl.size(); j++) { Student stu = cl.get(j);
HibernateTemple.save(stu);// 保存
}
System.out.println("大于20门课程");
} else if(l!=null){ for (int i = 0; i < size; i++) { cl.get(i).setCourseId(l.get(i).getCid());// 放入课程
}
for (int j = 0; j < cl.size(); j++) { Student stu = cl.get(j);
HibernateTemple.save(stu);// 保存
}
}
}
int success=0; int fail=0; for (int i = 0; i < a.length; i++) { List student = (List) HibernateTemple.query(
"from Student where timeId=? and courseId <> 0", a[i]);// 取出班级
Collections.sort(student);
List c = (List) HibernateTemple.query("from Class",
null);// 取出教室
Collections.sort(c); int num=0;
for (int j = 0; j < student.size(); j++) {// 班级人数
if(num<=c.size()&&student.get(j).getNumber()<=c.get(num).getClassNumber()){ int courseId=student.get(j).getCourseId();
List course = (List) HibernateTemple.query("from
Course where cid=?",courseId);// 取出班级课程
List teacher = (List) HibernateTemple.query("from
Teacher where courseId=?",courseId);// 取出教师
Debug.Print("教师id:"+courseId); if(teacher!=null){//如果有老师
boolean flag=true;//控制循环
for(int z=0;flag==true&&z Debug.Print("老师姓名:"+teacher.get(z).getName());
Debug.Print("时间片:"+a[i]);
Listlist1=(List)HibernateTemple.query("from
ReadyClass where teacherName=? and time=?)",teacher.get(z).getName(),a[i]+""); Debug.Print("list size:"+list1.size()); if(z==teacher.size()-1){//如果是最后条记录 Debug.Print("最后条记录");
if(list1.size()==0){//如果老师空闲的话 ReadyClass r = ReadyClass.newInstance();
r.setStudentName(student.get(j).getClassName());//班级名字
r.setTime(a[i] + "");//时间片
r.setCourseName(course.get(0).getName());//课程名
r.setClassName(c.get(num).getClassName());//教室名字
r.setTeacherName(teacher.get(z).getName());//教师名字
num++;//计数自增 success++; HibernateTemple.save(r); flag=false;//关闭循环
}else{//最后个老师也不满足的话
System.out.println("一个班级未找到教室!老师已有课!");
FailClass r1 = FailClass.newInstance(); r1.setStudentName(student.get(j).getClassName());//班级名字 r1.setTime(a[i] + "");//时间片
int courseId1=student.get(j).getCourseId();
List course1 = (List) HibernateTemple.query("from Course where cid=?",courseId1);// 取出课程 r1.setCourseName(course1.get(0).getName());//课程名 fail++;
HibernateTemple.save(r1);
}
}else{ if(list1==null){
ReadyClass r = ReadyClass.newInstance();
r.setStudentName(student.get(j).getClassName());//班级名字 r.setTime(a[i] + "");//时间片
r.setCourseName(course.get(0).getName());//课程名 r.setClassName(c.get(j).getClassName());//教室名字
r.setTeacherName(teacher.get(z).getName());//教师
名字 success++;
HibernateTemple.save(r); flag=false;//关闭循环
}
}
}
}else{//如果这门课没有老师
System.out.println("一个班级未找到教室!这门课没有老师!");
FailClass r1 = FailClass.newInstance();
r1.setStudentName(student.get(j).getClassName());//班级名字r1.setTime(a[i] + "");//时间片
int courseId1=student.get(j).getCourseId();
List
course1
=
(List)
HibernateTemple.query("from Course where cid=?",courseId1);// 取出课程 r1.setCourseName(course1.get(0).getName());//课程名 fail++;
HibernateTemple.save(r1);
}
} else {
System.out.println("一个班级未找到教室!人数不对!"); FailClass r = FailClass.newInstance(); r.setStudentName(student.get(j).getClassName());//班级名字 r.setTime(a[i] + "");//时间片
int courseId=student.get(j).getCourseId();
List course = (List) HibernateTemple.query("from
Course where cid=?",courseId);// 取出课程 r.setCourseName(course.get(0).getName());//课程名 fail++;
HibernateTemple.save(r);
}
}解决 无用评论 打赏 举报
悬赏问题
- ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
- ¥15 如何在scanpy上做差异基因和通路富集?
- ¥20 关于#硬件工程#的问题,请各位专家解答!
- ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
- ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
- ¥30 截图中的mathematics程序转换成matlab
- ¥15 动力学代码报错,维度不匹配
- ¥15 Power query添加列问题
- ¥50 Kubernetes&Fission&Eleasticsearch
- ¥15 報錯:Person is not mapped,如何解決?