收录日期:2019/06/20 13:38:00 时间:2016/06/01 15:43:43 标签:VFP
有这样一个数据库,有学号(c,6),三好学生(L),少数民族(L),优秀干部(L),考试成绩(n,10,2),总成绩(n,15,2)这样几个字段,其中三好学生加10分,少数民族加5分,优秀干部加20分,建立程序修改总成绩字段,总成绩=考试成绩+加分,如果都不是,总成绩等于考试成绩。下面是两个程序,
一、
set talk off
use <文件名>
do while !eof()
   js=0
   do case
      case 少数民族
      js=5
      update <文件名> set 总成绩=考试成绩+js
      case 三好学生
      js=10
      update <文件名> set 总成绩=考试成绩+js
      case 优秀干部
      js=20
      update <文件名> set 总成绩=考试成绩+js
   endcase
   skip
enddo
select * from <文件名> into table new_table
close database
set talk on
但是模拟软件的正确答案却不是这样的,它的答案程序如下:
set talk off
use <文件名>
do while !eof()
   js=0
   do case
      case 少数民族
           js=5
      case 三好学生
           js=10
      case 优秀干部
           js=20
      otherwise
           js=0
    endcase
    replace 总成绩 with 考试成绩+js
    skip
enddo
select * from <文件名> into table new_table
close database
set talk on
请问为什么答案是下面的这个,而不是上面的那个呢?

1、update <文件名> set 总成绩=考试成绩+js
   这样会把表中所有记录都替换了。
第一种方法应该改为:
update <文件名> set 总成绩=考试成绩
update <文件名> set 总成绩=总成绩+5 WHERE 少数民族=.T.
update <文件名> set 总成绩=总成绩+10 WHERE 三好学生=.T.
update <文件名> set 总成绩=总成绩+20 WHERE 优秀干部=.T.
2、

replace 总成绩 with 考试成绩+js

只是替换当前记录。所以是对的
两个都一样,但如果可以重复加分的话,都错了, 应该这样
set talk off
use <文件名>
do while !eof()
   js=0
   
     If  少数民族
      js=js +5
     endif
      If  三好学生
      js=js +10
     endif
      if 优秀干部
      js=js + 20
       endif
      replace 总成绩 with 考试成绩+js  && = update <文件名> set 总成绩=考试成绩+js
    skip
enddo
select * from <文件名> into table new_table
close database
set talk on
是的,第二种应改为YuyuanJian(渝源)的,
因为用CASE没有考虑同一个人即是少数民族,又是三好学生或三者都是的情况。

建议用:
update <文件名> set 总成绩=考试成绩
update <文件名> set 总成绩=总成绩+5 WHERE 少数民族=.T.
update <文件名> set 总成绩=总成绩+10 WHERE 三好学生=.T.
update <文件名> set 总成绩=总成绩+20 WHERE 优秀干部=.T.

sql 根蹤器的問題? 禁止非法杀人! SUSE LINUX内核参数重启后失效 同样的用户为什么以不同的方式登陆后它的环境变量不同 eclipse 安装c/c++插件是报错的问题! Think in C++ 第11章中的习题疑惑 求教:使用C语言在LINUX下对数据打包,解包的方法 一个看似很简单,实际超有意思的问题,看哪位高手能知道为什么! 你代表谁的利益? 100分求一店名 新人处女帖:16进制转10进制问题,高手请进。 |zyciis| 求一条URL改写正则表达式 /ProductView/SN2001546.aspx 改写为 /ProductView.aspx?ID=2 delphi 中用ole操作word的一个问题 iBatisNet的Demo,免费提供下载,求iBatisNet的代码支持工具! @@@语言好的abap请进!! 数据库中比较日期型字段 求问如何找到带火的这些汉字? sql ce 的操作和普通对数据库的操作区别吗? 请问如何随机取list里的某几个值,但值是不能相同的? 在ADO中表名有\"._\"符号的表。调用 updata()时出错 。表名为 [test._lay] 请高手指教。 CSDN的程序,太不争气了! asp.net操作复杂xml,得到某一节点 (将重分感谢) @@@银行信用卡业务背景的pm职位!!! 求一条比较难的SQL查询语句 sql 2005 可以同步了但有个问题急死了!!!!!!!!,在数据库的目录里每一段时间生成许多audittrace20080714091732_21.trc这种文件,一直到磁盘空没有。急死了。。。。。。。 Object reference not set to an instance of an object错误,请高手相助 从1900年1月1日到2079年6月6日间的日期和时间,精确到一分钟 用代码获得域名跳转的网址 简单问题 判断String长度。。。。。。。。。。。。。。。 关于TCP的一个疑问