VFP课程设计

第1章 概述

1.1房屋租赁管理系统开发背景

21世纪,这个科学技术突飞猛进的时代。人与人之间的信息交流量急剧增加,传统的信息处理与决策手段已经不能适应社会的需要,信息的重要性和信息处理问题的紧迫性空前提高。21世纪也是一个房产发展迅速,房产信息繁杂的时代。对于房屋出租者来说,大量繁杂的房产,合同,租金信息难以通过传统方式来管理;对于租房者来说,大量的房产信息也使他们不知所措。房屋租赁管理系统正是针对此类问题开发的管理系统。

1.2房屋租赁管理系统的开发目标

房屋租赁管理系统通过计算机系统来管理房屋租赁情况,可以解决大量的房产信息的查询和管理,便于出租者更好的进行物业管理,同时也为租房者提供方便。使原本复杂的房产、租金、合同信息简单化。

1.3具体开发方法

房屋租赁管理系统是管理房屋出租、出售信息资料而设计的信息管理系统,包含有后台数据库和前台应用系统两部分。后台数据库要求数据的一致性和完整性、安全性、用以储存单位工程文档资料一级相关信息,前台应用程序要求应用程序功能完备、易于使用和界面友好等。

此次房屋租赁管理系统使用Microsoft Visual FoxPro 6.0进行编写。数据库系统的特点:数据的独立性、最小的数据冗余度、最多的共享性、数据的统一管理与集中管理。

第2章 系统设计

 2.1 系统功能设计

在本设计中,通过对房屋租赁信息的管理和数据流程分析,设计的数据项和数据结构如下:

房屋租赁基本信息的录入,包括房屋编号,价格、房屋面积、户型、地址、联系方式等信息。

(1) 房源基本信息的修改。

(2) 房源基本信息的删除。

(3) 房源基本信息的查询。

房屋租赁管理系统用户的基本信息的录入,包括用户编号、用户名、用户密码、用户类型。

(1) 用户基本信息的修改。

(2) 用户基本信息的删除。

(3) 用户基本信息的查询。

房屋租赁会员基本信息的录入,包括会员编号、会员姓名、会员卡号、会员电话、注册日期、会员积分、会员地址。

(1) 会员基本信息的修改。

(2) 会员基本信息的删除。

(3)会员基本信息的查询。

2.2数据库设计

2.2.1数据库需求

在本设计中,通过对房屋租赁信息的管理和数据流程分析,设计的数据项和数据结构如下:

在数据库中建立4张表:

房源信息表:房屋编号,价格、房屋面积、户型、地址、联系方式

用户表:用户编号、用户名、用户密码、用户类型。

会员表:会员编号、会员姓名、会员卡号、会员电话、注册日期、会员积分、会员地址。

房屋租赁:房源编号、会员编号、会员姓名、租贷日期、截止日期。

包括数据的录入、数据的修改、数据删除、数据检索。

将四张自由表加入到wyglxt数据库中。

2.2.2数据库逻辑结构设计

在上面的实体以及实体之间的关系的基础上,形成数据库的表格以及各个表格之间的关系。房屋租赁管理系统的设计与实践的各个表格的设计结果如下的几个表格所示。每个表格表示在数据库中的一个表。

1)“房源信息表”表的结构

2)“用户表”表的结构

3)“会员表”表的结构

4)“房屋租贷”表的结构

2.2.3数据库结构的实现

在需求分析、概念结构设计的基础上得到数据库的逻辑结构设计之后,我们就可以在Visual FoxPro60数据库系统中实现该逻辑。

首先打开Visual FoxPro60,建立项目wyglxt,在项目中新建数据库(如图2.1所示)

图2.1 建立数据库

表建立好后向表中输入信息(如图2.2所示)

图2.2 填写表中信息

建立相应约束和联系。

房源信息表:房屋编号(主索引)

用户表:用户编号(主索引)

