可在楼层使用状态栏另加辅助字段,标记“固定/随机”,然后对操作表中需要固定的手工输入
程序代码:USE (更改)教学楼楼层使用状态 ALIAS 状态表 IN 0
USE (操作表)领导干部听课安排表 ALIAS 安排表 IN 0
SELECT * FROM 安排表 INTO CURSOR tmp READWRITE
SELECT 状态表
COUNT ALL FOR ALLTRIM(状态(12))=="是" TO n12
COUNT ALL FOR ALLTRIM(状态(34))=="是" TO n34
IF RECCOUNT("安排表") >= (n12 + n34)
RAND(-1)
SELECT tmp
INDEX on RAND() TAG 随机
SELECT 状态表
GO TOP
DO WHILE !EOF("状态表") AND !EOF("tmp")
IF (ALLTRIM(状态表.状态(12))=="是") AND (ALLTRIM(状态表.辅助1)=="随机")
安排()
ENDIF
IF (ALLTRIM(状态表.状态(34))=="是") AND (ALLTRIM(状态表.辅助2)=="随机")
安排()
ENDIF
SKIP IN "状态表"
ENDDO
SELECT tmp
SET INDEX TO
GO TOP
BROWSE FIELDS 姓名, 教学楼, 楼层
ELSE
MESSAGEBOX("还缺 "+TRANSFORM(RECCOUNT("安排表")-n12-n34)+" 条任务无法安排,请增加人员!")
ENDIF
CLOSE DATABASES ALL
FUNCTION 安排()
DO WHILE !EOF("tmp") AND !EMPTY(tmp.楼层)
SKIP IN "tmp"
ENDDO
IF !EOF("tmp")
REPLACE tmp.教学楼 WITH 状态表.教学楼名称, tmp.楼层 WITH ALLTRIM(状态表.楼层)+"层"
SKIP IN "tmp"
ENDIF
ENDFUNC