实验五 Visual Foxpro编程实践
一. 实验目的与要求
掌握利用Visual Foxpro编制开发自己的应用程序的实践知识,并学会在程序调试中自行发现问题和修改程序代码,最终完成应用程序的无错运行。 二. 相关知识
利用Visual Foxpro自行开发编制应用程序的步骤:
1.设置好系统的工作环境(尤其注意工作目录的默认设置)。
2.如果是初次进行,应当先建立一个项目,为该项目命名,激活项目管理器。如果是接着上次的工作进行,则打开上次工作的本项目,同样也激活项目管理器。
3.在项目管理器的“数据”?“数据库”下面创建一个数据库,并命名(如已创建,则跳过本步骤)。
4.在项目管理器的“数据”?“数据库”?“表”下面进行数据表的创建或修改工作,并输入少量的正确数据以便将来的运行调试(如果已经创建了数据表,则跳过本步骤)。 5.在项目管理器的“文档”下面创建该应用程序所用到的所有表单,设计好各表单的界面并为表单里的控件填写程序代码.(注意为表单添加各自的数据环境,否则会出错!) 6.试运行各表单,发现问题后重新修改有问题的表单的代码,反复调试和修改直至最后能无错运行。
7.将应用程序打包发布或制作成安装文件。 三. 实验内容与步骤
本次实验以一个简单的学生成绩管理系统为例。首先,对该系统作一个简单的介绍: 该应用系统为完成学生信息和成绩的管理系统,主要有以下几个应用模块: (1) 用户登录管理: 系统具有管理员功能,只有取得管理员权限的人才能使用本系统。 (2) 数据添加功能: 对学生基本信息、教师基本信息、班级信息、课程信息、学生成
绩信息进行添加录入。
(3) 数据查询功能: 对上述信息的基本查询。 (4) 数据修改功能: 对上述信息可进行修改工作。
(5) 统计操作: 可分别按个人成绩、单科成绩统计出最高成绩、最低成绩和平均成绩
等。
(6) 打印功能: 对上述信息可进行打印。 实验步骤如下: 1.数据库设计:
首先设置好系统的运行环境和工作目录,然后建立项目,为项目命名为“学生成绩管理系统”,激活项目管理器,并在在项目管理器的“数据”?“数据库”下面创建一个数据库,命名为“学生成绩管理”,在“数据库”的“表”下面创建以下各数据表: (1) 用户信息表user (表名命名为user即可,不要加汉字。以下同。) 字段名称 用户名 密码 (2) 学生信息表 student 字段名称 学号 姓名 性别 类型 字符型 字符型 字符型 宽度 8 10 2 类型 字符型 字符型 宽度 10 10 班级编号 出生日期 (3) 教师信息表 teacher 字段名称 教师代码 姓名 性别 职称 部门 出生日期 (4) 班级信息表 classes 字段名称 班级编号 年级 专业 系代码 学制 类型 (5) 课程信息表 course 字段名称 课程代码 课程名称 类别 教师代码 (6) 分数信息表 score 字段名称 学号 课程代码 成绩 字符型 日期型 类型 字符型 字符型 字符型 字符型 字符型 日期型 类型 字符型 字符型 字符型 字符型 字符型 字符型 类型 字符型 字符型 字符型 字符型 类型 字符型 字符型 数值型 6 8 宽度 4 10 2 10 10 8 宽度 6 4 10 2 2 4 宽度 6 16 4 4 宽度 8 6 4
创建好以上数据表以后,应该向每个表中添加适量合法数据以便后面的测试。
2.表单设计 2.1登录模块
功能描述: 实现只有指定的用户才能访问系统的功能。并且,只有身份为“管理员”的用户才可以调用修改模块修改数据。 界面设计:
表单名称: login 文件名: login.scx 数据环境: user.dbf 对象设置:
对 象 Form1 Lable1 Lable2 Lable3 Combo1 Cammand1 Cammand2 属 性 Caption Caption Caption Caption RowSource Caption Caption 值 欢迎使用学生成绩管理系统 学生成绩管理系统 请输入用户名: 请输入密码: User.用户名 登录 退出 指定数据值来源类型 指定数据值来源 说 明 RowSourceType 6-字段 函数与方法声明:
(1) Command1中的Click事件
功能:完成在登录时对输入的用户名和密码的检验,如果数据表user中存在输入的用户名和密码信息,则调用主窗口(如果是管理员则不但调用主窗口,还允许执行主窗口的修改功能),否则提示输入错误。 程序清单:
private kl,yh,st
st='密码不正确,请重新输入!' use user
kl=alltrim(thisform.text1.value) yh=alltrim(thisform.combo1.value)
*将用户输入的用户名和密码的值分别保存在yh和kl变量中 locate for alltrim(thisform.combo1.value)= =alltrim(user.用户名) *在user表中查找是否有与yh和kl匹配的记录 if found() and alltrim(user.密码)= =kl
*正确的用户名和密码 thisform.visible=.f. close tables all do form main.scx if yh= ='admin'
*如果是超级用户管理员,则允许他使用main表单中的第三组按钮(即修改模块) main.optiongroup1.option3.enabled=.t. endif
this.parent.text1.value='' else
*错误的用户名和密码,系统给出提示,延迟2秒 wait window st timeout 2 thisform.text1.value='' thisform.text1.setfocus endif
(2) Command2中的Click事件 功能:退出学生成绩管理系统 程序清单: clear events quit
(3) Form1的Destroy事件
功能:意外关闭程序窗口时的处理 程序清单: clear events
2.2 主界面模块
功能描述: 主要是提供本系统各功能模块的入口. 界面设计:
表单名称: main 文件名: main.scx 数据环境: 无
对象设置:
对 象 Form1 Lable1 Lable2 Optiongroup1 属 性 Caption Caption Caption ButtonCount 值 学生成绩管理系统 欢迎使用学生成绩管理系统 请选择要操作的内容: 6 添加记录 查询记录 修改记录 .F. 统计数据 打印报表 退出系统 Optiongroup1.Option1 Caption Optiongroup1.Option2 Caption Optiongroup1.Option3 Caption Optiongroup1.Option3 Enabled Optiongroup1.Option4 Caption Optiongroup1.Option5 Caption Optiongroup1.Option6 Caption 函数与方法声明:
(1) Optiongroup1中的IntelactiveChange事件:
功能: 根据Optiongroup1中的选择单击按钮,调用各重要功能模块. 程序清单: do case
case this.value=1 do form 添加 case this.value=2 do form 查询 case this.value=3 do form 修改 case this.value=4 do form 统计 case this.value=5 do form 打印 case this.value=6 thisform.release quit endcase
(2) Optiongroup1中的每一个Option的Click事件:
功能: 与(1)中不同,(1)是指在Optiongroup中的各个Option切换时才触发的程序,仅这样还不够,还要编写每个Option被单击时触发的程序才完整。 程序清单:
对应Optiongroup1.Option1的Click事件: do form 添加 ……(其余类推) 2.3 数据添加模块
功能描述: 用户通过5个不同的页面来完成对学生信息表、教师信息表、班级表、课程表和成绩表的数据添加操作。 界面设计: