注册 登录
编程论坛 VFP论坛

根据表文件生成每个人具体的课务分工,并统计每个人周课时节数

王咸美 发布于 2021-03-10 20:31, 2052 次点击
现有各班各学科教师任课表文件(jsrkb20190201.dbf)和各年级周课时计划表文件(ksjh.dbf)。
我想根据以上两个文件生成 课务分工.txt文件。由于是新手,对编程是门外汉,还请各位高手不吝赐教,万分感谢!!!
只有本站会员才能查看附件,请 登录


课务分工.txt 样式如下:
课务分工表
1、周爱华:一(1)班会、一(1)道法、一(1)语文、一(1)综合、一(1)自习1 计14节;
2、刘德明:一(2)道法 计2节;
…………

[此贴子已经被作者于2021-3-10 20:38编辑过]

13 回复
#2
sdta2021-03-10 23:05
程序代码:
CLOSE DATABASES
SET COLLATE TO "MACHINE"
CREATE CURSOR t1 (nj c(6), bj c(7), xm c(10), km c(6), ks n(4), bs n(1))
USE ksjh IN 0 ALIAS ks
SELECT ks
INDEX on nj TAG nj
USE jsrkb20190201 IN 0 ALIAS rkb
SELECT rkb
SCAN
    FOR lnj = 3 TO FCOUNT()
        lcxm = EVALUATE(FIELD(lnj))
        lckm = FIELD(lnj)
        IF SEEK(rkb.nj, "ks", "nj") = .T.
            lnks = EVALUATE("ks." + lckm)
            lnbs = RECNO("ks")
        ENDIF
        IF NOT EMPTY(lcxm)
            INSERT INTO t1 VALUES (rkb.nj, rkb.bj, lcxm, lckm, lnks, lnbs)
        ENDIF
    ENDFOR
ENDSCAN
SELECT ks
SET ORDER TO
***
CREATE CURSOR t2 (xm c(10), kmnr c(254), ks n(4))
INSERT INTO t2 (xm ) SELECT DISTINCT xm FROM t1
REPLACE kmnr WITH ALLTRIM(xm) + ":" ALL
INDEX ON xm TAG xm
***
SELECT t1
SET RELATION TO xm INTO t2
SCAN
    REPLACE kmnr WITH kmnr - t1.nj - t1.bj - t1.km - "|", ks WITH ks + t1.ks IN t2
ENDSCAN
SELECT t2
SET ORDER TO
REPLACE kmnr WITH LEFT(kmnr, LEN(ALLTRIM(kmnr)) - 1) ALL
BROWSE
COPY TO 课程分工.TXT FIELDS kmnr, ks DELIMITED WITH "" WITH CHARACTER TAB
#3
sdta2021-03-10 23:16
KSJH.DBF 中,NJ 字段内容改成下表
只有本站会员才能查看附件,请 登录
#4
王咸美2021-03-11 08:14
@sdta  非常感谢!但程序运行到
INSERT INTO t1 VALUES (rkb.nj, rkb.bj, lcxm, lckm, lnks, lnbs)时,出现找不到变量'LNKS',不知为何?
#5
sdta2021-03-11 08:27
以下是引用王咸美在2021-3-11 08:14:00的发言:

@sdta  非常感谢!但程序运行到
INSERT INTO t1 VALUES (rkb.nj, rkb.bj, lcxm, lckm, lnks, lnbs)时,出现找不到变量'LNKS',不知为何?

看三楼贴图
代码并不是最优,还可以精简大约10行代码

[此贴子已经被作者于2021-3-11 08:28编辑过]

#6
sdta2021-03-11 08:30
改良版结果图
只有本站会员才能查看附件,请 登录
#7
王咸美2021-03-11 09:56
@sdta 非常感谢指点!!!能提供简化后的代码?很想学习借鉴。

[此贴子已经被作者于2021-3-11 16:22编辑过]

#8
sdta2021-03-11 10:28
以下是引用王咸美在2021-3-11 09:56:56的发言:

@sdta 非常感谢指点!!!能提供简化后的代码?很想学习借鉴。

先把前面的代码研究透彻了,你自己也会优化代码了。
#9
王咸美2021-03-11 16:25
如何按年级排序,而不是按姓氏拼音排序。望赐教!
#10
sdta2021-03-11 16:51
以下是引用王咸美在2021-3-11 16:25:22的发言:

如何按年级排序,而不是按姓氏拼音排序。望赐教!

按照下图的显示顺序提取数据就能达到目的
只有本站会员才能查看附件,请 登录
#11
sdta2021-03-11 16:54
不要按XM排序
#12
sdta2021-03-11 16:58
用两次SEEK(),数据一次生成
2楼的代码是分两步生成最后的数据
#13
王咸美2021-03-12 09:05
如何用两次SEEK(),数据一次生成?本人水平有限,确实不会,盼赐教,万分感谢!!!

[此贴子已经被作者于2021-3-12 09:15编辑过]

#14
sdta2021-03-13 09:52
回复 13楼 王咸美
在2楼代码的基础上进行修改
1