收藏 分销(赏)

实验五VisualFoxpro编程实践.docx

上传人:二*** 文档编号:4745927 上传时间:2024-10-11 格式:DOCX 页数:19 大小:928.29KB 下载积分:5 金币
下载 相关 举报
实验五VisualFoxpro编程实践.docx_第1页
第1页 / 共19页
本文档共19页,全文阅读请下载到手机保存,查看更方便
资源描述
实验五 Visual Foxpro编程实践一.实验目的与要求 掌握利用Visual Foxpro编制开发自己的应用程序的实践知识,并学会在程序调试中自行 发现问题和修改程序代码,最终完成应用程序的无错运行。 二.相关知识 利用Visual Foxpro自行开发编制应用程序的步骤: 1 ,设置好系统的工作环境(尤其注意工作目录的默认设置)。 2 .如果是初次进行,应领先建立一个工程,为该工程命名,激活工程管理器。如果是 接着上次的工作进行,那么翻开上次工作的本工程,同样也激活工程管理器。 3 .在工程管理器的“数据” 9 “数据库”下面创立一个数据库,并命名(如已创立,那么 跳过本步骤)。 4 .在工程管理器的“数据” T “数据库”今“表”下面进行数据表的创立或修改工作, 并输入少量的正确数据以便将来的运行调试(如果已经创立了数据表,那么跳过本步骤)。 5 .在工程管理器的“文档”下面创立该应用程序所用到的所有表单,设计好各表单的 界面并为表单里的控件填写程序代码.(注意为表单添加各自的数据环境,否那么会出错!) 6.试运行各表单,发现问题后重新修改有问题的表单的代码,反复调试和修改直至最 后能无错运行。 7 .将应用程序打包发布或制作成安装文件。 三.实验内容与步骤 本次实验以一个简单的学生成绩管理系统为例。首先,对该系统作一个简单的介绍: 该应用系统为完成学生信息和成绩的管理系统,主要有以下儿个应用模块: (1)用户登录管理.:系统具有管理员功能,只有取得管理员权限的人才能使用本系统。 (2)数据添加功能:对学生基本信息、教师基本信息、班级信息、课程信息、学生成 绩信息进行添加录入。 (3)数据查询功能:对上述信息的基本查询。 (4)数据修改功能:对上述信息可进行修改工作。 (5)统计操作:可分别按个人成绩、单科成绩统计出最高成绩、最低成绩和平均成绩 等。 (6)打印功能:对上述信息可进行打印。 实验步骤如下: 1 .数据库设计: 首先设置好系统的运行环境和工作目录,然后建立工程,为工程命名为“学生成绩管 理系统”,激活工程管理器,并在在工程管理器的“数据” 9 “数据库”下面创立一个 数据库,命名为“学生成绩管理”,在“数据库”的“表”下面创立以下各数据表: (1)用户信息表user(表名命名为user即可,不要加汉字。以下同。) 字段名称 类型 宽度 用户名 字符型 10 密码 字符型 10 (2)学生信息表student 字段名称 类型 宽度 学号 字符型 8 姓名 字符型 10 性别 字符型 2 函数与方法声明: Label2 Caption 课程名称 Label3 Caption 类别 Label4 Caption 教师代码 (1) 1 中的 Deactive 事件: 功能:当前学生情况查询页面被释放时,使数据查询设置过滤条件为空. 程序清单: set filter tol.Combol 中的 InteractiveChange 事件: 功能:根据下拉列表框的选择,设置班级信息的过滤条件,同时清空文本框信息. 程序清单: public m m=l. select studentset filter to 班级编号二111 l.Combo2 中的 InteractiveChange 事件: 功能:根据前面设置的班级过滤条件对学生信息进行查询,并将结果在当前页面显 示程序清单: locate for姓名=*用组合框中的值进行查找if found() 1尸学号1尸姓名 1 .=性别.二出生日期 2 .二”endif (4) 2中的Init事件: 功能:在“数据表浏览”页显示时进行相关的初始化工作. 程序清单: with 1.recordsourcetype=6 .recordsource='student'.refresh .columncount=5=60 .=65=40 =70=60 .rl.caption=,学号'.rl .caption='姓名, .rl .caption=性别,.rl .caption='出生日期, .rl .caption='班级编号,.readonly=.t. .deletemark=.f. endwith2.Combol 中的 IntelactiveChange 事件 功能:在“数据表浏览”页中根据下拉组合框中的选择对不同的表进行数据内容显 示 程序清单: &&加入如下代码,可防止由字段少的表往字段多的表切换时造成数据字段丧失无法 显示的问题with t.gridl .columncount=6.=60 ♦二65=50 .=66.二70 =70endwith &&即每次都事先把grid先刷新成行数教多的表. do casecase =1 with t.gridl.recordsourcetype=6 .recordsource='student'.columncount=5 .=60.=65 =40=70 =60.rl .caption='学号' .rl.caption='姓名'.rLcaption='性另『 .rl .caption=,出生日期,.rl .caption='班级编号, .refresh.readonly=.t. .deletemark=.f. endwithcase =2 with t.gridl .columncount=6 .recordsource=,teacher' .rl .caption='教师代码' .rl .caption='姓名, .rl .caption=性别, .rl .caption='出生日期' ・rLcaption='部门' .rl .caption='技术职务 =60.=65 =50.二66 =70=70 .refresh.readonly=.t. .deletemark二.f. endwithcase =3 with t.gridl .recordsourcetype=6 •recordsource='classes' .columncount=6.=60 .二65=50 =70.=60 .=60 .rl .caption='班级编号 .rl.caption='年级, .rl.caption='专业’ .rLcaption=,系代码, .rl.caption='学制, .rl.caption='类别' .refresh .rcadonly=.t. .deletemark=.f. endwithcase =4 with t.gridl.recordsourcetype=6 .recordsource=,course,.columncount=4 .=60= 100 =50=50 .rl .caption=裸程代码,.rl .caption二裸程名称, .rl .caption='类别,.rl .caption='教师代码' .refresh.readonly=.t. .deletemark=.f. endwithcase =5 with t.gridl .recordsourcetype=6 .recordsource=,score, .columncount=3 .=60= 100 =50.rl.caption二学号’ .rl .caption=,课程代码,.rl.c叩tion二成绩, .refresh.readonly=.t. .deletemark=.f. endwithendcase (5) 3中的Init事件 功能:当“课程浏览”页面被显示出来时,进行相关的初始化工作. 程序清单: select course1. 丫@1互=课程代码 2.1比=课程名称3.丫@111匕二类另1」 4.丫@1起二教师代码3中的Refresh事件 功能:在“课程浏览”页面中刷新当前的数据显示程序清单: select course.value二课程代码 1 .丫2111©=课程名称.value=类别 2 .value=^师代码3 中的 CommandGroupl 的 Click 事件 功能:利用按钮组完成对数据库中的记录浏览程序清单: select coursedo case case =1go top case =2skip -1 if bof()messagebox。已至lj首部!,,0+48」系统提示) go topendif case =3skip if eof()messageboxf已至,末尾!、0+48,,系统提示‘) go bottomendif case =4go bottom case =5se endcasesh (7) 数据修改模块 功能描述:用户可以通过不同的页面完成对5个不同表中的数据的修改操作 界面设计: 由于修改表单中对于5个表的操作方法类似,这里只给出第一个页面即“学生表”的 设计局部。其余4个页面的设计及相关的程序代码请同学们自己思考并完成。 表单名称:修改 文件名:修改.SCX 数据环境:,,,, 对象设置: 对 象 属性 值 Forml Caption 修改 PageFrame 1 PageCount 5 Command 1 Caption 返回: 1 RowSourceType 6-字段 RowSource Student.学号 1 RowSourceType 6-字段 RowSource Teacher.教师代码 1 RowSourceType 6-字段 RowSource Classess .班级编号 1 RowSourceType 6-字段 RowSource Course .课程代码 1 RowSourceType 6-字段 RowSource Score•学号 ndl Caption 确定 nd2 Caption 退出 函数与方法声明: (1) 1 中的 Activate 事件: 功能:在学生信息修改页面显示时进行初始化操作程序清单: select student go top Lvalue=学号 2 .value二姓名 3 .value=性别 4 .丫@1肥=出生日期 5 .value四土级编号 (2) l.Combol 中的 IntelactiveChange 事件: 功能:根据学号,查找对应的学生信息 程序清单: select student locate for 学号二 if found()1尸学号 1.二姓名1.二性别 1.二出生日期1 .二班级编号 endif ⑶LCommandl中的Click事件: 功能:当用户单击“确定”按钮后,将当前修改的数据保存到数据库中. 程序清单: select student a=alltrim(l.) b=alltrim(l.) c=alltrim(l.) d=alltrim(dtoc( 1.)) e=alltrim(l.) set exact on do casecase a=" messagebox。学生学号不能为空"0+48,,系统提示‘)1.CUS case b="messageboxC学生姓名不能为空"0+48,'系统提示,) 1.CUScase c=" messagebox,学生性别不能为空=0+48,'系统提示,)1.CUS case d="messagebox,学生出生日期不能为空=0+48,,系统提示‘) 1.CUScase e=" messagebox,学生班级编号不能为空1 0+48,'系统提示')1.CUS otherwisem=messageboxC确定要修改学生记录吗?"0+48,,系统提示,) if m=lselect student replace 学号 with areplace 姓名 with b replace 性别 with creplace 出生日期 with ctod(d) replace班级编号with emessagebox。修改成功!’) endif endcase (4) Lcommand2 中的 Click 事件: 功能:释放当前窗口 程序清单: se 2.6数据统计模块功能描述:用户可以通过不同的页面完成对5个不同表中的数据的修改操作 界面设计: 表单名称:统计文件名:统计.SCX 数据环境:,,对象设置: 对象 属 性 值 Forml Caption 统计 OptionGroupl ButtonCount 2 Label 1 Caption 最高成绩 Label2 Caption 最低成绩 Label3 Caption 平均成绩 Listl RowSourceType 6-字段 Label4〜Label6 (空白标签用于显示运算结果) Command 1 Caption 返回 函数与方法声明: (1) Forml中的Init事件 功能:在窗体被调用时,进行显示的初始化工作 程序清单: 5.caption=H 6.caption=" 7.caption=" (2) nGroupl 中的 IntelactiveChange 事件 功能:根据单项选择框的选择情况,进行数据源的设置 程序清单: do casecase =0 1 .rowsource=M*无选项时不设置数据源1 .refresh case =11 .rowsource='student.姓名' 1 .refreshcase -2 1 .rowsource='course.课程名称,1 .refresh endcase 3 3) 1 中的 IntelactiveChange 事件 功能:如果选项被改变,那么根据用户指定的新选项重新统计并显示结果 程序清单: do case case =1xm=alltrim() select studentlocate for 姓名=xm xh二学号select score calculate max(成绩),min(成绩),avg(成绩)for 学号=xh to nl, n2, n3.caption=alltrim(str(n 1, 4, 1)) 5 .caption=alltrim(str(n2, 4, 1)).caption=alltrim(str(n3, 4, 1)) case =2ch=alltrim() select courselocate for课程名称=ch kedm二课程代码select score calculate max(成绩),min(成绩),avg(成绩)for 课程代码=代出11 to ml, m2, m3.caption=alltrim(str(m 1)) 6.caption=alltrim(str(m2))7.caption=alltrim(str(m3)) endcase 4 4) ndl中的Click事件功能:释放当前窗口 程序清单:se.6数据打印模块 功能描述:完成相应的打印操作 界面设计: 表单名称:打印 文件名:打印.SCX数据环境:,,, 对象设置: 对 象 属性 值 OptionGroupl ButtonCount 5 Option 1 Caption 学生表 Option2 Caption 教师表 Option3 Caption 班级表 Option4 Caption 课程表 Option5 Caption 成绩表 Command 1 Caption 显示结果 Command2 Caption 返回 函数与方法声明: ⑴ndl中的Click事件 功能:根据选择的具体表,将其中的数据记录进行显示 程序清单: do casecase =1 select studentgo top do form打印结果显示list rest to printer case =2select teacher go top 班级编号 字符型 6 出生日期 日期型 8 (3)教师信息表teacher 字段名称 类型 宽度 教师代码 字符型 4 姓名 字符型 10 性别 字符型 2 职称 字符型 10 部门 字符型 10 出生日期 日期型 8 (4)班级信息表classes 字段名称 类型 宽度 班级编号 字符型 6 年级 字符型 4 专业 字符型 10 系代码 字符型 2 学制 字符型 2 类型 字符型 4 (5)课程信息表course 字段名称 类型 宽度 课程代码 字符型 6 课程名称 字符型 16 类别 字符型 4 教师代码 字符型 4 (6)分数信息表score 字段名称 类型 宽度 学号 字符型 8 课程代码 字符型 6 成绩 数值型 4 创立好以上数据表以后,应该向每个表中添加适量合法数据以便后面的测试。 5 .表单设计 2.1登录模块功能描述:实现只有指定的用户才能访问系统的功能。并且,只有身份为“管理员” 的用户才可以调用修改模块修改数据。 界面设计: do form打印结果显示 list rest to printer case =3select classes go topdo form打印结果显示 list rest to printer case =4select course go topdo form打印结果显示 list rest to printer case =5select score go topdo form打印结果显示 list rest to printer endcase ⑵nd2中的Click事件 功能:释放本窗口. 程序清单: se 2.9主程序 注意:在工程管理器里的“代码” 9 “程序”下面建立本系统的主程序 文件名: 程序清单: set talk off clear all 」e=・f. public mypath mypath=left(sys( 16), rat('\', sys(l 6))) set defa to &mypath do form read events 说明:每一个工程都应该有主程序,又叫入口程序,即整个工程是从哪里开始执行 的。 设置主程序的方法是在工程管理器中选中它,然后按鼠标右键将其设置为主程序。设 置为主程序的程序会以黑体字显示,以后应用系统的执行将首先从该程序开始执行, 由该程序来调用其它的程序或模块。 我们经常把系统的环境设置,公共变量设置等放在主程序之中。 表单名称:login 文件名: 数据环境: 对象设置: 对象 属性 值 说明 Forml Caption 欢迎使用学生成绩管理 系统 Lablel Caption 学生成绩管理系统 Lable2 Caption 请输入用户名: Lable3 Caption 请输入密码: Combo 1 RowSourceType 6-字段 指定数据值来源类型 RowSource User.用户名 指定数据值来源 Cammand 1 Caption 登录 Cammand2 Caption 退出 函数与方法声明: (1) Commandl 中的 Click 事件功能:完成在登录时对输入的用户名和密码的检验,如果数据表user中存在输入的用 户名和密码信息,那么调用主窗口(如果是管理员那么不但调用主窗口,还允许执行主窗口 的修改功能),否那么提示输入错误。 程序清单: private kl, yh, ststd密码不正确,请重新输入!, use userkl=alltrim( Lvalue) yh=alltrim( Lvalue) * 将用户输入的用户名和密码的值分别保存在yh和kl变量中 locate for alltrim(l.value)= =alltrim(user,用户名) * 在user表中查找是否有与yh和kl匹配的记录 if found() and alltrim(user.密码尸=kl * 正确的用户名和密码le=・f. close tables alldo form if yh=='admin'*如果是超级用户管理员,那么允许他使用main表单中的第三组按钮(即修改模块) n3.enabled=.t. endift.=” else * 错误的用户名和密码,系统给出提示,延迟2秒 wait window st timeout 2 Lvalue-' 1 .setfocus endif (2) Command!中的 Click 事件 功能:退出学生成绩管理系统 程序清单: clear events quit (3) Forml 的 Destroy 事件 功能:意外关闭程序窗口时的处理 程序清单: clear events (4) 主界面模块 功能描述:主要是提供本系统各功能模块的入口. 界面设计: 表单名称:main 文件名: 数据环境:无对象设置: 对 象 属性 值 Forml Caption 学生成绩管理系统 Lablel Caption 欢迎使用学生成绩管理系统 Lable2 Caption 请选择要操作的内容: Optiongroupl ButtonCount 6 nl Caption 添加记录 n2 Caption 查询记录 n3 Caption 修改记录 n3 Enabled .F. n4 Caption 统计数据 n5 Caption 打印报表 n6 Caption 退出系统 函数与方法声明: (1) Optiongroupl 中的 IntelactiveChange 事件: 功能:根据Optiongroupl中的选择单击按钮,调用各重要功能模块. 程序清单: do casecase =1 do form添加case =2 do form查询case =3 do form修改case =4 do form统计case =5 do form打印case =6 quit endcase (2) Optiongroupl 中的每一个 Option 的 Click 事件: 功能:与(1)中不同,(1)是指在Optiongroup中的各个Option切换时才触发的程序, 仅这样还不够,还耍编写每个Option被单击时触发的程序才完整。 程序清单: 对应nl的Click事件: do form添加 ・・・・・.(其余类推) (3) 数据添加模块功能描述:用户通过5个不同的页面来完成对学生信息表、教师信息表、班级表、 课程表和成绩表的数据添加操作。 界面设计: 器添加 学生表 学号 姓名 性别 教师表 Textl Text2 Text3 添加 班级表 课程表I 成绩表 班级编号|Text4 出生日期| Text5 注意:日期格式应为3/DD/TY 清空 返回主菜单 表单名称:添加文件名:添加.SCX 数据环境:,,, 对象设置: 对 象 属性 值 说明 Forml Caption 添加 PageFramel PageCount 5 Commandl Caption 返回主菜单 主表单中的Commandl Pagel Caption 学生表 Page2 Caption 教师表 Page3 Caption 班级表 Page4 Caption 课程表 Page5 Caption 成绩表 Command 1 Caption 添加 与上面的Commandl不 同,这是在各个页面中 的 Commandl Command2 Caption 清空 函数与方法声明: 因为添加表单中对于5个表的操作方法类似,所以这里只给出学生表的添加局部,其 余4个页面的程序请同学们自己对照思考和编制。 (1) Forml 中的 Active 事件功能:设置焦点位置 程序清单: 1.CUSForml 中的 Commandl 的 Click 事件 功能:释放当前窗口程序清单: (2) Pagel 中 Commandl 的 Click 事件功能:将输入的新记录信息添加到学生表中,完成新记录的添加工作 程序清单: numl=alltrim(l.)num2=alltrim(l.) num3=alltrim(l.)num4=alltrim(l.) num5=alltrim(l.)set exact on do case case num 1 ="messageboxC学号不能为空0+48」系统提示!’) l.cus case num2=Hmessagebox('姓名不能为空!',0+48,'系统提示!') l.cus case num3="messagebox(性别不能为空!,,0+48,,系统提示!') l.cus case num4="messagebox,班级编号不能为空!0+48,'系统提示!') l.cus case num5="messageboxC出生日期不能为空匕0+48」系统提示!,) l.cusotherwise a=messagebox(‘确认添加么?1+64+0,,系统提示!') if a=l select student go bottom insert into student(学号,姓名,性别,班级编号,出生日期)values(numl, num2, num3,num4, ctod (num5)) messageboxf 添力口成功!) else l.cus endifendcase (3) Pagel 中的 Command!的 Click 事件: 功能:清空当前页面上输入的数据程序清单: 由于其它各个页面上的添加数据的操作大同小异,这里不再赘述。 2.4数据查询模块功能描述:用户可以通过不同的页面完成对5个不同表中的数据的查询操作 界面设计: 表单名称:查询文件名:查询.SCX 数据环境:,,,,对象设置: 查询主表单中的对象设置: 对 象 属性 值 说明 Forml Caption 查询 PageFramel PageCount 3 Command 1 Caption 返回主菜单 主表单中的Command 1 1中的对象设置: 2用来对数据表进行浏览,其界面为: 对 象 属性 值 Combo 1 RowSourceType 6-字段 RowSource Classese .班级编节 Combo2 RowSourceType 6 .字段 RowSource Student.姓名 Label 1 Caption 请选择班级代码和姓名 Label2 Caption 班级代码 Label3 Caption 姓名 Label4 Caption 学号 Label5 Caption 姓名 Label6 Caption 性别 Label7 Caption 出生日期 国查询学生基本情况数据表浏览课程浏览 返回康菜单 其中的对象设置: 对 象 属性 值 Combo 1 RowSourceType 1-值 RowSource 学生表,教师表,班级表,课程表,成绩表 Style 2-下拉列表框 Value 1 Label 1 Caption 请选择要浏览的表 Gridl RecordSourceType 。-表 3用来进行课程浏览.其界面为: 其中的对象设置: 对 象 屈,性 值 CommandGroupl ButtonCount 5 Label 1 Caption 课程代码
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服