| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1090 人关注过本帖
标题:再次请教学生如何分派
只看楼主 加入收藏
my2318
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:14
帖 子:263
专家分:640
注 册:2014-3-18
收藏
得分:0 
个人观点,等级录取最好的办法是建一个由所有科目和所有学校及录取类别的字段组成的自由表,然后穷尽所有科目等级组合及对应的可录取学校及类别的记录(所有的录取规则),然后再用单个学生成绩在这个表里查找,看可以录取到那个学校及那类学生,最后再统计,这样做虽然不是效率最高的办法,但是是最可靠的办法,现在的计算机性能强劲,用时不会长
昨天 08:25
chychychy
Rank: 2
等 级:论坛游民
帖 子:319
专家分:98
注 册:2015-4-18
收藏
得分:0 
回复 41楼 my2318
看来最准确就是这样,sdta版当年也这样表达过,现在是想请教能否更简单的交给程序去判断
昨天 08:44
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2226
专家分:3903
注 册:2007-4-27
收藏
得分:0 
以下是引用my2318在2024-12-11 08:25:59的发言:

个人观点,等级录取最好的办法是建一个由所有科目和所有学校及录取类别的字段组成的自由表,然后穷尽所有科目等级组合及对应的可录取学校及类别的记录(所有的录取规则),然后再用单个学生成绩在这个表里查找,看可以录取到那个学校及那类学生,最后再统计,这样做虽然不是效率最高的办法,但是是最可靠的办法,现在的计算机性能强劲,用时不会长


这个最好。原则是有变化的时候,少改代码,只改某表的内容

