⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pkdao.java

📁 功能是公安和学校的管理系统,用struts+hibernate+spring等匡架组成,在eclepse就能编译
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
package com.comingnet.bean;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Random;

import com.db.DBOperator;

public class pkDAO {

public static  bjpk[] pklist(int xxbh,int bjbh ){//选出该班级所要排课的课程信息,其中另加该课程老师的已排的课时数
	   ArrayList list0= null;
	   ArrayList list=null;   
	  DBOperator dbop=new DBOperator();//h
    //   bjpk[] bpk=new bjpk[k];
 	    try {
			list=dbop.ExecuteSelect(false, "select b.jskcjc ,a.kcmc,a.kcjc,a.swks,a.ltshu ,a.yxdz from m_teacher b,m_class_cur a where a.jsbh=b.jsid and a.xxbh=b.xxbh and a.swks>=0  and b.xxbh="+xxbh+" and a.bjbh="+bjbh +" order by a.kcjc desc");
		    System.out.println("select b.jskcjc ,a.kcmc,a.kcjc,a.swks,a.ltshu ,a.yxdz from m_teacher b,m_class_cur a where a.jsbh=b.jsid and a.xxbh=b.xxbh and a.swks>=0  and b.xxbh="+xxbh+" and a.bjbh="+bjbh +"order by a.kcjc desc");
	    } catch (NullPointerException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		 bjpk[] bpk0=new bjpk[list.size()+1];
	   for(int i=0;i<list.size();i++){
	    	list0=(ArrayList)list.get(i);
	         bjpk bjp=new bjpk();
	        bjp.setJskcjc(list0.get(0).toString());//该课程老师已排的课时数
	    	bjp.setKcmc(list0.get(1).toString());
	    	bjp.setMzcs(Integer.parseInt(list0.get(2).toString()));
	    	bjp.setSwjs(Integer.parseInt(list0.get(3).toString()));
	    	bjp.setLtshu(Integer.parseInt(list0.get(4).toString()));
	    	bpk0[i+1]=bjp;
		    }
	   
	return bpk0;   
   }
public static int radoms(int h,int k){//在k和h之间生成一个随机数
	        int d=0;
	 	    int flag = 0; //是否已经生成过标志
	      while(flag==0){
	         Random rdm = new Random(System.currentTimeMillis());
	         d = Math.abs(rdm.nextInt())%k+1;
	       
	          if(d>h){
	        	  flag=1;  
	          }
	      }
	return d;
}
public static  int[]  randoms(int d,int f,int swks ) {//d为学校一周的总课时数;f为某一课的一周课时数//swks为上午课时数
    int[] intRet = new int[f]; 
    int intRd = 0; //存放随机数
    int count = 0; 
    int count0 = 0;//记录生成的随机数个数
    int flag = 0; //是否已经生成过标志
    while(count<swks){//产生上午课时的随机数组
         Random rdm = new Random(System.currentTimeMillis());
         intRd = Math.abs(rdm.nextInt())%20+1;
       
         for(int i=0;i<count;i++){
             if(intRet[i]==intRd){
                 flag = 1;
                 break;
             }else{
                 flag = 0;
             }
         }
         if(flag==0){
             intRet[count] = intRd;
             count++;
         }}
     int r=0;
       int tep=0;
     for(int l=swks;l<f;l++){//产生下午课时的随机数组
	   r++;
	   intRet[l]=radoms((r-1)*(d-20)/(f-swks)+20,r*(d-20)/(f-swks)+20); 
	   
	   if((intRet[l]-tep<(d-20)/(f-swks))&&l<f-1){
		   
		   intRet[l]=intRet[l]+2;//避免连堂
	   }
	   tep=intRet[l];
	   
   }
    
    
    
 for(int t=0;t<f;t++){//冒泡升序排序
   int temp=0;
	  for(int k=f-t;k<f;k++){
	   if(intRet[k-1]>intRet[k]){
      temp=intRet[k];
       intRet[k]= intRet[k-1];
       intRet[k-1]= temp; 
	   } 
	  }
	    
}
 for(int c=0;c<intRet.length;c++){
	 
	  System.out.println("intRet"+c+"-->"+intRet[c]);
	 
 }
  return intRet;//返回升序的随机数组
}
     static int f=0;
public static  String[] pk0(int zs,int xxbh,int bjbh  ){//ZS学校一周总课时数
   String [] pk=new String[zs+3];
   for(int j=0;j<zs+3;j++){
	  pk[j]=""; 
   }
  bjpk[] pklist =pklist(xxbh,bjbh);
  int count=0;
  
  for(int j=1;j<pklist.length;j++){
	  int t=0;
	  int[] d=randoms(zs,pklist[j].getMzcs()-pklist[j].getLtshu(),pklist[j].getSwjs()-pklist[j].getLtshu());//返回该课程可能的随机升序数组;扣除连堂数,最后根据排课结果情况再填补
	  
	  for(int k=0;k<d.length;k++){
		  System.out.println("第"+k+"-->"); 
				 if(pk[d[k]].equals("")&&!pklist[j].getJskcjc().contains(","+d[k]+",")){
					  System.out.println("第可用"+k+"-->"+d[k]+pklist[j].getKcmc());   

	      	pk[d[k]]=pklist[j].getKcmc();//如果随机数组对应位置的排课数组为空(可用)侧把该课程赋予课程表中   
					 
				 }else{//如果随机数组对应位置的排课数组不为空(不可用)侧搜索调整
		  
		     if(k==0||k==d.length-1){//随机数组为第一个和最后一个时
			   if(k==0){for(int s=1;s<zs;s++){///随机数组为第一个搜索调整
				   if(pk[s].equals("")&&!pklist[j].getJskcjc().contains(","+s+",")){
					   System.out.println("第一个搜索"+k+"-->"+pklist[j].getKcmc());   
				   pk[s]=pklist[j].getKcmc();
				    d[k]=s;
				   break; }
				   
				   
						   }
				   }else{ String mark="0";
				      for(int s=d[k];s<zs;s++){//随机数组为最后一个搜索调整
					    
					 if(pk[s].equals("")&&!pklist[j].getJskcjc().contains(","+s+",")){
						   System.out.println("第最后搜索"+k+"-->"+pklist[j].getKcmc());   
                           mark="1";
					   pk[s]=pklist[j].getKcmc();
					   d[k]=s;
					   break; }
				       }
				     if(mark.equals("0")){//最后一个搜索调整失败
				    	for(int x=zs;x>0;x--){
				    		 if(pk[x].equals("")&&!pklist[j].getJskcjc().contains(","+x+",")){
								   System.out.println("第最后搜索"+x+"-->"+pklist[j].getKcmc());   
		                           mark="1";
							   pk[x]=pklist[j].getKcmc();
							 
							   break; }	
				 				    	}    
				    	   
				       }
				
					   }
		        }else{//随机数组为中间一个搜索调整
				String temp="false";//temp为是否搜索到标识
			   
				if(18<d[k]&&d[k]<21){
				for(int b=d[k];b>0;b--)	{
					 if(pk[b].equals("")&&!pklist[j].getJskcjc().contains(","+b+",")){
							temp="true";
							d[k]=b;
							 System.out.println("向后搜索b"+b+"-->"+pklist[j].getKcmc());   
							 
							pk[b]=pklist[j].getKcmc();
						
							break;
						}	
				}
				
				}
				
				else{
				for(int h=d[k];h<d[k+1];h++){//向后搜索调整到下一个随机数为止
					
			   if(!pk[h+1].equals(pklist[j].getKcmc())&&pk[h].equals("")&&!pklist[j].getJskcjc().contains(","+h+",")){
				temp="true";
				d[k]=h;
				 System.out.println("向后搜索"+h+"-->"+pklist[j].getKcmc());   
				 
				pk[h]=pklist[j].getKcmc();
			
				break;
			    }
			   }
			    }
		        if(temp.equals("false")){//向后搜索调整到下一个随机数为止搜索失败
		    	 for(int g=d[k];g>0;g--){//侧向前搜索到前一个数组为止
						
						   // System.out.println("h-->"+pk[h]); 
						 System.out.println("pklist["+g+"].向前-->"+pklist[j].getJskcjc()); 
					   if(!pk[g-1].equals(pklist[j].getKcmc())&&pk[g].equals("")&&!pklist[j].getJskcjc().contains(","+g+",")){
						temp="true";
						d[k]=g;
						
						pk[g]=pklist[j].getKcmc();
						System.out.println("hq-->"+pk[g]);
						break;
					}
		 		    }}
			   
		    	 if(temp.equals("false")){//如果向前搜索到前一个数组为止还是搜索失败
			    	 for(int g=1;g<zs;g++){//侧从该数组一直向后搜索到课表最后一个为止
							
							   // System.out.println("h-->"+pk[h]); 
							 System.out.println("pklist["+g+"].后搜索到课表最后-->"+pklist[j].getJskcjc()); 
						   if(!pk[g+1].equals(pklist[j].getKcmc())&&!pk[g-1].equals(pklist[j].getKcmc())&&pk[g].equals("")&&!pklist[j].getJskcjc().contains(","+g+",")){
							temp="true";
							d[k]=g;
							pk[g]=pklist[j].getKcmc();
							System.out.println("hh-->"+pk[g]);
							break;
						}
			           }//从该数组一直向后搜索到课表最后一个为止
		 		    }
		    	 if(temp.equals("false")){
		    		 for(int g=zs;g>0;g--){
		    			 
		    			 System.out.println("pklist["+g+"].后搜索到课表最前-->"+pklist[j].getJskcjc()); 
						   if(!pk[g-1].equals(pklist[j].getKcmc())&&pk[g].equals("")&&!pklist[j].getJskcjc().contains(","+g+",")){
							temp="true";
							d[k]=g;
							pk[g]=pklist[j].getKcmc();
							System.out.println("hh-->"+pk[g]);
							break;
						} 
		    			 
		    		 }
		    		 
		    		 
		    	 }
		   	        
	       } 
		   }//随机数组的调课结束  
	   }
	   
   
	  if(pklist[j].getLtshu()>0){
		int e=0,w=0;//e为上午课时数;w为连堂数
///	统计上午课时数和连堂数
	for(int i=1;i<=20;i++){
		if(	pk[i].equals(pklist[j].getKcmc())){
		e++;
		if(i<15&&pk[i].equals(pk[i+5])){
				w++;
			}
	}
	}
	 for(int k=21;k<zs;k++){
		if(pk[k].equals(pklist[j].getKcmc())&&pk[k+1].equals(pklist[j].getKcmc())&&((k-20)%3!=0)){
			w++;
			
		}	 
		 
	 }	
	 System.out.println("w--->"+w);
	 System.out.println("ee--->"+e);

		     int z=0;//后补连堂数插入成功标识
		     int u=0;//填补扣除的连堂数标识
		 for(int q=1;q<=15;q++){
				 if(pk[q].equals(pklist[j].getKcmc())){
				if(w+z<pklist[j].getLtshu()&&pk[q+5].equals("")&&!pklist[j].getJskcjc().contains(","+(q+5)+",")){
					pk[q+5]=pklist[j].getKcmc();
					z++;
					u++;
					 
					
					  
				  }
				 }
					if(u>=pklist[j].getLtshu()) {//扣除的连堂数补足侧跳出循环
						   break;
					   }
				

		        }
		      if(u<pklist[j].getLtshu()&&z+w<pklist[j].getLtshu()){
		    	for(int q=20;q>5;q--){
		    		if(pk[q].equals(pklist[j].getKcmc())){
		    		if(w+z<pklist[j].getLtshu()&&pk[q-5].equals("")&&!pklist[j].getJskcjc().contains(","+(q-5)+",")){
						pk[q-5]=pklist[j].getKcmc();
						z++;
						u++;
									  
					  }	
		    		}
		    		if(u>=pklist[j].getLtshu()) {//扣除的连堂数补足侧跳出循环
						   break;
					   }
				    		
		    	}
		    	  
		    	  
		    	  
		      }
		      
		      if(u<pklist[j].getLtshu()){
		    
		    	 for(int q=1;1<20;q++) {
		    		 if(pk[q].equals("")&&!pk[q+5].equals(pklist[j].getKcmc())&&!pklist[j].getJskcjc().contains(","+q+",")){	 
		    			 pk[q]=pklist[j].getKcmc();
							
							u++;
		    		 
							if(u>=pklist[j].getLtshu()) {//扣除的连堂数补足侧跳出循环
								   break;
							   }
		    		 
		    		 }
		    	 }
		    	  
		    	  
		      }
		 System.out.println("u5--->"+u);
		 
		 // if(w<pklist[j].getLtshu()||u<pklist[j].getLtshu()) {
		
			 
		}
//最后的连堂数,均匀分布统计调整 	  
	        int l=0;//统计连堂数
	      String a1="";//该课程所在的位置,中间用逗号隔开
	     int k1=0;//每天的该课程的次数
	       int min=1; //一周里每天该课程的最小数的某一天
           int max=1;// 一周里每天该课程的最大数的某一天
           String a0="";

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -