注册 登录
编程论坛 VFP论坛

求助按科目成绩等级录取学生

chychychy 发布于 2019-06-19 11:53, 8975 次点击
只有本站会员才能查看附件,请 登录

有学生考试成绩库,物理(wl)、化学(hx)、思想品德(zz)、历史(ls)、地理(dl)、生物(sw)、体育(ty)科目成绩用等级大写字母ABCDE表示,对应字段分别为wldj、hxdj、zzdj、lisdj、dldj、swdj、tydj
录取要求如图,要将符合成绩等级要求的学生在指标生字段(zbs)分别写入“31”“32”“34”
在统招生字段(tzs)分别写入“31”“32”“34”
只有本站会员才能查看附件,请 登录


[此贴子已经被作者于2019-6-20 08:41编辑过]

91 回复
#52
chychychy2019-06-24 14:34
以下是引用sdta在2019-6-24 11:56:20的发言:

符合 BBCCDD 条件的表达式,我认为应该是:
OCCURS("D",字符串) <= 2 AND 字符串 <= "BBCCDD"
最后符合条件的字符串应该有58个


就这两个判断还不足以满足,比如ACCCDD<BBCCDD,D也小于等于2,但是不符合2B2C2D最低要求,因为他少一个B。
#53
wangzhiyi2019-06-24 14:45
以下是引用sdta在2019-6-24 12:51:57的发言:

作为教育主管部门应该列出符合2B2C2D条件的所有组合,而不是由具体操作人员去解决这个问题。防止个人背黑锅。

一直非常敬佩SDTA的文章,从这个贴子也深深感觉SDTA责任心。其实类似这样的决定学生命运的条件,个人建议不能因为怕麻烦使用筛选,用排除法可能不会有遗漏。因为只要你使用排除法,一旦排除的条件确定了,排除的都是不符合条件的学生,一般来说不会有错排出去的。

[此贴子已经被作者于2019-6-24 14:46编辑过]

#54
chychychy2019-06-24 15:05
以下是引用sdta在2019-6-24 12:02:12的发言:

6D应该看6门课程,怎么会看7门课程


你看是这样的,“物理、化学、生物、思想品德、历史、地理2B2C2D以上” :明确点到了6科,没有提到体育(原则上体育最低等级为E),所以就等于对体育没有要求
“6D”以上:实行等级的科目共7科,要为6D以上,意味着7科中可以任意有一科为E,故需要判断7科
#55
chychychy2019-06-24 15:14
以下是引用wangzhiyi在2019-6-24 14:45:44的发言:


一直非常敬佩SDTA的文章,从这个贴子也深深感觉SDTA责任心。其实类似这样的决定学生命运的条件,个人建议不能因为怕麻烦使用筛选,用排除法可能不会有遗漏。因为只要你使用排除法,一旦排除的条件确定了,排除的都是不符合条件的学生,一般来说不会有错排出去的。


SDTA文章确实非常好,程序水平更高,确实学了不少。麻烦当然是不怕,关键排除怕有落漏(当时试了很多次,每次完了都将结果整理出来,一个一个对照着将不肯能的结果排除并总结,工作量太大了),原来是分值一个分数线确定绝对不会有任何落漏,等级后如何考虑用类似数学的方法确保不会有任何落漏,是编程时必须考虑的。

[此贴子已经被作者于2019-6-24 15:18编辑过]

#56
chychychy2019-06-24 15:16
以下是引用sdta在2019-6-24 12:42:43的发言:

对位比较也不准确


发现哪里不准确了?
#57
sdta2019-06-24 15:19
以下是引用chychychy在2019-6-24 14:28:40的发言:

这个是符合条件的,我记得上面没说这个不符合呀

对位比较就将42楼的三个条件(对于2B2C2D而言)排除在外了

[此贴子已经被作者于2019-6-24 15:20编辑过]

#58
sdta2019-06-24 15:22
以下是引用chychychy在2019-6-24 14:34:24的发言:



