(1)打开程序文件cylinder.prg,请按要求修改程序并运行程序。 (2)以表employee.dbf和orders.dbf中数据为基础,使用SQL命令检索订单数最多的前3名职工的职工号、姓名和订单数,检索结果按订单数降序排序存入表newco

admin2015-08-20  54

问题 (1)打开程序文件cylinder.prg,请按要求修改程序并运行程序。
    (2)以表employee.dbf和orders.dbf中数据为基础,使用SQL命令检索订单数最多的前3名职工的职工号、姓名和订单数,检索结果按订单数降序排序存入表newcoun.dbf,同时将所用SQL命令存入文件new.txt中。

选项

答案(1) 步骤1:在命令窗口执行命令:MODIFY COMMAND cylinder,打开cylinder.prg程序,代码如下: *本程序的功能为输入圆柱体的半径和高,计算圆柱体表面积。 *请将程序修改为函数调用方式(注意不得增删语句行)。 1 SET TALK OFF 2 CLEAR 3 LOCAL carea 4 INPUT"请输入圆柱体的半径"TO r 5 INPUT"请输入圆柱体的高"TO h 6 DO cya WITH r,h,carea 7 ?"圆柱体的表面积为:",carea 8 RETURN 9 PROCEDURE cya 10 PARAMETERS a,b,c 11 LOCAL pai 12 pai=3.14159 13 c=2*(pai*a^2)+2*pal*a*b 14 RETURN 15 ENDPROC > 修改程序中的错误行,修改后的程序如下: 1 SET TALK OFF 2 CLEAR 3 LOCAL carea &&定义局部变量local 4 INPUT"输入圆柱体的半径:"TO r &&从键盘输入一个半径值 5 INPUT"输入圆柱体的高:"TO h &&从键盘输入一个高值 6 carea=cya(r,h) &&调用模块程序,转到 PROCEDURE命令行执行程序,按值方式传递参数 7 ?”圆柱体的表面积为:",carea 8 RETURN 9 PROCEDURE cya &&过程的开始,并命名过程名为cya 10 PARAMETERS a,b,c &&声明的行参变量被看作是模块程序中的私有变量 11 LOCAL pai 12 pai=3.1 4 l 5 9 13 c=2*(pai*a^2)+2*pai*a*b &&计算圆柱体表面积的表达式 14 RETURN C &&将计算的表达式值返回上级模块 15 ENDPROC 步骤2:保存文件修改,在命令窗口执行命令:DO YZT.PRG,执行程序文件。 (2) 步骤1:在命令窗口执行命令:MODIFY FILE new,打开文本编辑器编写SQL命令。 步骤2:在编辑器中输入如下程序代码(以下程序是通过查询设计器生成): 1 SELECT TOP 3 Employee.职工号, Employee.姓名,COUNT(*)订单数; 2 FROM employee INNER JOIN orders ; 3 ON Employee.职工号=Orders.职工号; 4 GROUP BY Employee.职工号; 5 ORDER BY 3 DESC ; 6 INTO TABLE newcoun.dbf 步骤3:在命令窗口执行命令:DO NEW.TXT,执行文件(注意:执行文件时,文件后缀名.txt不能缺省)。

解析 (1)本题主要考查的是模块的定义和调用。在本题中,当用函数调用方式时,要想在主程序中输出carea的值,应该在子程序的最后返回计算的表面积值c。而在主程序中,应当将调用函数返回的值赋值给carea变量,即“carea=area(r,h)”。这时,实参就变成了两个:r、h,而子程序的形参有三个:a、b、c。这样是可以的。我们说在调用模块时,系统会自动把实参一一传递给对应的形参,形参的数目不能少于实参的数目,因为传递过来的每一个实参都要有对应的形参接收,如果形参的数目比实参少,那多出来的实参就好像找不到地址的信件一样,不知该送去哪里,这时系统就会产生运行时错误。但是,形参的数目可以多于实参的数目,这时,多余的形参变量取初值逻辑假(.F.)。
    (2)本题要求利用SQL语句进行查询,用到了employ和order两张表,可以使用联接查询。因为要查找订单数最多的前两名职工,应该按职工号分组,并求出每一组中记录的个数,即是每个职工的订单数,要分别使用group by短语和count()计数函数;另外,因为只查找最多的前两名,应该按降序排序,并使用top短语;将查询结果保存在永久表中,应使用INTO TABLE短语。
转载请注明原文地址:https://jikaoti.com/ti/RIv0FFFM
0

最新回复(0)