VFP数据库系统开发实例(附图)
- 格式:doc
- 大小:890.00 KB
- 文档页数:21
程序设计实例(一)建立//编辑自由表结构(1)表设计器:(2)命令(3)SQL(二)自由表_ 添加新记录(1)输入框(2)程序*.prg(3)表单*.scx录入李国防同学的信息05001 李国防男05/12/87 营销学598 营销在[E:\ vfp实验] 文件夹中保存一份王码个人简历“李国防简历.txt”文档和一张李国防个人相片“李国防.bmp”。
员工(员工编号 C(4),姓名 C(8),性别 C(2),出生日期 D(8),职务 C(10),工资 N(7,2),简历 M(4),相片 G(4))准备建立一张“员工.dbf”一建立表单1建立form,标签,文本框,单选钮组,组合框,微调框,编辑框,图象框命令按钮2属性设置*.caption=Combo1捆绑数据列表(经理、班长、销售员) 二建立数据环境添加“员工.dbf”三对象事件过程[form_load]:定义公共变量[浏览]:选择员工的相片[添加]:选择当前表“员工.dbf”, 数组元素接收各控件的当前值将数组写入员工.dbf表尾记录[取消]:清除各控件值[退出]:释放表单四运行[form_load]:定义公共变量public p,public array a(7)p=“”[浏览]:选择员工的相片p=getpict()"&p"[添加]:接收各控件的当前值,然后将数组写入员工.dbf表尾记录a(1)=a(2)=Ifa(3)="男"elsea(3)="女"endifcsrq="{^"+"}"a(4)=&csrqa(5)=a(6)= a(7)=select 员工Append from array a fields 员工编号,姓名,性别,出生日期,职务,工资if empty(replace 简历 with a(7) addiendifif empty(p)=.f.append gene 相片 from "&p"endif[取消]:清除各控件值""""""""""P=“”[退出]:释放表单thisform.release(三)记录数据的计算(1)命令:(2)prg程序(3)表单*.scx在VFP系统的默认文件夹中有数据“表”如图,要求统计并显示男同学的人数、总分、平均入学成绩。
VFP应用程序设计实例--学生学籍管理系统(1)电脑笔记2007-10-29 16:43:36 阅读2795 评论5 字号:大中小图1MIS是英文Management Information System的英文缩写,意思是信息管理系统,该系统可用于中小型企事业单位业务处理和信息交流,从而大大提高了企业运作的效率。
微软公司的VisualFoxPro可视化面向对象的编程软件是一个设计MIS系统即简单又快捷的好软件。
下面,就以VFP 6.0为开发环境,讲述设计学生学籍管理系统的详细设计过程,也为在看过了前面非表单设计的学生学籍管理系统的朋友们继续了解并学习采用表单(Form)的方式设计MIS系统的方法。
一、设计思路:学生学籍管理系统的运行以封面表单开始,如图1所示,要求用户输入登录密码,并设置三次检查功能,若三次输入的密码均有错,则自动退出系统;否则出现系统菜单,接收用户的操作,操作完毕后用户可以从系统菜单中退出系统。
二、系统功能:系统的功能主要分成十个功能模块,它们是:录入数据、修改数据、删除数据、查询数据、统计数据、显示数据、打印数据、导出数据、导入数据和清空数据。
录入数据可以实现学生信息的录入;修改数据可以实现学生信息的修改;删除数据可以实现学生数据的删除;查询数据可以实现学生信息的查询;统计数据可以实现学生人数、党员人数、学生总平均成绩、高数平均成绩、英语平均成绩和VFP平均成绩的统计;显示数据可以实现以字段分布和二维表两种方式显示学生信息;打印数据可以实现用报表的形式打印学生的信息;导出数据可以实现学生数据的备份,防止数据丢失;导入数据可以实现学生数据的还原,保证数据的正确性;清空数据可以实现学生数据的清空操作。
三、菜单结构框架图四、数据库结构:(可定义表名为xj.dbf)字段名类型宽度小数位数学号字符型 2姓名字符型 6五、具体设计:(给出源代码,表单属性可参照图示在VFP属性框中设置,所有程序文件和表单文件均通过VFP项目管理器建立)1、学生学籍管理系统主程序源代码(可定义程序名为main.prg)_SCREEN.WINDOWSTATE=2 &&设置窗口规格为第2种系统窗口_SCREEN.CAPTION="学生学籍管理系统" &&设置窗口标题为“学生学籍管理系统”_SCREEN.CLOSABLE=.T. &&去掉关闭按钮_SCREEN.CONTROLBOX=.F. &&去掉控制按钮_SCREEN.MAXBUTTON=.F. &&去掉最大化按钮_SCREEN.MINBUTTON=.F. &&去掉最小化按钮_SCREEN.BACKCOLOR=RGB(50,100,128) &&设置窗口的背景色CLOSE ALLCLEAR ALLCLEARSET SYSMENU OFFSET SYSMENU TOSET TALK OFFSET SAFETY OFFSET STATUS BAR OFF &&关闭Visual Foxpro的状态栏DO FORM A:\封面.SCX &&调用系统登录“封面”表单READ EVENT &&响应用户输入DO A:\菜单.MPX &&运行系统菜单READ EVENTSET SYSMENU TO DEFAULT &&恢复Visual Foxpro的系统菜单的默认值SET SYSMENU ON &&显示Visual Foxpro的系统菜单SET STATUS BAR ON &&显示Visual Foxpro的状态栏CLOSE ALL &&关闭所有文件CLEAR ALLRETURN &&返回2、封面表单源代码(A:\封面.sct)PROCEDURE Click &&确定按钮的单击事件过程SET EXACT ON &&设置精确比较命令IF THISFORM.text1.VALUE="8888" &&如果文本框的值是8888THISFORM.RELEASE &&那么释放封面表单DO A:\菜单.MPX &&运行菜单程序ELSE &&否则THISFORM.NO=THISFORM.NO+1 &&将自定义属性NO的值由0加1IF THISFORM.NO>=3 &&如果自定义属性NO的值为3=MESSAGEBOX("密码三次输错,您不能使用本系统!",0+16+0,"学生学籍管理系统") &&那么弹出内容为“密码三次输错,您不能使用本系统!”的对话框QUIT &&结束程序的运行ELSE &&否则=MESSAGEBOX("密码错误!",48+0+0,"警告") &&弹出内容为“密码错误!”的对话框THISFORM.text1.VALUE="" &&设置文本框的内容为空THISFORM.text1.SETFOCUS &&并将光标定位到文本框中THISFORM.REFRESH &&刷新封面表单ENDIFENDIFSET EXACT OFF &&设置关闭精确比较命令ENDPROCPROCEDURE Click &&取消按钮的单击事件过程THISFORM.RELEASE &&释放封面表单CLOSE ALL &&关闭所有文件CLEAR EVENTquitENDPROC (未完)VFP应用程序设计实例--学生学籍管理系统(2)电脑笔记2007-10-29 16:54:06 阅读3360 评论0 字号:大中小图23、录入数据表单源代码(A:\录入.sct,如图2所示)PROCEDURE Init &&录入数据表单的初始化事件过程SET TALK OFFmand4.ENABLED=.f. &&设置第四个按钮为不可用状态mand5.ENABLED=.f. &&设置第五个按钮为不可用状态THISFORM.txt学号.ENABLED=.f. &&设置学号文本框为不可用状态THISFORM.txt姓名.ENABLED=.f. &&设置姓名文本框为不可用状态bo1.ENABLED=.f. &&设置组合框1为不可用状态bo2.ENABLED=.f. &&设置组合框2为不可用状态bo3.ENABLED=.f. &&设置组合框3为不可用状态bo4.ENABLED=.f. &&设置组合框4为不可用状态THISFORM.txt邮编.ENABLED=.f. &&设置邮编文本框为不可用状态THISFORM.txt高数.ENABLED=.f. &&设置高数文本框为不可用状态THISFORM.txt英语.ENABLED=.f. &&设置英语文本框为不可用状态THISFORM.txtVfp.ENABLED=.f. &&设置VFP文本框为不可用状态bo5.ENABLED=.f. &&设置组合框5为不可用状态THISFORM.txt电话.ENABLED=.f. &&设置电话文本框为不可用状态THISFORM.txt通信地址.ENABLED=.f. &&设置通信地址文本框为不可用状态THISFORM.edt备注.ENABLED=.f. &&设置备注编辑框为不可用状态ENDPROCPROCEDURE Load &&录入数据表单的加载事件过程CLOSE DATA &&关闭所有数据库USE A:\XJ存 &&打开A盘中的XJ.DBF表文件SET MULTILOCKS ON &&设置锁定一组记录=CURSORSETPROP('buffering',5,'XJ') &&打开开放式表缓冲ENDPROCPROCEDURE InteractiveChange &&录入数据表单的交互改变事件过程REPL 出生年月 WITHbo2.displayvalue+"."+bo3.displayvalue+"."+ bo4.displayvalue &&用组合框的值替换出生年月字段THISFORM.REFRESH &&刷新录入数据表单ENDPROCPROCEDURE Command1.Click &&单击命令按钮1的事件过程APPEND BLANK &&添加一空白记录THISFORM.REFRESH &&刷新录入数据表单mand1.ENABLED=.f. &&设置命令按钮1为不可用状态mand2.ENABLED=.f. &&设置命令按钮2为不可用状态mand3.ENABLED=.f. &&设置命令按钮3为不可用状态mand4.ENABLED=.t. &&设置命令按钮4为可用状态mand5.ENABLED=.t. &&设置命令按钮5为可用状态mand6.ENABLED=.f. &&设置命令按钮6为不可用状态THISFORM.txt学号.ENABLED=.t.THISFORM.txt姓名.ENABLED=.t.bo1.ENABLED=.t.bo2.ENABLED=.t.bo3.ENABLED=.t.bo4.ENABLED=.t.THISFORM.txt邮编.ENABLED=.t.THISFORM.txt高数.ENABLED=.t.THISFORM.txt英语.ENABLED=.t.THISFORM.txtVfp.ENABLED=.t.bo5.ENABLED=.t.THISFORM.txt电话.ENABLED=.t.THISFORM.txt通信地址.ENABLED=.t.THISFORM.edt备注.ENABLED=.t.THISFORM.txt学号.SETFOCUSENDPROCPROCEDURE Command2.Click &&单击命令按钮2的事件过程SET DELETE ON &&设置打开删除命令DELETE &&删除当前记录YN=MESSAGEBOX('确实要删除这条记录?',4+32+256,'删除确认') &&弹出内容为“确实要删除这条记录?”的对话框DO CASE &&运行条件判断语句CASE YN=6 &&当单击“是”按钮时=TABLEUPDATE(.T.) &&执行更新表函数,删除当前记录CASE YN=7 &&当单击“否”按钮时RECALL &&恢复已作了删除标记的当前记录ENDCASETHISFORM.REFRESHENDPROCPROCEDURE Command3.Click &&单击命令按钮3的事件过程mand1.ENABLED=.f.mand2.ENABLED=.f.mand3.ENABLED=.f.mand4.ENABLED=.t.mand5.ENABLED=.t.mand6.ENABLED=.f.ENDPROCPROCEDURE Command4.Click &&单击命令按钮4的事件过程=TABLEUPDATE(.T.)mand1.ENABLED=.t.mand2.ENABLED=.t.mand3.ENABLED=.t.mand4.ENABLED=.f.mand5.ENABLED=.f.mand6.ENABLED=.t.ENDPROCPROCEDURE Command5.Click &&单击命令按钮5的事件过程=TABLEREVERT(.T.)mand1.ENABLED=.t.mand2.ENABLED=.t.mand3.ENABLED=.t.mand4.ENABLED=.f.mand5.ENABLED=.f.mand6.ENABLED=.t.ENDPROCPROCEDURE Command6.Click &&单击命令按钮6的事件过程SELE 1 &&选择1号工作区USE A:\XJ EXCLUSIVE 打开A盘中的XJ.DBF数据表PACK &&彻底删除已作了删除标记的记录THISFORM.RELEASE &&释放录入数据表单ENDPROCPROCEDURE InteractiveChangeREPL 是否党员 WITH bo5.DISPLAYVALUE &&用组合框的值替换是否党员字段THISFORM.REFRESHENDPROC4、修改数据表单源代码(A:\修改.sct)图3PROCEDURE Command1.ClickIF NOT BOF() &&如果记录指针没有到记录的开头SKIP –1 &&向上跳转一个记录THISFORM.REFRESHmand2.ENABLED=.t.ELSEWAIT WINDOW '已经是第一条记录了!' &&系统给出内容为“已经是第一条记录了!”提示窗口ENDIFENDPROCPROCEDURE Command2.ClickIF NOT EOF() &&如果记录指针没有到记录的结尾SKIP &&向下跳转一个记录THISFORM.REFRESH mand1.ENABLED=.t.ELSEWAIT WINDOW '已经是最后一条记录了!'ENDIFENDPROCPROCEDURE Command3.ClickGO TOP &&将记录指针移到记录的开头THISFORM.REFRESH mand1.ENABLED=.f. mand2.ENABLED=.t.ENDPROCPROCEDURE Command4.ClickGO BOTTOM &&将记录指针移到记录的结尾THISFORM.REFRESH mand1.ENABLED=.t. mand2.ENABLED=.f.ENDPROCPROCEDURE Command5.Click=TABLEUPDATE(.T.) mand1.ENABLED=.t. mand2.ENABLED=.t. mand3.ENABLED=.t. mand4.ENABLED=.t.mand5.ENABLED=.f.mand6.ENABLED=.f.mand7.ENABLED=.t.ENDPROCPROCEDURE Command6.Click=TABLEREVERT(.T.) &&启用表缓冲,放弃表中对所有记录所做的修改函数mand1.ENABLED=.t.mand2.ENABLED=.t.mand3.ENABLED=.t.mand4.ENABLED=.t.mand5.ENABLED=.f.mand6.ENABLED=.f.mand7.ENABLED=.t.ENDPROCPROCEDURE Command7.ClickUSE A:\XJ EXCLUSIVEPACKTHISFORM.RELEASEENDPROCPROCEDURE ClickIF EMPTY(bo1.VALUE) &&如果组合框1的值为空=MESSAGEBOX("请选择学号!",48+0+0,"学生学籍管理系统") &&系统给出内容为“请选择学号!”的对话框ENDIFAA=RECNO() &&用显示记录号的函数将记录号赋给变量AA GO AA &&将记录指针移到当前记录号THISFORM.txt学号.REFRESH &&刷新学号文本框的内容THISFORM.txt姓名.REFRESH &&刷新姓名文本框的内容THISFORM.txt性别.REFRESH &&刷新性别文本框的内容THISFORM.txt出生年月.REFRESH &&刷新出生年月文本框的内容THISFORM.txt邮编.REFRESH &&刷新邮编文本框的内容THISFORM.txt高数.REFRESH &&刷新高数文本框的内容THISFORM.txt英语.REFRESH &&刷新英语文本框的内容THISFORM.txtVfp.REFRESH &&刷新VFP文本框的内容THISFORM.txt是否党员.REFRESH &&刷新是否党员文本框的内容THISFORM.txt电话.REFRESH &&刷新电话文本框的内容THISFORM.txt通信地址.REFRESH &&刷新通信地址文本框的内容THISFORM.edt备注.REFRESH &&刷新备注编辑框的内容mand5.ENABLED=.t.mand6.ENABLED=.t.ENDPROC(未完)VFP应用程序设计实例--学生学籍管理系统(2)电脑笔记2007-10-29 16:54:06 阅读3360 评论0 字号:大中小图23、录入数据表单源代码(A:\录入.sct,如图2所示)PROCEDURE Init &&录入数据表单的初始化事件过程SET TALK OFFmand4.ENABLED=.f. &&设置第四个按钮为不可用状态mand5.ENABLED=.f. &&设置第五个按钮为不可用状态THISFORM.txt学号.ENABLED=.f. &&设置学号文本框为不可用状态THISFORM.txt姓名.ENABLED=.f. &&设置姓名文本框为不可用状态bo1.ENABLED=.f. &&设置组合框1为不可用状态bo2.ENABLED=.f. &&设置组合框2为不可用状态bo3.ENABLED=.f. &&设置组合框3为不可用状态bo4.ENABLED=.f. &&设置组合框4为不可用状态THISFORM.txt邮编.ENABLED=.f. &&设置邮编文本框为不可用状态THISFORM.txt高数.ENABLED=.f. &&设置高数文本框为不可用状态THISFORM.txt英语.ENABLED=.f. &&设置英语文本框为不可用状态THISFORM.txtVfp.ENABLED=.f. &&设置VFP文本框为不可用状态bo5.ENABLED=.f. &&设置组合框5为不可用状态THISFORM.txt电话.ENABLED=.f. &&设置电话文本框为不可用状态THISFORM.txt通信地址.ENABLED=.f. &&设置通信地址文本框为不可用状态THISFORM.edt备注.ENABLED=.f. &&设置备注编辑框为不可用状态ENDPROCPROCEDURE Load &&录入数据表单的加载事件过程CLOSE DATA &&关闭所有数据库USE A:\XJ存 &&打开A盘中的XJ.DBF表文件SET MULTILOCKS ON &&设置锁定一组记录=CURSORSETPROP('buffering',5,'XJ') &&打开开放式表缓冲ENDPROCPROCEDURE InteractiveChange &&录入数据表单的交互改变事件过程REPL 出生年月 WITHbo2.displayvalue+"."+bo3.displayvalue+"."+ bo4.displayvalue &&用组合框的值替换出生年月字段THISFORM.REFRESH &&刷新录入数据表单ENDPROCPROCEDURE Command1.Click &&单击命令按钮1的事件过程APPEND BLANK &&添加一空白记录THISFORM.REFRESH &&刷新录入数据表单mand1.ENABLED=.f. &&设置命令按钮1为不可用状态mand2.ENABLED=.f. &&设置命令按钮2为不可用状态mand3.ENABLED=.f. &&设置命令按钮3为不可用状态mand4.ENABLED=.t. &&设置命令按钮4为可用状态mand5.ENABLED=.t. &&设置命令按钮5为可用状态mand6.ENABLED=.f. &&设置命令按钮6为不可用状态THISFORM.txt学号.ENABLED=.t.THISFORM.txt姓名.ENABLED=.t.bo1.ENABLED=.t.bo2.ENABLED=.t.bo3.ENABLED=.t.bo4.ENABLED=.t.THISFORM.txt邮编.ENABLED=.t.THISFORM.txt高数.ENABLED=.t.THISFORM.txt英语.ENABLED=.t.THISFORM.txtVfp.ENABLED=.t.bo5.ENABLED=.t.THISFORM.txt电话.ENABLED=.t.THISFORM.txt通信地址.ENABLED=.t.THISFORM.edt备注.ENABLED=.t.THISFORM.txt学号.SETFOCUSENDPROCPROCEDURE Command2.Click &&单击命令按钮2的事件过程SET DELETE ON &&设置打开删除命令DELETE &&删除当前记录YN=MESSAGEBOX('确实要删除这条记录?',4+32+256,'删除确认') &&弹出内容为“确实要删除这条记录?”的对话框DO CASE &&运行条件判断语句CASE YN=6 &&当单击“是”按钮时=TABLEUPDATE(.T.) &&执行更新表函数,删除当前记录CASE YN=7 &&当单击“否”按钮时RECALL &&恢复已作了删除标记的当前记录ENDCASETHISFORM.REFRESHENDPROCPROCEDURE Command3.Click &&单击命令按钮3的事件过程mand1.ENABLED=.f.mand2.ENABLED=.f.mand3.ENABLED=.f.mand4.ENABLED=.t.mand5.ENABLED=.t.mand6.ENABLED=.f.ENDPROCPROCEDURE Command4.Click &&单击命令按钮4的事件过程=TABLEUPDATE(.T.)mand1.ENABLED=.t.mand2.ENABLED=.t.mand3.ENABLED=.t.mand4.ENABLED=.f.mand5.ENABLED=.f.mand6.ENABLED=.t.ENDPROCPROCEDURE Command5.Click &&单击命令按钮5的事件过程=TABLEREVERT(.T.)mand1.ENABLED=.t.mand2.ENABLED=.t.mand3.ENABLED=.t.mand4.ENABLED=.f.mand5.ENABLED=.f.mand6.ENABLED=.t.ENDPROCPROCEDURE Command6.Click &&单击命令按钮6的事件过程SELE 1 &&选择1号工作区USE A:\XJ EXCLUSIVE 打开A盘中的XJ.DBF数据表PACK &&彻底删除已作了删除标记的记录THISFORM.RELEASE &&释放录入数据表单ENDPROCPROCEDURE InteractiveChangeREPL 是否党员 WITH bo5.DISPLAYVALUE &&用组合框的值替换是否党员字段THISFORM.REFRESHENDPROC4、修改数据表单源代码(A:\修改.sct)图3PROCEDURE Command1.ClickIF NOT BOF() &&如果记录指针没有到记录的开头SKIP –1 &&向上跳转一个记录THISFORM.REFRESHmand2.ENABLED=.t.ELSEWAIT WINDOW '已经是第一条记录了!' &&系统给出内容为“已经是第一条记录了!”提示窗口ENDIFENDPROCPROCEDURE Command2.ClickIF NOT EOF() &&如果记录指针没有到记录的结尾SKIP &&向下跳转一个记录THISFORM.REFRESH mand1.ENABLED=.t.ELSEWAIT WINDOW '已经是最后一条记录了!'ENDIFENDPROCPROCEDURE Command3.ClickGO TOP &&将记录指针移到记录的开头THISFORM.REFRESH mand1.ENABLED=.f. mand2.ENABLED=.t.ENDPROCPROCEDURE Command4.ClickGO BOTTOM &&将记录指针移到记录的结尾THISFORM.REFRESH mand1.ENABLED=.t. mand2.ENABLED=.f.ENDPROCPROCEDURE Command5.Click=TABLEUPDATE(.T.) mand1.ENABLED=.t. mand2.ENABLED=.t. mand3.ENABLED=.t. mand4.ENABLED=.t.mand5.ENABLED=.f.mand6.ENABLED=.f.mand7.ENABLED=.t.ENDPROCPROCEDURE Command6.Click=TABLEREVERT(.T.) &&启用表缓冲,放弃表中对所有记录所做的修改函数mand1.ENABLED=.t.mand2.ENABLED=.t.mand3.ENABLED=.t.mand4.ENABLED=.t.mand5.ENABLED=.f.mand6.ENABLED=.f.mand7.ENABLED=.t.ENDPROCPROCEDURE Command7.ClickUSE A:\XJ EXCLUSIVEPACKTHISFORM.RELEASEENDPROCPROCEDURE ClickIF EMPTY(bo1.VALUE) &&如果组合框1的值为空=MESSAGEBOX("请选择学号!",48+0+0,"学生学籍管理系统") &&系统给出内容为“请选择学号!”的对话框ENDIFAA=RECNO() &&用显示记录号的函数将记录号赋给变量AA GO AA &&将记录指针移到当前记录号THISFORM.txt学号.REFRESH &&刷新学号文本框的内容THISFORM.txt姓名.REFRESH &&刷新姓名文本框的内容THISFORM.txt性别.REFRESH &&刷新性别文本框的内容THISFORM.txt出生年月.REFRESH &&刷新出生年月文本框的内容THISFORM.txt邮编.REFRESH &&刷新邮编文本框的内容THISFORM.txt高数.REFRESH &&刷新高数文本框的内容THISFORM.txt英语.REFRESH &&刷新英语文本框的内容THISFORM.txtVfp.REFRESH &&刷新VFP文本框的内容THISFORM.txt是否党员.REFRESH &&刷新是否党员文本框的内容THISFORM.txt电话.REFRESH &&刷新电话文本框的内容THISFORM.txt通信地址.REFRESH &&刷新通信地址文本框的内容THISFORM.edt备注.REFRESH &&刷新备注编辑框的内容mand5.ENABLED=.t.mand6.ENABLED=.t.ENDPROC(未完)、查询数据表单源代码(A:\查询.sct)图4PROCEDURE ClickIF EMPTY(bo1.VALUE)=MESSAGEBOX("请选择学号!",48+0+0,"学生学籍管理系统")ENDIFAA=RECNO()GO AATHISFORM.txt学号.REFRESHTHISFORM.txt姓名.REFRESHTHISFORM.txt性别.REFRESHTHISFORM.txt出生年月.REFRESHTHISFORM.txt邮编.REFRESHTHISFORM.txt高数.REFRESHTHISFORM.txt英语.REFRESHTHISFORM.txtVfp.REFRESHTHISFORM.txt是否党员.REFRESHTHISFORM.txt电话.REFRESHTHISFORM.txt通信地址.REFRESHTHISFORM.edt备注.REFRESHENDPROC6、统计数据表单源代码(A:\统计.sct)图5PROCEDURE Click &&单击“统计记录总数”按钮时的事件过程COUNT TO AA FOR 是否党员="是" &&对党员计数,并将计数结果赋给变量AA THISFORM.text5.value=AA &&将变量AA的值赋给文本框5THISFORM.text5.REFRESHENDPROCPROCEDURE Click &&单击“统计英语平均成绩”按钮时的事件过程AVERAGE 英语 TO AA &&对所有记录的英语成绩求平均,并将平均值赋给变量AA THISFORM.text3.value=AA &&将变量AA的值赋给文本框3THISFORM.text3.REFRESHENDPROCPROCEDURE Click &&单击“统计VFP平均成绩”按钮时的事件过程AVERAGE vfp TO AA &&对所有记录的VFP成绩求平均,并将平均值赋给变量AA THISFORM.text4.value=AA &&将变量AA的值赋给文本框4THISFORM.text4.REFRESHENDPROCPROCEDURE Click &&单击“统计总平均成绩”按钮时的事件过程AVERAGE 高数 TO AA &&对所有记录的高数成绩求平均,并将平均值赋给变量AA AVERAGE 英语 TO BB &&对所有记录的英语成绩求平均,并将平均值赋给变量BB AVERAGE vfp TO CC &&对所有记录的VFP成绩求平均,并将平均值赋给变量CC STORE (AA+BB+CC)/3 TO DD &&将三门成绩的平均成绩和除3的总平均成绩赋给DD THISFORM.text6.value=DD &&将变量DD的值赋给文本框6THISFORM.text6.REFRESHENDPROC7、显示数据表单源代码(A:\显示.sct)图6PROCEDURE Command1.Click &&单击“上条”按钮的事件过程IF NOT BOF()SKIP -1THISFORM.REFRESHmand2.ENABLED=.t.ELSEWAIT WINDOW '已经是第一条记录了!'ENDIFENDPROCPROCEDURE Command2.Click &&单击“下条”按钮的事件过程IF NOT EOF()SKIPTHISFORM.REFRESHmand1.ENABLED=.t.ELSEWAIT WINDOW '已经是最后一条记录了!'ENDIFENDPROCPROCEDURE Command3.Click &&单击“首条”按钮的事件过程GO TOPTHISFORM.REFRESHmand1.ENABLED=.f.mand2.ENABLED=.t.ENDPROCPROCEDURE Command4.Click &&单击“末条”按钮的事件过程GO BOTTOMTHISFORM.REFRESHmand1.ENABLED=.t.mand2.ENABLED=.f.ENDPROCPROCEDURE Command5.Click &&单击“返回”按钮的事件过程THISFORM.RELEASEENDPROC8、删除数据表单源代码(A:\删除.sct)图7PROCEDURE Click &&单击“显示”按钮的事件过程IF EMPTY(bo1.VALUE)=MESSAGEBOX("请选择学号!",48+0+0,"学生学籍管理系统") mand2.ENABLED=.f.ELSEmand2.ENABLED=.t.ENDIFAA=RECNO()GO AATHISFORM.txt学号.REFRESHTHISFORM.txt姓名.REFRESHTHISFORM.txt性别.REFRESHTHISFORM.txt出生年月.REFRESHTHISFORM.txt邮编.REFRESHTHISFORM.txt高数.REFRESHTHISFORM.txt英语.REFRESHTHISFORM.txtVfp.REFRESHTHISFORM.txt是否党员.REFRESHTHISFORM.txt电话.REFRESHTHISFORM.txt通信地址.REFRESHTHISFORM.edt备注.REFRESHENDPROCPROCEDURE Click &&单击“删除”按钮的事件过程SET DELETE ONDELETEYN=MESSAGEBOX('确实要删除这条记录?',4+32+256,'删除确认')DO CASECASE YN=6=TABLEUPDATE(.T.)=MESSAGEBOX("记录已成功删除!",0+64+0,'学生学籍管理系统') mand2.ENABLED=.f.bo1.DISPLAYVALUE="请选择"GO TOPCASE YN=7RECALLENDCASETHISFORM.REFRESHENDPROCPROCEDURE Init &&删除数据表单的初始化过程SET TALK OFFmand2.ENABLED=.f.ENDPROCPROCEDURE ClickUSE A:\XJ EXCLUSIVEPACKTHISFORM.RELEASEENDPROC(未完)VFP应用程序设计实例--学生学籍管理系统(4)电脑笔记2007-10-29 16:58:43 阅读3843 评论5 字号:大中小9、导出数据表单源代码(A:\导出.sct)图8PROCEDURE Click &&单击“确定”按钮的事件过程SET SAFETY OFF &&覆盖文件时不提示确认USE A:\XJGO TOPIF EMPTY(bo1.VALUE)=MESSAGEBOX("请选择盘符!",48+0+0,"学生学籍管理系统")ELSEIF EMPTY(THISFORM.text1.VALUE)=MESSAGEBOX("请输入文件名!",48+0+0,"学生学籍管理系统")ELSEIF RECC()>0 &&如果表记录大于0DRIVER=BO1.DISPLAYVALUE &&将组合框1的值赋给变量DRIVERFILENAME=ALLTRIM(THISFORM.TEXT1.TEXT) &&将去掉空格的文件名赋给变量FILENAMECOPY TO &DRIVER\&FILENAME &&将系统表文件复制到选定的盘符和文件名中 =MESSAGEBOX("本系统所有数据已转出完毕!",48,"信息提示")USETHISFORM.RELEASEELSE=MESSAGEBOX("没有任何数据,不能转出",48,"信息提示")USETHISFORM.RELEASEENDIFENDIFENDIFENDPROCPROCEDURE Click &&单击“取消”按钮的事件过程RELEASE THISFORMENDPROC10、导入数据表单源代码(A:\导入.sct)图9PROCEDURE Click &&单击“确定”按钮的事件过程SET SAFETY OFFIF EMPTY(bo1.VALUE)=MESSAGEBOX("请选择要导入的数据表所在的盘符!",48+0+0,"学生学籍管理系统")THISFORM.text1.SETFOCUSELSEIF EMPTY(THISFORM.text1.VALUE)=MESSAGEBOX("请输入要导入的数据表名!",48+0+0,"学生学籍管理系统")ELSEDRIVER=bo1.VALUEFILENAME=ALLTRIM(THISFORM.TEXT1.VALUE)USE A:\XJ? &&打印一空行ON ERROR ? MESSAGE() &&发生找不到文件的错误时,打印错误信息APPEND FROM &DRIVER\&FILENAME &&将选定的文件追加到系统表文件中 =MESSAGEBOX('数据表已成功导入原表!',0+64+0,'学生学籍管理系统')USETHISFORM.RELEASEENDIFENDIFENDPROC11、打印数据表单源代码(A:\打印.sct)图10PROCEDURE Command1.Click??CHR(7)REPORT FORM A:\学生学籍管理表.frx NOEJECT NOCONSOLE TO PRINTERENDPROCPROCEDURE Command2.ClickREPORT FORM A:\学生学籍管理表.frx PREVIEWENDPROCPROCEDURE Command3.ClickTHISFORM.RELEASEENDPROC学生学籍管理系统的开发和应用,可以提高学校的管理水平。
vfp数据库程序设计程序示例如何进行VFP数据库程序设计的示例。
请注意,vfp数据库是Visual FoxPro数据库的缩写。
第一步:理解VFP数据库编程的基础知识在进行VFP数据库程序设计之前,我们需要先理解VFP数据库编程的基础知识。
VFP数据库是一种关系型数据库,它使用表格来组织和管理数据。
每个表格包含一系列的字段,并且可以在表格之间建立关系。
VFP数据库还支持SQL查询语言,可以方便地查询和操作数据。
第二步:创建数据库在VFP中创建数据库非常简单。
首先,打开VFP软件,在菜单栏中选择"数据库",然后选择"新建"。
接下来,为数据库指定一个名称,选择保存位置,并点击"确定"。
数据库创建成功后,我们可以在VFP软件中看到它的图标。
第三步:创建表格在VFP数据库中,表格用于存储和管理数据。
要创建一个表格,首先确保数据库窗口处于活动状态。
然后,在数据库窗口中右键单击,选择"新建",然后选择"表格"。
接下来,为表格指定一个名称,并定义字段。
在每个字段中,我们可以定义字段名称、字段类型、字段长度以及其他属性。
创建完所有字段后,点击"确定" 完成表格创建。
第四步:插入数据在VFP数据库中插入数据十分简单。
首先,双击要插入数据的表格,打开表格编辑窗口。
然后,在表格编辑窗口中,点击"插入"按钮。
接下来,输入要插入的数据,每个字段占一列,然后点击"确定" 完成数据插入。
可以重复这个过程,插入更多的数据。
第五步:查询数据VFP数据库支持使用SQL查询语言来查询和操作数据。
在VFP软件中的菜单栏中选择"工具",然后选择"查询",打开查询编辑器。
在查询编辑器中,我们可以输入SQL查询语句。
例如,要查询某个表格中所有记录的所有字段,可以使用以下SQL查询语句:"SELECT * FROM table_name"。
11.1 系统需求分析传统的学生成绩管理方法不仅浪效率低,而且由于管理不规范容易导致各种错误的发生。
因此实现一个智能化、系统化的公共计算机成绩管理系统是十分必要和不可缺少的。
它将大大减轻管理者的劳动强度,降低出错率,提高管理的效率。
该系统可以实现如下功能:1. 数据需求通过调查,总结出该应用程序对数据的需求大致有如下这些:(1) 学生信息包括学号,姓名,性别,出生日期等(2) 学生成绩信息主要包括学号, 课程编号,平时成绩(3) 课程信息包括课程编号,课程名称2. 功能需求功能分析的任务是了解用户对数据的处理方法和输出格式。
(1) 基本数据录入基本数据包括学生信息、管理员信息、学生成绩休息和课程信息等。
要求系统能够录入这些数据,并且可以进行修改。
在数据录入和修改过程中应保持数据的参照完整性。
(2) 学生和管理员信息的维护要求能够根据需要对学生和管理员信息进行维护修改等。
(3) 打印输出打印学生信息表。
11.2 系统设计1. 程序总体结构设计在开始程序设计之前,首先应该将程序的总体结构以层次图的形式表示出来,便于对程序分层设计和实现。
图1所示为公共计算机成绩管理系统的功能模块图。
图1公共计算机成绩管理系统功能模块2. 数据库逻辑设计进行数据库设计的依据有三个:第一是在进行系统调查时由成绩管理员提供的各种处理数据;第二是功能设计结果;第三是数据库设计规范化理论。
数据库设计是系统设计的一项基本工作,其效果的好坏,对后续设计、调试、使用、维护等工作关系极大,因此,一定要高度重视这一部分工作。
当然,我们不能简单地将数据库设计理解为在计算机上用可视化的方法建立表的过程,其主要工作是建立一种完整、规范的数据模型以支持整个应用系统对数据的要求。
根据对实际情况进行分析建立关系模型1) 学生信息表(学号,姓名,性别,出生日期)2) 学生成绩表(学号, 课程编号,平时成绩)3 课程表(课程编号,课程名称)11.3 创建项目Visual Foxpro推荐在项目管理器中开发应用程序,因为项目管理器会为开发工作带来很多方便。
开发实例(6学时)一、【教学目标】1.掌握小型数据库应用程序的开发过程和方法。
2.掌握系统发布及生成的方法。
二、【重点和难点】重点:1.小型数据库应用程序的开发过程和方法。
2.系统发布及生成的方法。
难点:1.小型数据库应用程序的开发过程和方法。
三、【教学要点】一个应用软件如小型数据库应用系统,其开发过程采用生命周期法的理论,设计过程可以分为六个阶段:需求分析、概念设计、逻辑设计、物理设计、数据库实施和运行、数据库的使用和维护。
结合VFP本身的特点,下面给出一个数据库应用系统的设计流程,如图7.1所示:图7.1通常,项目由用户提出,开发人员到用户处进行初步调查了解情况,拟定出初步的方案,征得用户同意后,开始系统的分析与设计。
我们以商品进货销售系统为例,说明怎样用VFP 完整地开发一个应用系统。
7.2需求分析及主要功能模块通过与用户的交流,我们了解商品进货销售系统的主要功能包括:系统功能模块、数据维护模块、数据查询模块、报表打印模块。
商品进货销售系统完整的结构如图7.2所示:这些都是从用户角度看到的商品进货销售系统的主要功能,随着需求的进一步细化,用户会增加一些功能,每个功能模块又可以划分为几项子功能。
7.3数据库规划与设计先建立系统的存储结构,通过数据分析,按照数据库设计的规范化原则,先对每个主题建立一个或多个表。
然后再根据系统运行的需要建立一些辅助表。
进入VFP ,建立一个商品管理数据库,并建立表结构及表间关系。
1、几个主要表的表结构 (1)商品表:(2)供应商表商品进货销售系统系统功能 数据维护 数据查询 报表打印背景设置计算器日 历浏览数据增加记录修改记录退出系统利润查询客户查询前款查询销售分组报表供应商报表商品标签(4)销售表(5)客户表(6)商品类别表图7.37.4输入/输出设计1、表单设计系统设计的核心是表单。
对数据的操作类型从表中记录的观点看,可分为:输入新数据、修改已有数据,删除已有数据,查询数据,打印数据和统计分析数据。
VFP基本数据库系统开发实例(附图)西南大学计信院导学在Visual Foxpro中开发一个应用系统应该包括需求分析、项目创建、模块设计、运行调试、保存发布到建立帮助等,下面介绍如何把各个模块集成起来,并创建一个应用程序。
11.1 系统需求分析传统的学生成绩管理方法不仅浪效率低,而且由于管理不规范容易导致各种错误的发生。
因此实现一个智能化、系统化的公共计算机成绩管理系统是十分必要和不可缺少的。
它将大大减轻管理者的劳动强度,降低出错率,提高管理的效率。
该系统可以实现如下功能:1. 数据需求通过调查,总结出该应用程序对数据的需求大致有如下这些:(1) 学生信息包括学号,姓名,性别,出生日期,系科,备注,照片(2) 管理员信息包括用户名,密码,管理员姓名,权限,说明信息(3) 学生成绩信息主要包括学号, 课程编号,平时成绩,笔试成绩,上机成绩,总评成绩,审核否(4) 课程信息包括课程编号,课程名称2. 功能需求功能分析的任务是了解用户对数据的处理方法和输出格式。
(1) 基本数据录入基本数据包括学生信息、管理员信息、学生成绩休息和课程信息等。
要求系统能够录入这些数据,并且可以进行修改。
在数据录入和修改过程中应保持数据的参照完整性。
(2) 查询能够查询出学生成绩,和补考人员名单等。
(3) 学生和管理员信息的维护要求能够根据需要对学生和管理员信息进行维护修改等。
(4)成绩的审核根据学生的总评成绩审核学生的计算机成绩是否通过。
(5) 打印输出打印学生成绩表和补考人员名单等。
11.2 系统设计1. 程序总体结构设计在开始程序设计之前,首先应该将程序的总体结构以层次图的形式表示出来,便于对程序分层设计和实现。
图1所示为公共计算机成绩管理系统的功能模块图。
图1公共计算机成绩管理系统功能模块2. 数据库逻辑设计进行数据库设计的依据有三个:第一是在进行系统调查时由成绩管理员提供的各种处理数据;第二是功能设计结果;第三是数据库设计规范化理论。
数据库设计是系统设计的一项基本工作,其效果的好坏,对后续设计、调试、使用、维护等工作关系极大,因此,一定要高度重视这一部分工作。
当然,我们不能简单地将数据库设计理解为在计算机上用可视化的方法建立表的过程,其主要工作是建立一种完整、规范的数据模型以支持整个应用系统对数据的要求。
根据对实际情况进行分析建立关系模型1) 学生信息表(学号,姓名,性别,出生日期,系科,备注,照片)2) 管理人员信息表(用户名,密码,管理员姓名,权限,说明信息)3) 学生成绩表(学号, 课程编号,平时成绩,笔试成绩,上机成绩,总评成绩,审核否)4) 补考名单表(学号,姓名, 总评成绩,补考成绩)5) 课程表(课程编号,课程名称)11.3 创建项目Visual Foxpro推荐在项目管理器中开发应用程序,因为项目管理器会为开发工作带来很多方便。
在项目管理器中创建一个项目后,应用程序就具备了一个开发框架,然后在这个框架中,再利用项目管理器所提供的强大功能,按照需求来实现应用程序的设计。
用户可以启动Visual Foxpro,选择【文件】|【新建】命令,在打开的对话框中,选择“项目”单选按钮,然后单击“新建文件”按钮,接着在“创建”对话框中,输入项目文件名并确定项目路径(本例使用的路径为D:\公共计算机成绩管理系统),然后单击“保存”按钮,即可启动项目管理器。
一个完整的应用程序,即使规模不大,也会涉及到多种类型文件,如dbc数据库、dbf表以及菜单、表单、报表、位图等。
为了以后的修改、维护工作方便进行,就需要把这些文件放在不同的文件夹中便于管理维护,例如一般把dbc数据库文件、dbf表文件和cdx索引文件放在DA TE 目录,表单、报表、标签等放在FORMS目录等。
11.4数据库的物理设计a) 数据库名为公共计算机成绩管理.dbcb) 数据表i. 学生信息表.dbf学号/C/10,姓名/C/10,性别/L/1,出生日期/D/8,系科/C/30,备注/M/4,照片/G/4ii. 管理人员信息表.dbf用户名/C/10,密码/C/10,管理员姓名/C/10,权限/C/4,说明信息/C/20iii. 学生成绩表.dbf学号/C/10, 课程编号/C/2,平时成绩/N/6/2,笔试成绩/N/6/2,上机成绩/N/6/2,总评成绩/N/6/2,审核否/L/1iv. 补考名单表学号/C/10,姓名/C/10, 总评成绩/N/6/2,补考成绩/N/6/2v. 课程表课程编号/C/2,课程名称/C/14图2 公共计算机成绩管理数据库及其表结构11.5界面设计1) 创建启动表单下面设计应用程序的封面,主要由一个表单来实现,其效果如图10.4所示。
在项目管理器中,打开“文档”选项卡,选择“表单”选项,单击“新建”按钮,在打开的对话框中单击“新建表单”按钮,这时,将弹出一个表单设计器和表单Form1。
单击表单设计器工具栏中的标签和命令按钮,分别在表单中添加一个标签控件(采用系统默认名称Labell)和两个命令按钮控件(采用系统默认名称command1和command2)。
下面分别设置各对象的主要属性。
属性设置见表10.6所示。
设置command1对象的click事件代码为:do form 密码.scx*打开“密码”表单设置command2对象的click事件代码为:thisform.release*释放本表单Quit*清除事务处理退出VF2) 创建身份验证表单在项目管理器中,与主表单的创建方法相类似,可以创建“身份验证”表单的界面如图10.5所示。
首先通过表单控件工具栏在表单上添加二个标签控件、一个文本框控件及两个命令按钮控件。
其中“密码”表单中各对象的属性设置情况如表10.7所示:设置密码表单的init事件为:Thisform.text1.SetFocus()Thisform.text1.passwordchar='*'设置密码表单的load事件为:SELE 1USE 密码设置option1对象的click事件代码为:PUBLIC M.权限,M.密码sele 1SET EXAC ONLOCA FOR 密码=ALLTRIM(Thisform.text1.Value)IF FOUND()M.密码=密码M.权限=权限KUAN=1thisform.releaseELSEThisform.text1.passwordchar=''Thisform.text1.Value='密码错误!'A=INKEY(1)Thisform.text1.Value=''THISFORM.OPTIONGROUP1.VALUE=0Thisform.text1.SetFocus()Thisform.text1.passwordchar='*'KUAN=0ENDIF设置option2对象的click事件代码为:thisform.release*释放本表单clear event11.6主菜单设计下面利用Visual FoxPro的菜单功能设计应用程序的子系统,其结构示意如图10.8所示。
图10.8 打开项目管理器中的“其他”选项卡,选中【菜单】项,然后单击“新建”按钮,在弹出的对话框中单击“菜单”按钮,参照总体结构图10.8,在打开的菜单设计器中,设计主菜单,如图10.9所示。
图10.9单击菜单项后的“创建”按钮,即可在打开的菜单设计器窗口中创建该菜单项的子菜单。
如果要设置命令的快捷键,可以单击其后的选项按钮,然后在打开的对话框中,输入快捷键的名称,如图10.10所示。
图10.10最后单击确定按钮,返回到菜单设计器窗口,在“退出”菜单项的文本框中,输入clear events,然后单击关闭按钮,将菜单保存为“主菜单.mnx”。
运行该菜单,其效果如图10.11所示。
图10.11接着,创建应用程序的主文件,将其保存为“主程序.prg” 。
在代码编辑窗口中,输入以下代码:_screen.windowstate=2_screen.caption="公共计算机成绩管理系统 "_screen.closable=.f._screen.picture="图片\news_2003816214445.jpg"close allclear allclearset sysmenu off br> set sysmenu toset talk offset safety offset status bar offdo form 封面.scxDO 菜单1.MPXread eventset sysmenu to defaultset sysmenu onset status bar onclose allclear allreturn图10.12如图10.12所示,在项目管理器中,将“主程序.prg”设置为主文件,然后选中“主程序.prg”并单击“运行”按钮,即可得到如图10.13所示的效果。
图10.13运行主程序后的效果11.7表单设计为了实现和完善“公共计算机成绩管理系统”应用程序的功能,下面通过表单的调用来实现某些特定的底层功能。
在此,我们主要介绍“学生信息输入”表单、“成绩查询”表单、“学生信息维护”表单的制作过程,其他的表单制作过程与此类似,读者可以自己完成。
1)“学生信息输入”表单(学生信息输入.scx)“学生信息输入”表单主要用于输入学生的信息。
首先创建“学生信息输入”表单,然后选择【显示】|【数据环境】命令,在打开的“添加表或视图”对话框中添加“学生信息表”表到数据环境设计器中,如图10.14所示。
图10.14接着,设置“学生信息输入”表单的属性,见表10.9所示。
然后设置标签和文本框。
从数据环境设计器中,将下列字段拖放到表单中规定的位置,生成相应的标签和文本框:“学生信息表”表中的学号、姓名、性别、系科、出生日期、备注等字段。
从数据环境直接拖动到表单中定义标签和文本框不仅速度快,而且标签的Coption 和Name属性、文本框的Name属性都会自动设置与源字段有关的名字,文本框也会自动与源表中的源字段绑定,效果如图10.15所示。
图10.15最后,设置命令按钮组与事件代码。
从表单控件工具栏中单击“命令按钮组” 工具,在窗口的相应位置单击,创建命令按钮组控件。
在属性窗口,分别设置各个command的属性,并且在编辑状态下,对按钮命令组中的command进行排列与设定。
双击该控件,在打开的代码编辑窗口中,输入Click事件的代码。
Command1的Click事件的代码:select 学生信息表append blankthisform.refresh()Command2的Click事件的代码:SET EXACT onIF ALLTRIM(学号)=''DELETEPACKENDIFIF thisform.Optiongroup1.Option1.value=1REPLACE 性别 with .t.ELSEREPLACE 性别 with .f.endifCommand3的Click事件的代码:if !bof()SKIP -1elsego topENDIFIF 性别thisform.Optiongroup1.Option1.value=1thisform.Optiongroup1.Option2.value=0ELSEthisform.Optiongroup1.Option1.value=0thisform.Optiongroup1.Option2.value=1endifthisform.refresh()Command4的Click事件的代码:if !eof()skipelsego bottomENDIFIF 性别thisform.Optiongroup1.Option1.value=1thisform.Optiongroup1.Option2.value=0ELSEthisform.Optiongroup1.Option1.value=0thisform.Optiongroup1.Option2.value=1endifthisform.refresh()Command5的Click事件的代码:SET EXACT onGO topscanIF ALLTRIM(姓名)=''DELETEPACKENDIFendscanuserelease thisform关闭该窗口,保存代码,然后单击项目管理器中的运行按钮,可以得到如图10.16所示的表单效果。