会员表:会员编号(主索引)房屋租贷表:

房源代码(普通索引)、会员编号(普通索引)

我们先建立房源信息表和用户表之间的一对一联系,具体方法是在数据库设计器中用鼠标单击选中房源信息表中的主索引房源编号,然后按住鼠标左键,并拖动鼠标到用户表的用户编号索引上(鼠标箭头会变成小矩形形状),最后释放鼠标联系就建好了。用同样的方法可以建立用户表和房屋租赁之间的联系以及房屋租赁和会员表之间的联系。(如图2.3所示)

图2.3建立相应约束和联系

如果在建立联系时操作有误,随时可以通过编辑修改联系。方法是用鼠标右击要修改的联系,然后从弹出的菜单中选择“编辑关系”打开“编辑关系”对话框进行修改。

第3章 系统实现

3.1登录模块

输入用户名称和密码,如果用户名、密码正确,则允许进入主控制平台,如果输入错误则给出信息提示,重新输入。

图3.1 登陆模块代码设计

图3.2 登陆模块示意图

3.2会员管理模块

用户管理模块:系统管理员进行用户权限设置和用户的浏览,包括添加新会员以及对会员姓名和用户权限的更改,一般会员不能使用该项功能。

修改密码模块:任何会员都可以在登录系统后修改自己的的密码。(如图3.3所示)

图3.3 会员管理模块示意图

当会员用户输入用户id、旧密码、新密码和确认密码并按修改密码键后,检验其输入是否正确,若正确,就会显示“修改密码成功”字样并关闭表单;若用户id或旧密码不正确,则会显示“用户id或密码不对,请重新输入!”字样;若新密码和确认密码不一致,则会显示“新密码不一致,请重新输入!”字样。

要求将“修改密码”按钮设置为Default按钮。另外,密码限制为6位数,输入时显示星号(*)。

3.3合同管理模块

控件属性设计:

插入5个标签设置分别其caption属性为:房源编号、会员编号、会员姓名、租赁日期、截止日期

插入5个空白文本框设置分别其caption属性为:text1、text2、text3、text4、text5

插入2个命令按钮设置分别其caption属性为:保存、退出

代码设计:

保存的click语句:USE 住户表

a=alltrim(thisform.text1.value)

b=alltrim(thisform.text2.value)

c=alltrim(thisform.text3.value)

d=alltrim(thisform.text4.value)

e=alltrim(thisform.text5.value)

insert into房屋租贷表(房源编号、会员编号、会员姓名、租赁日期、截止日期)  values (a,b,c,d,e)

USE

退出的click语句:thisform.release

3.4 退出系统模块

退出系统

设置”退出”按钮的click代码, Thisform.release

第4章. 课程设计总结

为期三天的VFP课程设计很快就结束了,我们小组设计的“房屋租赁管理系统”也圆满完成。看着自己和小组组员们一起做好的系统能够良好运行,心里美滋滋的,整个过程中有很多苦与乐,我体验了,也真正享受到了这过程中给我带来的乐趣。

这里首先感谢老师这一个学期来的辛勤教导,让我了解并掌握了VFP这门编程语言,虽然我们的课程结束了,但是作为一名走向世界的大学生,我知道我们还需要继续更深入的学习。同是也很感谢我的小组组员们,我们会一起团结合作才能有这样的成果。

通过这次的课程设计,让我们队VFP课程掌握得更加熟练了,理解更加透彻了,我们的团结合作能力和责任心也得到了培养。总体来说,此次课程设计收获颇丰。谢谢老师,谢谢队友们!

 

 

 

参考文献

[1]《数据库技术及应用》

作者:李雁翎         出版社:高等教育出版社 2006.

[2]《Visual FoxPro及其应用系统开发》

作者:史济民 汤观全  出版社:清华大学出版社 2003.

[3]《Visual FoxPro 课程设计(第二版)》

作者:张跃平         出版社:清华大学出版社 2008.

