VFP应用系统的开发案例
- 格式:ppt
- 大小:262.50 KB
- 文档页数:31
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学生学籍管理系统的开发和应用,可以提高学校的管理水平。
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应用程序设计实例--学生学籍管理系统(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综合设计实例图书管理系统1图书管理系统实例梅毅一、系统简介1、本图书管理系统,包含了对图书、作者、读者等基本信息的管理,也包含了借书信息,还书信息等的查询,和管理。
本系统具有如下功能:能够修改、输入、查询、与图书有关的信息,如图书信息、读者信息、作者信息、图书借阅信息等:能打印图书信息,图书借阅信息等。
2、本系统的总体设计树状图二、具体操作步骤1、创建项目,名为图书管理系统2、数据库设计(2)在项目中创建一个数据库,并把五个表添加到数据库中。
在图书表中,为书号建立主索引,为作者编号建立普通索引,通过该索引和作者表之间创建关联。
在作者表中,为作者编号设置主索引。
在读者表中,读者编号为主索引。
在借阅表中,为读者编号、书号字段创建普通索引,通过书号和图书表之间关联;通过读者编号和读者表之间关联。
在用户表中,为读者编号建立索引,通过读者编号和读者表建立关联。
最终形成如下图所示的数据库。
3、界面设计(1)系统启动表单在项目中创建一个表单,命名为启动。
如下图,添加一个标签控件,两个命令按钮,按照自己的喜好分别设置他们的属性。
在登录按钮的Click事件下写入如下代码:ThisForm.ReleaseDo form 身份验证双击退出按钮,并在它的Click事件写下如下代码:Clear event(2)创建身份验证表单在项目中创建,一个表单,保存为“身份验证”并按以下图添加控件,设置属性。
打开他的数据工作环境,把“用户”表添加到其中,在进入的click事件写入如下代码:locate for 用户名=bo1.valueif alltrim(thisform.Text1.value)alltrim(密码)messagebox("读不起,密码有误!你不能进入本系统",0,"请注意:")elsethisform.releasedo form 主表单endif在退出的click事件下写如下代码:thisform.releaseclear event(3)创建住表单创建一个表单保存为“主表单”并且设置它的ShowWindows 属性为“2——作为顶层表单”如图设置它的其他控件属性。
实验五 Visual Foxpro编程实践一. 实验目的与要求掌握利用Visual Foxpro编制开发自己的应用程序的实践知识,并学会在程序调试中自行发现问题和修改程序代码,最终完成应用程序的无错运行。
二. 相关知识利用Visual Foxpro自行开发编制应用程序的步骤:1.设置好系统的工作环境(尤其注意工作目录的默认设置)。
2.如果是初次进行,应当先建立一个项目,为该项目命名,激活项目管理器。
如果是接着上次的工作进行,则打开上次工作的本项目,同样也激活项目管理器。
3.在项目管理器的“数据”→“数据库”下面创建一个数据库,并命名(如已创建,则跳过本步骤)。
4.在项目管理器的“数据”→“数据库”→“表”下面进行数据表的创建或修改工作,并输入少量的正确数据以便将来的运行调试(如果已经创建了数据表,则跳过本步骤)。
5.在项目管理器的“文档”下面创建该应用程序所用到的所有表单,设计好各表单的界面并为表单里的控件填写程序代码.(注意为表单添加各自的数据环境,否则会出错!)6.试运行各表单,发现问题后重新修改有问题的表单的代码,反复调试和修改直至最后能无错运行。
7.将应用程序打包发布或制作成安装文件。
三. 实验内容与步骤本次实验以一个简单的学生成绩管理系统为例。
首先,对该系统作一个简单的介绍:该应用系统为完成学生信息和成绩的管理系统,主要有以下几个应用模块:(1)用户登录管理:系统具有管理员功能,只有取得管理员权限的人才能使用本系统。
(2)数据添加功能:对学生基本信息、教师基本信息、班级信息、课程信息、学生成绩信息进行添加录入。
(3)数据查询功能:对上述信息的基本查询。
(4)数据修改功能:对上述信息可进行修改工作。
(5)统计操作:可分别按个人成绩、单科成绩统计出最高成绩、最低成绩和平均成绩等。
(6)打印功能:对上述信息可进行打印。
实验步骤如下:1.数据库设计:首先设置好系统的运行环境和工作目录,然后建立项目,为项目命名为“学生成绩管理系统”,激活项目管理器,并在在项目管理器的“数据”→“数据库”下面创建一个数据库,命名为“学生成绩管理”,在“数据库”的“表”下面创建以下各数据表:(3)教师信息表 teacher创建好以上数据表以后,应该向每个表中添加适量合法数据以便后面的测试。
VFP应用举例(面向对象程序设计)一、界面设计二、数据表结构设计与建立1、表结构设计学生信息表结构2、表结构建立D:\xsml\xsxxb三、程序设计(一)对象设计具体步骤如下:1、打开VFP(如果正常出现如下窗口)2、建立空表单,操作步骤为:(1)单击“文件”/“新建”,如果正常出现如下选项卡(2)在选项卡选择表单(单选框),单击“新建文件”,进入表单设计窗口(3)设置表单属性Height、Width、Backcolor、Autocenter、Init Event、······3、添加控件及各个控件的属性设置(二)为各个控件指定程序(面向对象编程)1、表单事件Init event的程序代码sele 1use d:\xsml\xsxxb2、文本框text1事件valid event的程序代码sele 1locate for alltrim(xsxxb.xh)==alltrim(a1)if .not. eof()wait wind "该学生信息已经存在,按任意键返回!!!" retu .f.endifretu .t.3、命令按钮“开始”事件click event的程序代码store space(10) to a1,a2,a4a3=9999999999ThisForm.text1.enabled=.t.ThisForm.text2.enabled=.t.ThisForm.text3.enabled=.t.ThisForm.text4.enabled=.t.4、命令按钮“重输”事件click event的程序代码store space(10) to a1,a2,a4a3=9999999999ThisForm.text1.enabled=.t.ThisForm.text2.enabled=.t.ThisForm.text3.enabled=.t.ThisForm.text4.enabled=.t.thisform.refresh5、命令按钮“确认”事件click event的程序代码sele 1appe blanrepl xh with a1,xm with a2,nl with a3,ah with a4 thisform.refresh6、命令按钮“退出”事件click event的程序代码sele 1usethisform.release。
Visual FoxPro及其应用系统开发实验指导书实验一:基本表的建立1、实验目的:掌握建立基本表的方法(表设计器的使用)应掌握的命令:CREATE <表名>USE <表名>APPEND2、实验内容:建立如下所示的商品表:表名:SP。
DBF结构:SP(货号C(6),品名C(8),迸口L,单价N(7,2),数量N(2),开单日期D,生产单位C(18),摘要M,商标G) 记录内容:货号品名进口单价数量开单日期生产单位备注商标LX-750 影碟机 T 5900.00 4 08/10/96 松下电器公司YU-120 彩电 F 8700.00 4 10/10/96 上海电视机厂AX-120 音响 T 3100.00 5 11/10/95 日立电器公司DV-430 影碟机 T 2680.00 3 09/30/96 三星公司 96年9月1日起调价FZ-901 取暖器 F 318.00 6 09/05/96 中国富利电器厂LB-133 音响 T 4700.00 8 12/30/95 松下电器公司SY-701 电饭锅 F 258.00 10 08/19/96 上海电器厂本产品属改进型NV-920 录放机 T 1750.00 6 07/Z0/96 先锋电器公司3、操作要求:(1)在 Visual FoxPro 的界面下,设置默认的文件夹和日期的格式(2)用表设计器建立表的结构(3)建立SP。
DBF的结构后,立即输人前6个记录的数据,其中头两个记录的商标字段,由读者在Windows环境下选两个图标分别输人。
数据输人后存盘退出。
(4)打开SP。
DBF,分别查看其结构与记录,包括备注字段与商标字段的数据。
(5)追加最后两个记录,结束后分别以浏览格式和编辑格式查看数据。
(6)分别用链接、嵌人方法为SB。
DBF的轿车增加‚商标‛,图形文件自选。
实验二:表达式、函数、子句1、实验目的:○掌握常量、内存变量、字段变量、函数、表达式的概念和计算方法;○掌握对表操作命令中的范围、条件、字段子句的应用○应掌握的命令:<内存变量名> = <表达式>LIST | DISPLAY MEMORY [LIKE <统配符>]RELEASE ALL [<内存变量名列表>| LIKE <统配符> | EXCEPT <统配符>] GO TOP | BOTTOM | <n>SKIPLIST | DISPLAY [<范围>] [FOR <条件>] [FIELDS <表达式列表> ]2、实验内容:○内存变量的赋值、显示、清除;○各种类型数据的运算符与运算规则;○函数的验证;○表达式的计算;○ LIST、DISPLAY命令的使用3、操作要求:(1)在 Visual FoxPro 的界面下,设置默认的文件夹和日期的格式(2)变量的赋值:请把’万大兵’、12345.789、{^2002-10-01}、.T.四个常量分别赋值给ma、mb、mc、md四个内存变量。