VFP—刘子恒--实验报告10

时间:2024.3.31

13级电子信息工程班VFP实验报告10

注:1、一个实验题目编写一个实验报告,每个报告至少占用1页。

    2、报告内容必须具体、详实,不得笼统、简单。


第二篇:VFP标准实验报告


实验2.1  常量、变量、函数和表达式

一、实验要求

1.     掌握各种类型常量的表示方法。

2.     掌握变量的赋值方法。

3.     掌握常用函数的功能、格式和使用方法。

4.     掌握各种类型表达式的构造方法。

二、实验内容

注意事项:1、“命令”窗口中的命令可以重新利用;

          2、命令、函数中的系统关键字可仅输入前4个字符;

          3、注释命令和命令中的注释部分不必输入。

1、  常量的表示

1)  字符型常量

?[V‘F‘P]        && 界定符为方括号,其中的其他形式的界定符均为字符串的组成内容。

2)  日期/日期时间型常量

?{^2003/10/01}     && 必须按照严格的日期输入格式输入

【结论】

l  数值型常量的表示接近日常表示,不过应注意E后面的为指数,如2E3表示2×103

l  字符型常量须用界定符“”、‘’或[]界定。

l  逻辑型常量只有两个,分别有两种表示方法,却都只有一种显示方法;

l  VFP6.0以上版本的默认格式为严格的日期格式,故日期/日期时间型常量须按严格的格式输入,当然,是否进行严格的日期/时间检查,可通过SET STRICTDATE TO 0|1|2命令进行设置,其中0表示不进行严格的日期格式检查;1表示进行严格的日期格式检查;2表示进行严格的日期格式检查,并且对CTOD()和CTOT()函数也进行严格的日期格式检查。

l  日期/时间的显示格式,可通过SET  DATE  TO  LONG|AMERICAN|ANSI等命令进行设置。

2、  变量的赋值

(1)简单变量

用等号“=”可以给单个变量赋值,用“STORE  TO ”命令可以给多个变量赋值

(2)数组

l  名为array1的数组中的所有元素都可看作名为array1的内存变量,故下述命令可用来显示array1数组中所有元素的值:

DISPLAY  MEMORY  LIKE  array1

l  数组的引用:当要求显示数组变量,只给出数组名时,数组的值等于第1个元素的值。EG:DEMENSION  abc[3]   ; ?abc

l  数组的定义:对已存在的数组再次定义,原数组元素的值会被继承,即再次定义的数组则是对原数组的扩展。同一数组的不同元素可以赋不同数据类型的值。

l  数组的使用:二维数组可以作为一维数组使用,如对于一个2行3列的数组array1,其数组元数array1[2,1]相当于数组元素array1[4]。

3、  常用函数

(1)       数值函数               

【注意事项总结】

l  SET  DECIMALS  TO  4

SET  FIXED  ON           &&设置固定显示小数位为4位;

l  MOD()函数——取模函数规律:

MOD(a,b)= a-[INT(a/b)- IIF(a/b<0,1,0)]*b

l  ROUND()函数返回圆整到指定小数位数的数值表达式,若指定小数位数的参数(第二个参数)为负,则整数位也要被圆整,如:若第二个参数为-2,则小数点左端的第一和第二个数字(个位和十位)均为零。

(2)       字符函数    

【归类总结】

l  截除字符串空格的函数:ALLTRIM()、TRIM()

l  求字符串长度的函数:LEN()

l  求子字符串首次出现的位置的函数:AT()、ATC()

l  取子字符串的函数:SUBSTR()、LEFT()、RIGHT()

(3)       日期/时间函数

显示当前系统的时间、日期:DATE()、TIME()、DATETIME()

返回参数日期中的年/月/日:DAY()、MONTH()、YEAR()

(4)       数据类型转换函数

字符      ASCII值:ASC()、CHR()

数值      字符:VAL()、STR()

字符      日期:DTOC()、CTOD()、TTOC()、CTOT()

【注意】

l  日期型(D)和日期时间型(T)使用场合没有区别,可以混用,故无需DTOT()或TTOD()之类的函数。

l  转换函数的参数不仅受数据类型的限制。如:VAL()中的字符参数只允许是数字的(E例外);CTOD()中的字符参数要类似yyyy/mm/dd表示,而不能是任意阿拉伯数字的组合。

