设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2947|回复: 7
打印 上一主题 下一主题

求助多条件限制自动分班

[复制链接]

点击这里给我发消息

跳转到指定楼层
1#
发表于 2016-7-27 15:25:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 lhlprc 于 2016-7-28 13:13 编辑

各位老师:
我现在我重新修改了一下分班数据,要求高二文理分班,要把1组、2组的学生按(汇总成绩表中)的成绩合成(最后一列的成绩)重新分班。请各位老师帮忙,
要求如下:
1、分班数据在汇总成绩工作表中,分班以后的数据要在分班工作表中输出,并标明每个学生的新分的班级和原来的班级、成绩(汇总成绩表中的最后一列成绩合成)。
2、1组、2组的学生分开分班,每个组按照文科、理科分别进行分班。1组班级为1-11班,2组班级为12-22班。
3、文科班分班成绩如左边(分班条件)表格。文科每个组1个重点班,人数为每班60人(成绩合成前60名进入重点班);2个普通班,人数为剩下人数平均分配(要求每个班平均分差距在1分以内,随机分配)。
4、理科每个组2个重点班,人数为每班50人(成绩合成前100名进入重点班,要求每个班平均分差距在1分以内,随机分配);  4个普通班,人数为每个班60人(要求每个班平均分差距在2分以内,随机分配);2个慢班,人数为剩下人数平均分配(要求每个班平均分差距 在1分以内,随机分配)。

本帖子中包含更多资源

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

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2016-7-28 10:22:49 | 只看该作者
一组 二组是如何划分出来的?
3#
发表于 2016-7-28 11:00:56 | 只看该作者
本帖最后由 wzl8007 于 2016-7-28 11:02 编辑

感觉应该不难,在其中一个表里将其他3个表的成绩数据引入,然后按照比例计算出总成绩,select top 50 人名 from 表 where 成绩 between 最大值 and 最大值-1 order by  (随机数)意思是从表里随机选出与最高成绩不差1分的的50人 其他类似!只是个思路!

点击这里给我发消息

4#
 楼主| 发表于 2016-7-28 12:15:19 | 只看该作者
wzl8007 发表于 2016-7-28 10:22
一组 二组是如何划分出来的?

每个学生都有组别的,分班时组别不变,即在各自组别中进行分班

点击这里给我发消息

5#
 楼主| 发表于 2016-7-28 12:16:24 | 只看该作者
wzl8007 发表于 2016-7-28 11:00
感觉应该不难,在其中一个表里将其他3个表的成绩数据引入,然后按照比例计算出总成绩,select top 50 人名  ...

我是vba的初学者,只知道一点点皮毛,请老师指导
6#
发表于 2016-7-28 13:44:15 | 只看该作者
分类很容易。只是有几个问题需要处理。这个有条件的随机抽取,其实是一个规划求解过程,可能写一个算法会更好些。
大体把分类解决了。随机抽取这部分得有空再写一个算法。

本帖子中包含更多资源

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

x
7#
发表于 2016-7-28 16:48:03 | 只看该作者
本帖最后由 wzl8007 于 2016-7-28 18:42 编辑

Dim aa As Integer
aa = Round(DSum("成绩合成", "汇总成绩查询") / 125)
Dim Conn1 As New ADODB.Connection
    Dim Rs_Date As New ADODB.Recordset
    Set Conn1 = CurrentProject.Connection
    Dim Arr_Date()
    Dim sql As String
    Dim rstCount As Integer
   Do While True
    CurrentDb.CreateQueryDef "文班1班", "SELECT TOP 62 文科慢班.ID, Sum(文科慢班.成绩合成) AS 成绩合成之合计 FROM 文科慢班 GROUP BY 文科慢班.ID ORDER BY Rnd(-(ID+Rnd()))"
        sql = "SELECT round(Sum(文班1班.成绩合成之合计)) AS 班级成绩总和 FROM 文班1班"
Rs_Date.Open sql, Conn1, 3, 3
Debug.Print Round(Rs_Date(0) / 62)
    If Abs(Round(Rs_Date(0) / 62) - aa) < 1 Then
    GoTo line
    End If
    DoCmd.DeleteObject acQuery, "文班1班"
    Rs_Date.Close
    Set Rs_Date = Nothing
    Loop
line:
MsgBox "文班慢班1完成!其余为慢班2班"
试验了一下,应该可以实现,我用的是access

点击这里给我发消息

8#
 楼主| 发表于 2016-7-29 10:06:56 | 只看该作者
wzl8007 发表于 2016-7-28 16:48
Dim aa As Integer
aa = Round(DSum("成绩合成", "汇总成绩查询") / 125)
Dim Conn1 As New ADODB.Connec ...

好的,谢谢了,我先试试看,不懂问你
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-27 21:15 , Processed in 0.096799 second(s), 32 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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