| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
大量收QQ微信精准粉/交友粉,非诚勿扰千里之行 始于足下
共有 1356 人关注过本帖
标题:如何用VFP程序生成教师个人任课表
只看楼主 加入收藏
schtg
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:16
帖 子:492
专家分:661
注 册:2012-2-29
  得分:0 
是这样的吗?请看正确吗?



[此贴子已经被作者于2018-4-1 10:21编辑过]

附件: 您没有浏览附件的权限,请 登录注册
2018-03-31 11:17
schtg
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:16
帖 子:492
专家分:661
注 册:2012-2-29
  得分:0 
纯手工打造哈,哈哈^_^
2018-03-31 11:18
王咸美
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2018-1-4
  得分:0 
哪位高手帮帮忙,那怕重点代码写上一两句也好
2018-03-31 19:35
schtg
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:16
帖 子:492
专家分:661
注 册:2012-2-29
  得分:0 
回复 13楼 王咸美
不是高手,仅供参考:
select jsmd
cXm=alltrim(姓名)

select jsrkb
Locate for …… 查找姓名
If FOUND()
   cNj=alltrim(Nj)
   cBj=alltrim(BJ)
   cKm=……
endfif

select rkzb201803
查找 年级 班级 任教科目 对应的星期和节次
写入 个人课程表
继续查询 该教师 任教的另一科目,直到全部

然后 查询 下一位教师的
====================================================
该办法不是最佳方案,但思路简单、清晰,也可以完成工作
2018-04-01 07:30
xs591222
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:19
帖 子:596
专家分:1154
注 册:2009-3-1
  得分:3 
以下是引用schtg在2018-4-1 07:30:21的发言:

不是高手,仅供参考:
select jsmd
cXm=alltrim(姓名)

select jsrkb
Locate for …… 查找姓名
If FOUND()
   cNj=alltrim(Nj)
   cBj=alltrim(BJ)
   cKm=……
endfif

select rkzb201803
查找 年级 班级 任教科目 对应的星期和节次
写入 个人课程表
继续查询 该教师 任教的另一科目,直到全部

然后 查询 下一位教师的
====================================================
该办法不是最佳方案,但思路简单、清晰,也可以完成工作


思路正确
2018-04-01 12:08
zyxxzhyg
Rank: 3Rank: 3
来 自:江西
等 级:论坛游侠
威 望:3
帖 子:47
专家分:113
注 册:2014-6-26
  得分:3 
clear
SELECT jsmd
GOTO top
rkmc=""
SCAN
    xm=姓名
    ?xm,
    rkmc=xm+","
    SELECT jsrkb
    GOTO top
    SCAN
        FOR i=1 TO 18
            m=FIELD(i)
            xm2= &m.
            IF ALLTRIM(xm2)=ALLTRIM(xm) then
                rkmc=rkmc+FIELD(i)+nj+bj+','
               
                zk( m,nj,bj)
               
            ENDIF
        NEXT i
    ENDSCAN
    ?rkmc
    WAIT
    SELECT jsmd
ENDSCAN

PROCEDURE zk
    LPARAMETERS kcm,lnj,lbj
    LOCAL j,zkm,xq,jc,zkkm
   
    SELECT rkzb201803
    GOTO top
    LOCATE FOR ALLTRIM(nj)=ALLTRIM(lnj) AND ALLTRIM(bj)=ALLTRIM(lbj)
    IF NOT EOF() THEN
        FOR j=3 TO 32
            zkm=FIELD(j)
            zkkm= &zkm.
            IF ALLTRIM(zkkm)=ALLTRIM(kcm) then
             xq=SUBSTR(zkm,5,1)
             jc=SUBSTR(zkm,6,1)
             ? kcm,nj,bj,xq,jc  &&课程名,年级,班级,星期 ,节次
             ENDIF
        NEXT j
    ENDIF
    SELECT jsrkb
RETURN
3个表要先打开,程序可以按要求找出每个人的课,但是直接生成word表格不会,估计excel位置控制会简单
2018-04-02 08:56
schtg
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:16
帖 子:492
专家分:661
注 册:2012-2-29
  得分:0 
回复 15楼 xs591222
谢谢!
2018-04-02 13:46
王咸美
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2018-1-4
  得分:0 
11楼用代码生成的程序完全正确
回复11楼 完全正确
急用,渴望能看到完整代码!万分感谢!!!