l  STR()函数的参数较多,要特别注意其用法。如:若总宽度缺省,默认宽度10;小数位数宽度缺省,默认为0。STR(),如果没有指定宽度和小数位数,默认宽度取10。

(5)       其他常用函数

l  BETWEEN()函数:判断一个值是否在某个范围内。该命令的参数若是字符型,则返回值受SET COLLATE 命令影响。

l  TYPE()函数:显示值的类型,对于未定义的表达式类型,返回U(注意参数要加引号,且与字符界定符有所区别)。如:

?TYPE(‘ “12” ’)    &&显示C

?TYPE(‘ ‘12’ ’)    出错

?TYPE(‘!(3-2)’)       &&显示U

l  IIF()函数:称为条件函数,根据逻辑表达式的值返回两个值中的一个。

?IIF(DOW(DATE())=1 OR DOW(DATE())=7,’今天休息’,’今天上班’)

?IIF(DAY(DATE())=1,’今天休息’,’今天上班’))

4、  表达式

【注意】

l  不同类型的数据,其运算符不同。即使所用的符号相同,其含义也不同,如“+”,对数值型数据执行加运算,而对字符型数据则起着连接作用。

l  运算符及各种类型的常量表示要规范,不能与传统表示相混淆。如:已知x、y、z为数值型变量,考察下列表达式:

[(x-1)*y-5]/z       &&“[]”非法,应改为“()”

|x|+|y|           &&绝对值的表示非法,应该用ASC()函数。

x≤y AND y≤z     &&“≤”运算错,应改为“<=”

l  表达式中数据类型要匹配。例如,若将数值型数据与字符型数据直接执行 “+”运算,系统将无法确定“+”的含义。如果有必要将不同类型的数据在一个表达式中表示,可以利用数据类型转换函数。如:

?”字符串”+cstring+”的长度为:”+ALLRIM(STR(LEN(cstring)))

l  名称表达式、宏替换:

名称表达式和宏替换可以用来替换命令和函数中的名称,从而为VFP的命令和函数提供了灵活性。含有名称表达式的命令或函数的运行速度比含有宏替换的运行速度要快,但宏替换的使用范围更广些,有些地方只能使用宏替换而不能使用名称表达式。宏替换可以用以构成表达式,而名称表达式不能做为其他表达式的组成部分,且在使用名称表达式时,名称表达式不能出现在赋值语句的左边;在某些命令和函数中不能使用名称表达式。例如:

string1=”visual FoxPro”

cVar=’string1’

?&cVar      &&显示变量string1的值:visual FoxPro

?(cVar)      &&显示变量cVar的值:string1

?substr((cVar),1,6)    &&显示:string

?substr(&cVar,1,6)    &&显示:visual

(cVar)=’test2’        &&出错,不能赋值

store  (cVar) to ‘test2’   &&能成功给变量string1赋值

&cVar=‘test2’        &&能成功给变量string1赋值

三、实验体会

通过本次实验,我掌握了各种常量的表示、变量的赋值、常用函数的功能和使用、各种类型表达式的构造方法。实验过程中,我深刻地体会到,不仅要逐条运行指导书上的各条语句,更重要的是要看懂其运行结果,这样才会达到目的。有时为了掌握一个函数的用法,不得不多次改变参数,以观察返回值的变化情况。所以,我觉得完成本次实验不仅要有足够的耐性,而且要有创造力和想象力,当然还需要一定的归纳推理能力。因为VFP系统函数和命令较多,不可能通过本次实验全部熟练掌握。所以,我发现学会使用VFP帮助也很重要。

由于课堂练习时间紧迫,为了提高上机的效率,我以后还应该加强预习。并且课后还要找时间自己上机继续练习和推敲。

在实验中遇到的一些问题和注意点都总结在实验报告中。

实验2.2  程序控制和程序设计

一、实验要求

1.  掌握创建、编辑 、运算程序的方法。

2.  初步掌握条件语句、循环语句的功能和使用方法。

3.  掌握程序调试的一般方法。

二、实验内容

1.  创建程序文件

2.  运行程序

命令方式:DO  ProgramName

注:在程序运行过程中,不可按键盘上的[ESC]键、[F1]~[F12]等功能键。

3.  编辑程序文件

