设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

123下一页
返回列表 发新帖
查看: 4122|回复: 22
打印 上一主题 下一主题

[模块/函数] 【源码示例】随机监考员安排

[复制链接]
跳转到指定楼层
1#
发表于 2011-6-6 21:08:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 roych 于 2011-6-7 15:42 编辑

       这本是huang1314向老汉求助(todaynew版主在吗,麻烦来一下),打酱油路过,还是被点了名,于是答应试一下。
       在这里顺便提一下,Roy很反感诸如“版主请进”、“高手请进”之类的标题。某非除了“高手”,其他人看都不许看?这本由老汉做开了,由他处理也无可厚非,不过我还是觉得求助帖不应拒绝任何一颗热忱的心。
       扯远了,还是回到正题吧。
       从huang1314在Excel版的提问里下载了原始数据,大体了解下客户需求。大致是希望能够随机产生一些名额进行监考,但安排上有2人和1人,现在想整合一下,并满足到每个人的监考次数一样的。
      

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评分

参与人数 1经验 +10 收起 理由
5988143 + 10 精品文章~有說有教~

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
 楼主| 发表于 2011-6-6 21:30:02 | 只看该作者
本帖最后由 roych 于 2011-6-6 22:03 编辑

回复 roych 的帖子

       先说明一下。这是一个示例,因此不可能要求得太完美。——有兴趣的朋友可以考虑用集(Collection)或者数组来试试,应该可以简化下代码。
      从这里开始将开始讲解代码的编写过程。

       和之前的随机抽查示例不一样的是,这次虽说随机,却必须满足至少每人2次或以上。因此,我们必须从抽屉原理说起。很简单,7个苹果放在5个抽屉里,抽屉不许留空,那么至少有1个抽屉是2个或以上的。
       为了平均起见,我们也决定这样做一次。按Excel附件的说明,6场17个试室,一共是189场;而教师则是70个。很明显轮完2次之后,个人教师还得监考1场。——看来世上绝对的公平是没有滴,不过,我们可以考虑给多监考一场的老师申请加班费。
       所以,我决定,先分配每个人监考2场,然后再按顺序来。

       剔除不安排考试的情况后,记录为97条:
       1、那么第一轮下来,每个人监考1次,就到了第70条记录。
       2、接着,咱们把剩下的97-70=27条分给排在前面的那些。——这样就保证了每一场都有人监考了。
       3、那么第二轮,我们再从第28个老师开始,把这些老师分配到需要2人监考的试室。——这时每个人监考2场了。
       4、可能部分需要2人监考的还缺人,再按第1步轮1次,——对不起,排在后面的没机会了。      

3#
 楼主| 发表于 2011-6-6 21:55:26 | 只看该作者
本帖最后由 roych 于 2011-6-6 21:58 编辑

回复 roych 的帖子

       想要达到这样的效果,我们该怎么办呢?
       先从简单的说起,假定已经排好序了。那么我们只需要逐个填进去,填完再轮着来就行了。所以,我们需要知道两件事情:第一、有多少个老师。第二、安排几场考试。这些都可以从记录条数里获取出来。
       1、第一轮很好填,每个填进去就好了。
       2、第二轮,显然就难些了,我们必须根据第一轮填完后,还有多少没安排的再进行安排。因此,我们把场数写成:Z=70×N+M。
       先把N算出来,确定每个人都排了N次,最后把M排一下,就可以保证每个试室有人监考了。
       3、接下来排剩下的两个人监考部分。第2步,算出了M,那么第N+1轮没排上号的就是70-M个人了。接下来就是排着70-M个人了。
       4、这时每个人都排了N+1次了。记录下排完N+1的位置,剩下的再按步骤1、2来做就能满足要求了。

       局限性:如果M=0怎么办?每个人排完N轮后,又重新开始,岂不是有些本该两个人的实际只能1个人?

       解决方案:我们先安排2个人考场,先把2个人的安排妥当,同样按第1、2的思路来排,直至把2个人的排完,然后再把剩下的排到1个人监考的考场。
       这个是课后作业了~~~有兴趣的网友可以试试。
       按下F5键执行就可以了,里面附有查询,只是作为验证而言,跟代码无关。另外,代码的注释很少,主要在于这些日子注释写得也太烦了,就偷工减料了~~详细可以参考我其它帖子(大部分还是有注释的,特别是Excel版块里的)或发站内短信息给我。
4#
发表于 2011-6-6 22:32:42 | 只看该作者
学习学习

点击这里给我发消息

5#
发表于 2011-6-7 12:40:13 | 只看该作者
支持一下,任何的帮助都是值得感谢的。
6#
发表于 2011-6-7 13:35:44 | 只看该作者
受益了~非常好的教程~
7#
发表于 2011-6-10 22:52:54 | 只看该作者
这几天监考高考,没得上来看,谢谢了,有什么问题再请教你
8#
发表于 2011-6-11 00:48:07 | 只看该作者
不知道怎样增加或减少考场数量和考试场数,因为每次考试考场数量是不同的,考试场数也是不同的。还有一些附加条件不能实现的话,实际应用起来就不好了,我再传个附件,附件有基本的监考要求,有劳。谢谢


监考.rar

9#
发表于 2011-6-15 11:06:27 | 只看该作者
有时安排正常,有时安排有重复

代码说明有
Sub Test()
'适用情况,场数不能被人数所整除。

但好像不整除也安排重复了,
比如有70监考员,11个考场,3场考试,都不整除,但安排就重复了,不能用
是不是代码有什么问题?
10#
 楼主| 发表于 2011-6-15 11:48:23 | 只看该作者
算法需要修正。过几天我再看看,最近有点小忙。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2025-1-11 05:46 , Processed in 0.101241 second(s), 39 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表