| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4997 人关注过本帖
标题:如何统计成绩库.dbf中各科总分、平均分、最高分、最低分、及格人数、优分人 ...
只看楼主 加入收藏
王咸美
Rank: 1
等 级:新手上路
帖 子:579
专家分:0
注 册:2018-1-4
结帖率:97.04%
收藏
已结贴  问题点数:20 回复次数:16 
如何统计成绩库.dbf中各科总分、平均分、最高分、最低分、及格人数、优分人数
现有成绩库.dbf表文件,如何统计各科总分、平均分、最高分、最低分、及格人数、优分人数?并将结果保存在表文件统计表.dbf中。
说明:语文 72及格 102优秀
     数学 90及格 102优秀
     英语 90及格 127.5优秀
     科学 96及格 136优秀
  历史社会 36及格 51优秀
     生物 18及格 25.5优秀
     地理 18及格 25.5优秀
  实验操作 12皮格 17优秀
     体育 48及格 68优秀
请各位高手赐教,万分感谢!!!
成绩分析.zip (1.1 KB)
搜索更多相关主题的帖子: 平均分 dbf 成绩 统计 及格 
2020-04-15 09:36
王咸美
Rank: 1
等 级:新手上路
帖 子:579
专家分:0
注 册:2018-1-4
收藏
得分:0 
更正:数学 127.5优秀
2020-04-15 09:42
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9798
专家分:26886
注 册:2012-2-5
收藏
得分:0 
表结构改为
图片附件: 游客没有浏览图片的权限,请 登录注册

结果
图片附件: 游客没有浏览图片的权限,请 登录注册

坚守VFP最后的阵地
2020-04-15 10:36
王咸美
Rank: 1
等 级:新手上路
帖 子:579
专家分:0
注 册:2018-1-4
收藏
得分:0 
@sdta正是这样的结果!非常感谢!能分享一下具体代码吗?我想学习学习。
2020-04-15 12:43
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9798
专家分:26886
注 册:2012-2-5
收藏
得分:10 
程序代码:
CLOSE DATABASES 
CREATE CURSOR bz (km c(10), n1 n(6, 2), n2 n(6, 2))
INSERT INTO bz VALUES ("语文", 72, 102)
INSERT INTO bz VALUES ("数学", 90, 127.5)
INSERT INTO bz VALUES ("英语", 90, 127.5)
INSERT INTO bz VALUES ("科学", 96, 136)
INSERT INTO bz VALUES ("历史社会", 36, 51)
INSERT INTO bz VALUES ("生物", 18, 25.5)
INSERT INTO bz VALUES ("地理", 18, 25.5)
INSERT INTO bz VALUES ("实验操作", 12, 17)
INSERT INTO bz VALUES ("体育", 48, 68)
SELECT n1, n2 FROM bz INTO ARRAY abz

USE 统计表 IN 0
SELECT 统计表
ZAP 

USE 成绩库 IN 0
SELECT 成绩库
LOCAL atj[1, 7]
FOR i = 1 TO FCOUNT() - 1
    atj[1, 1] = FIELD(i)
    CALCULATE SUM(EVALUATE(FIELD(i))), AVG(EVALUATE(FIELD(i))), MAX(EVALUATE(FIELD(i))), MIN(EVALUATE(FIELD(i))) TO atj[1, 2], atj[1, 3], atj[1, 4], atj[1, 5]
    COUNT TO atj[1, 6] FOR EVALUATE(FIELD(i)) >= abz[1, 1] 
    COUNT TO atj[1, 7] FOR EVALUATE(FIELD(i)) >= abz[1, 2] 
    INSERT INTO 统计表 FROM ARRAY atj
    atj = 0
ENDFOR
SELECT 统计表
BROWSE 

坚守VFP最后的阵地
2020-04-15 12:45
王咸美
Rank: 1
等 级:新手上路
帖 子:579
专家分:0
注 册:2018-1-4
收藏
得分:0 
好像还有学科及格人数和优分人数未统计出来。
2020-04-15 12:46
厨师王德榜
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:199
帖 子:987
专家分:4946
注 册:2013-2-16
收藏
得分:0 
回复 3楼 sdta
我认为前辈的最后两列, 及格人数 和优分人数 应该是互斥的,即:及格人数 + 优分人数 应该=全班总人数 ,而不应该超出全班总人数。
虽然从理论上讲,优分的一个学生,肯定同时也是及格的。但是,实际工作中,这个学生肯定会算进优分这一档,同时及时这一档就不算他了。
当然,上述逻辑还有一个漏洞,这是楼主没有考虑到的:还要考虑万一有不及格的人数呢?
完整的逻辑应该是: 不及格人数 + 及格人数 + 优分人数 =全班总人数
2020-04-15 12:48
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3146
专家分:8408
注 册:2015-3-25
收藏
得分:6 
程序代码:
*!*    说明:语文 72及格, 102优秀
*!*          数学 90及格, 127.5优秀
*!*          英语 90及格, 127.5优秀
*!*          科学 96及格, 136优秀
*!*          历史 36及格, 51优秀
*!*          生物 18及格, 25.5优秀
*!*          地理 18及格, 25.5优秀
*!*          实验 12及格, 17优秀
*!*          体育 48及格, 68优秀
*!* 统计每科:“总和,平均,最高,最低,及格,优秀”的人数

