VisualFoxpro编程实例.docx
- 文档编号:4548608
- 上传时间:2022-12-06
- 格式:DOCX
- 页数:31
- 大小:356.16KB
VisualFoxpro编程实例.docx
《VisualFoxpro编程实例.docx》由会员分享,可在线阅读,更多相关《VisualFoxpro编程实例.docx(31页珍藏版)》请在冰豆网上搜索。
VisualFoxpro编程实例
实验五VisualFoxpro编程实践
一.实验目的与要求
掌握利用VisualFoxpro编制开发自己的应用程序的实践知识,并学会在程序调试中自行发现问题和修改程序代码,最终完成应用程序的无错运行。
二.相关知识
利用VisualFoxpro自行开发编制应用程序的步骤:
1.设置好系统的工作环境(尤其注意工作目录的默认设置)。
2.如果是初次进行,应当先建立一个项目,为该项目命名,激活项目管理器。
如果是接着上次的工作进行,则打开上次工作的本项目,同样也激活项目管理器。
3.在项目管理器的“数据”→“数据库”下面创建一个数据库,并命名(如已创建,则跳过本步骤)。
4.在项目管理器的“数据”→“数据库”→“表”下面进行数据表的创建或修改工作,并输入少量的正确数据以便将来的运行调试(如果已经创建了数据表,则跳过本步骤)。
5.在项目管理器的“文档”下面创建该应用程序所用到的所有表单,设计好各表单的界面并为表单里的控件填写程序代码.(注意为表单添加各自的数据环境,否则会出错!
)
6.试运行各表单,发现问题后重新修改有问题的表单的代码,反复调试和修改直至最后能无错运行。
7.将应用程序打包发布或制作成安装文件。
三.实验容与步骤
本次实验以一个简单的学生成绩管理系统为例。
首先,对该系统作一个简单的介绍:
该应用系统为完成学生信息和成绩的管理系统,主要有以下几个应用模块:
(1)用户登录管理:
系统具有管理员功能,只有取得管理员权限的人才能使用本系统。
(2)数据添加功能:
对学生基本信息、教师基本信息、班级信息、课程信息、学生成绩信息进行添加录入。
(3)数据查询功能:
对上述信息的基本查询。
(4)数据修改功能:
对上述信息可进行修改工作。
(5)统计操作:
可分别按个人成绩、单科成绩统计出最高成绩、最低成绩和平均成绩等。
(6)打印功能:
对上述信息可进行打印。
实验步骤如下:
1.数据库设计:
首先设置好系统的运行环境和工作目录,然后建立项目,为项目命名为“学生成绩管理系统”,激活项目管理器,并在在项目管理器的“数据”→“数据库”下面创建一个数据库,命名为“学生成绩管理”,在“数据库”的“表”下面创建以下各数据表:
(1)用户信息表user(表名命名为user即可,不要加汉字。
以下同。
)
字段名称
类型
宽度
用户名
字符型
10
密码
字符型
10
(2)学生信息表student
字段名称
类型
宽度
学号
字符型
8
字符型
10
性别
字符型
2
班级编号
字符型
6
出生日期
日期型
8
(3)教师信息表teacher
字段名称
类型
宽度
教师代码
字符型
4
字符型
10
性别
字符型
2
职称
字符型
10
部门
字符型
10
出生日期
日期型
8
(4)班级信息表classes
字段名称
类型
宽度
班级编号
字符型
6
年级
字符型
4
专业
字符型
10
系代码
字符型
2
学制
字符型
2
类型
字符型
4
(5)课程信息表course
字段名称
类型
宽度
课程代码
字符型
6
课程名称
字符型
16
类别
字符型
4
教师代码
字符型
4
(6)分数信息表score
字段名称
类型
宽度
学号
字符型
8
课程代码
字符型
6
成绩
数值型
4
创建好以上数据表以后,应该向每个表中添加适量合法数据以便后面的测试。
2.表单设计
2.1登录模块
功能描述:
实现只有指定的用户才能访问系统的功能。
并且,只有身份为“管理员”的用户才可以调用修改模块修改数据。
界面设计:
表单名称:
login
文件名:
login.scx
数据环境:
user.dbf
对象设置:
对象
属性
值
说明
Form1
Caption
欢迎使用学生成绩管理系统
Lable1
Caption
学生成绩管理系统
Lable2
Caption
请输入用户名:
Lable3
Caption
请输入密码:
Combo1
RowSourceType
6-字段
指定数据值来源类型
RowSource
User.用户名
指定数据值来源
Cammand1
Caption
登录
Cammand2
Caption
退出
函数与方法声明:
(1)Command1中的Click事件
功能:
完成在登录时对输入的用户名和密码的检验,如果数据表user中存在输入的用户名和密码信息,则调用主窗口(如果是管理员则不但调用主窗口,还允许执行主窗口的修改功能),否则提示输入错误。
程序清单:
privatekl,yh,st
st='密码不正确,请重新输入!
'
useuser
kl=alltrim(thisform.text1.value)
yh=alltrim(bo1.value)
*将用户输入的用户名和密码的值分别保存在yh和kl变量中
locateforalltrim(bo1.value)==alltrim(user.用户名)
*在user表中查找是否有与yh和kl匹配的记录
iffound()andalltrim(user.密码)==kl
*正确的用户名和密码
thisform.visible=.f.
closetablesall
doformmain.scx
ifyh=='admin'
*如果是超级用户管理员,则允许他使用main表单中的第三组按钮(即修改模块)
main.optiongroup1.option3.enabled=.t.
endif
this.parent.text1.value=''
else
*错误的用户名和密码,系统给出提示,延迟2秒
waitwindowsttimeout2
thisform.text1.value=''
thisform.text1.setfocus
endif
(2)Command2中的Click事件
功能:
退出学生成绩管理系统
程序清单:
clearevents
quit
(3)Form1的Destroy事件
功能:
意外关闭程序窗口时的处理
程序清单:
clearevents
2.2主界面模块
功能描述:
主要是提供本系统各功能模块的入口.
界面设计:
表单名称:
main
文件名:
main.scx
数据环境:
无
对象设置:
对象
属性
值
Form1
Caption
学生成绩管理系统
Lable1
Caption
欢迎使用学生成绩管理系统
Lable2
Caption
请选择要操作的容:
Optiongroup1
ButtonCount
6
Optiongroup1.Option1
Caption
添加记录
Optiongroup1.Option2
Caption
查询记录
Optiongroup1.Option3
Caption
修改记录
Optiongroup1.Option3
Enabled
.F.
Optiongroup1.Option4
Caption
统计数据
Optiongroup1.Option5
Caption
打印报表
Optiongroup1.Option6
Caption
退出系统
函数与方法声明:
(1)Optiongroup1中的IntelactiveChange事件:
功能:
根据Optiongroup1中的选择单击按钮,调用各重要功能模块.
程序清单:
docase
casethis.value=1
doform添加
casethis.value=2
doform查询
casethis.value=3
doform修改
casethis.value=4
doform统计
casethis.value=5
doform打印
casethis.value=6
thisform.release
quit
endcase
(2)Optiongroup1中的每一个Option的Click事件:
功能:
与
(1)中不同,
(1)是指在Optiongroup中的各个Option切换时才触发的程序,仅这样还不够,还要编写每个Option被单击时触发的程序才完整。
程序清单:
对应Optiongroup1.Option1的Click事件:
doform添加
……(其余类推)
2.3数据添加模块
功能描述:
用户通过5个不同的页面来完成对学生信息表、教师信息表、班级表、课程表和成绩表的数据添加操作。
界面设计:
表单名称:
添加
文件名:
添加.scx
数据环境:
student.dbf,class.dbf,score.dbf,teacher.dbf,course.dbf
对象设置:
对象
属性
值
说明
Form1
Caption
添加
PageFrame1
PageCount
5
Command1
Caption
返回主菜单
主表单中的Command1
Page1
Caption
学生表
Page2
Caption
教师表
Page3
Caption
班级表
Page4
Caption
课程表
Page5
Caption
成绩表
Command1
Caption
添加
与上面的Command1不同,这是在各个页面中的Command1
Command2
Caption
清空
函数与方法声明:
因为添加表单中对于5个表的操作方法类似,所以这里只给出学生表的添加部分,其余4个页面的程序请同学们自己对照思考和编制。
(1)Form1中的Active事件
功能:
设置焦点位置
程序清单:
this.pageframe1.page1.text1.setfocus
(2)Form1中的Command1的Click事件
功能:
释放当前窗口
程序清单:
thisform.release
(3)Page1中Command1的Click事件
功能:
将输入的新记录信息添加到学生表中,完成新记录的添加工作
程序清单:
num1=alltrim(thisform.pageframe1.page1.text1.value)
num2=alltrim(thisform.pageframe1.page1.text2.value)
num3=alltrim(thisform.pageframe1.page1.text3.value)
num4=alltrim(thisform.pageframe1.page1.text4.value)
num5=alltrim(dtoc(thisform.pageframe1.page1.text5.value))&&并非是alltrim(thisform.pageframe1.page1.text5.value)
setexacton
docase
casenum1=''
messagebox('学号不能为空!
',0+48,'系统提示!
')
thisform.pageframe1.page1.text1.setfocus
casenum2=''
messagebox('不能为空!
',0+48,'系统提示!
')
thisform.pageframe1.page1.text2.setfocus
casenum3=''
messagebox('性别不能为空!
',0+48,'系统提示!
')
thisform.pageframe1.page1.text3.setfocus
casenum4=''
messagebox('班级编号不能为空!
',0+48,'系统提示!
')
thisform.pageframe1.page1.text4.setfocus
casenum5=''
messagebox('出生日期不能为空!
',0+48,'系统提示!
')
thisform.pageframe1.page1.text5.setfocus
otherwise
a=messagebox('确认添加么?
',1+64+0,'系统提示!
')
ifa=1
selectstudent
gobottom
insertintostudent(学号,,性别,班级编号,出生日期)values(num1,num2,num3,num4,ctod(num5))
messagebox('添加成功!
')
else
thisform.pageframe1.page1.text1.setfocus
endif
endcase
(4)Page1中的Command2的Click事件:
功能:
清空当前页面上输入的数据
程序清单:
this.parent.text1.value=''
this.parent.text2.value=''
this.parent.text3.value=''
this.parent.text4.value=''
this.parent.text5.value=''
由于其它各个页面上的添加数据的操作小异,这里不再赘述。
比如:
num1=alltrim(thisform.pageframe1.page2.text1.value)
num2=alltrim(thisform.pageframe1.page2.text2.value)
num3=alltrim(thisform.pageframe1.page2.text3.value)
num4=alltrim(thisform.pageframe1.page2.text4.value)
num5=alltrim(thisform.pageframe1.page2.text5.value)
num6=alltrim(dtoc(thisform.pageframe1.page2.text6.value))&&并非是alltrim(thisform.pageframe1.page2.text6.value)
setexacton
docase
casenum1=''
messagebox('教师代码不能为空!
',0+48,'系统提示!
')
thisform.pageframe1.page2.text1.setfocus
casenum2=''
messagebox('不能为空!
',0+48,'系统提示!
')
thisform.pageframe1.page2.text2.setfocus
casenum3=''
messagebox('性别不能为空!
',0+48,'系统提示!
')
thisform.pageframe1.page2.text3.setfocus
casenum4=''
messagebox('职称不能为空!
',0+48,'系统提示!
')
thisform.pageframe1.page2.text4.setfocus
casenum5=''
messagebox('部门不能为空!
',0+48,'系统提示!
')
thisform.pageframe1.page2.text5.setfocus
casenum6=''
messagebox('出生日期不能为空!
',0+48,'系统提示!
')
thisform.pageframe1.page2.text6.setfocus
otherwise
a=messagebox('确认添加么?
',1+64+0,'系统提示!
')
ifa=1
selectstudent
gobottom
insertintostudent(教师代码,,性别,职称,部门,出生日期)values(num1,num2,num3,num4,num5,ctod(num6))
messagebox('添加成功!
')
else
thisform.pageframe1.page2.text1.setfocus
endif
endcase
2.4数据查询模块
功能描述:
用户可以通过不同的页面完成对5个不同表中的数据的查询操作
界面设计:
表单名称:
查询
文件名:
查询.scx
数据环境:
student.dbf,class.dbf,score.dbf,teacher.dbf,course.dbf
对象设置:
查询主表单中的对象设置:
对象
属性
值
说明
Form1
Caption
查询
PageFrame1
PageCount
3
Command1
Caption
返回主菜单
主表单中的Command1
PageFrame1.Page1中的对象设置:
对象
属性
值
Combo1
RowSourceType
6-字段
RowSource
Classese.班级编号
Combo2
RowSourceType
6-字段
RowSource
Student.
Label1
Caption
请选择班级代码和
Label2
Caption
班级代码
Label3
Caption
Label4
Caption
学号
Label5
Caption
Label6
Caption
性别
Label7
Caption
出生日期
PageFrame1.Page2用来对数据表进行浏览,其界面为:
其中的对象设置:
对象
属性
值
Combo1
RowSourceType
1-值
RowSource
学生表,教师表,班级表,课程表,成绩表
Style
2-下拉列表框
Value
1
Label1
Caption
请选择要浏览的表
Grid1
RecordSourceType
0-表
PageFrame1.Page3用来进行课程浏览.其界面为:
其中的对象设置:
对象
属性
值
CommandGroup1
ButtonCount
5
Label1
Caption
课程代码
Label2
Caption
课程名称
Label3
Caption
类别
Label4
Caption
教师代码
函数与方法声明:
(1)Thisform.PageFrame1.Page1中的Deactive事件:
功能:
当前学生情况查询页面被释放时,使数据查询设置过滤条件为空.
程序清单:
setfilterto
(2)Thisform.PageFrame1.Page1.Combo1中的InteractiveChange事件:
功能:
根据下拉列表框的选择,设置班级信息的过滤条件,同时清空文本框信息.
程序清单:
publicm
m=bo1.value
selectstudent
setfilterto班级编号=m
thisform.pageframe1.page1.text1.value=''
thisform.pageframe1.page1.text2.value=''
thisform.pageframe1.page1.text3.value=''
thisform.pageframe1.page1.text4.value=''
(3)Thisform.PageFrame1.page1.Combo2中的InteractiveChange事件:
功能:
根据前面设置的班级过滤条件对学生信息进行查询,并将结果在当前页面显示
程序清单:
locatefor=this.value*用组合框中的值进行查找
iffound()
thisform.pageframe1.page1.text1.value=学号
thisform.pageframe1.page1.text2.value=
thisform.pageframe1.page1.text3.value=性别
thisform.pageframe1.page1.text4.value=出生日期
bo2.value=''
endif
(4)Thisform.PageFrame1.page2中的Init事件:
功能:
在“数据表浏览”页显示时进行相关的初始化工作.
程序清单:
withthis.grid1
.recordsourcetype=6
.recordsource='student'
.refresh
.columncount=5
.column1.width=60
.column2.width=65
.column3.width=40
.column4.width=70
.column5.width=60
.column1.header1.caption='学号'
.column2.header1.caption=''
.column3.header1.caption='性别'
.column4.header1.caption='出生日期'
.column5.header1.caption='班级编号'
.readonly=.t.
.deletemark=.f.
endwith
(5)Thisform.PageFrame1.Page2.Combo1中的IntelactiveChange事件
功能:
在“数据表浏览”页中根据下拉组合框中的选择对不同的表进行数据容显示
程序清单:
&&加入如下代码,可防止由字段少的表往字段多的表切换时造成数据字段丢失无法显示的问题
withthis.parent.grid1
.columncount=6
.column1.width=60
.column2.width=65
.column3.width=50
.column4.width=66
.column5.width=70
.column6.width=70
endwith
&&即每次都事先把grid先刷新成行数教多的表.
docase
casethis.value=1
withthis.parent.grid1
.recordsourcetype=6
.recordsource='student'
.columncount=5
.column1.width=60
.column2.width=65
.column3.width=40
.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VisualFoxpro 编程 实例