VFP应用系统的开发案例
vfp应用实例1

7、制作文本标签
• 下一步制做显示输、赢的文本标签,调 下一步制做显示输、赢的文本标签, 出工具栏(如工具栏被属性窗口挡住了, 出工具栏(如工具栏被属性窗口挡住了, 再按一下属性窗口按钮将其关闭), ),按 再按一下属性窗口按钮将其关闭),按 标签按钮 ,按制做文本框类似的方法做 出标签, 出标签,
启动FOXPRO 2、启动FOXPRO 6.0
• 目录建好后启动FOXPRO 6.0,启动后将看 目录建好后启动FOXPRO 6.0,启动后将看 到
3、设计软件
• 开始编软件之前先分析这是一个什么软 现在要做的是一个游戏机软件。 件,现在要做的是一个游戏机软件。 • 按下开始按钮后,上面的三个窗口就会 按下开始按钮后, 出现三个随机数,如果其中有“ 则赢 则赢, 出现三个随机数,如果其中有“7”则赢, 否则为输。 否则为输。
7、制作文本标签
• 然后按同样方法制做“输”字,自然也 然后按同样方法制做“ 要设为看不见,否则您就只输不赢了, 要设为看不见,否则您就只输不赢了,
8、制做按钮Leabharlann • 接下来制做按钮,按下控件工具栏上的 接下来制做按钮, 命令按钮” “命令按钮” ,在表单上以制做文本框 的同样方法做出第一个按钮
8、制做按钮
7、制作文本标签
• 设置其标题,调出属性窗口,在布局中 设置其标题,调出属性窗口, 找到“Caption”属性 属性, 标题”属性, 找到“Caption 属性,即“标题”属性, 在设置框中输入“ 然后回车, 在设置框中输入“赢”,然后回车,
7、制作文本标签
• 与文本框相同的方法设置字体大小为36, 与文本框相同的方法设置字体大小为36, 36
6、制作文本框
• 下面开始制做显示数字的文本框,调出 下面开始制做显示数字的文本框, 表单控件工具栏,方法为按工具栏“ 表单控件工具栏,方法为按工具栏“文 本框” 本框”按钮
12vfp系统开发实例.ppt

需求分析
数据分析
功能分析
数据库设计 应用程序设计
系统调试
是否满意?
N
Y
系统运行与维护
湖南文理学院电信学院——叶华
3
1.数据库设计步骤
分析数据需求 收集和规划数据
.尽量避免数据的重复,可减少更 改数据时出错的可能性;
.对数据合理分类,明确表的个数 及其需存储的信息; .防止删除有用的信息。
湖南文理学院电信学院——叶华
15
12.2.4 运行设计
一、装载数据:打开相应的数据表,并输 入数据。
二 、 设 置 应 用 系 统 程 序 项 : 在 windows 的 开始菜单中建立程序项来运行应用程序。
湖南文理学院电信学院——叶华
16
日期,小时工资) 零件用量:LJYL(编号,零件号,数量) 零件库存:LJKC(零件号,零件名,成本,价格,库存量,
最低库存,订货量)
湖南文理学院电信学院——叶华
11
(2)建立表之间的关联。
牌 号
汽车
车主名 车主
修理单
工 号
编 号
二、物理设计
修理工
零件号
零件用量
零件库存
数据库的物理设计就是用指定的软件来创建 数据库,定义数据库表,以及表之间的关联。
使用VFP生成汽车修理管理系统的6张数据表, 并为各个数据表建立索引。
湖南文理学院电信学院——叶华
12
12.2.3 应用程序设计
一、总体设计
汽车修理管理系统
登记
零件管理
查询 打印
修车 汽车 修理工
零件
零件 零件
登记 修理 管理 订货计划 入库 出库
发
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学生学籍管理系统的开发和应用,可以提高学校的管理水平。
《Visual FoxPro 6.0数据库应用》教学课件 项目十 系统开发实例

任务实施
2 物理设计 物理设计就是确定逻辑设计中得到的每个表的具体结构,包括字段的名称、类型、宽度及小数
位数。下面列出了图书管理系统中4个表的表结构和表中记录。 读者信息表 读者信息表的结构如表所示。
字段名称 字段类型 字段宽度 小数位数 字段名称 字段类型 字段宽度 小数位数
借书证号 字符型
8
姓名
图书借阅表〔借书 证号,姓名,联系 方式,条形码,馆 藏编号,书名,借 书日期,还书日期 〕
管理员信息表〔用 户名,密码〕
表设计 根据对系统涉及数据的整理,以及系统对输 入、输出的分析,本系统建立了4个表
其中,括号外是表名,括号内是表中的字段名,直线下划线标识的是主索引,曲线下划线标识的是普 通索引。
endif endif
“退出系统〞按钮的Click事件过程代码如下: quit
— 22 —
开发“图书管理系统”
2 创建管理员界面 管理员在登录界面输入正确的用
户名和密码后,单击“登录〞按钮会 进入管理员界面。管理员界面允许管 理员进行查询、管理和借还书登记等 操作,如下图。
VFP数据库系统开发实例(附图)

