有没有基于JAVA计算机调课的算法,并且已经程序实现该算法

基于JAVA计算机调课的算法,并且已经代码实现该算法。就是在一定的(现有的)排课基础上,鞥实现计算机自动调课

我们先将所有的班级从数据库中取出来,为所有的班级添加上每周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); 
    } 
  
 
}