1、VFP上机练习一、练习所有函数二、练习区分内存变量和字段变量在定义和使用上的不同。二、数据库和表操作 1 用CREAT TABLE 命令建立自由表XS2建立数据库文件SJK。用CREAT 命令建立数据库表CJ3 用向导方式建立K C表XS和CJ、KC结构、数据如下:XS(学生表):字段名 类型 宽度 意义 xh C 10 学号 xm C 6 姓名 xb C 2 性别 bjbh C 10 班级编号jg C 10 籍贯csrq D 出生日期zp G 照片CJ(成绩表) :字段名 类型 宽度 意义xh C 8 学号kcdh C 4 课程代号cj N 3 成绩KC(课程表): 字段名 类型 宽度 意义
2、 kcdh C 4 课程代号 kss N 2 课时数 kcm C 18 课程名 bxk L 必修课xf N 1 学分4 将XS表添加到SJK数据库,并设置XS表各字段规则如下:(1) 设置各字段的标题,标题名称为各字段的解释意义。(2)设置xh字段的有效性规则:学号的有效宽度只能 是6位、8位或10位。(3)设置xh字段的字段注释:该字段是学生表的主关键字,不允许重复。(4) 设置性别(xb)字段的默认值为“男”。(5) 为jg字段设置默认值:江苏。(6) 为了使XM字段在输入数据时自动删除前导空格,设置xm字段的相关属性。(7)为xs表设置说明信息:学生基本信息(8)为xs表设置删除触发器:
3、只有学号末尾两位是“02”至“03”的记录允许删除,否则不允许删除。(9)为xs表设置插入触发器:学号开头两位是00至10。5将KC表添加到SJK数据库,并设置KC表各字段规则如下: (1)设置课程表各字段的标题。 (2)设置课程代号(kcdh)字段的输入掩码:课程代号只能是两位数字字符。 (3)为Kc表创建记录级有效性规则:课时数(kss)不能少于学分(xf)。6 对表中记录操作如下:(1)修改KC表中所有记录的课时数(kss)和学分(xf)字段的值,方法是:所有必修课(BXK字段的值为.T.)的课时数和学分均增加1。(2)彻底删除CJ表中所有XH字段值末尾为“03”的记录。7 建立索引文件
4、:(1)对XS表创建一个候选索引bhxh,要求先按班级编号(bjbh)字段升序排序,班级编号相同的再按xh字段升序排序。(2) 对XS表创建唯一索引jsjg,要求按籍贯(jg)字段升顺排序,且仅对“江苏”籍的学生记录排序。(3)对KC表创建一个普通索引kx,要求先按kss字段排序,kss相同的再按学分(Xf)字段排序。(4)8 设置参照完整性(1)设置SJK中XS表的主索引xsxh,索引表达式为xh,设置学生成绩(CJ)表的普通索引cjxh,索引表达式为xh。以XS表为主表,CJ表为子表按xh建立永久关系,并设置XS表和CJ表之间的参照完整性:删除限制。(2)如果在XS表更改了某个学生的XH字
5、段,则要求自动更改成绩(CJ)表中相应XH字段值,根据此要求设置这两表之间的参照完整性。(3)已知KC表己存在主索kcdh,索引表达式为kcdh,成绩(cj)表己存在普通索引cjkcdh,索引表达式为kcdh。以KC表为主表,CJ表为子表按kcdh建立永久关系,并设置它们之间的参照完整性:更新级联。二、设计查询 1 已知学生(XS)表中含有字符型字段班级编号(bjbh)和日期型字段出生日期(csrq)。建立查询,要求如下: 基于学生(XS)表统计各班各年份出生的人数,要求输出字段为:bjbh、出生年份、人数,查询结果首先按班级编号升序排序,同一班级中再按人数多少降序排序,查询结果输出到临时表X
6、SNFRS2 己知学生(XS)表中含有字符型字段班级编号(bjbh)和日期型字段出生日期(csrq)。在TEST项目中建立查询,要求如下: 基于学生(XS)表统计各班上半年和下半年出生的人数,要求输出字段为:bjbh、时间、人数如果出生月份在1至6月,则时间为上半年,如果出生月份在7至12月,则时间为下半年,查询结果首先按班级编号升序排序,同一班级中再按时间降序排序,查询结果输出到临时表xsrs3 建立视图 XSCJVIEW,该视图数据由XS表和CJ表产生,其中包含了每个学生所学课程的情况。4 建立查询CHAXUN : 基于XSCJVIEW视图和KC表分别建立查询(1)统计各学生所学必修课的门
7、教和总学分。其中学生所学课程的学分必须当成绩(cj)在60n分或60分以上时才能取得,否则该课程的学分为0。要求输出字段为:Xh、xm、门数、总学分,查询结果按学号升序排序。 (2)统计各学生必修课和选修课的门数和总学分,学生所学课程的学分必须当成绩(cj)在60分以上时才能取得要求输出字段为XH、Xm、课程性质、门数、总学分,其中课程性质依据KC表中的bXH字段取值为必修或 选修(若bXH字段值为.T.。则课程性质取值为 “必修”,否则为“选修”。)查询结果按学号和课程性质升序排序设某图书管理系统数据库中有下列三张:TS.DBF(图书表),DZ.DBF(读者表),JY.DBF(借阅表).表结
8、构如下: TS表结构DZ表结构JY表结构字段名字段类型字段名字段类型字段名字段类型编号C(10)借书证号C(6)借书证号C(6)分类号C(10)单位C(18)编号C(10)书名C(8)姓名C(8)借书日期D出版单位C(20)性别C(2)还书日期D作者C(8)职称C(10)单价N(7,2)地址C(20)藏书册数N(4)1要求建立数据库TSGL并按上表结构建立三个表,输入相关记录2查询该图书系统中各出版单位出版图书的藏书总册数、总金额和平均单价。 3 查询借阅次数在10次以上的读者的借书证号、姓名、单位、和借阅次数。 设数据库SJK中已有教师表(JS),其中有字段:系代号(XDH), 工号(GH)
9、 姓名(XM),性别(XB);工资表(GZ)中有 工号(GH),工资(GZ)字段要求:1 建立相关数据库和表2 给予JS表和GZ表查询各系男女教师人数工资总金额,最高工资,要求输出字段包括:JS.XDH,JS.XB,人数,工资总金额,最高工资;结果以性别,系代号为排序依据三、设计菜单1 利用快捷菜单设计器创建一个快捷菜单MENUK,使得该菜单在表单RIGHTCLICK事件中调用时,运行界面如上图13-5所示:已知表单的WINDOWSTATE的属性值有三个:0-普通,1-最小化,2-最大化。按如下具体要求设计菜单。1) 设计菜单最小化菜单项的命令为:-SCREEN。ACTIVEFORM。WIND
10、OWSTATE=1;2)仿照最小化设计最大化;3)在关闭菜单项的命令中调用表单的REFRESH方法实现关闭表单的功能。4)在关闭的菜单项和背景色菜单项之间插入分组线;5)按图中所示创建背景色菜单的子菜单;6)为其他颜色菜单项设置命令。实现打开颜色对话框,供用户选择其他颜色来改变背景色。2 定义工具栏类例题:基于工具栏类创建子类TBFONT。要求如下:TBFONT的标题为字体工具栏。在工具栏中添加如下控件:控件类型及名称属性属性值标签Label1标 题字体对齐方式居右组合框CboFontName行源类型数组行 源FN命令按钮Command1标 题B粗 体.T. 命令按钮Command2标 题 I
11、斜 体.T .设置TBFONT的REFRESH的方法代码如下:ENAB=INLIST;(SCREEN.ACTIVEFORM.ACTIVECONTROL.BASECLASS,TEXTBOX,EDITBOX)该命令用来测定活动的表单中活动控件是否是文本框或编辑框,然后在此命令下面再添加一条命令,要求根据变量ENAB的值,利用工具栏的SETALL方法设置工具栏中所有控件的ENABLED的属性。设置组合框的CBOFONTNAME的INIT代码如下:PUBLIC FN(1)=AFONT(FN)设计完成后的工具栏应如下所示。四、设计表单 设计一个命令按钮组来移动记录指针,实现记录数据的滚动。设计一个命令按
12、钮组来实行记录数据的编辑。设计一个表单,该表单用来在学生记录中随机抽取3名获奖者。表单利用计时器控件控制抽奖的开始和结束,利用新建立的COUNT属性计数,利用命令按钮控制3次抽奖过程。表单运行时,命令按钮显示抽第一个人。单击开始按钮,此时按钮上滚动显示计时器事件所定位的学生记录的学号和姓名,当再次点击按钮时,停止计时器,并将最后定位记录的学号和姓名添加到按钮下方的列表框中,表单的COUNT属性值加1,命令按钮显示为抽第二个人,依次重复三次,得到结果运行效果如图所示:按如下要求设计表单:1 添加一个计时器,设计计时器的初始状态为禁用,并指定调用计时器事件的间隔为100毫秒。2 为表单添加一个新属性,名为COUNT 并设置初值为1。在表单中添加一个列表框,并设置其字号大小与宽度与命令按钮相同4 编写命令按钮的初始化事件代码,其功能是根据表单的COUNT属性值显示按钮标题为抽第几个人 。5设计按钮的CLICK事件代码,将按钮上的标题文本添加到列表框中