[4]《数据库系统概论》

作者:萨师煊         出版社:高等教育出版社 2000.

 

第二篇:VFP程序设计基础

第三章 程序设计基础

一、知识点:

1、VFP命令的两种执行方式:交互方式和程序方式。

2、程序与程序文件

1)程序:完成某项指定的任务而须执行的命令序列。

2)程序文件:以文件的形式存储在磁盘上的命令序列。

3、结构化程序设计的三种基本结构.

1) 顺序结构:

简单的输入语句(如INPUT、ACCEPT、WAIT)。

赋值语句(=、STORE、REPLACE、SCATER、GATHER)。 简单的输出语句(?、??)。

辅助语句(CLEAR、SUSPEND、CONTINUE、CANCEL、NOTE | *、&&)。

环境设置语句(如:、SET TALK ON/OFF 等)

2) 选择结构(IF~ENDIF、IF~ELSE~ENDIF、DO CASE~ENDCASE)

3) 循环结构(DO WHILE~[loop]~[exit]~ENDDO、SCAN~ENDSCAN、FOR~ENDFOR)

4、多种结构嵌套的原则:只能包含,不能交叉。

5、子程序:相对与主程序而言的一个独立的程序文件,其建立方法与建立程序文件的法相同。子程序的调用与返回:

调用:DO<文件名>[WITH<参数列表>]

返回:RETURN[TO MASTER][<表达式>]

6、过程与过程文件

1) 过程:以PROCEDURE<过程名>开头,以ENDPROC结尾的子程序段。

2) 过程文件:由若干个过程或自定义函数组成,以文件形式保存在外存的.prg文件;使用时要打开该文件,然后选择其中的过程或函数调用,不用时要关闭。

3) 过程文件的打开:SET PROCEDURE TO <过程文件名>

4) 过程文件的关闭:SET PROCEDURE TO 或 CLOSE PROCEDURE

7、参数的传递及作用域

1)利用内存变量的属性传递参数

1

内存变量的属性小结

VFP程序设计基础

2)利用DO <文件名> WITH <参数表达式列表>传递参数

传递参数命令格式:DO <文件名> WITH <参数表达式列表> 接收参数命令格式:PARAMETER<变量列表> 参数传递与接收的规则:

(1) 接收参数的命令必须出现在被调用程序(子程序)中的第一行; (2) 当WITH <参数表达式列表>中是简单内存变量列表时,称为传址或

引用。这时,主调程序中的内存变量被隐含起来,其值随PARAMETER中对应变量的值的变化而变化;

(3) 当WITH <参数表达式列表>中是内存变量表达式列表或当个内存

变量用圆括号括起来(即为明表达式)时,称为传值。这时,主调程序中的内存变量不被隐含,其值也不随PARAMETER中对应变量的值的变化而变化;

(4) 对过程而言,传址或传值不受 SET UDFPARAMS TO

VALUE/CONFERENCE 的影响。因为它是针对自定义函数的。

8、自定义函数 1)定义

自定义函数可以是一个独立的命令文件(.PRG),也可以放在一个过程文件中。 2)建立

FUNCTION <自定义函数名>

[PARAMETER<形式参数列表>

2

[语句序列]

ENDFUNC

与过程不同的是必须用RETURN <表达式>返回一个值。

3)自定义函数的调用与参数传递

调用形式:自定义函数名([〈参数表达式列表〉])

参数传送:既可以用传值方式,也可以用引用方式。具体规则如下:

(1)如果变量在〈参数表达式列表〉中是以表达式的形式出现,那么是传值方式;

(2)如果变量在〈参数表达式列表〉中是以单变量的形式出现,那么取决于

SET UDFPARAMS TO VALUE/CONFERENCE 的设置(缺省为传值方式);

(3)无论SET UDFPARAMS TO 可以在单变量前冠以@,以强制传址。如:S(@A,B,C)

二、要点与难点