4.  使用IF-ENDIF条件语句

       条件语句可以控制程序中部分命令是否被执行,即根据条件测试的结果执行不同操作。

       ************程序功能:显示所按键

       CLEAR

       WAIT WINDOWS  “请按键”  TO cKey

       IF BETWEEN(cKey,”0”,”9”)

           ?”按的键是数字键”+cKey

       ENDIF

       保存后运行,如果所按键为数字键,该程序运行结果会显示提示语“按的键是数字键*”

5.  使用DO CASE-ENDCASE条件语句

在根据条件进行不同的处理时,如果需要处理两个以上的条件,使用IF-ENDIF条件语句时必须嵌套。为了增强程序的可读性,可以使用DO CASE-ENDCASE条件语句。例程如下:

***********程序功能:显示所按键

CLEAR

WAIT  WINDOWS  “请按键”  TO  cKey

DO  CASE

CASE  BETWEEN(cKey,“0”,“9”)

?”按的键是数字键”+cKey

CASE  BETWEEN(cKey,“a”,“z”)OR BETWEEN(cKey,“A”,“Z”)

?”按的键是字母键”+cKey

CASE  cKey=SPACE(0)

?”按的键是空格键”

CASE  ASC(cKey)=0

?”按的键是回车键”

OTHERWISE

?”按的键不是数字键、字母键、空格键、回车键!”

       ENDCASE

6.  使用FOR-ENDFOR循环语句

*******程序功能:计算阶乘

CLEAR

m=15

nResult=1

FOR  n=1  TO  m

        nResult=nResult*n

?STR(n)+“!=”+ALLT(STR(nResult))

7.  使用DO WHILE-ENDDO循环语句

*****程序功能:将非汉字字符组成的字符串反序显示(如将Microsoft显示为yfosorciM)

CLEAR

CString=“DO WHILE    ENDDO  Command ”

CResult=Cstring+“的反序显示为”

DO  WHILE  LEN(cString)>0

CResult=cResult+RIGHT(cString,1)

CString=SUBSTR(cString,1,LEN(cString)-1)

ENDDO

?cResult

程序运行后得到结果:DO WHILE    ENDDO  Command的反序显示为dnammoC  ODDNE  ELIH W  OD   

8.  循环语句与条件语句混合使用

在实际应用中,经常需要循环语句与条件语句混合使用,特别是在循环语句中嵌套条件语句。如下结构:

DO  WHILE

IF

……

ENDIF

ENDDO  

9.  在循环语句中使用LOOP语句和使用EXIT语句

循环体中的LOOP语句用于将控制直接返回给FOR,即忽略此后的循环体语句而重新循环,可被置于循环体中的任意位置,循环体中的EXIT语句将控制传递给ENDFOR后的第一条语句,即“跳出”循环。

10.              自定义函数的创建与使用

每个过程和自定义函数都可以作为独立的程序文件保存,或多个过程和自定义函数保存在一个称为“过程文件”的程序文件中,或位于一个程序的底部。

(1)       在开发某一应用系统时,如仅需要创建一个自定义函数,则可以将其作为独立的程序文件保存。

(2)       在开发某一应用系统时,如需要创建多个自定义函数,则可以将它们保存在一个程序文件中。

11.              程序的调试

程序调试时的常见错误:

1、  语法错误

2、  逻辑错误

三、实验思考题

1、  创建一个自定义函数ccdow(),其功能是:根据一个日期值返回用汉字表示的星期。例如,ccdow({^1999/03/01})的返回值为“星期一”(提示:利用DOW函数;利用DO CASE条件语句)。

Function  ccdow

Parameters  dat

S=space(3)

Do case

Case  dow(dat)=1

S=”星期天”

           Case   dow(dat)=2

                S=”星期一”

Case  dow(dat)=3

S=”星期二”

Case  dow(dat)=4

S=”星期三”

Case  dow(dat)=5

S=”星期四”

Case  dow(dat)=6

S=”星期五”

Case  dow(dat)=7

S=”星期六”

           Endcase

2、  下面程序的功能是:将十进制数转换成二进制数表示,但该程序有错。请创建一个程序文件err10_0,将下面程序输入到其中并进行调试、修改(不允许修改程序的总体框架和算法,不允许增加或减少语句数目)

STORE 37 TO  nNumber

CResult=SPACE(0)

IF  nNumber!=0

DO  WHILE  nNumber>0

     N=MOD(nNumber,2)

     nNumber=INT(nNumber/2)

     Cresult=STR(n,1)+cResult

