程序代码如下:
****************************************
* 思路:一共有3门课,每门课需要7名教师 *
* 总计21人次。根据课程和教室循环,随机 *
* 挑出教师填充。最后一门课肯定有空档需 *
* 要某些教师分配第三次的,作特殊处理。 *
****************************************
SET SAFETY OFF
SET TALK OFF
CLOSE ALL
************************************
* 教师表用来存储教师姓名及分配次数 *
* 以供程序进行判断使用 *
************************************
CREATE CURSOR 教师 (姓名 C(6),分配次数 I)
FOR I=1 TO 10 INSERT INTO 教师 VALUES ("教师"+LTRIM(STR(I)),2)
NEXT &&I
****************************
* 已分配表用来存储分配情况 *
* 以供程序进行判断使用*
****************************
CREATE CURSOR 已分配 (课名 C(4),姓名 C(6))
**************
* 清空考试表 *
**************
UPDATE 考试表 SET 语文=[],数学=[],英语=[]
FOR I=1 TO 课程门数 课程名=FIELD(I+1,"考试表") FOR J=1 TO 教室数 IF !最后课程填补 IF J=1 &&第1次分配 SELECT 姓名 FROM 教师 ; WHERE 分配次数>0 INTO ARRAY 教师名 ELSE SELECT 姓名 FROM 教师 ; WHERE 姓名 NOT IN ; (SELECT 姓名 FROM 已分配 WHERE 课名=课程名) AND ; 分配次数>0 ; INTO ARRAY 教师名 ENDIF 可分配数=ALEN(教师名) IF I=课程门数 AND 最后可分配数=0 &&最后一门课程时 最后可分配数=可分配数 &&记录下最后可分配的教师数 ENDIF ENDIF 教师序号=INT(RAND()*可分配数+1) ****************** * 修改教师表信息 * ****************** UPDATE 教师 SET 分配次数=分配次数-1 WHERE 姓名=教师名[教师序号] ******************** * 添加已分配表信息 * ******************** INSERT INTO 已分配 VALUES (课程名,教师名[教师序号]) ****************** * 修改考试表信息 * ****************** UPDATE 考试表 SET &课程名=教师名[教师序号] WHERE VAL(教室)=J **************************************** * 此段代码用来对最后一门课缺教师的填充 * **************************************** IF I=课程门数 IF 最后可分配数>1 最后可分配数=最后可分配数-1 ELSE IF J<7 最后课程填补=.T. SELECT 姓名 FROM 教师 ; WHERE 姓名 NOT IN ; (SELECT 姓名 FROM 已分配 WHERE 课名=课程名) ; INTO ARRAY 教师名 可分配数=ALEN(教师名) ENDIF ENDIF ENDIF