baidu_33773669 2016-05-22 03:25 采纳率: 0%
浏览 1062
已结题

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

基于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,如何解決?