回复 10楼 wengjl
											感觉考场号应连续 不然1考场不只1个 等等										
					
	
				
											程序代码出来了,应该可以满足你的要求。主要是随机安排方面比较麻烦,你可以多运行几趟,看看结果是否符合要求。
另外,根据你对考场名称的安排,我把表中原来只有2位长度的KCH字段扩展到了V(30)以容纳中文。
SET TALK OFF
SET SAFETY OFF
CLOSE ALL
SET DEFAULT TO C:\RR\论坛\
RAND(-1)
****************
* 统计考场分类 *
****************
SELECT DISTINCT NJDM+KLDM;
   FROM BMK;
   GROUP BY njdm,kldm;
   INTO ARRAY KCFL &&考场分类
***********************************
* 统计科类总数(年级+科类的汇总数) *
***********************************
SELECT COUNT(*);
   FROM;
      (SELECT NJDM+KLDM,COUNT(DISTINCT NJDM+KLDM);
          FROM BMK;
          GROUP BY njdm,kldm) T1;
   INTO ARRAY KLZS &&科类总数
****************************
* 统计每个大科类中的小计数 *
****************************
SELECT COUNT(NJDM+KLDM);
   FROM BMK;
   GROUP BY njdm,kldm;
   INTO ARRAY GLRS &&各类人数
****************
* 开始编排考场 *
****************
FOR I=1 TO KLZS(1,1)
   考场数量=INT(GLRS(I,1)/30+1)
   年级=IIF(LEFT(KCFL(I,1),1)='1','一年级',;
            IIF(LEFT(KCFL(I,1),1)='2','二年级',;
                '三年级'))
   科类=IIF(RIGHT(KCFL(I,1),2)='11','文史','理工')
   FOR J=1 TO 考场数量
      考场人数=1
      考场名称='考场'+ALLTRIM(STR(J,3))
      DO WHILE 考场人数<31
         ***************************************
         * 判断本类学生是否已经全部分配完,    *
         * 若已分配完,则换个科类。            *
         * 本段代码用于每个科类的最后一个考场。*
         ***************************************
         SELECT COUNT(BMH) FROM BMK;
            WHERE NJDM+KLDM==KCFL(I,1) AND;
                  EMPTY(ZWH);
            INTO ARRAY STUDENTS
         IF STUDENTS(1,1)=0
            EXIT &&若本类学生全部分配完就换类别
         ENDIF
         *****************************
         * 开始按考场随机分配学生    *
         * 此段为核心代码            *
         *****************************
         SELECT BMH FROM BMK;
            WHERE NJDM+KLDM==KCFL(I,1) AND;
                  EMPTY(ZWH);
            INTO ARRAY STUDENT
         座位号=IIF(考场人数<10,'0'+STR(考场人数,1),STR(考场人数,2))
         学生序号=INT(RAND()*ALEN(STUDENT,1)+1)
         UPDATE BMK SET ZWH=座位号,KCH=年级+科类+考场名称 ;
            WHERE BMH==STUDENT(学生序号,1)
         考场人数=考场人数+1
      ENDDO
   NEXT
NEXT
SET TALK ON
SET SAFETY ON
RETURN
	
		
			
		
	
										
					
	
	
	
	      


 
											







 
	    

 
	


 bmk.rar
bmk.rar