11.1 系统需求分析传统的学生成绩管理方法不仅浪效率低,而且由于管理不规范容易导致各种错误的发生。
因此实现一个智能化、系统化的公共计算机成绩管理系统是十分必要和不可缺少的。
它将大大减轻管理者的劳动强度,降低出错率,提高管理的效率。
该系统可以实现如下功能:1. 数据需求通过调查,总结出该应用程序对数据的需求大致有如下这些:(1) 学生信息包括学号,姓名,性别,出生日期等(2) 学生成绩信息主要包括学号, 课程编号,平时成绩(3) 课程信息包括课程编号,课程名称2. 功能需求功能分析的任务是了解用户对数据的处理方法和输出格式。
(1) 基本数据录入基本数据包括学生信息、管理员信息、学生成绩休息和课程信息等。
要求系统能够录入这些数据,并且可以进行修改。
在数据录入和修改过程中应保持数据的参照完整性。
(2) 学生和管理员信息的维护要求能够根据需要对学生和管理员信息进行维护修改等。
(3) 打印输出打印学生信息表。
11.2 系统设计1. 程序总体结构设计在开始程序设计之前,首先应该将程序的总体结构以层次图的形式表示出来,便于对程序分层设计和实现。
图1所示为公共计算机成绩管理系统的功能模块图。
图1公共计算机成绩管理系统功能模块2. 数据库逻辑设计进行数据库设计的依据有三个:第一是在进行系统调查时由成绩管理员提供的各种处理数据;第二是功能设计结果;第三是数据库设计规范化理论。
数据库设计是系统设计的一项基本工作,其效果的好坏,对后续设计、调试、使用、维护等工作关系极大,因此,一定要高度重视这一部分工作。
当然,我们不能简单地将数据库设计理解为在计算机上用可视化的方法建立表的过程,其主要工作是建立一种完整、规范的数据模型以支持整个应用系统对数据的要求。
根据对实际情况进行分析建立关系模型1) 学生信息表(学号,姓名,性别,出生日期)2) 学生成绩表(学号, 课程编号,平时成绩)3 课程表(课程编号,课程名称)11.3 创建项目Visual Foxpro推荐在项目管理器中开发应用程序,因为项目管理器会为开发工作带来很多方便。
系统开发实例(VisualFoxPro及其应用系统开发谭浩强主编)

