收录日期:2019/04/18 21:06: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.

请大家帮忙想想这个汉字与字符的分辨的问题如何解决:100分:) 请教!如何用sql语句得到一张表的blob字段的大小? 高手过来帮帮忙,多少分都行啊 一个关于c程序的问题? java可不可以生成.exe文件? 画三角函数和反三角函数图象? C++ Builder 的程序,用什么工具可以做功能/GUI测试? ADO查询数据库一问 OMyDoG来这里~~ TRadioButton的OnClick事件问题? jbutton在页面中怎么不能识别回车,但能识别空格键? 请大家帮忙看看这个汉字与字符分辨的问题如何解决?谢谢了。100分 初次用php,遇到问题,请帮忙指教 请教高手(低手免进):以下只是例子现实比此要复杂 请问在多线程问题中,如何加锁解锁 长四个角了,可以散200分了,再次谢谢大家支持! 这是什么错误,怎么解决啊?? IIS的“目录安全性”中把Windows集成认证去掉,就不能post东西了。 DataWindow的Retrieve的问题? 很菜的问题:编写一个socket程序的问题,请高手帮忙! vb中如何实现自加? RMI + Applet问题 请问有谁了解DOS文件编辑器的,如何用它做一个矩阵,以及谁知道有关的网站,资料等,希望大家给指个路,谢谢!答者有分 CSocket和线程的问题 请问在局域网或在单机上面,如何判断局域网或者单机已经和internet连通????? how to let message routing arrive the target window c的一个题目。 我刚刚完全看完了<<深入浅出MFC >>,感触很深不知道看完这本书后还应该看些什么书....??? 请问怎样调用dll? ***ASP中改变界面大小问题***