就这两个判断还不足以满足,比如ACCCDD<BBCCDD,D也小于等于2,但是不符合2B2C2D最低要求,因为他少一个B。

51楼与52楼的回答是自相矛盾
#59
chychychy2019-06-24 15:25
以下是引用sdta在2019-6-24 15:22:43的发言:


51楼与52楼的回答是自相矛盾


ACCCCC、ACCCCD、ACCCDD 应该符合 BBCCDD 标准

对不起,是矛盾了,有点绕晕了,51楼第一次说错了,已修改。请见谅。
这三个都不合适,要求2B2C2D,这三个都少一个B,

[此贴子已经被作者于2019-6-24 15:34编辑过]

#60
sdta2019-06-24 15:33
以下是引用chychychy在2019-6-24 15:25:34的发言:



ACCCCC、ACCCCD、ACCCDD 应该符合 BBCCDD 标准

对不起,是矛盾了,有点绕晕了,请见谅。这三个都不合适,要求2B2C2D,这三个都少一个B,

是你认为 ACCCCC、ACCCCD、ACCCDD 不符合2B2C2D的条件,还是招生办认为不符合条件
从数学比较的角度而言,ACCCCC、ACCCCD、ACCCDD 是符合条件的。

[此贴子已经被作者于2019-6-24 15:35编辑过]

#61
sdta2019-06-24 15:37
以下是引用chychychy在2019-6-24 14:28:40的发言:


上次说错了,修改一下:
这个是不符合条件的,要求2B2C2D,虽然有A,也是两个D,但是少个B,要求最少两个B的。

一个A等于几个B,等于几个C,等于几个D
#62
sdta2019-06-24 15:39
以下是引用chychychy在2019-6-24 15:05:25的发言:



你看是这样的,“物理、化学、生物、思想品德、历史、地理2B2C2D以上” :明确点到了6科,没有提到体育(原则上体育最低等级为E),所以就等于对体育没有要求
“6D”以上:实行等级的科目共7科,要为6D以上,意味着7科中可以任意有一科为E,故需要判断7科

统招生不需要考虑体育与健康
#63
chychychy2019-06-24 15:49
以下是引用sdta在2019-6-24 15:37:09的发言:


一个A等于几个B,等于几个C,等于几个D


ABCDE都只对应1个科目,A不能等于B、C、D的。
规则就是六科要求2B2C2D,不如某个考试考的是AAADDD,这就是不合格;再或者政治历史地理生物要求1B3C,某个考试考的是AAAD,这也是不合格。
#64
chychychy2019-06-24 15:52
以下是引用sdta在2019-6-24 15:39:09的发言:


统招生不需要考虑体育与健康



定这个规则的权力在学校,而且已发布不能修改,学校确实对体育没有最低要求只要求的文化课的等级。初步估计明年会有所修订。
#65
sdta2019-06-24 16:20
以下是引用chychychy在2019-6-24 15:49:12的发言:



ABCDE都只对应1个科目,A不能等于B、C、D的。
规则就是六科要求2B2C2D,不如某个考试考的是AAADDD,这就是不合格;再或者政治历史地理生物要求1B3C,某个考试考的是AAAD,这也是不合格。

2B2C2D 招生部门是如何解释的,最好能给出符合这个条件的所有组合
#66
chychychy2019-06-24 16:25
以下是引用sdta在2019-6-24 16:20:14的发言:


2B2C2D 招生部门是如何解释的,最好能给出符合这个条件的所有组合


官方发布只会越简单越好,我们的沟通就算是最终解释吧
#67
sdta2019-06-24 16:36
以下是引用chychychy在2019-6-24 16:25:40的发言:



官方发布只会越简单越好,我们的沟通就算是最终解释吧