1、 INPUT、ACCEPT与WAIT这三个与输入有关的命令有何不同?

INPUT命令可接受数值型、字符型、日期型等数据类型的输入,在输入时应根据数据类型加相应的定界符。

ACCEPT命令只能接受字符串的输入,在输入时不必加定界符。

WAIT命令只能接受单字符的输入,常用于表示程序是否继续、是否中断或是否结束的语句。

2、 RETURN、RETRY、CANCEL和QUIT这四个命令有何不同?

RETURN命令:指的是返回到调用行的下一行。

RETRY命令:返回到调用行本身,可实现程序的重复调用。

CANCEL命令:中断、异常结束。并返回到系统命令窗口。

QUIT命令:返回到操作系统。

3、 SCATTER [FIELDS<字段名列表>] TO <数组名>

4、 GATHER FROM <数组名>

5、 常见的环境设置语句:

SET DEFAULT TO <文件路径>:将<文件路径>设置为系统缺省的路径。 SET CONSOLE ON/OFF:激活或废止从程序中向VFP主窗口或活动的用户自定义窗口的输出。

SET DELETE ON/OFF:决定是否忽略表中已做过删除标记的记录。 SET EXACT ON/OFF:决定字符串比较运算符“=”两边内容是否必须完全匹配,缺省是不必完全匹配。

3

SET TALK OFF/ON:关闭或打开系统交互对话显示方式。缺省为打开显示。

SET FILTER TO <条件>:指定访问当前表中记录时必须满足的条件。

6、 FOR I=X TO Y SCAN

语句系列 与 语句系列 有何不同?

ENDFOR ENDSCAN

前者主要处理普通内存变量循环有关的程序;后者主要处理表中满足条件的记录循环有关的程序。

7、 内存变量的属性有那几种?它们间有何不同?

参见上表。

8、 利用DO <文件名> WITH <参数表达式列表>传递参数与自定义函数中

的参数传送有何不同。

前者传递参数是在主程序与子程序之间进行调用和传递,可分为传值和引用两种方式:

引用:WITH后的<参数表达式列表>是内存变量列表时,每个内存变量的值传给PARAMETERS中对应变量,调用程序中的变量被隐藏。当被调用的程序中形参的值发生改变时,调用程序中的变量也跟着发生相应的变化。

传值:WITH后的<参数表达式列表>是内存变量表达式或用括号将单个变量括起来时,每个内存变量表达式的值传给PARAMETERS中对应变量,调用程序中的变量不被隐藏。当被调用的程序中形参的值发生改变时,调用程序中的变量不会跟着发生相应的变化。

后者是在函数内部实行变量间的参数传送,也有传值和引用两种方式。它调用方式为:自定义函数名 ([<参数表达式列表>])

若<参数表达式列表>中以表达式出现,则是以传值方式传送;若<参数表达式列表>中以内存变量的形式出现,则缺省采用传值方式,若要采用引用方式,需在参数变量前加@。

9、 程序设计中常用的函数有:

(1)数值函数

INT(X/Y)、MOD(X,Y)、X%Y、X-INT(X/Y)*Y

(2)字符串函数

SUBSTR(S,N1,N2)、LEN(S)

(3)日期与时间函数:

DATE()、DTOC(D)、YEAR(D)、MONTH(D)、DAY(D)、

DOW(D)、CDOW(D)。

(4)转换函数

UPPER(C)、LOWER(C)、CTOD(S)、DTOC(D)、ASC(C)、

CHR(N)、STR(N,N1,N2)、VAL(S)

4

(5)数据库函数:

FCOUNT()字段个数函数、FIELD()字段名函数、BOF()、

EOF()、DELETED()、RECCOUNT()、RECSIZE()、RECNO()、

(6)IIF(条件表达式,满足条件时所取的值、不满足条件时所取的值)

(7)测试函数:FOUND()测试是否找到相应的记录。

10、程序设计的常用算法:

总原则:变量必须采用“先定义后使用”的原则,程序语句必须有输入和输出语句;函数采用有“先入口后出口”的原则。条件或循环语句必须配套使用,即IF?ENDIF、FOR?ENDFOR。

1、 累加:通常采用下列步骤

(1) S=<初值>

(2) <循环开始>:此时需定义一个循环变量,一般采用I或J,

同时大多采用FOR??ENDFOR语句来完成。

(3) S=S+A

(4) <循环结束>

(5) <输出累加合计值>

2、累乘:通常采用下列步骤

(1)T=<初值>

(2)<循环开始>:此时需定义一个循环变量,一般采用I或J,同时大多采用FOR??ENDFOR语句来完成。

(3)T=T*A

(4)<循环结束>

(5)<输出累乘积值>

3、字符串的粘合:通常采用下列步骤

(1)S=””或S=SPACE(0)

(2)<循环开始>:此时需定义一个循环变量,一般采用I或J,同时大多采用FOR??ENDFOR语句来完成。

(3)S=S+A 或S=A+S

前者采用字符串的顺序粘合,后者采用字符串的倒序粘合。

(4)<循环结束>

(5)<输出字符串S>

4、自定义函数:通常采用下列步骤

(1)PARAMETER <形参数列表>

(2)程序语句

(3)RETURN <参数>:<参数>省略表示不带参数返回。

5

三、程序阅读题。阅读下列程序,写出运行结果。

1、 SET TALK OFF

M=3

DO WHILE M<10

N=2

DO WHILE N<M

IF INT(M/N)=M/N

EXIT

ENDIF

N=N+1

ENDDO

IF N=M

?M

ENDIF

M=M+1

ENDDO

SET TALK ON

2、 设N、P的输入值分别为6,3。注:字符”A”的ASCII码为65。SET TALK OFF

CLEAR

INPUT "N=" TO N

INPUT "P=" TO P

FOR I=1 TO N

?SPACE(N?I+1)

IF I<=P

FOR J=1 TO 2*I?1

??CHR(ASC("A")+J?1)

ENDFOR

ELSE

FOR J=1 TO (2*I?1)?(I?P)

??CHR(ASC("A")+J?1)

ENDFOR

ENDIF

ENDFOR

SET TALK ON

6

3、 注:字符”A”的ASCII码为65。

SET TALK OFF

CLEAR

C="一二三四五六七八九十"

B="ABCD"

R=0

L=LEN(B)

FOR I=1 TO L

W=SUBSTR(B,I,1)

D=ASC(W)+R-65

S=""

IF D<10

S=SUBSTR(C,2*D+1,2)

ELSE

S=SUBSTR(C,2*MOD(D,10)+1,2)

ENDIF

?W+"----->"+S

R=R+11

ENDFOR

SET TALK ON

4、 设M的值分别为:12345,205354,105075,123450

SET TALK OFF

S=0

DO WHILE .T.

CLEAR

INPUT "M=" TO M

N=M

DO WHILE .T.

R=N-INT(N/10)*10

IF R=0

S=S+1

ENDIF

N=INT(N/10)

IF N=0

EXIT

ENDIF

7

ENDDO

IF S>1

EXIT

ENDIF

ENDDO

?S

SET TALK ON

5、 SET TALK OFF

A="ABCDEFGHIJKLMNOPQRSTUVWXYZ" B=LEN(A)

X="X-"

Y="Y-"

I=1

DO WHILE I<=B

J=I

X=X+SUBSTR(A,I,1)

IF I/2=INT(I/2)

Y=Y+SUBSTR(A,I,1) I=I+1

LOOP

ENDIF

I=I+J

ENDDO

?X

?Y

6、 设M的值为:10

SET TALK ON

CLEAR

INPUT "M=" TO M

I=1

S=0

?

DO WHILE I<=M

IF ZS(I)

IF I*2<=M

?? STR(I*2,5)