[此贴子已经被作者于2018-4-3 22:10编辑过]

2018-04-03 21:22
schtg
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:16
帖 子:492
专家分:661
注 册:2012-2-29
  得分:0 
回复 18楼 王咸美
我确实手动打造,没有保存源码,将楼上的代码添加了写入word的语句,就成为下面的程序,思路、源码均为楼上朋友的哈。

*|* test.prg

SET TALK OFF
SET SAFETY OFF
CLOSE ALL
CLEAR

wjm=SYS(5)+SYS(2003)+"\grkbmb.doc"
WordApp=CREATEOBJECT("Word.application")

USE jsmd ALIAS jsmd IN 0
USE jsrkb ALIAS jsrkb IN 0
USE rkzb201803 ALIAS rkzb201803 IN 0

SELECT jsmd
GOTO top
rkmc=""
SCAN
    xm=ALLTRIM(姓名)
    rkmc=xm+","
    WordTable=WordApp.Application.Documents.Open(wjm)
    WordApp.Visible =.t.
    SELECT jsrkb
    GOTO top
    SCAN
        FOR i=1 TO 18
            m=FIELD(i)
            xm2= &m.
            IF ALLTRIM(xm2)=ALLTRIM(xm) then
               rkmc=rkmc+FIELD(i)+nj+bj+','
               zk( m,nj,bj)
            ENDIF
       NEXT i
    ENDSCAN
    WORDAPP.ActiveDocument.Content.Find.Execute('ABCDEF',.F.,.F.,.F.,.F.,.F.,.F.,.F.,.F.,'&xm',2)
    oFile=SYS(5)+SYS(2003)+"\"+ALLTRIM(xm)+"_课程表.doc"
    WordApp.Documents(1).SaveAs(oFile)
    WordApp.ActiveDocument.Close      
    SELECT jsmd
ENDSCAN
WORDAPP.quit
WORDAPP=.NULL.
CLOSE ALL
QUIT
 
PROCEDURE zk
    LPARAMETERS kcm,lnj,lbj
    LOCAL j,zkm,xq,jc,zkkm
     
    SELECT rkzb201803
    GOTO top
    LOCATE FOR ALLTRIM(nj)=ALLTRIM(lnj) AND ALLTRIM(bj)=ALLTRIM(lbj)
    IF NOT EOF() THEN
       FOR j=3 TO 32
           zkm=FIELD(j)
           zkkm= &zkm.
           IF ALLTRIM(zkkm)=ALLTRIM(kcm) then
              xq=VAL(SUBSTR(zkm,5,1))
              jc=VAL(SUBSTR(zkm,6,1))
              scsz=ALLTRIM(nj)+ALLTRIM(bj)+ALLTRIM(kcm)
              WordTable.Tables.item(1).Cell(jc+1,xq+2).Range.Text="&scsz"
           ENDIF
       NEXT j
    ENDIF
    SELECT jsrkb
    RETURN
======================================
模板改了一下:
附件: 您没有浏览附件的权限,请 登录注册
2018-04-04 10:26
xs591222
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:19
帖 子:596
专家分:1154
注 册:2009-3-1
  得分:0 
综合近段时间来,王咸美的生成班级课表和教师课表的帖子,以及各位亲的解答,可以将EXCEL中手工排好的总课表和教师任课表,导入到一个VFP的小系统中进行生成WORD文档打印。
制作这个小系统的思路如下:
1、让用户输入每天上几节课(一般小学6节、初中有7节,高中有8节)
2、依据每天的节数,生成一个空的总课表(如zkb.dbf)
3、导入EXCEL的总课表到zkb.DBF表中
4、依据导入后得到的VF格式总课表,生成出一个开设学科的表(如xkmck.DBF)
5、依据学科表(xkmck.dbf)创建一个教师任课表(如jsrkb.DBF)
6、导入EXCEL的教师任课情况到jsrkb.DBF中
7、依据jsrkb.DBF表生成一个教师名单库(如jsmdk.DBF)
8、分别建好6节、7节、8节的WORD版的班级课表模板和教师个人课表模板文档
9、选择模板后进行打印(生成)
最后编译成可执行文件,就可发布给他人使用了。
2018-04-07 19:19







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021063 second(s), 8 queries.
Copyright©2004-2018, BCCN.NET, All Rights Reserved