所以说,能不能升高中关键在于你们这些操作者
#68
xuminxz2019-06-25 19:33
这帖子的竟然60多层了,不过好像方向出问题了,这样把录取条件写入代码显然不合适。应该把录取条件(或不录取条件)写到一个表内(例如Lqtj)。然后用类似update XXX set lqjg="不录取" where kmdj not in (select kmtj from lqtj)的语句来决定是否录取。这样对不同学校只需要改录取条件就可以了。决定录取条件的领导不必懂程序,但录取条件应该让他能看得懂,并让他们签字确认。
#69
sdta2019-06-25 19:43
回复 68楼 xuminxz
关键是录取条件没有文字性的东西,如:2B2C2D,有多少种组合符合这个条件,这才是录取的关键条件。
#70
xuminxz2019-06-25 19:52
把条件写入表中组合再多(领导)也能看明白,多才显得你的工作难啊。我以前就是这样做的,程序上领导是应该签字的。
#71
chychychy2019-06-26 08:50
以下是引用xuminxz在2019-6-25 19:33:31的发言:

这帖子的竟然60多层了,不过好像方向出问题了,这样把录取条件写入代码显然不合适。应该把录取条件(或不录取条件)写到一个表内(例如Lqtj)。然后用类似update XXX set lqjg="不录取" where kmdj not in (select kmtj from lqtj)的语句来决定是否录取。这样对不同学校只需要改录取条件就可以了。决定录取条件的领导不必懂程序,但录取条件应该让他能看得懂,并让他们签字确认。



这也是个思路,不过组合的可能性太多了,逐个比对筛选的工作量(程序运行上)也不小。就六科来讲组合是5*5*5*5*5*5种之多(不知道我说的对不对)

[此贴子已经被作者于2019-6-26 14:38编辑过]

#72
xuminxz2019-06-26 09:08
回复 71楼 chychychy
没有那么多,注意到每一组合都有一个字段给出了组合结果(1C2B之类的)有效的每个平均不到10,而且可以根据要求自动生成。
#73
sdta2019-06-26 11:40
以下是引用chychychy在2019-6-26 08:50:41的发言:




这也是个思路,不过组合的可能性太多了,逐个比对筛选的工作量(程序运行上)也不小。就六科来讲组合是6*6*6*6*6*6种之多(不知道我说的对不对)

ABCD 组合
7门课程的所有组合:120种
6门课程的所有组合: 84种
5门课程的所有组合: 56种
4门课程的所有组合: 35种
3门课程的所有组合: 20种
2门课程的所有组合: 10种

如BC和CB是一种组合
如BCC和CBC、CCB是一种组合

只有知道了所有的组合,才能知道你的筛选条件是否正确。
实际上只要判断一种组合是否在所有组合中就可以了,如6门课程共有84种组合,最后有效组合有多少种,应该有招生学校来决定,符合BBCCDD条件的所有组合(我的观点应该是58种,楼主的观点是55种),不管是58种组合,还是55种组合,这时只要判定某种组合是否在这N种组合中就可以了,不需要层层筛选。这是最简单的判定方法。

[此贴子已经被作者于2019-6-26 11:57编辑过]

#74
chychychy2019-06-26 14:37
以下是引用sdta在2019-6-26 11:40:20的发言:


ABCD 组合
7门课程的所有组合:120种
6门课程的所有组合: 84种
5门课程的所有组合: 56种
4门课程的所有组合: 35种
3门课程的所有组合: 20种
2门课程的所有组合: 10种

如BC和CB是一种组合
如BCC和CBC、CCB是一种组合

只有知道了所有的组合,才能知道你的筛选条件是否正确。
实际上只要判断一种组合是否在所有组合中就可以了,如6门课程共有84种组合,最后有效组合有多少种,应该有招生学校来决定,符合BBCCDD条件的所有组合(我的观点应该是58种,楼主的观点是55种),不管是58种组合,还是55种组合,这时只要判定某种组合是否在这N种组合中就可以了,不需要层层筛选。这是最简单的判定方法。



每一课程可能级别有五种(ABCDE),两门就是25种,排序后去重还有15重,分别需要组合的有3、4、6、7门之多呢,如何用简便方法将所有可能列出,并区分合格不合格,再方便用程序去和他比较
只有本站会员才能查看附件,请 登录