ENDDO

           ELSE

CResult=”0”

           ENDIF

           ?”二进制数表示为”+cResult

四、实验体会

通过本次实验,我掌握了创建、编辑、运算程序的方法,掌握了条件语句、循环语句的功能和使用方法。实验过程中,通过对程序的调试,我掌握了程序调试的一般方法。由于课堂练习时间紧迫,为了提高上机的效率,我以后还应该加强预习。并且课后还要找时间自己上机继续练习和推敲。

实验5.3   SELECT-SQL语句

一、实验要求

1.掌握查看查询的SELECT-SQL语句的方法。

2.掌握使用SELECT-SQL语句来创建查询的方法。

二、实验内容

1.查看一个查询的SELECT-SQL语句

2.SELECT-SQL语句的使用

(1) 指定查询中的列和用FROM子句指定数据基表。

例1 显示JS表中所有教师的工号和姓名。

SELECT  js.gh,js.xm  FROM  sjk!js

(2) 用WHERE子句筛选基表记录和确定基表之间的联接。

例2 显示xs表和cj表中学号以“99“开头的学生的学号、姓名、课程代号以及该课程的成绩。

SELECT  xs.xh,xs.xm,cj.kcdh,cj.cj  FROM  sjk!xs,sjk!cj;

WHERE  xs.xh=cj.xh  AND  LIKE(“99*”,xs.xh)      

(3) 用JOIN…ON子句确定基表间的联接。

例3 显示js表、rk表和kc表中工号以“A”开头的教师的工号、姓名、专业代号、课程代号、课程名以及该课程的课时数。

SELECT  js.gh,js.xm,rk.zydh,rk.kcdh,kc.kcm,kc.kss;

FROM  sjk!js INNER JOIN sjk!rk  INNER JOIN  sjk!kc;

ON  rk.kcdh=kc.kcdh  ON  js.gh=rk.gh

WHERE  LIKE(“A*”,js.gh)

(4)用INTO子句和TO子句指定输出去向。

例4 显示js表和zy表中职称为“教授”的所有教师的工号、姓名、出生日期、工作日期和职称,并将结果保存到临时表jszctemp中。

SELECT  js.gh,js.xm,js.csrq,js.gzrq,zc.zc

FROM  sjk!js INNER JOIN  sjk!zc;

ON js.zcdh=zc.zcdh

WHERE zc.zc=”教授”

INTO  CURSOR  jszctemp

DIR jszctemp.dbf

SELECT jszctemp

BROWSE

(5) 用GROUP  BY 子句定义记录的分组依据

例5 查询cj表和kc表中每门课程的课程代号、课程名称、选课人数、总成绩和最高分,并把查询结果保存到kccj表文件中。

SELECT  cj.kcdh,kc.kcm,COUNT(cj.cj)  AS  选课人数,SUM(cj.cj) AS 总成绩,;

MAX(cj.cj) AS 最高分;

FROM sjk!cj INNER JOIN sjk!kc;

ON cj.kcdh=kc.kcdh;

INTO TABLE kccj.dbf;

GROUP BY cj.kcdh

(6) 用ORDER BY 子句指定查询结果的排列顺序。

将上例中的查询最终先按总成绩的降序,再按课程代号的升序来排序。代码如下所示:

   SELECT  cj.kcdh,kc.kcm,COUNT(cj.cj)  AS  选课人数,SUM(cj.cj)AS 总成绩,;

   MAX(cj.cj) AS  最高分;

   FROM  sjk!cj  INNER  JOIN  sjk!kc;

   ON  cj.kcdh=kc.kcdh;

   INTO TABLE  kccj.dbf;

   GROUP  BY  cj.kcdh;

   ORDER  BY  4  DESC,cj.kcdh

(7)  用HAVING子句筛选结果记录

例6  查询xim表、xs表和cj表中“信息管理系”学生的学号、姓名、系名、各门课程总分、平均成绩以及最低分,要求输出总分不低于480,最低分60分的所有学生学习情况,最终按学生学号进行排序。

SELECT  xs.xh,xs.xm,xim.ximing,SUM(cj.cj) AS 总成绩,AVG(cj.cj) AS 平均成绩,MIN(CJ.CJ) AS最低分;

FROM sjk!xim INNER JOIN sjk!xs INNER JOIN sjk!cj

