CLOSE ALL
SET talk OFF
SET SAFETY OFF
*创建数据表,后面可以将数据导入到表中
IF NOT FILE('tongji.dbf')
    *字段名依次为科目,教师姓名,任课班级,任课班级数,课时总数,周一至周五早自习节数、白天课程节数、晚自习节数,周六周日早自习节数、白天课程数、晚自习节数
    CREATE TABLE tongji (km C(2),xm C(8),bjh C(60),bjs N(2),kszs N(2),mx1 N(2),day1 N(2),ex1 N(2),mx2 N(2),day2 N(2),ex2 N(2))
ENDIF 
IF NOT FILE('jiaoshi.dbf')
    *字段名依次为班级号,组合名称,班主任姓名,语数英物化生政历地体音美信各科任课教师
    CREATE TABLE jiaoshi (bjh N(2),zhmc C(6),bzr C(8),语 C(8),数 C(8),英 C(8),物 C(8),化 C(8),生 C(8),政 C(8),历 C(8),地 C(8),体 C(8),音 C(8),美 C(8),信 C(8))
ENDIF 
IF NOT FILE('kebiao.dbf')
    *字段名依次为星期和课程节次
    CREATE TABLE kebiao (xq N(1),jc N(2))	
    SELECT kebiao
    *根据班级数循环添加班级号字段
    FOR i=1 TO 20
        *列名为班级序号
        lcFieldName="B"+ALLTRIM(STR(i))
        ALTER table kebiao ADD COLUMN &lcFieldName. c(2)
    ENDFOR
ENDIF
*关闭已打开表
USE
  
*打开统计表,最终要生成的表
SELECT a
USE tongji ALIAS tongji
*将tongji表中的相关字段数据初始化,避免程序执行多次后数据有误
REPLACE ALL bjh WITH "",bjs WITH 0,kszs WITH 0,mx1 WITH 0,day1 WITH 0,ex1 WITH 0,mx2 WITH 0,day2 WITH 0,ex2 WITH 0
*打开教师安排表
SELECT b
USE jiaoshi ALIAS jiaoshi
*打开班级课程安排表
SELECT c
USE kebiao ALIAS kebiao
*取得tongji表的记录数,后面进行循环
SELECT tongji
lnCount=reccount()
?lnCount
*tongji表开始循环
FOR i=1 TO lnCount
	*到指定记录号
	GO i
	*从tongji表中读取教师姓名,科目名称
	lcName=xm
	lcKmName=km
	*从教师安排表中筛选出某教师的信息,主要是取班级以及任教班级数
	SELECT bjh,&lcKmName. FROM jiaoshi WHERE &lcKmName.=lcName INTO CURSOR tmp
	*班级号、班级数初始赋值
	lcBjh=""
	lnBjs=0
	*对tmp表进行循环,取班级号、班级数
	DO WHILE NOT EOF()
		lcBjh=ALLTRIM(STR(tmp.bjh))+","+lcBjh
		lnBjs=lnBjs+1
		*构造课表的字段,即班级号,后面需要使用宏替换
		lcBjhTmp="B"+ALLTRIM(STR(tmp.bjh))
		*统计课表中的相关课时数
		*周一至周五的早自习数,xq表示星期,jc表示课程节次,1是早自习,2-7为白天课,8-10为晚自习,&lcBjhTmp.为kebiao中的字段名如B1,lcKmName为字段值,即科目名称如语
		SELECT COUNT(*) as kss FROM kebiao WHERE xq<6 AND jc=1 AND &lcBjhTmp.=lcKmName INTO CURSOR ks1
		*mx1=mx1+ks1.kss,因为涉及到多班情况,所以需要循环添加
		UPDATE tongji SET mx1=mx1+ks1.kss WHERE recno()=i
		*周六周日的早自习数
		SELECT COUNT(*) as kss FROM kebiao WHERE xq>=6 AND jc=1 AND &lcBjhTmp.=lcKmName INTO CURSOR ks2
		UPDATE tongji SET mx2=mx2+ks2.kss WHERE recno()=i
		
		*周一至周五的白天课时数
		SELECT COUNT(*) as kss FROM kebiao WHERE xq<6 AND jc>1 AND jc<8 AND &lcBjhTmp.=lcKmName INTO CURSOR ks3
		UPDATE tongji SET day1=day1+ks3.kss WHERE recno()=i
		*周六周日的白天课时数
		SELECT COUNT(*) as kss FROM kebiao WHERE xq>=6 AND jc>1 AND jc<8 AND &lcBjhTmp.=lcKmName INTO CURSOR ks4
		UPDATE tongji SET day2=day2+ks4.kss WHERE recno()=i
		
		*周一至周五的晚自习课时数
		SELECT COUNT(*) as kss FROM kebiao WHERE xq<6 AND jc>=8 AND &lcBjhTmp.=lcKmName INTO CURSOR ks5
		UPDATE tongji SET ex1=ex1+ks5.kss WHERE recno()=i
		*周六周日的白天课时数
		SELECT COUNT(*) as kss FROM kebiao WHERE xq>=6 AND jc>=8 AND &lcBjhTmp.=lcKmName INTO CURSOR ks6
		UPDATE tongji SET ex2=ex2+ks6.kss WHERE recno()=i
		*选择查询到的临时表,并将记录跳到下一行
		SELECT tmp
		skip
	ENDDO
	*tmp表循环结束,更新tongji表中的班级号,班级数
	UPDATE tongji SET bjh=lcBjh,bjs=lnBjs WHERE recno()=i 
	SELECT tongji
	
ENDFOR 
*tongji表循环结束
*更新tongji表中的总课时数
SELECT tongji
REPLACE ALL kszs WITH mx1+mx2+day1+day2+ex1+ex2


发表评论