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
最后编辑:2023年11月07日
©著作权归作者所有
最新回复