Visual Foxpro编程实例.docx

上传人:b****6 文档编号:4989728 上传时间:2022-12-12 格式:DOCX 页数:31 大小:356.18KB
下载 相关 举报
Visual Foxpro编程实例.docx_第1页
第1页 / 共31页
Visual Foxpro编程实例.docx_第2页
第2页 / 共31页
Visual Foxpro编程实例.docx_第3页
第3页 / 共31页
Visual Foxpro编程实例.docx_第4页
第4页 / 共31页
Visual Foxpro编程实例.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

Visual Foxpro编程实例.docx

《Visual Foxpro编程实例.docx》由会员分享,可在线阅读,更多相关《Visual Foxpro编程实例.docx(31页珍藏版)》请在冰豆网上搜索。

Visual Foxpro编程实例.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1