程序代码如下:
****************************************
* 思路:一共有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