CLEA ALL SET VIEW TO sjhj.vue && 统一设置数据环境,自动关闭所有的工作区后打开视图文件 PUBLIC xldh,zljf && xldh用于存储输入的修理单号;zljf存储总零件费,打印发票时用
x&& 显示封面(参阅例7-1,并事先将fm表单复制到C:\qcxl)
第10章 系统开发实例
10.1 开发VFP数据库应用系统的一般步骤
图10.1 以处理为中心的数据库应用系统开发示意图
需求分析
充分调研 写出需求规范说明书
数据库设计
逻辑设计 物理设计 数据代码设计
应用程序设计
创建子类 用户界面设计与编码 数据输出设计 数据库维护功能 构造VFP应用程序
软件测试
应用程序发布
图10.9 表间关联的设计
物理设计
1. 修理单(C:\QCXL\XLD.DBF) xld(编号 c(4), 牌号 c(8), 修理项目 c(12), 送修日期 d, 完工日期 d, 工号 c(4) 普通索引, 修理小时
n(4.1)) 2.汽车(C:\QCXL\QC.DBF) qc(牌号 c(8) 普通索引, 型号 c(6), 生产厂 c(20), 车主名 c(8)) 3.车主(C:\QCXL\CZ.DBF) cz(车主名 c(8) 普通索引, 地址 c(16), 电话 c(7)) 4. 修理工(C:\QCXL\XLG.DBF) xlg (工号 c(4) 普通索引, 姓名 c(8), 地址 c(16), 电话 c(7), 出生日期 d, 进厂日期 d, 小时工资 n(5.2)) 5. 零件用量(C:\QCXL\LJYL.DBF) ljyl(编号 c(4) 普通索引, 零件号 c(6), 数量 n(2)) 6. 零件库存(C:\QCXL\LJKC.DBF) ljkc(零件号 c(6) 普通索引, 零件名 c(10), 成本 n(8.2), 价格 n(8.2), 库存量 n(3), 最低库存 n(3), 订货
VFP开发实例

开发实例(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应用程序设计实例

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学生学籍管理系统的开发和应用,可以提高学校的管理水平。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
14.3.5 系统工具条的设计 • 系统工具条是系统菜单的另一种表现形式,通过系 统工具条中所列的命令按钮,同样可以完成系统功 能的操作。 14.3.6 主程序的设计 • 所谓主程序就是一个应用系统的主控软件,是系统 首先要执行的程序。 • 以下通过实例介绍一般应用系统主程序的任务设计。 1. 设置系统运行参数 • 在主程序中,首先要设置系统运行参数,从而确定 整个系统运行过kcolor=rgb(64,128,128) _screen.lbl1.autosize=.t. _screen.lbl1.fontsize=24 _screen.lbl1.fontname=″楷体_GB2312″ _screen.lbl1.caption=allt(systit) _screen.lbl1.left=(_screen.width-len(systit)*16-2)/2 _screen.lbl1.top=74 _screen.lbl1.forecolor=rgb(0,0,0) _screen.lbl1.visible=.t. _screen.lbl1.backstyle=0 _screen.addobject(″lbl3″,″label″)
set blocksize to 64 set collate to ′stroke′ set sysformats off set seconds on set century on set currency left set currency to ′NT$′ set hours to 12 set date to ansi set decimals to 2 set fdow to 1
_screen.img1.visible=.t. _screen.img1.picture=″c:\\example\\phot.bmp″ systit=″系统标题″ _screen.caption=systit _screen.windowstate=2 _screen.movable=.f. _screen.backcolor=rgb(64,128,128) _screen.minbutton=.f. _screen.maxbutton=.f. _screen.showtips=.t. _screen.addobject(″lbl1″,″label″)
set fweek to 1 set mark to ′.′ set separator to ′,′ set point to ′.′ set talk off set safety off set defa to c:\example 2. 系统全局变量的定义 • 在系统运行过程中,将要使用许多全局变量作为临 时存储数据的单元,实现数据多次利用、传递、输 入及输出等操作。在主程序中,要定义整个系统中 的全局变量。
_screen.lbl3.backcolor=rgb(64,128,128) _screen.lbl3.autosize=.t. _screen.lbl3.fontsize=14 _screen.lbl3.fontname=″楷体_GB2312″ _screen.lbl3.caption=″研制人:作者 ″ _screen.lbl3.left=(_screen.widthlen(_screen.lbl3.caption)*10-2)/2 _screen.lbl3.top=180 _screen.lbl3.forecolor=rgb(255,255,0) _screen.lbl3.visible=.t. _screen.lbl3.backstyle=0 _screen.addobject(″lbl4″,″label″)
4. 系统工具条调用 • 工具条设计一般可分为两类:一类是在表单中调用 的工具条,这种工具条设计方法比较简单,可直接 从类定义中继承。另一类工具条是在Visual FoxPro 主窗口调用,设计这种工具条时,先要定义一个 container类(容器类),然后在容器类中添加按钮, 再设置按钮图标及其click代码,这样的工具条是通 过主程序调用的。 • 例14.4 若有一个工具条,存放在类库(mtoolbar)中, 其类名为(mtoolbar1),调用工具条的方法如下: _screen.addobject(″mtoolbar1″,″mtoolbar″) _screen.mtoolbar1.left=0 _screen.mtoolbar1.top=-2
4. 维护阶段 • 在应用系统开发的维护阶段,要经常修正系统程序 的缺陷,增加新的性能。在这个阶段,测试系统的 性能尤为关键,要通过调试工具检查语法错误和算 法设计错误,并及时加以修正。14.2应用系统总体 规划应用系统总体规划的设计,是系统开发的初步, 也是整个系统设计的关键。一个好的系统总体规划, 对整个应用系统开发过程起着积极的作用。 • 一个较完善的应用系统应具有以下不同功能的模块: (1) 应用系统主程序 • 应用系统主程序是整个系统最高一级的程序。通过 这个程序,可以启动系统、了解系统总体功能。
set escape on set keycomp to windows set carry on set confirm on set exact on set near on set ansi off set deleted on set optimize on set refresh to 0,5 set odometer to 100
(3) 规范数据 • 按“数据规范化”原则,设计多个表,合理定义每 个表中各个字段的属性。 (4) 建立关联 • 给字段建立索引,确定多表间的关联关系类型。 (5) 组装数据库 • 建立数据库,添加表,确定多表间的关联关系。
14.3.2 数据表单的设计 • 设计数据表单,就是设计以下几种类型的表单: (1) 数据输入表单; (2) 数据维护表单;
14.1 应用系统开发的一般过程
• 应用系统开发一般要经过系统分析、系统设计、系统 实施和系统维护几个阶段。
1. 分析阶段
• 在应用系统开发的分析阶段,信息收集是决定系统开 发可行性的重要环节。程序设计者要通过对应用系统 所需信息的收集,确定应用系统的总目标、应用系统 开发的总体思路及开发所需的时间等。
(5) 应用系统数据库 • 系统数据库是系统的数据资源,是整个系统运行过程 中全部数据的来源。通过数据资源,可以为系统提供 必要的数据资料。在进行系统开发时,首先要设计数 据库,设计好数据库中诸多数据表,设计好数据表间 的关联关系,设计好数据表的结构,然后再设计好由 数据库资源生成的视图文件及查询文件。 (6) 应用系统数据输入表单 • 系统数据输入表单是原始数据输入窗口。通过数据输 入窗口,可以准确、快捷地输入原始数据信息。 (7) 应用系统数据维护表单 • 系统数据维护表单是用来维护系统全部数据资源的窗 口。通过数据维护表单,可以修改、删除、增加或显 示数据。
第14章
14.1 14.2 14.3 14.4 习题
应用系统开发
应用系统开发的一般过程 应用系统总体规划 应用系统主要功能模块的设计 应用系统主要功能模块的组装
• 应用系统开发是使用数据库管理系统软件的最终目 的。在进行应用系统开发过程中,将综合地运用前 面各章所讲的知识和设计技巧,亦是对本书学习过 程一个全面的、综合的运用和训练。本章将结合一 些具体案例,介绍应用系统开发的一般过程,以及 怎样设计一个Visual FoxPro的应用系统。
(8) 应用系统数据检索表单 • 系统数据检索表单是系统进行数据信息检索的窗口。 通过该表单,可以查找、发布、浏览或输出数据信 息。 (9) 应用系统帮助表单 • 系统帮助表单是系统操作的说明信息的发布窗口。 通过该表单可以实时获得操作提示信息。 (10) 应用系统项目文件 • 系统项目文件是整个系统核心文件,它是系统所有 资源文件集合。通过该文件,可以根据需要对系统 资源进行维护、调试和保存,另外还可以通过它生 成系统的可执行文件。
_screen.lbl4.backcolor=rgb(64,128,128) _screen.lbl4.autosize=.t. _screen.lbl4.fontsize=14 _screen.lbl4.fontname=″楷体_GB2312″ _screen.lbl4.caption=″版权所有 (c) 1999″ _screen.lbl4.left=(_screen.widthlen(_screen.lbl4.caption)*10-2)/2 _screen.lbl4.top=210 _screen.lbl4.forecolor=rgb(255,255,0) _screen.lbl4.visible=.t. _screen.lbl4.backstyle=0
2. 设计阶段
• 在应用系统开发的设计阶段,首先要对应用系统开发 进行总体规划。认真细致地搞好规划,可以省时、省 力、省资金。然后,要具体设计程序完成的任务,数 据的输入、输出的要求以及数据结构的确立等,并用 算法描述工具详细描述算法。
3. 实施阶段 • 在应用系统开发的实施阶段,要按系统论的思想, 把程序对象视为一个大的系统,将这个大系统分成 若干小系统,保证高级控制程序能够控制各个功能 模块。 • 一般采用“自顶向下”的设计思想开发高级控制程 序,并逐级控制更低一层的模块,每一种模块执行 一个独立精确的任务,且受控于高级程序。 • 编写程序时要坚持使程序易阅读、易维护及易修改 的原则,并使过程和函数尽量小而简明,尽量减少 模块间的接口数目。
• 例14.1设计定义系统运行参数程序。 *MAIN.PRG clear all close all set sysmenu off set sysmenu to set clock on set status bar off set notify off set palette off set bell on
• 例14.2 定义一个系统全局变量。 public systit 3. 系统主页面设计 • 系统的主页面,通常是由主程序设计的,也有通过 表单设计完成的。 • 例14.3 用程序代码设计一个系统主页面。 _screen.addobject(″img1″,″image″) _screen.img1.stretch=2 _screen.img1.left=0 _screen.img1.top=0 _screen.img1.width=_screen.width _screen.img1.height=_screen.height