Office中国论坛/Access中国论坛

标题: 求助多条件限制自动分班 [打印本页]

作者: lhlprc    时间: 2016-7-27 15:25
标题: 求助多条件限制自动分班
本帖最后由 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分以内,随机分配)。

作者: wzl8007    时间: 2016-7-28 10:22
一组 二组是如何划分出来的?
作者: wzl8007    时间: 2016-7-28 11:00
本帖最后由 wzl8007 于 2016-7-28 11:02 编辑

感觉应该不难,在其中一个表里将其他3个表的成绩数据引入,然后按照比例计算出总成绩,select top 50 人名 from 表 where 成绩 between 最大值 and 最大值-1 order by  (随机数)意思是从表里随机选出与最高成绩不差1分的的50人 其他类似!只是个思路!
作者: lhlprc    时间: 2016-7-28 12:15
wzl8007 发表于 2016-7-28 10:22
一组 二组是如何划分出来的?

每个学生都有组别的,分班时组别不变,即在各自组别中进行分班
作者: lhlprc    时间: 2016-7-28 12:16
wzl8007 发表于 2016-7-28 11:00
感觉应该不难,在其中一个表里将其他3个表的成绩数据引入,然后按照比例计算出总成绩,select top 50 人名  ...

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

作者: wzl8007    时间: 2016-7-28 16:48
本帖最后由 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
作者: lhlprc    时间: 2016-7-29 10:06
wzl8007 发表于 2016-7-28 16:48
Dim aa As Integer
aa = Round(DSum("成绩合成", "汇总成绩查询") / 125)
Dim Conn1 As New ADODB.Connec ...

好的,谢谢了,我先试试看,不懂问你




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3