FoxPro For Windows http://cc.synu.edu.cn 1
FoxPro程序设计
第 8讲 菜单设计及屏幕格式
FoxPro For Windows http://cc.synu.edu.cn 2
FoxPro程序设计
学生管理系统程序 数据录入 数据维护
按学号查询 按姓名查询 按组合条件查询
数据查询 打印报表
学生管理系统
主程序
子程序
子程序
子程序
管理信息系统( MIS),主控程序和功能模块(子程序)组成。
主控程序:由菜单程序完成。 功能:控制程序流程。
FoxPro For Windows http://cc.synu.edu.cn 3
FoxPro程序设计【 例 1】 利用非格式输出命令设计菜单程序
开菜单
点菜 (选单 )
上菜 (模块调用 )
clear? " ------- 主菜单 ------- "
" 1.数据输入 2.数据维护 "? " 3.数据统计 4.报表打印 "
, 5.数据查询 6.退出系统 "
wait " 请选择功能号," to xz
do casecase xz="1"
do srcase xz="2"
do whcase xz="3"
………..
case xz="6" clear
exitendc
do whil,t.
endd
set talk off
set talk onretu
菜单设计三步曲:
简单、但不美观,如何在指定位置显示?
FoxPro For Windows http://cc.synu.edu.cn 4
FoxPro程序设计
【 例 2】
xz=space(1)
Clear
@ 7,20 say "-----------主菜单 ---------"
@ 8,18 say " 1.数据输入 2.数据维护 "
@ 9,18 say " 3.数据统计 4.报表打印 "
@ 10,18 say " 5.数据查询 6.退回系统 "
@ 12,15 say " 请选择功能号," get xz
read
开菜单 — 利用格式输出命令设计
set color to +w/rb
@ 6,11 clear to 13,60
set colo to
retu SET COLOR TO [<标准 >[,<增强 >[,<边框 >]]] ? 颜色对 [前景 /背景 ],w+/n*,+为高亮度(前景),*为闪烁(背景)
color 黑 蓝 棕 深蓝 绿 品红 红 白 黄
Color code N B GR BG G RB R W GR+
【 例 】 SET COLOR TO R+/GR,W+/B* &&输出黄底红字,输入蓝底白字,
FoxPro For Windows http://cc.synu.edu.cn 5
FoxPro程序设计
【 例 3】
clear
set color to +w/rb
text
*** 主菜单 ***
1.数据输入 2.数据维护
3.数据统计 4.报表打印
5.数据查询 6.退回系统
endtext
input " 请选择功能号," to xz
小结,传统式菜单
a.利用非格式输出命令?
b.利用格式输出命令 @……SAY
c.利用正文输出命令
开菜单 — 利用文本输出命令设计
FoxPro For Windows http://cc.synu.edu.cn 6
FoxPro程序设计
【 例 】
clear
@ 3,8,10,60 box
@ 4,30 say "主菜单 "
@ 5,28 say repl("+",10)
@ 6,18 prompt“1.数据输入”
@ 6,38 prompt"2.数据维护 "
@ 7,18 prompt“3.数据统计”
@ 7,38 prompt"4.报表打印 "
@ 8,18 prompt"5.数据查询 "
@ 8,38 prompt"6.退回系统 "
menu to xz
开菜单 — 光带式菜单
由一组菜单棒组成菜单,当前项由光带显示。
@ <行坐标 >,<列坐标 > prompt <字符表达式 > *初始化菜单中各选择项
menu to <内存变量 > 将选择序号送入内存变量,序号为书写 prompt的顺序号 。
选择方法,1)移动光带,回车或空格键选择; 2)输入序号 (书写 prompt的顺序 )选择。
FoxPro For Windows http://cc.synu.edu.cn 7
FoxPro程序设计
其他类型菜单
下拉式菜单
级联菜单
菜
单
生
成
器
生
成
FoxPro For Windows http://cc.synu.edu.cn 8
FoxPro程序设计
wait ?请选择功能号,’ to xz
inpu ? 请选择功能号,’ to xz
acce,请选择功能号,” to xz
点 菜 (选单选择 )—
xz=0
@ 8,10 say '请输入选择号,(1-4)' get xz
read
menu to xz &&prompt
FoxPro For Windows http://cc.synu.edu.cn 9
FoxPro程序设计
do case
case xz=1
do xg
case xz=2
do cx
……
endc
上 菜 (功能模块调用 )— 利用多分支语句实现
wait ?请选择功能号,’ to xz
inpu ? 请选择功能号,’ to xz
acce,请选择功能号,” to xz
xz=0
@ 8,10 say '请输入选择号,(1-4)' get xz
readmenu to xz
Xz=?
cxxg
1 2
模块调用 流程图
FoxPro For Windows http://cc.synu.edu.cn 10
FoxPro程序设计
1、返回原选单
DO WHIL <条件 >
ENDD
调用结束返回 —
选单显示(开菜单)
选单选择(点菜)
功能模块调用(上菜)
菜单
Xz=?
cxxg1 2
Do whil
退出
主控程序流程图
FoxPro For Windows http://cc.synu.edu.cn 11
FoxPro程序设计
Do whil,t.………..
do casecase xz="1"
do srcase xz="2"
do whcase xz="3"
………..
case xz="6" clear
exitendc
endd
2、退出循环方法 假设菜单选项 "6.退回系统 "
do whil,t,
选单显示
menu to xz
if xz=6
exit
endi
功能模块调用
endd
xz=1
do whil xz<>6
选单显示
menu to xz
功能模块调用
endd
FoxPro For Windows http://cc.synu.edu.cn 12
FoxPro程序设计
【 例 1】 完善程序
SET TALK OFF
DO WHILE,T.
CLEAR
@ 1,16 PROMPT "1,输入 "
@ 2,16 PROMPT "2,修改 "
@ 3,16 PROMPT "3,打印 "
@ 4,16 PROMPT,4,退出,
①
DO CASE
CASE xz=1
DO a1 &&输入
CASE xz=2
DO a2 &&修改
CASE xz=3
DO a3 &&打印
CASE xz=4
②
ENDCASE
ENDDO
① MENU TO xz
② EXIT
FoxPro For Windows http://cc.synu.edu.cn 13
FoxPro程序设计
【 例 2】 完善程序
SET TALK OFF
DO WHILE,T.
@ 4,12 SAY "系统主菜单 "
@ 5,10 SAY "1,数据录入 "
@ 6,10 SAY "2,数据查询 "
@ 7,10 SAY "0,退出系统 "
____________
@ 10,5 SAY "请输入选择号,(0-2)" GET choice
READ
DO CASE
CASE choice='1'
DO sjlr
CASE choice='2'
DO sjcx
CASE choice='0'
EXIT
ENDCASE
ENDDO
SET TALK ON
Store space(1) to choice
或,Choice=‘ ‘
错,Choice=1
FoxPro For Windows http://cc.synu.edu.cn 14
FoxPro程序设计
【 例 3】 程序改错
SET TALK OFF
DO WHILE,T.
TEXT
系统主菜单
1 数 据 录 入
2 数 据 查 询
0 退 出 系 统
ENDTEXT
ACCEPT "请输入选择号,(0-2) " TO k
DO CASE
CASE k=1
DO sjlr
CASE k=2
DO sjcx
CASE k=3
DO xgjl
CASE k=0
EXIT
ENDCASE
ENDDO
SET TALK ON
错误,ACCEPT "请输入选择号,(0-2) " TO k
正确,INPUT "请输入选择号,(0-2) " TO k
FoxPro For Windows http://cc.synu.edu.cn 15
FoxPro程序设计
格式文件的建立与修改
MODIFY COMMAND <filename>.FMT
? 必须写文件的扩展名,FMT,否则将建成命令文件。
屏幕格式文件
【 例 6.8】 向数据库 student.dbf中追加记录的子程序。
SET TALK OFF
USE student
DO WHILE,T.
APPE BLANK
CLEAR
READ
P=,”
@8,10 SAY '是否继续录入?( Y/N) ' GET P
READ
IF UPPER(P)='Y'
LOOP
ENDIF
EXIT
ENDDO
USE
RETURN
@4,10 SAY "学号," GET sno
@4,30 SAY "姓名," GET name
@5,10 SAY "性别," GET sex
@5,30 SAY "出生日期," GET birthday
@6,10 SAY "成绩," GET score
@6,30 SAY "奖学金," GET schoship
@7,10 SAY "简历," GET experience
FoxPro For Windows http://cc.synu.edu.cn 16
FoxPro程序设计
【 例 】 将下面的一组格式输入命令写成格式文件。
MODIFY COMMAND GS.FMT
**格式文件 gs.fmt
@4,10 SAY "学号," GET sno
@4,30 SAY "姓名," GET name
@5,10 SAY "性别," GET sex
@5,30 SAY "出生日期," GET birthday
@6,10 SAY "成绩," GET score
@6,30 SAY "奖学金," GET schoship
@7,10 SAY "简历," GET experience
提示:
1、屏幕格式文件中只允许含有 @命令和 READ命令
2、使用前,先打开:
SET FORMAT TO <filename>[.FMT]
3、使用后,应关闭:
SET FORMAT TO 或 CLOSE FORMAT
4,打开后,并不马上执行,必须用 READ,APPEND、
INSERT,EDIT和 CHANGE等命令激活格式文件。
FoxPro For Windows http://cc.synu.edu.cn 17
FoxPro程序设计
【 例 6.8】 利用格式文件向数据库 student.dbf中追加记录的子程序。
*追加记录子程序 ZJ.PRG
SET TALK OFF
USE student
DO WHILE,T.
APPE BLANK
CLEAR
SET FORMAT TO gs
READ
SET FORMAT TO
P=,”
@8,10 SAY '是否继续录入?( Y/N) ' GET P
READ
IF UPPER(P)='Y'
LOOP
ENDIF
EXIT
ENDDO
USE
RETURN
*格式文件 gs.fmt
@4,10 SAY "学号," GET sno
@4,30 SAY "姓名," GET name
@5,10 SAY "性别," GET sex
@5,30 SAY "出生日期," GET birthday
@6,10 SAY "成绩," GET score
@6,30 SAY "奖学金," GET schoship
@7,10 SAY "简历," GET experience
FoxPro For Windows http://cc.synu.edu.cn 18
FoxPro程序设计
【 例 】 利用格式文件设计按学号修改记录子程序。
SET TALK OFF
USE student
DO WHILE,T.
ACCE ?请输入学号’ TO xh
LOCA FOR SNO=xh
CLEAR
SET FORMAT TO gs
READ
SET FORMAT TO
P=,”
@8,10 SAY ?是否继续修改?( Y/N) ' GET P
READ
IF UPPER(P)='Y'
LOOP
ENDIF
EXIT
ENDDO
USE
RETURN
*格式文件 gs.fmt
@4,10 SAY "学号," GET sno
@4,30 SAY "姓名," GET name
@5,10 SAY "性别," GET sex
@5,30 SAY "出生日期," GET birthday
@6,10 SAY "成绩," GET score
@6,30 SAY "奖学金," GET schoship
@7,10 SAY "简历," GET experience
提示:如果多处用到同一输出、输入格式,请将其命令
组成一个单独的扩展名为,FMT的格式文件,需要时将该
格式文件打开即可使用。
FoxPro For Windows http://cc.synu.edu.cn 19
FoxPro程序设计
作业
? 为你的管理系统设计一个主控程序
? 实验篇实验
? 测试篇习题
? 5月 10日前交综合实验报告
NBA赛事管理
求学超市库存管理
通讯录管理
团委活动管理
班级理财管理
图书资料管理
毕业生分配流向管理
招生情况管理
……
FoxPro程序设计
第 8讲 菜单设计及屏幕格式
FoxPro For Windows http://cc.synu.edu.cn 2
FoxPro程序设计
学生管理系统程序 数据录入 数据维护
按学号查询 按姓名查询 按组合条件查询
数据查询 打印报表
学生管理系统
主程序
子程序
子程序
子程序
管理信息系统( MIS),主控程序和功能模块(子程序)组成。
主控程序:由菜单程序完成。 功能:控制程序流程。
FoxPro For Windows http://cc.synu.edu.cn 3
FoxPro程序设计【 例 1】 利用非格式输出命令设计菜单程序
开菜单
点菜 (选单 )
上菜 (模块调用 )
clear? " ------- 主菜单 ------- "
" 1.数据输入 2.数据维护 "? " 3.数据统计 4.报表打印 "
, 5.数据查询 6.退出系统 "
wait " 请选择功能号," to xz
do casecase xz="1"
do srcase xz="2"
do whcase xz="3"
………..
case xz="6" clear
exitendc
do whil,t.
endd
set talk off
set talk onretu
菜单设计三步曲:
简单、但不美观,如何在指定位置显示?
FoxPro For Windows http://cc.synu.edu.cn 4
FoxPro程序设计
【 例 2】
xz=space(1)
Clear
@ 7,20 say "-----------主菜单 ---------"
@ 8,18 say " 1.数据输入 2.数据维护 "
@ 9,18 say " 3.数据统计 4.报表打印 "
@ 10,18 say " 5.数据查询 6.退回系统 "
@ 12,15 say " 请选择功能号," get xz
read
开菜单 — 利用格式输出命令设计
set color to +w/rb
@ 6,11 clear to 13,60
set colo to
retu SET COLOR TO [<标准 >[,<增强 >[,<边框 >]]] ? 颜色对 [前景 /背景 ],w+/n*,+为高亮度(前景),*为闪烁(背景)
color 黑 蓝 棕 深蓝 绿 品红 红 白 黄
Color code N B GR BG G RB R W GR+
【 例 】 SET COLOR TO R+/GR,W+/B* &&输出黄底红字,输入蓝底白字,
FoxPro For Windows http://cc.synu.edu.cn 5
FoxPro程序设计
【 例 3】
clear
set color to +w/rb
text
*** 主菜单 ***
1.数据输入 2.数据维护
3.数据统计 4.报表打印
5.数据查询 6.退回系统
endtext
input " 请选择功能号," to xz
小结,传统式菜单
a.利用非格式输出命令?
b.利用格式输出命令 @……SAY
c.利用正文输出命令
开菜单 — 利用文本输出命令设计
FoxPro For Windows http://cc.synu.edu.cn 6
FoxPro程序设计
【 例 】
clear
@ 3,8,10,60 box
@ 4,30 say "主菜单 "
@ 5,28 say repl("+",10)
@ 6,18 prompt“1.数据输入”
@ 6,38 prompt"2.数据维护 "
@ 7,18 prompt“3.数据统计”
@ 7,38 prompt"4.报表打印 "
@ 8,18 prompt"5.数据查询 "
@ 8,38 prompt"6.退回系统 "
menu to xz
开菜单 — 光带式菜单
由一组菜单棒组成菜单,当前项由光带显示。
@ <行坐标 >,<列坐标 > prompt <字符表达式 > *初始化菜单中各选择项
menu to <内存变量 > 将选择序号送入内存变量,序号为书写 prompt的顺序号 。
选择方法,1)移动光带,回车或空格键选择; 2)输入序号 (书写 prompt的顺序 )选择。
FoxPro For Windows http://cc.synu.edu.cn 7
FoxPro程序设计
其他类型菜单
下拉式菜单
级联菜单
菜
单
生
成
器
生
成
FoxPro For Windows http://cc.synu.edu.cn 8
FoxPro程序设计
wait ?请选择功能号,’ to xz
inpu ? 请选择功能号,’ to xz
acce,请选择功能号,” to xz
点 菜 (选单选择 )—
xz=0
@ 8,10 say '请输入选择号,(1-4)' get xz
read
menu to xz &&prompt
FoxPro For Windows http://cc.synu.edu.cn 9
FoxPro程序设计
do case
case xz=1
do xg
case xz=2
do cx
……
endc
上 菜 (功能模块调用 )— 利用多分支语句实现
wait ?请选择功能号,’ to xz
inpu ? 请选择功能号,’ to xz
acce,请选择功能号,” to xz
xz=0
@ 8,10 say '请输入选择号,(1-4)' get xz
readmenu to xz
Xz=?
cxxg
1 2
模块调用 流程图
FoxPro For Windows http://cc.synu.edu.cn 10
FoxPro程序设计
1、返回原选单
DO WHIL <条件 >
ENDD
调用结束返回 —
选单显示(开菜单)
选单选择(点菜)
功能模块调用(上菜)
菜单
Xz=?
cxxg1 2
Do whil
退出
主控程序流程图
FoxPro For Windows http://cc.synu.edu.cn 11
FoxPro程序设计
Do whil,t.………..
do casecase xz="1"
do srcase xz="2"
do whcase xz="3"
………..
case xz="6" clear
exitendc
endd
2、退出循环方法 假设菜单选项 "6.退回系统 "
do whil,t,
选单显示
menu to xz
if xz=6
exit
endi
功能模块调用
endd
xz=1
do whil xz<>6
选单显示
menu to xz
功能模块调用
endd
FoxPro For Windows http://cc.synu.edu.cn 12
FoxPro程序设计
【 例 1】 完善程序
SET TALK OFF
DO WHILE,T.
CLEAR
@ 1,16 PROMPT "1,输入 "
@ 2,16 PROMPT "2,修改 "
@ 3,16 PROMPT "3,打印 "
@ 4,16 PROMPT,4,退出,
①
DO CASE
CASE xz=1
DO a1 &&输入
CASE xz=2
DO a2 &&修改
CASE xz=3
DO a3 &&打印
CASE xz=4
②
ENDCASE
ENDDO
① MENU TO xz
② EXIT
FoxPro For Windows http://cc.synu.edu.cn 13
FoxPro程序设计
【 例 2】 完善程序
SET TALK OFF
DO WHILE,T.
@ 4,12 SAY "系统主菜单 "
@ 5,10 SAY "1,数据录入 "
@ 6,10 SAY "2,数据查询 "
@ 7,10 SAY "0,退出系统 "
____________
@ 10,5 SAY "请输入选择号,(0-2)" GET choice
READ
DO CASE
CASE choice='1'
DO sjlr
CASE choice='2'
DO sjcx
CASE choice='0'
EXIT
ENDCASE
ENDDO
SET TALK ON
Store space(1) to choice
或,Choice=‘ ‘
错,Choice=1
FoxPro For Windows http://cc.synu.edu.cn 14
FoxPro程序设计
【 例 3】 程序改错
SET TALK OFF
DO WHILE,T.
TEXT
系统主菜单
1 数 据 录 入
2 数 据 查 询
0 退 出 系 统
ENDTEXT
ACCEPT "请输入选择号,(0-2) " TO k
DO CASE
CASE k=1
DO sjlr
CASE k=2
DO sjcx
CASE k=3
DO xgjl
CASE k=0
EXIT
ENDCASE
ENDDO
SET TALK ON
错误,ACCEPT "请输入选择号,(0-2) " TO k
正确,INPUT "请输入选择号,(0-2) " TO k
FoxPro For Windows http://cc.synu.edu.cn 15
FoxPro程序设计
格式文件的建立与修改
MODIFY COMMAND <filename>.FMT
? 必须写文件的扩展名,FMT,否则将建成命令文件。
屏幕格式文件
【 例 6.8】 向数据库 student.dbf中追加记录的子程序。
SET TALK OFF
USE student
DO WHILE,T.
APPE BLANK
CLEAR
READ
P=,”
@8,10 SAY '是否继续录入?( Y/N) ' GET P
READ
IF UPPER(P)='Y'
LOOP
ENDIF
EXIT
ENDDO
USE
RETURN
@4,10 SAY "学号," GET sno
@4,30 SAY "姓名," GET name
@5,10 SAY "性别," GET sex
@5,30 SAY "出生日期," GET birthday
@6,10 SAY "成绩," GET score
@6,30 SAY "奖学金," GET schoship
@7,10 SAY "简历," GET experience
FoxPro For Windows http://cc.synu.edu.cn 16
FoxPro程序设计
【 例 】 将下面的一组格式输入命令写成格式文件。
MODIFY COMMAND GS.FMT
**格式文件 gs.fmt
@4,10 SAY "学号," GET sno
@4,30 SAY "姓名," GET name
@5,10 SAY "性别," GET sex
@5,30 SAY "出生日期," GET birthday
@6,10 SAY "成绩," GET score
@6,30 SAY "奖学金," GET schoship
@7,10 SAY "简历," GET experience
提示:
1、屏幕格式文件中只允许含有 @命令和 READ命令
2、使用前,先打开:
SET FORMAT TO <filename>[.FMT]
3、使用后,应关闭:
SET FORMAT TO 或 CLOSE FORMAT
4,打开后,并不马上执行,必须用 READ,APPEND、
INSERT,EDIT和 CHANGE等命令激活格式文件。
FoxPro For Windows http://cc.synu.edu.cn 17
FoxPro程序设计
【 例 6.8】 利用格式文件向数据库 student.dbf中追加记录的子程序。
*追加记录子程序 ZJ.PRG
SET TALK OFF
USE student
DO WHILE,T.
APPE BLANK
CLEAR
SET FORMAT TO gs
READ
SET FORMAT TO
P=,”
@8,10 SAY '是否继续录入?( Y/N) ' GET P
READ
IF UPPER(P)='Y'
LOOP
ENDIF
EXIT
ENDDO
USE
RETURN
*格式文件 gs.fmt
@4,10 SAY "学号," GET sno
@4,30 SAY "姓名," GET name
@5,10 SAY "性别," GET sex
@5,30 SAY "出生日期," GET birthday
@6,10 SAY "成绩," GET score
@6,30 SAY "奖学金," GET schoship
@7,10 SAY "简历," GET experience
FoxPro For Windows http://cc.synu.edu.cn 18
FoxPro程序设计
【 例 】 利用格式文件设计按学号修改记录子程序。
SET TALK OFF
USE student
DO WHILE,T.
ACCE ?请输入学号’ TO xh
LOCA FOR SNO=xh
CLEAR
SET FORMAT TO gs
READ
SET FORMAT TO
P=,”
@8,10 SAY ?是否继续修改?( Y/N) ' GET P
READ
IF UPPER(P)='Y'
LOOP
ENDIF
EXIT
ENDDO
USE
RETURN
*格式文件 gs.fmt
@4,10 SAY "学号," GET sno
@4,30 SAY "姓名," GET name
@5,10 SAY "性别," GET sex
@5,30 SAY "出生日期," GET birthday
@6,10 SAY "成绩," GET score
@6,30 SAY "奖学金," GET schoship
@7,10 SAY "简历," GET experience
提示:如果多处用到同一输出、输入格式,请将其命令
组成一个单独的扩展名为,FMT的格式文件,需要时将该
格式文件打开即可使用。
FoxPro For Windows http://cc.synu.edu.cn 19
FoxPro程序设计
作业
? 为你的管理系统设计一个主控程序
? 实验篇实验
? 测试篇习题
? 5月 10日前交综合实验报告
NBA赛事管理
求学超市库存管理
通讯录管理
团委活动管理
班级理财管理
图书资料管理
毕业生分配流向管理
招生情况管理
……