实验五VisualFoxpro编程实践.docx
- 文档编号:14879797
- 上传时间:2023-06-28
- 格式:DOCX
- 页数:34
- 大小:507.07KB
实验五VisualFoxpro编程实践.docx
《实验五VisualFoxpro编程实践.docx》由会员分享,可在线阅读,更多相关《实验五VisualFoxpro编程实践.docx(34页珍藏版)》请在冰点文库上搜索。
实验五VisualFoxpro编程实践
实验五VisualFoxpro编程实践
实验目的与要求
掌握利用VisualFoxpro编制开发自己的应用程序的实践知识,并学会在程序调试中自行发现问题和修改程序代码,最终完成应用程序的无错运行。
二.相关知识
利用VisualFoxpro自行开发编制应用程序的步骤:
1.设置好系统的工作环境(尤其注意工作目录的默认设置)。
2.如果是初次进行,应当先建立一个项目,为该项目命名,激活项目管理器。
如果是接着上次的工作进行,则打开上次工作的本项目,同样也激活项目管理器。
库,并命名(如已创建,则
3•在项目管理器的"数据"T"数据库"下面创建一个娄
跳过本步骤)。
并输入少星的正确数据以便将来的运行调试(如果已经创建了数据表,贝I」跳过本步骤)。
5•在项目管理器的"文档"下面创建该应用程序所用到的所有表单,设计好各表单的界面并为表单里的控件填写程序代码•(注意为表单添加各自的数据坏境,否则会岀错!
)6■试运行各表单,发现问题后重新修改有问题的表单的代码■反复调试和修改直至最
后能无错运行。
7.将应用程序打包发布或制作成安装文件。
三.实验内容与步骤
本次实验以一个简单的学生成绩管理系统为例。
首先,对该系统作一个简单的介绍:
该应用系统为完成学生信息和成绩的管理系统f主要有以下几个应用模块:
(1)用户登录管理:
系统具有管理员功能,只有取得管理员权限的人才能使用本系统。
(2)数据添加功能:
对学生基本信息、教师基本信息、班级信息、课程信息、学生成
绩信息逬行添加录入。
(3)数据查询功能:
对上述信息的基本查询。
(4)数据修改功能:
对上述信息可进行修改工作。
(5)统计操作:
可分别按个人成绩、单科成绩统计出最高成绩、最{碱绩和平均成绩
(6)
打印功能:
对上述信息可进行打EH。
1.数据库设计:
首先设置好系统的运行环境和工作目录,然后建立项目,为项目命名为〃学生成绩管理系统〃,激活项目管理器,并在在项目管理器的〃数据〃T"数据库〃下面创建一个数据库,命名为〃学生成绩管理",在〃数据库〃的〃表〃下面创建以下各数据表:
(1)用户信息表user(表名命名为user即可f不要加汉字。
以下同。
)
字段名称
类型
用户名
宇符型
10
密码
宇符型
10
⑵学生信息表student
字段名称
类型
学号
宇符型
8
姓名
宇符型
10
性别
宇符型
2
班级编号
宇符型
6
抿
9
iS
寸
1
1
(nl/
①s」no。
浪碗ewB(s)
抿
9
寸
O
CN
CN
寸
揪
S
S
1
1
1
a|p
卅
爭
电e
f
础粼
SQSSep(寸)
抿
寸
OtH
CN
O▼—1
O▼—<
00
制揪
昭伸
1伸
昭伸
1伸
g伸
础Stn
如
S*
睫S?
I-1
M
□J
」Qlpegg
00
础Sm
教师代码
宇符型
4
创建好以上i
⑹分数信息表score
字段名称
类型
学号
宇符型
8
课程代码
宇符型
6
成绩
数鯉
4
表以后,应该向每个表中添加适量合法数据以便后面的测试。
2•表单设计
2.X登录模块
功能描述:
实现只有指走的用户才能访问系统的功能。
并且,只有身份为"管理员"的用户才可以调用修改模块修改数据。
界面设计:
表单名称:
login
文件名:
login.scx
数据环境:
user.dbf
对象设置:
对象
属性
值
说
明
Forml
Caption
欢迎使用学生成绩管理
系统
Lablel
Caption
学生成绩管理系统
Lable2
Caption
请输入用户名:
Lable3
Caption
请输入密码:
Combol
RowSourceTy
6-字段
指走数据值来源类型
Pe
RowSource
User.用户名
指走数据值来源
Cammand
Caption
登录
1
Cammand
Caption
退出
2
函数与方法声明:
(1)Commandl中的Click事件
功能:
完成在登录时对输入的用户名和密码的检验,如果数据表user中存在输入的
用户名和密码信息,则调用主窗口(如果是管理员则不但调用主窗口,还允许执行主窗口的修改功能),否则提示输入错误。
程序清单:
privatekl,yh,st
stJ密码不正确,请重新输入r
useuser
kl=alltrim(thisform.textl.value)
yh=alltrim(bol.value)
*将用户输入的用户名和密码的值分别保存在yh和kl变呈中
locateforalltrim(bol.value)==alltrim(user.用户名)
★在user表中查找是否有与yh和kl匹配的记录
iffound()andalltrim(user.密码)==kl
*正确的用户名和密码
thisform.visible二・f.
closetablesall
doformmain.sex
ifyh=='admin,
★如果是超级用户管理员,则允许他使用main表单中的第三组按钮(即修改模块)
main.optiongroupl.option3.enabled二・t・
endif
this.parent.textl.value="
else
★错误的用户名和密码,系统给出提示,延迟2秒
waitwindowsttimeout2
thisform.textl.value="
thisform.textl.setfocus
endif
⑵Command2中的Click事件
功能:
退出学生成纟责管理系统
程序清单:
clearevents
quit
(3)Forml的Destroy事件
功能:
意外关闭程序窗口时的处理
程序清单:
clearevents
2.2主界面模块
功能描述:
主要是提供本系统各功能模块的入口.
界面设计:
表单名称:
main文件名:
main.scx
数据环境:
无
对象设置:
对象
属性
值
Forml
Caption
学生成纟责管理系统
Lablel
Caption
欢迎使用学生成纟责管理系统
Lable2
Caption
请选择要操作的内容:
Optiongroupl
ButtonCount
6
Optiongroupl.Opti
onl
Caption
添加记录
Optiongroupl.Opti
on2
Caption
查询记录
Optiongroupl.Opti
on3
Caption
修改记录
Optiongroupl.Opti
on3
Enabled
.F.
Optiongroupl.Opti
on4
Caption
统计数据
Optiongroupl.Opti
on5
Caption
打E卩报表
Optiongroupl.Opti
Caption
退出系统
on6
函数与方法声明:
(1)Optiongroupl中的IntelactiveChange事件:
功能:
根据Optiongroupl中的选择单击按钮,调用各重要功能模块.
程序清单:
docase
casethis.value=l
doform添加
casethis.value=2
doform查询
casethis.value=3
doform修改
casethis.value=4
doform统计
casethis.value=5
doform打E卩
casethis.value=6
thisform.release
quit
endcase
⑵Optiongroupl中的每一个Option的Click事件:
功能:
与⑴中不同,⑴是指在Optiongroup中的各个Option切换时才触发的程序,仅这样还不够,还要编写每个Option被单击时触发的程序才完整。
程序清单:
对应Optiongroupl.Optionl的Click事件:
doform添加
……(具余类推)
2.3数据添加模块
功能描述:
用户通过5个不同的页面来完成对学生信息表、教师信息表、班级表、
课程表和成绩表的数据添加操作。
界面设计:
表单名称:
添加
文件名:
添加.sex
数据环境:
student.dbf,class.dbffscore.dbf#teacher.dbffcourse.dbf
对象设置:
对象
属性
值
说明
Forml
Caption
添加
PageFrame
1
PageCount
5
Commandl
Caption
返回主菜单
主表单中的
Commandl
Pagel
Caption
学生表
Page2
Caption
教师表
Page3
Caption
班级表
Page4
Caption
课程表
Page5
Caption
成绩表
Commandl
Caption
添加
与上面的Commandl
Command2
Caption
清空
不同,这是在各个页面
中的Commandl
函数与方法声明:
因为添加表单中对于5个表的操作方法类似,所以这里只给出学生表的添加部分,具余4个页面的程序请同学们自己对照思考和编制。
(1)Forml中的Active事件
功能:
设置焦点位置
程序清单:
this.pageframel.pagel.textl.setfocus
⑵Forml中的Commandl的Click事件
功能:
释放当前窗口程序清单:
ihisfomre-ease
sPagel-frcommandl§an-k删弃91黑:
前鄭>s器别丽如豹莒世哥廿训甘、沏臺C1J别S孰莒ti-TTrnumlHa--=im(thisfompageframel・pagel・textl・va-ue)num2Ha--=im(thisfompageframel・pagellext2・va-ue)num3Ha--=im(thisfompageframel・pagel・text3・va-ue)num4Ha--=im(thisfompageframel・pagel・text4・va-ue)num5Ha--=im(thisfompageframel・pagel・texi5・va-ue)setexacton
casenumlH二messagebox(收血弓豔涉册_'0+48.-ifihisfompagef「amel・pagel・iextl・setfocus
casenum2=二messagebox(一潯朮斜豔涉H)}_'0+48.-ifthisform・pageframel・pagel・text2・setfocus
casenum3==二messagebox(-s^->l黑涉册_'0+48、沥法満『-)
ihisform・pageframel・pagel・iexi3・setfocus
casenum4H二messagebox(匡萍鄭聊巧瑟迸朋-・0+48、
thisform・pageframel・pagel・text4・setfocus
casenum5H二
messagebox(FEwBs^^甘册-、0+48、骊浴満911-)thisform・pageframel・pagel・text5・setfocusotherwisea"messagebox(一郵y孰莒卜*、1+64+0'-1^^ifa=lse-ecisiudenigobottominsertinfostudenu^JID・濡w■店型、^^BJID、圧WBS)va-uesmuml、
num2・num3・
num4・ctod(num5))messagebox(w莒am・)
e-sethisfo「m・pageframel・pagel・textl・setfocus
endif
endcase
(4)Pagel-frsCommand2saick删弃:
™H)}we雪日回Hr擲>3
fhis・parent・iextl・va-ue=二
this・parent・iext2・va-ue=・・
this.parent.text3.value=,this.parent.text4.value=M
this.parent.text5.value=M
由于其它各个页面上的添加数据的操作大同小异,这里不再螯述。
2.4数据查询模块
界面设计:
表单名称:
查询
文件名:
查询.SCX
数据环境:
student.dbf#class.dbffscore.dbf#teacher.dbfrcourse.dbf
对象设置:
查询主表单中的对象设置:
对象
属性
值
说明
Forml
Caption
查询
主表单中的
Commandl
cn
州回
~J
rJ
dX—1
O
ig
證{lb心
a|p猗
1
a
llg
o密
O注
S召
S
.•■■■
£
S
.•■■■
£
S
••■■■
<3
S
••■■■
<3
S
<3
S
<3
r-H
CN
m
寸
LH
9
<2
卜
<2
-只EKW•旺z&edr-i①Eg丄①6ed
其中的对象设置:
对象
属性
值
Combol
RowSourceType
1-值
RowSource
学生表,教师表,班级表,课程表,成绩表
Style
2-下拉列表框
Value
1
Labell
Caption
请选择要浏览的表
Gridl
RecordSourceTy
pe
0-表
其中的对象设置:
对象
属性
值
CommandGro
ButtonCount
5
upl
Labell
Caption
课程代码
Label2
Caption
课程名称
Label3
Caption
类别
Label4
Caption
教师代码
函数与方法声明:
(1)Thisform.PageFramel.Pagel中的Deactive事件:
功能:
当前学生情况查询页面被释放时,使数据查询设置过滤条件为空.
程序清单:
setfilterto
功能:
根据下拉列表框的选择r设置班级信息的过滤条件,同时清空文本框信息.
程序清单:
publicm
m=bol.value
selectstudent
setfilterto班级编号=口
thisform.pageframel.pagel.textl.value—'
thisform・pageframel・pagel・text2・value=”
thisfo「rn・pageframel・pagel・text3・value=”
thisform・pageframel・page:
Ltext4・valije=”
(3)Thisform.PageFramel.pagelXombo2中的InteractiveChange事件:
功能:
根据前面设置的班级过滤条件对学生信息进行查询,并将结果在当前页面显示
程序清单:
locatefor姓名=this.value*用组合框中的值进行查找
iffound()
thisform.pageframel.pagel.textl.value=^-^-
thisform.pageframel.pagel.text2.value=^^
thisform.pageframel.pagel.text3.value=*|4Si|
thisform.pageframel.pagel.text4.value=出生日期
thisform・pageframel・pagel・combo2・value=”endif
(4)Thisform.PageFramel.page2中的Init事件:
表浏览〃页显示时进行相关的初始化工作.
程序清单:
withthis.gridl
.recordsourcetype=6
.recordsource=,student,
.refresh.columncount=5
.columnl.width=60
.column2.width=65
.column3.width=40
.column4.width=70
.column5.width=60
.columnl.headerl.captionJ学号'
.column2.headerl.caption='姓名'
.column3.headerl.caption='性别'
.column4.headerl.caption='出生日期,
.column5・headerl・caption班级编号
.readonly=.t・
.deletemark=.f.
endwith
功能:
在〃数据表浏览〃页中根据下拉组合框中的选择对不同的表进行数据内容显
示
程序清单:
&&加入如下代码,可防止由字段少的表往字段多的表切换时造成数据字段丢失无法
显示的问题
withthis.parent.gridl
.columncount=6
.columnl.width=60
.column2.width=65
.column3.width=50
.column4.width=66
.column5.width=70
.column6.width=70
endwith
&&即每次都事先把grid先刷新成行数教多的表.
docase
casethis.value=l
withthis.parent.gridl
.recordsourcetype=6
.recordsource=,student,
.column3.width=40
.column4.width=70
.column5.width=60
.column].headerl.caption―学号'
.column2.headerl.caption—姓名'
.column3.headerl.caption=,性别'
.column4.headerl.caption=,出生日期'
.column5・headerl.caption—班号'
.refresh
.readonly=.t・
.deletemark=.f.
endwith
casethis.value=2
withthis.parent.gridl
.columncount=6
•recordsource—teacher'
.columnl.headerl.caption=,教师代码'
.column2.headerl.caption=l姓名’
.column3.headerl.caption='性别'
.columnl.width=60
.column2.width=65
.column3.width=50
.column4.width=66
.column5.width=70
.column6.width=70
.refresh
.readonly"・
.deletemark=.f.
endwith
casethis.value=3
withthis.parent.gridl
.recordsourcetype=6
.recordsource='classes,
.columncount=6
.columnl.width=60
.column2.width=65
.column3.width=50
.column4.width=70
.column2.headerl.caption—年级'
.column3.headerl.caption—专业'
.column4・headerl.caption—系代码'
.column5.headerl.caption=,学制'
.column6.headerl.caption—类另『
.refresh
.readonly=.t・
.deletemark=.f.
endwith
casethis.value=4
withthis.parent.gridl
.recordsourcetype=6
.recordsource='course,
.columncount=4
.columnl.width=60
.column2.width=100
.column3.width=50
.column4.width=50
.columnl.headerl.caption=课程代码'
.refresh
.readonly二・t・
.deletemark=.f.
endwith
casethis.value=5
withthis.parent.gridl
.recordsourcetype=6
.recordsource='score1
.columncount=3
.columnl.width=60
.column2.width=100
.column3.width=50
.columnl.headerl.caption—学号'
.column2.headerl.caption=课程代码,
.column3・headerl・caption=‘成纟责'
.refresh
.readonly=.t・
.deletemark=.f.
endwith
endcase
功能:
当"课程浏览〃页面被显示出来时,进行相关的初始化工作.
程序清单:
selectcourse
this.textl.value=课程代码
this.text2.value=课程名称
this.text3.value=类别
this.text4.value=教师代码
(7)Th
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 VisualFoxpro 编程 实践