CLOSE DATABASES
USE 成绩库.dbf ALIAS cjk IN 0

SELECT "语文" 科目,SUM(语文) 总和,AVG(语文) 平均,MAX(语文) 最高,MIN(语文) 最低,SUM(IIF(语文>=72,1,0)) 及格,SUM(IIF(语文=>102,1,0)) 优秀  FROM cjk UNION ALL ;
SELECT "数学" 科目,SUM(数学) 总和,AVG(数学) 平均,MAX(数学) 最高,MIN(数学) 最低,SUM(IIF(数学>=90,1,0)) 及格,SUM(IIF(数学=>127.5,1,0)) 优秀  FROM cjk UNION ALL ;
SELECT "英语" 科目,SUM(英语) 总和,AVG(英语) 平均,MAX(英语) 最高,MIN(英语) 最低,SUM(IIF(英语>=90,1,0)) 及格,SUM(IIF(英语=>127.5,1,0)) 优秀  FROM cjk UNION ALL ;
SELECT "科学" 科目,SUM(科学) 总和,AVG(科学) 平均,MAX(科学) 最高,MIN(科学) 最低,SUM(IIF(科学>=96,1,0)) 及格,SUM(IIF(科学=>136,1,0)) 优秀  FROM cjk UNION ALL ;
SELECT "历史社会" 科目,SUM(历史社会) 总和,AVG(历史社会) 平均,MAX(历史社会) 最高,MIN(历史社会) 最低,SUM(IIF(历史社会>=35,1,0)) 及格,SUM(IIF(历史社会=>51,1,0)) 优秀  FROM cjk UNION ALL ;
SELECT "生物" 科目,SUM(生物) 总和,AVG(生物) 平均,MAX(生物) 最高,MIN(生物) 最低,SUM(IIF(生物>=18,1,0)) 及格,SUM(IIF(生物=>25.5,1,0)) 优秀  FROM cjk UNION ALL ;
SELECT "地理" 科目,SUM(地理) 总和,AVG(地理) 平均,MAX(地理) 最高,MIN(地理) 最低,SUM(IIF(地理>=18,1,0)) 及格,SUM(IIF(地理=>25.5,1,0)) 优秀  FROM cjk UNION ALL ;
SELECT "实验操作" 科目,SUM(实验操作) 总和,AVG(实验操作) 平均,MAX(实验操作) 最高,MIN(实验操作) 最低,SUM(IIF(实验操作>=12,1,0)) 及格,SUM(IIF(实验操作=>17,1,0)) 优秀  FROM cjk UNION ALL ;
SELECT "体育" 科目,SUM(体育) 总和,AVG(体育) 平均,MAX(体育) 最高,MIN(体育) 最低,SUM(IIF(体育>=48,1,0)) 及格,SUM(IIF(体育=>68.5,1,0)) 优秀  FROM cjk

图片附件: 游客没有浏览图片的权限,请 登录注册
2020-04-15 13:20
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3146
专家分:8408
注 册:2015-3-25
收藏
得分:0 
以下是引用厨师王德榜在2020-4-15 12:48:23的发言:

我认为前辈的最后两列, 及格人数 和优分人数 应该是互斥的,即:及格人数 + 优分人数 应该=全班总人数 ,而不应该超出全班总人数。
虽然从理论上讲,优分的一个学生,肯定同时也是及格的。但是,实际工作中,这个学生肯定会算进优分这一档,同时及时这一档就不算他了。
当然,上述逻辑还有一个漏洞,这是楼主没有考虑到的:还要考虑万一有不及格的人数呢?
完整的逻辑应该是: 不及格人数 + 及格人数 + 优分人数 =全班总人数

老师考试统计;
全班考试情况如下:(52人)
1.参加考试,51人
2.及格人数,49人,
3.优秀人数,30人,
4.满分人数,1人,
一般是这样统计,可以分2大类,不及格(E)和及格(D,C,B,A)或者(D-,D,D+,C-,C,C+,B-,B,B+,A-,A,A+)

[此贴子已经被作者于2020-4-15 13:32编辑过]

2020-04-15 13:26
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9798
专家分:26886
注 册:2012-2-5
收藏
得分:0 
   COUNT TO atj[1, 6] FOR EVALUATE(FIELD(i)) >= abz[1, 1]
   COUNT TO atj[1, 6] FOR EVALUATE(FIELD(i)) >= abz[i, 1]

   COUNT TO atj[1, 7] FOR EVALUATE(FIELD(i)) >= abz[1, 2]
   COUNT TO atj[1, 6] FOR EVALUATE(FIELD(i)) >= abz[i, 1]
黑字 1 是错误的
红字 i 是正确的
图片附件: 游客没有浏览图片的权限,请 登录注册

坚守VFP最后的阵地
2020-04-15 13:42
快速回复:如何统计成绩库.dbf中各科总分、平均分、最高分、最低分、及格人数、优 ...
数据加载中...
 
   



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

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