只求每天有一丁点儿的进步就可以了
昨天 08:54
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2226
专家分:3903
注 册:2007-4-27
收藏
得分:0 
趁与下属部门校对数据的间隙,做了前200的分配,仅供参考
SQZK.rar (319.96 KB)


       *******************
       * 名称:最优200名分配录取
       *
       * 时间:2024-12-11
       *******************
       CLEAR ALL
       SET ENGINEBEHAVIOR 70
       SET SAFETY OFF
       SET DELETED on        
       PUBLIC mypath
       cCurrentProcedure = SYS(16,1)
       nPathStart = AT(":",cCurrentProcedure)- 1
       nLenOfPath = RAT("\", cCurrentProcedure) - (nPathStart)
       mypath=SUBSTR(cCurrentProcedure, nPathStart, nLenofPath)
       SET DEFAULT TO (mypath)
       *---
       SELECT SPACE(10) as sjs,* from bmk1 orde by zf desc,sx desc,yw desc,wy desc top 200 into table bmkls   && 提取前200名学生。此句的orde by 子句中,可加入等级内容 加上WHERE 过滤评价不符
       RAND(SECONDS())     &&&& 根据时间秒数的不一,来产生随机数,保证每次启动都不一样
       SELECT bmkls
       REPLACE sjs with ALLTRIM(STR((RAND()*987651327))) all
       SELECT * from bmkls orde by sjs into cursor temp readw   && 按随机数排序
       SELECT temp
       REPLACE lqxxdm with [A501] for RECNO()<=50
       REPLACE lqxxdm with [A502] for RECNO()>50 and RECNO()<=100
       REPLACE lqxxdm with [A503] for RECNO()>100 and RECNO()<=150
       REPLACE lqxxdm with [A504] for RECNO()>150   
       *---分配结束
       GO top
       SCAN
         SELECT bmkls
         LOCATE for bmkls.xsdm=temp.xsdm
         IF FOUND()
           REPLACE bmkls.lqxxdm with temp.lqxxdm
         ENDIF
         SELECT temp
       ENDSCAN
       *---分配结果写入
       CLOSE DATABASES
       SELECT [    ] as 抽签学校,lqxxdm,sum(zf) as zf,coun(*) as rs ,sum(zf)/coun(*) as pjf,sum(IIF([女]$xb,1,0)) as nsrs,;
              sum(IIF(zf>=670,1,0)) as fsd670,sum(IIF(zf>=660 and zf<670,1,0)) as fsd660,;
              sum(IIF(zf>=650 and zf<660,1,0)) as fsd650,sum(IIF(zf>=640 and zf<650,1,0)) as fsd640 ;
              from bmkls grou by lqxxdm into table q200fptj
       SELECT q200fptj
       BROWSE    && 观察结果,浏览尚未满意,就重新运算,      
       *---分配统计,观察满意后结束。并组织校长进行抽签

[此贴子已经被作者于2024-12-11 09:24编辑过]


只求每天有一丁点儿的进步就可以了
昨天 08:59
my2318
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:14
帖 子:263
专家分:640
注 册:2014-3-18
收藏
得分:0 
以下是引用chychychy在2024-12-11 08:44:12的发言:

看来最准确就是这样,sdta版当年也这样表达过,现在是想请教能否更简单的交给程序去判断

程序解决效率可能更高,但规则变了就要改程序,比较麻烦。如果建表,规则变了,只要修改表就行了,后期维护简单到用户直接改一下表就行了。
昨天 09:58
schtg
Rank: 12Rank: 12Rank: 12
来 自:Usa
等 级:贵宾
威 望:67
帖 子:1766
专家分:3335
注 册:2012-2-29
收藏
得分:0 
回复 44楼 wengjl
谢谢!学习啦!
昨晚 19:25
my2318
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:14
帖 子:263
专家分:640
注 册:2014-3-18
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册


用大家的方法试了试,大概这个结果

[此贴子已经被作者于2024-12-12 03:28编辑过]

6 小时前
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2226
专家分:3903
注 册:2007-4-27
收藏
得分:0 
以下是我昨晚创建的一个2B2C2D综合评价项对照标准库,仅供参考!

程序代码:
     ************************
     * 名称:生成一个2B2C2D及以上的评价对照标准库
     * 用途:
     * 时间:20241211
     ************************
     SET engi 70
     SET SAFETY off
     CLOSE DATABASES 
     CREATE TABLE ls(djpj c(6),abcde c(10))
     SELECT ls
     zfc=[ABCDE]
     FOR i=1 to 5          &&&1 个学科的五种可能
       zh1=SUBSTR(zfc,i,1)
       FOR k= 1 to 5          &&&2 个学科的五种可能
         zh2=SUBSTR(zfc,k,1)
         FOR j=1 to 5          &&&3 个学科的五种可能
           zh3=SUBSTR(zfc,j,1)
           FOR x=1 to 5          &&&4 个学科的五种可能
             zh4=SUBSTR(zfc,x,1)
             FOR y=1 to 5          &&&5 个学科的五种可能
               zh5=SUBSTR(zfc,y,1)
               FOR z=1 to 5          &&&6 个学科的五种可能
                 zh6=SUBSTR(zfc,z,1)
                 SELECT ls
                 APPEND BLANK 
                 REPLACE djpj with zh1+zh2+zh3+zh4+zh5+zh6   &&& 全部排列共有 56 次方个=15625
               NEXT 
             NEXT 
           NEXT 
         NEXT 
       NEXT 
     NEXT 
     *---
     GO top
     SCAN
       sa=0
       sb=0
       sc=0
       sd=0
       se=0
       FOR i=1 to 6
         IF SUBSTR(djpj,i,1)=[A]
           sa=sa+1          &&& 计算 A 的个数
         ENDIF 
         IF SUBSTR(djpj,i,1)=[B]
           sb=sb+1          &&& 计算 B 的个数
         ENDIF 
         IF SUBSTR(djpj,i,1)=[C]
           sc=sc+1          &&& 计算 C 的个数
         ENDIF 
         IF SUBSTR(djpj,i,1)=[D]
           sd=sd+1          &&& 计算 D 的个数
         ENDIF 
         IF SUBSTR(djpj,i,1)=[E]
           se=se+1          &&& 计算 E 的个数
         ENDIF          
       NEXT 
       REPLACE abcde with allt(STR(sa))+[A]+allt(STR(sb))+[B]+allt(STR(sc))+[C]+allt(STR(sd))+[D]+allt(STR(se))+[E]
       *--转换成 nAnBnCnDnE 的形式,便于取得唯一
     ENDSCAN 
     *---
     SELECT djpj,[  ] as px,abcde,[符合 2B2C2D 要求    ] as sm from ls grou by abcde orde by abcde desc into table djpjbzk
     SELECT djpjbzk
     REPLACE sm with [] for [E]$djpj     && 带 E 等的,肯定是不符的
     REPLACE sm with [] for SUBSTR(abcde,7,1)>[2]                           && D 等超过2个的,肯定是不符
     REPLACE sm with [] for SUBSTR(abcde,7,2)=[2] and SUBSTR(abcde,5,1)>[2] && 当D为2个时,C超2个,说明B不足2个,是为不符
     REPLACE sm with [] for SUBSTR(abcde,7,2)=[1] and SUBSTR(abcde,5,1)>[3] && 当D为1个时,C超3个,肯定是不符
     REPLACE sm with [] for SUBSTR(abcde,7,2)=[0] and SUBSTR(abcde,5,1)>[4] && 当D为0时,C超4个,肯定是不符
     *---使用时,在学生成绩库上,也建一个abcde字段,录取时,只要到这个表上对照一下就行
     MESSAGEBOX('综合素质评价等级对照标准库,已生成!!!',64,'提示:')
     QUIT 



只求每天有一丁点儿的进步就可以了
1 小时前
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2226
专家分:3903
注 册:2007-4-27
收藏
得分:0 
程序代码:
       *******************
       * 名称:最优200名分配的S形录取
       *
       * 时间:2024-12-12
       *******************
       CLEAR ALL 
       SET ENGINEBEHAVIOR 70
       SET SAFETY OFF 
       SET DELETED on        
       PUBLIC mypath
       cCurrentProcedure = SYS(16,1)
       nPathStart = AT(":",cCurrentProcedure)- 1
       nLenOfPath = RAT("\", cCurrentProcedure) - (nPathStart)
       mypath=SUBSTR(cCurrentProcedure, nPathStart, nLenofPath)
       SET DEFAULT TO (mypath)
       *---
       SELECT SPACE(10) as sjs,* from bmk1 orde by zf desc,sx desc,yw desc,wy desc top 200 into table ls   && 提取前200名学生。此句的orde by 子句中,可加入等级内容 加上WHERE 过滤评价不符
       SELECT * from ls orde by xb,zf desc into table bmkls
       SELECT bmkls
       GO top
       lqm=[A501|A502|A503|A504|A504|A503|A502|A501]
       FOR i=1 to 25
         FOR k=1 to 8
           REPLACE lqxxdm with SUBSTR(lqm,5*k-4,4)
           SKIP +1
         ENDFOR 
       ENDFOR  
       *---分配结束
       CLOSE DATABASES 
       SELECT [    ] as 抽签学校,lqxxdm,sum(zf) as zf,coun(*) as rs ,sum(zf)/coun(*) as pjf,sum(IIF([]$xb,1,0)) as nsrs,;
              sum(IIF(zf>=670,1,0)) as fsd670,sum(IIF(zf>=660 and zf<670,1,0)) as fsd660,;
              sum(IIF(zf>=650 and zf<660,1,0)) as fsd650,sum(IIF(zf>=640 and zf<650,1,0)) as fsd640 ;
              from bmkls grou by lqxxdm into table q200fptj
       SELECT q200fptj
       BROWSE    && 观察结果


只求每天有一丁点儿的进步就可以了
36 分钟前
快速回复:再次请教学生如何分派
数据加载中...
 
   



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

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