8

S=S+1 ELSE EXIT ENDIF ENDIF I=I+1

ENDDO

?"S="+STR(S,3)

SET TALK ON

****ZS.PRG****

PARA X

J=2

DO WHILE J<X

IF INT(X/J)=X/J

EXIT

ENDIF

J=J+1

ENDDO

IF J=X

RETURN .T.

ELSE

RETURN .F.

ENDIF

7、 设N,M的值分别为6,8。

SET TALK OFF

CLEAR

INPUT "N=" TO N

INPUT "M=" TO M

X=MAX(N,M)

FOR I=X TO M*N

IF MOD(I,M)=0 AND MOD(I,N)=0

Y1=I

EXIT

ENDIF

ENDFOR

?"Y1="+ALLTRIM(STR(Y1,19))+",Y2="+ALLTRIM(STR(M*N/Y1,19)) 9

SET TALK ON

8、N值为4,字符”A”的ASCII码为65。

SET TALK OFF

CLEAR

INPUT "N=" TO N

FOR I=1 TO N

?SPACE(N?I+1)

FOR J=1 TO 2*I?1

??CHR(ASC("A")+J?1) ENDFOR

ENDFOR

FOR P=N-1 TO 1 STEP ?1

?SPACE(N-P+1)

FOR K=1 TO 2*P?1

??CHR(ASC("A")+K?1) ENDFOR

ENDFOR

SET TALK ON

9、 设A的值为:ABCDEF

SET TALK OFF

CLEAR

ACCEPT "A=" TO A

L=LEN(A)

P=SPACE(0)

I=1

DO WHILE I<L

P=P+SUBSTR(A,L?I,2) I=I+2

ENDDO

?A+"------>"+P

SET TALK ON

10

四、程序填空:

四、程序填空

说明:阅读下列程序说明和程序,将程序代码缺少的内容填入 中。

1、 已知某系统的口令PASSWORD(存在内存变量文件PASS.MEM中)含多个非空格字符,判断口令是否正确只需比较其长度及第3个到第6个字符是否完全相等,允许操作者录入三次(口令录入时要求关屏),如果口令正确正常返回,否则给出提示信息。

SET TALK OFF

CLEAR

TIME=1

DO WHILE TIME<=3

MPASS=SPACE(L)

ACCEPT “请输入口令:”

ACCEPT TO MPASS

SET CONSOLE ON

IF

EXIT

ENDIF

TIME=TIME+1

ENDDO

IF ?”口令错误!你无权使用本系统!”

ELSE

?”欢迎进入本系统!”

ENDIF

SET TALK ON

2、 完成下列删除表文件的程序:

SET TALK OFF

CLEAR

11

DO WHILE .T.

ACCEPT ”请输入要删除的表文件名(扩展名略):” TO FILENAME

FILENAME=TRIM(LTRIM(FILENAME))+”.DBF”

ACCEPT “该文件不存在!继续吗?(Y/N)” TO YN

IF =”N”

EXIT

ENDIF

ELSE

(3)

LIST

WAIT “是这个文件吗?(Y/N)” TO YN

IF LOWER(YN)=”y”

USE

(4)

EXIT

ELSE

WAIT ”继续吗?(Y/N)” TO YN

IF LOWER(Y/N)=”n”

USE

EXIT

ENDIF

ENDIF

ENDDO

SET TALK ON

3、 给定程序的功能是:根据输入的数据,判断给定的数是否偶数,可以循

环输入。

SET TALK OFF

CLEAR

YN="Y"

DO WHILE UPPER(YN)="Y"

请输入自然数:" TO N

IF

? "不是偶数!"

ELSE

12

? "是偶数!"

ENDIF

WAIT “是否还要输入其他自然数” TO YN

ENDDO

? "再见!"

SET TALK ON

RETURN

4、 给定程序的功能是:根据输入的数据,计算不大于该数的奇数累加和。