ON xs.xh=cj.xh ON xim.xdh=xs.xdh;

WHERE xim.ximing=”信息管理系”

GROUP BY xs.xh;

HAVING 总成绩>=480  AND  最低分>=60

(8)  使用子查询

例7  查询js表中已担任课程的教师姓名和该教师所在系名。

   SELECT js.xm,xim.ximing;

   FROM  sjk!js  INNER  JOIN  sjk!xim  ON  js.xdh=xim.xdh;

WHERE  js.gh  IN  (SELECT  DISTINCT  rk.gh  FROM  sjk!rk)

例8  查询zy表中尚未招收学生的专业。

   SELECT  *  FROM  sjk!zy

   WHERE  zy.zydh   NOT  IN(SELECT DISTINCT  xs.zydh  FROM  sjk!xs)

三、实验体会

通过本次实验,我掌握了使用SELECT-SQL语句来创建查询的方法。

更多相关推荐:
电子报税实验报告步骤及感想

《电子报税》实验报告实验项目:电子报税实验地点:实验室名称:学院:年级专业班:学生姓名:学号:完成时间:教师评语:开课时间:20xx至20xx学年第二学期

出纳业务及电子报税实训小结

实训小结为期一周的实训结束了。在老师的指导下,我们进行了出纳实务,电子报税和钱龙软件的实训。这是第一次接触到出纳银行业务和报税方面的实际操作。学会了银行汇票,商业承兑,信汇,电汇,贴现等出纳需要具体负责的银行业…

电子商务实验报告

徐州工程学院管理学院实验报告实验课程名称电子商务理论与实践实验地点20xx年3月至20xx年5月专业信息管理与信息系统班级学生姓名学号指导老师12345673提交之后提示注册成功用户可以直接登录开始悠闲快乐美妙...

电子商务概论实验报告

徐州工程学院管理学院实验报告实验课程名称电子商务概论实验地点南主楼7楼机房20xx年2月至20xx年月专业信息管理与信息系统班级09信管2班学生姓名钱伟鑫学号20xx1511236指导老师李琼123456789...

电子商务上机实验报告

电子商务上机实验一实验目的1了解电子商务的交易模式并掌握B2BB2CC2CC2B模式2了解中国电子商务发展现状二实验内容1B2B模式阿里巴巴网站生意宝环球资源网cn中国制造网中国商品网ccn2B2C模式卓越网当...

电子商务实战实验报告1

电子商务实战实验报告1,内容附图。

电子沙盘实训报告

天津交通职业学院实训报告实训课程运输企业电子模拟沙盘实训姓名学号班级指导老师日期电子沙盘实训报告在为期两周的时间里我们小组在名为ERP沙盘实训的科目中团队五人经过通力合作完成了这门实训课通过实训了解虚拟企业整个...

电力电子实验报告

电力电子技术实验报告题目锯齿波同步移相触发电路及单相半波可控整流班级姓名学号指导老师1单结晶体管触发电路及单相半波可控整流电路实验报告11实验内容1单结晶体管触发电路的调试2单结晶体管触发电路各点波形的观察3单...

电子商务上机实验报告 2

电子商务上机实验报告专业班级姓名学号指导教师王琼实验日期20xx10920xx1030实验地点院实验中心202机房一实验目的利用系统模拟扮演商务机构和个人角色更好地了解电子商务的B2BB2CC2C的交易流程把专...

电子工艺实习实验报告

电子工艺实习实验报告学院班别姓名学号指导老师地点目录一实验目的1二实验器材1三实验原理2四实验内容及步骤31焊接练习32理解原理43焊接元件44调试电路61中频调试62AM调试73FM调试85组装收音机86故障...

模拟电子线路实验报告

模拟电子线路实验报告实验一常用电子仪器的使用一实验目的1了解并掌握模拟电子技术实验箱的主要功能及使用方法2了解并掌握数字万用表的主要功能及使用方法3了解并掌握TDS1002型数字储存示波器和信号源的基本操作方法...

电子焊接实验报告

电子焊接实验报告学院电子与控制工程学院专业电气工程及其自动化班级学号姓名指导老师郭老师张老师实验成绩20xx年6月1实验名称电工电子焊接试验目录收音机部分3一学习内容及目的3二实习目的3三实习器材介绍4四实验原...

电子报税实验报告(7篇)