S版不是要最优方案吗?所以大家就不停地优化算法喽。实际编程应用时,这种情况有很多做法,但是做题目就不一样了。
CLOSE DATABASE SELECT ksh,性别,必考项目 AS 考试内容,必考项目数 AS 考试成绩,[必考项目] AS 考试分类 FROM 体考; UNION ALL SELECT ksh,性别,抽选项目 AS 考试内容,抽选项目数 AS 考试成绩,[抽定项目] AS 考试分类 FROM 体考; UNION ALL SELECT ksh,性别,自选项目 AS 考试内容,自选项目数 AS 考试成绩,[自选项目] AS 考试分类 FROM 体考; UNION ALL SELECT ksh,性别,备选项目 AS 考试内容,备选项目数 AS 考试成绩,[备选项目] AS 考试分类 FROM 体考; INTO ARRAY ATK SELECT ksh,性别,必考项目 AS 考试内容,必考项目数 AS 考试成绩,[必考项目] AS 考试分类,00.0 FS FROM 体考 INTO CURSOR TEMP READWRITE ZAP APPEND FROM ARRAY ATK BLANK ALL FIELDS 考试成绩 FOR 考试成绩=0 &&清空[0] UPDATE TEMP SET FS=测试标准.分数 FROM 测试标准 WHERE ALLTRIM(TEMP.考试内容)==ALLTRIM(测试标准.项目名称) AND TEMP.性别==测试标准.性别 AND BETWEEN(考试成绩,测试标准.下限,测试标准.上限) SELECT A.KSH,A.性别,A.必考项目,B.抽定项目,C.自选项目,D.备选项目,A.必考项目数,; B.抽定项目数,C.自选项目数,D.备选项目数,A.FS1,B.FS2,C.FS3,D.FS4,; CAST(A.FS1+B.FS2+C.FS3+D.FS4 AS N(4,1)) 总分 FROM ; (SELECT ksh,性别,考试内容 AS 必考项目,考试成绩 AS 必考项目数,FS AS FS1 FROM TEMP WHERE ALLTRIM(考试分类)==[必考项目]) A,; (SELECT ksh,性别,考试内容 AS 抽定项目,考试成绩 AS 抽定项目数,FS AS FS2 FROM TEMP WHERE ALLTRIM(考试分类)==[抽定项目]) B,; (SELECT ksh,性别,考试内容 AS 自选项目,考试成绩 AS 自选项目数,FS AS FS3 FROM TEMP WHERE ALLTRIM(考试分类)==[自选项目]) C,; (SELECT ksh,性别,考试内容 AS 备选项目,考试成绩 AS 备选项目数,FS AS FS4 FROM TEMP WHERE ALLTRIM(考试分类)==[备选项目]) D WHERE A.KSH==B.KSH AND B.KSH==C.KSH AND C.KSH==D.KSH后来看了大家的贴子后,代码改成以下:
CLOSE DATABASES UPDATE 体考 SET 体考.必考分数=标准.分数 FROM 标准 WHERE 体考.必考项目==标准.项目名称 AND 体考.性别==标准.性别 AND BETWEEN(体考.必考项目数,标准.下限,标准.上限) UPDATE 体考 SET 体考.抽选分数=标准.分数 FROM 标准 WHERE 体考.抽选项目==标准.项目名称 AND 体考.性别==标准.性别 AND BETWEEN(体考.抽选项目数,标准.下限,标准.上限) UPDATE 体考 SET 体考.自选分数=标准.分数 FROM 标准 WHERE 体考.自选项目==标准.项目名称 AND 体考.性别==标准.性别 AND BETWEEN(体考.自选项目数,标准.下限,标准.上限) UPDATE 体考 SET 体考.备选分数=标准.分数 FROM 标准 WHERE 体考.备选项目==标准.项目名称 AND 体考.性别==标准.性别 AND BETWEEN(体考.备选项目数,标准.下限,标准.上限) SELECT 体考 REPLACE ALL 总分数 WITH 必考分数+抽选分数+自选分数+备选分数 FOR I=11 TO 15 BLANK FIELDS (FIELD(I)) FOR EVALUATE(FIELD(I))=0 ENDFOR BROWSE
UPDATE 体考 SET 体考.必考分数=标准.分数 FROM 标准 WHERE 体考.必考项目==标准.项目名称 AND 体考.性别==标准.性别 AND BETWEEN(体考.必考项目数,标准.下限,标准.上限) UPDATE 体考 SET 体考.抽选分数=标准.分数 FROM 标准 WHERE 体考.抽选项目==标准.项目名称 AND 体考.性别==标准.性别 AND BETWEEN(体考.抽选项目数,标准.下限,标准.上限) UPDATE 体考 SET 体考.自选分数=标准.分数 FROM 标准 WHERE 体考.自选项目==标准.项目名称 AND 体考.性别==标准.性别 AND BETWEEN(体考.自选项目数,标准.下限,标准.上限) UPDATE 体考 SET 体考.备选分数=标准.分数 FROM 标准 WHERE 体考.备选项目==标准.项目名称 AND 体考.性别==标准.性别 AND BETWEEN(体考.备选项目数,标准.下限,标准.上限) UPDATE 体考 SET 总分数=必考分数+抽选分数+自选分数+备选分数
CLOSE DATABASES UPDATE 体考 SET 体考.必考分数=标准.分数 FROM 标准 WHERE SUBSTR(ALLTRIM(体考.必考项目),1,8)==SUBSTR(ALLTRIM(标准.项目名称),1,8) AND 体考.性别==标准.性别 AND BETWEEN(体考.必考项目数,标准.下限,标准.上限) UPDATE 体考 SET 体考.抽选分数=标准.分数 FROM 标准 WHERE SUBSTR(ALLTRIM(体考.抽选项目),1,8)==SUBSTR(ALLTRIM(标准.项目名称),1,8) AND 体考.性别==标准.性别 AND BETWEEN(体考.抽选项目数,标准.下限,标准.上限) UPDATE 体考 SET 体考.自选分数=标准.分数 FROM 标准 WHERE SUBSTR(ALLTRIM(体考.自选项目),1,8)==SUBSTR(ALLTRIM(标准.项目名称),1,8) AND 体考.性别==标准.性别 AND BETWEEN(体考.自选项目数,标准.下限,标准.上限) UPDATE 体考 SET 体考.备选分数=标准.分数 FROM 标准 WHERE SUBSTR(ALLTRIM(体考.备选项目),1,8)==SUBSTR(ALLTRIM(标准.项目名称),1,8) AND 体考.性别==标准.性别 AND BETWEEN(体考.备选项目数,标准.下限,标准.上限) SELECT 体考 REPLACE ALL 总分数 WITH 必考分数+抽选分数+Iif(自选分数>=备选分数,自选分数,备选分数) FOR I=11 TO 15 BLANK FIELDS (FIELD(I)) FOR EVALUATE(FIELD(I))=0 ENDFOR BROWSE