SET TALK OFF

CLEAR

YN="Y"

DO WHILE UPPER(YN)="Y"

INPUT "请输入两位以内的正整数:" TO N

STORE 0 TO X,Y

Z="0"

DO WHILE

X=X+1

IF

LOOP

ELSE

Z=Z+"+"+STR(X,2)

Y=Y+X

ENDIF

ENDDO

? "&Z="+STR(Y,4)

WAIT "继续计算?(Y/N)" TO

ENDDO

? "再见!"

SET TALK ON

5、 求表达式(M!+N!)/(M?N)!的值(注:M>N,计算结果输出宽度

10位,小数2位)。

*****MN.PRG*****

SET TALK OFF

CLEAR

SET

INPUT “M=” TO M

13

INPUT “N=” TO N

STORE 0 TO SM,SN

DO JC2 WITH M,SM &&计算M!

DO JC2 WITH N,SN &&计算N!

DO MC2 WITH

? “表达式结果为S=”SET PROC TO

SET TALK ON

PROC JC2

PARA X,Y

I=1

T=1

DO WHILE I<=X

T=T*I

I=I+1

ENDDO

RETURN

PROC MC2

I=1

T=1

DO WHILE I<=X

T=T*Y

I=I+1

ENDDO

X=T

RETURN

6、 下面程序可以形成一个主对角线上元素为?1,其它元素为0的6*6方

阵。

SET TLAK OFF

CLEAR

FOR I=1 TO 6

FOR J=1 TO 6

IF

A(I,J)=0

14

ELSE

ENDIF

ENDFOR

ENDFOR

SET TALK ON

7、 下列程序完成一个自定义函数,其功能为:对任意一个正数值型数据(该

数可有小数若干位,整数部分不超过12位)自动进行小数部分四舍五入取2位,并将其转换为中文大写金额,如10230.4567转换后为壹万零千贰佰叁拾零元肆角陆分。

*****ZH.PRG*****

PARA X

SET SET TALK OFF

Y= (2)

Y=Y?100

I=1

DO WHILE Y>0

P=MOD(Y,10)

D=S1(P)+S2(I)+D

I=I+1

ENDDO

RETURN D

PROC S1

PARA A

C1=”零壹贰叁肆伍陆柒捌玖”

RETURN SUBSTR(C1,2?A+1,2)

PROC S2

PARA B

C2=”分角元拾佰仟亿拾佰仟”

RETURN

8、 给定程序的功能是:在表STD.DBF中,按姓名查询记录。

SET TALK OFF

15

USE STD

CLEAR

DO WHILE ANS

CLEAR

ACCEPT "请输入姓名:" TO XM

IF .NOT.FOUND()

? "查无此人!"

ELSE

CLEAR

? "学号:",学号

? "姓名:",姓名

? "数学成绩:",数学

? "英语成绩:",英语

? "政治成绩:",政治

? "总分:",总分

ENDIF

WAIT "是否继续查询 (Y/N)" TO JX IF ANS=.F.

ENDIF

ENDDO

USE

SET TALK ON

9、 下面程序完成输出下列图形: 1

222

33333

4444444

555555555

4444444

33333

222

1 SET TALK OFF

CLEAR

N=5

16

P=2*N?1

FOR I=1 TO P

IF

?SPAC(N?I+1) FOR J=1 TO ??STR(I,1) ENDFOR ELSE

FOR K=1 TO 2*(2*N?I) ?1

??STR (4)

ENDFOR

ENDIF

ENDFOR

SET TALK ON

10、 下面程序完成从键盘输入20个数,去掉20个数中的最大值和最小值,

然后求平均值。

SET TALK OFF

CLEAR

S=0

N=1

DO WHILE N<=20

INPUT "B=" TO B

IF MAX<B

MAX=B

ENDIF

IF MIN>B

ENDIF

N=N+1

ENDDO

?"A

SET TALK ON

17

相关推荐