[此贴子已经被作者于2019-6-26 14:39编辑过]

#75
chychychy2019-06-26 14:41
以下是引用xuminxz在2019-6-26 09:08:26的发言:

没有那么多,注意到每一组合都有一个字段给出了组合结果(1C2B之类的)有效的每个平均不到10,而且可以根据要求自动生成。


组合很多,不止10个,如何自动生成?麻烦示范一下
#76
sdta2019-06-26 15:55
ABCDE组成6门课程等级的组合共有210种,代码如下

CREATE CURSOR tt (x1 c(1))
FOR i = 65 TO 69
    INSERT INTO tt VALUES (CHR(i))
ENDFOR
SELECT aa.x1 + bb.x1 + cc.x1 + dd.x1 + ee.x1 + ff.x1 AA FROM tt aa ;
INNER JOIN tt bb ON bb.x1 >= aa.x1 ;
INNER JOIN tt cc ON cc.x1 >= bb.x1 ;
INNER JOIN tt dd ON dd.x1 >= cc.x1 ;
INNER JOIN tt ee ON ee.x1 >= dd.x1 ;
INNER JOIN tt ff ON ff.x1 >= ee.x1 ;
ORDER BY 1 INTO CURSOR ZH6

下图只是210种组合的一部分
只有本站会员才能查看附件,请 登录

然后去掉不符合最低成绩等级的组合,剩余的就是符合最低成绩等级的组合。
#77
sdta2019-06-26 16:16
另外设计一个表,结构
两科 M && 备注字段
三科 M
四科 M
五科 M
六科 M
七科 M
将生成的有效组合以文本的形式保存在相应的字段中
#78
chychychy2019-06-26 17:24
回复 76楼 sdta
厉害,刚刚学习也测试了,不好意思因为平时不用,所以没看懂,麻烦解释一下,尤其 SELECT部分,确实高明,我好学习排列其他组合。发现我不懂的地方实在太多了
再请教,如何将临时表中数据写回“等级库”表中六科字段(请勿见笑)

[此贴子已经被作者于2019-6-26 18:23编辑过]

#79
sdta2019-06-26 18:39
回复 78楼 chychychy
其它组合只要增减代码即可
SQL命令,需要自己看帮助文件,别人是教不会的,再说也没有那么多时间
#80
sdta2019-06-26 18:41
尽量不要对原表进行操作,所有操作尽量在临时表中进行即可。
#81
xuminxz2019-06-26 19:32
SQL命令一般VFP的教材中说的都不太全,帮助文件中的例子较少,没学过的也难全看懂。建议看看Oracle或SQL Server教材中相关的部分。
#82
sdta2019-06-26 20:01
楼主只是临时抱佛脚,根本不会看的
#83
chychychy2019-06-26 20:14
以下是引用xuminxz在2019-6-26 19:32:05的发言:

SQL命令一般VFP的教材中说的都不太全,帮助文件中的例子较少,没学过的也难全看懂。建议看看Oracle或SQL Server教材中相关的部分。



谢谢
#84
chychychy2019-06-26 20:18
以下是引用sdta在2019-6-26 20:01:24的发言:

楼主只是临时抱佛脚,根本不会看的



一针见血说出了缺点,不过也请原谅一个初中英语起点人的水平。(真跟着学了不少,也照猫画虎的改了一些,但确实是水平所限)

其他帖子中“关联修改,这应该是VFP最基本的内容之一。用VFP的人越来越多,兴蔚,但不思考的人也是越来越多,悲哀。”确实要反思,活到老,学到老。

[此贴子已经被作者于2019-6-26 20:21编辑过]

#85
wengjl2019-06-26 20:55
@chychychy
可以把你县的中考中招文件,全文上传吗?供学习学习
#86
chychychy2019-06-26 21:24
以下是引用wengjl在2019-6-26 20:55:52的发言:

@chychychy
可以把你县的中考中招文件,全文上传吗?供学习学习


是这样的,地级市统一安排,县级的高中只是上传条件就是我一楼的图,然后县级根据招生要求来完成招生,以前都是完全为分值确定分数线即可。今年是第一年部分科目等级录取,我并不参与其中工作,之所以接触是平时略微懂一点数据库,他们怕录取有落漏,让我帮忙验证一下。我用笨方法试了(见2楼),觉得不够科学,所以上来求助,通过帖子互动,尤其版主sdta涨了不少见识。你所说的一是我不掌握二是保密原则(你懂得),故不好意思,技术上确实需向你们学习,文本上也没多少内容。请见谅
#87
wengjl2019-06-27 09:59
招生的政策文件,对考生是要广而告知,不属于保密内容
#88
chychychy2019-06-27 11:02
以下是引用wengjl在2019-6-27 09:59:03的发言:

招生的政策文件,对考生是要广而告知,不属于保密内容



对本地区是如此,有了地名校名就等于网上发布,而这现在是不允许乱发布的了。呵呵


[此贴子已经被作者于2019-6-27 11:06编辑过]

#89
wengjl2019-06-27 12:22
呵呵,我们都是公网上发布的,是可以摆渡的
#90
wangzhiyi2019-06-27 16:07
以下是引用chychychy在2019-6-26 17:24:08的发言:

厉害,刚刚学习也测试了,不好意思因为平时不用,所以没看懂,麻烦解释一下,尤其 SELECT部分,确实高明,我好学习排列其他组合。发现我不懂的地方实在太多了
再请教,如何将临时表中数据写回“等级库”表中六科字段(请勿见笑)

给你一个不用SELECT语句处理等级的程序。
CLEAR
CREATE TABLE 等级库 (a1 c(1),a2 c(1),a3 c(1),A4 C(1),A5 C(1),A6 C(1),A7 C(1),ZDJ C(7),PXDJ C(7))
FOR j1=1 TO 5
    FOR j2=1 TO 5
        FOR j3=1 TO 5
            FOR j4=1 TO 5
                FOR j5=1 TO 5
                    FOR j6=1 TO 5
                        FOR j7=1 TO 5
                            APPEND BLANK
                            REPLACE A1 WITH CHR(64+J1),A2 WITH CHR(64+J2),A3 WITH CHR(64+J3)
                            REPLACE A4 WITH CHR(64+J4),A5 WITH CHR(64+J5),A6 WITH CHR(64+J6)
                            REPLACE A7 WITH CHR(64+J7),ZDJ WITH A1+A2+A3+A4+A5+A6+A7
                            REPLACE PXDJ WITH DJPX(ZDJ)
                         NEXT
                     NEXT
                 NEXT
             NEXT
         NEXT
     NEXT
 NEXT
INDEX ON PXDJ TO LS UNIQ
COPY TO 等级库_唯一不重复
USE 等级库_唯一不重复
BROWSE
USE
RETURN
                           
FUNCTION djpx(cStr)
LOCAL px[LEN(cStr)]
FOR i = 1 TO LEN(cStr)
    px[i] = SUBSTR(cStr, i, 1)
ENDFOR
=ASORT(px)

cStr1 = ""
FOR i = 1 TO ALEN(px,1)
    cStr1 = cStr1 + px[i]
ENDFOR
RETURN cStr1
#91
chychychy2019-06-27 17:08
回复 90楼 wangzhiyi
谢谢,学习测试了,就这代码的逻辑,我是真写不来。
#92
chychychy2019-06-27 17:53
回复 73楼 sdta
关于“符合BBCCDD条件的所有组合(我的观点应该是58种,楼主的观点是55种)”,这几天反复学习测试,我觉得以A学校“物理、化学1B1C以上;思想品德、历史、地理、生物1B3C以上;体育与健康D以上”要求为例好说明:理化要达到(BC)组合以上,直接比较大小程序会将AD\AE都会视为合格,按要求这两种组合不符合。
12