| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1265 人关注过本帖
标题:请问 taifu945 在不
只看楼主 加入收藏
dzy123
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:379
专家分:820
注 册:2013-4-18
收藏
得分:0 
40个教室,6门,52个老师
2013-06-24 21:01
dzy123
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:379
专家分:820
注 册:2013-4-18
收藏
得分:0 
基本堂次我设为4
2013-06-24 21:01
dzy123
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:379
专家分:820
注 册:2013-4-18
收藏
得分:0 
如果设为5会出现有人有6次而有的人只有3次
2013-06-24 21:04
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:0 
今天晚了,我先睡了。有空帮你研究一下,改进程序。
2013-06-24 22:08
dzy123
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:379
专家分:820
注 册:2013-4-18
收藏
得分:0 
谢谢你无私帮助
2013-06-24 22:10
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:0 
我已经找到问题的症结了,正在修改中。
2013-06-25 12:10
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:0 
程序好了,至少在你给定的这三个数据下验证通过了。但我代码设计的是有变化的情况,只是来不及测试了,我要去考场了:

******************************************
* 思路:一共有6门课,每门课需要40名教师  *
* 总计240人次。根据课程和教室循环,随机  *
* 挑出教师填充。超过基数的课肯定有空档需 *
* 要某些教师超基数分配的,作特殊处理。   *
******************************************
SET SAFETY OFF
SET TALK OFF
CLOSE ALL

课程门数=6
教室数=40
教师数=52
分配基数=INT(课程门数*教室数/教师数)

************************************
* 教师表用来存储教师姓名及分配次数 *
* 以供程序进行判断使用             *
************************************
CREATE CURSOR 教师 (姓名 C(6),分配次数 I)
FOR I=1 TO 教师数
   INSERT INTO 教师 VALUES ("教师"+LTRIM(STR(I)),分配基数)
NEXT &&I
****************************
* 已分配表用来存储分配情况 *
* 以供程序进行判断使用     *
****************************
CREATE CURSOR 已分配 (课名 C(4),姓名 C(6))
**************
* 处理考试表 *
**************
SELECT VAL(NVL(MAX(教室),"0")) ;
   FROM 考试表 ;
   INTO ARRAY 最大教室号
FOR I=1 TO 教室数-最大教室号
   INSERT INTO 考试表 (教室) VALUES (ALLTRIM(STR(最大教室号+I))) &&凑齐教室数
NEXT &&I
UPDATE 考试表 SET 语文=[],数学=[],英语=[],地理=[],历史=[],综合=[]

************
* 开始分配 *
************
RAND(-1)

******************************************
* 加以下两个变量的目的是防止超过基数课程 *
* 分配,若有教师在前面没分配过,会产生在 *
* 该门课程重复分配的bug。                *
******************************************
最后可分配数=0
最后课程填补=.F.

FOR I=1 TO 课程门数
   课程名=FIELD(I+1,"考试表")
   FOR J=1 TO 教室数
      IF !最后课程填补
         IF J=1 &&第1次分配
            SELECT 姓名 FROM 教师 ;
               WHERE 分配次数>0 INTO ARRAY 教师名
         ELSE
            SELECT 姓名 FROM 教师 ;
               WHERE 姓名 NOT IN ;
                  (SELECT 姓名 FROM 已分配 WHERE 课名=课程名) AND ;
                  分配次数>0 ;
               INTO ARRAY 教师名
         ENDIF
         可分配数=ALEN(教师名)
         IF I>分配基数 AND 最后可分配数=0 &&最后一门课程时
            最后可分配数=可分配数 &&记录下最后可分配的教师数
         ENDIF
      ENDIF
      教师序号=INT(RAND()*可分配数+1)
      ******************
      * 修改教师表信息 *
      ******************
      UPDATE 教师 SET 分配次数=分配次数-1 WHERE 姓名=教师名[教师序号]
      ********************
      * 添加已分配表信息 *
      ********************
      INSERT INTO 已分配 VALUES (课程名,教师名[教师序号])
      ******************
      * 修改考试表信息 *
      ******************
      UPDATE 考试表 SET &课程名=教师名[教师序号] WHERE VAL(教室)=J
      
      **********************************************
      * 此段代码用来对分配基数后的课程进行教师填充 *
      **********************************************
      IF I>分配基数
         IF 最后可分配数>1
            最后可分配数=最后可分配数-1
         ELSE
            IF J<教室数
               最后课程填补=.T.
               SELECT 姓名 FROM 教师 ;
                  WHERE 姓名 NOT IN ;
                     (SELECT 姓名 FROM 已分配 WHERE 课名=课程名) AND ;
                  分配次数>-2 ;
                  INTO ARRAY 教师名
               可分配数=ALEN(教师名)
            ENDIF
         ENDIF
      ENDIF

   NEXT &&J
NEXT &&I         

SET SAFETY ON
SET TALK ON
CLOSE ALL

RETURN


[ 本帖最后由 taifu945 于 2013-6-25 12:48 编辑 ]
2013-06-25 12:37
dzy123
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:379
专家分:820
注 册:2013-4-18
收藏
得分:0 
我试了一下还是有问题你帮我改下我已经改过后的程序
2013-06-25 15:57
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:0 
你把程序代码贴上来。
2013-06-25 16:26
dzy123
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:379
专家分:820
注 册:2013-4-18
收藏
得分:0 
考试表.rar (5.56 KB)
我的代码和教师表,考试表都在这儿,如果你有空帮我看下再次谢谢你
2013-06-25 21:58
快速回复:请问 taifu945 在不
数据加载中...
 
   



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

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