《机械工程数据库》实验指导 下载本文

实验14:循环结构、子程序与过程程序设计 1.实验目的:

? ? ? ?

掌握do while … enddo语句、scan语句、for语句的使用方法。 掌握编单循环和多循环结构的程序设计方法。 使用子程序的编程方法编写程序。

掌握公有变量、私有变量和局部变量的作用域及使用方法。

2.实验内容:

(1)编写单循环程序CX2.PRG,要求完成以下功能: ①复制“学生”表到“学生1”表,在“学生1”表中添加一个字段“总学分N(10,2)”,要求根据“学生成绩表”和“课程表”计算“学生1”表中每个学生的总学分(选课成绩大于等于60分才能算有学分); ②在学生的总成绩大于等于100的学生中,查询总成绩最低的学生的学号和总分,将结果保存在“学生2.dbf”中。 参考程序如下:

Dimension temp(1) &&定义数组temp Close all database Use 学生

Copy to 学生1 &&将学生表复制到学生1表中 Alter table 学生1 add 总学分 N(2) &&增加字段总学分 Use 学生成绩 in 0 Select 学生1 &&选择学生1所在的工作区 Do while .NOT. EOF() &&表指针没有达到文件末尾,进入循环

xh=学号 temp(1)=0

*查询用户xh最近一次存取记录的总学分,查询结果保存在数组中 select sum(学分) from 学生成绩,课程 where 学生成绩.学号=xh AND;

学生成绩.课程编号=课程.课程编号 AND 成绩>=60 into array temp Select 学生1

Replace 总学分 with temp(1) &&修改学生1中当前记录的总学分 Skip &&指针指向下一个记录 Enddo

*按学号分组查询各个学生的总成绩,分组条件是总成绩>100,查询结果保存在临时表中 Select 学号,sum(成绩) as 总成绩 from 学生成绩 group by 学号;

Having sum(成绩)>=100 into cursor tempb

Select 学号,min(总成绩) from tempb into dbf 学生2.dbf Close all database

45

(2)试编写一个程序XSCX.PRG,功能是在表“学生.DBF”中找出所有总学分大于等于P的学生的学号、姓名和总学分数,并要求在各输出行下显示一行虚线。

46

(3)使用子程序的编程方法,编写程序完成按照下面公式进行计算C的值

Clear Use 学生 @10,15 say “请输入总学分:” Get P Default 0 Read Scan &&外循环 If 总学分 >= P ? 学号 + Space(3) + 姓名 + Space(3) + Str(总学分,2) ? && 起换行作用 I=0 Do While I<30 ?? “-” I=I+1 Enddo Endif EndScan Use C?M!

N!(M?N)!Clear Input “请输入整数M:” to M Input “请输入整数N:” to N J=1 &&程序中的私有变量,用来传递每次调用自程序后的阶乘值 Do comp with M &&以M为参数调用comp子程序求M! C=J &&主程序中的继续运算 Do comp with N &&以N为参数调用comp子程序求N! C=C/J Do comp with M-N &&以M-N为参数调用comp子程序求(M-N)! C=C/J ?”C=”, C Procedure comp &&子程序 Parameters y &&设置形参y J=1 For I=1 to y J=J*I Endfor Return End proc 47

(4)运行下面程序,写出运行结果,并指出3个变量x,y,z的类型(私有变量、公有变量还是局部变量)及其作用范围。程序运行结束后,在命令窗口中分别显示x,y,z变量的值,察看显示结果。输入release all 命令后,再显示x,y,z变量的值,察看显示结果,并进行比较,说明原因。

Clear Public x Local y Z=”f”

48