(2) 修改罚款(fk)字段的宽度,要求该字段能存储3位整数、1位小数。 (3) 设置lx字段的标题属性,使该字段的字段名在浏览窗口中显示为“读者类型”。 (4) 设置lx字段的有关属性,使该字段中输入的字母均为大写字母。 (5) 创建一个普通索引abcd,要求以读者类型(lx)字段进行排序,相同时以读者号(dzh)字段排序。 2. 用COPY TO 命令,将JY表中dzh字段值的前二位为“01”而且hsrq字段值不为空的记录复制到JYB表中
(存储在练习盘根目录中)。(提示:条件中可使用 Empty()函数) 3. 修改项目文件TEST的项目信息:邮政编码为“210093”。
4. KC表和CJ表已分别存在以kcdh字段为索引表达式的主索引kcdh和普通索引cjkcdh。以KC表为主表、
CJ表为子表,基于kcdh字段建立永久关系,并根据以下要求设置参照完整性规则:当在KC表中删除记录时,若CJ表中有相应的记录(kcdh字段的值),则同时删除CJ表中相应记录。 练习20
打开练习盘根目录中的项目文件TEST,在该项目中已有一数据库SJK及若干表。 1. 按以下要求修改SJK数据库中JY表:
(1) 设置表的触发器:当分类号(flh)字段值为空字符串时才能删除记录。 (2) 设置hsrq字段的有效性规则和有效性说明:要求其值不超过当前系统日期。 (3) 将hsrq字段的标题设置为“还书日期”。 (4) 创建一个普通索引abcd,要求以借阅日期(jyrq)字段进行排序,相同时以分类号(flh)字段排序。
2. 计算JY表中读者类型(lx)为“J”的记录的罚款(fk)字段的值,算法是:如果还书日期(hsrq)减去借阅日
期(jyrq)大于60天,则超过60 天部分按0.10 元/天计算。 3. 修改项目TEST的项目信息:城市为“南京市”。
4. ZY表和XS表已分别存在以zydh字段为索引表达式的主索引zydh和普通索引xszydh。以ZY表为主表、
XS表为子表,基于zydh字段建立永久关系,并根据以下要求设置参照完整性规则:当在ZY表中修改和删除记录时,若xs表中有相应的记录(zydh字段的值),则同时修改和删除XS表中相应记录。 练习21
打开练习盘根目录中的项目文件TEST,在该项目中已有一数据库SJK及若干表。 1. 按以下要求修改SJK数据库中GZ表: (1) 将ylbx字段的标题设置为“医疗保险”。 (2) 设置gh字段的有关属性,使得gh字段值的首字符为大写英文字母、后四个字符只能为数字字符。 (3) 设置gh字段的有关属性,使得将该字段从表单的数据环境中拖放到表单上时,生成的相应控件为下拉组
合框控件。 (4) 设置表的记录级有效性规则,要求ylbx小于或等于jbgz的8%。 (5) 创建一个普通索引abcd,要求以gh字段进行排序,相同时以jbgz字段排序。 2. 计算gz表中ylbx字段的值:ylbx=jbgz×8%
3. 利用项目管理器操作:将数据库表ZY改为自由表,并将其添加到项目中。
4. GZ表和JS表已分别存在以gh字段为索引表达式的主索引gzgh1和主索引jsgh。以GZ表为主表、JS表为
子表,基于gh字段建立永久关系,并根据以下要求设置参照完整性规则:当在GZ表中删除记录时,若JS表中有相应的记录(gh字段的值),则禁止删除GZ表中相应记录。
练习22
打开练习盘根目录中的项目文件TEST, 在该项目中已有一数据库SJK及若干表。 1. 按以下要求修改SJK数据库中XS表: (1) 添加一个逻辑型字段,字段名为 dty,并为其设置标题属性:“党团员”。 (2) 添加一个字符型字段,字段名为rxny、宽度为6,并设置默认值:系统日期的年和月份。例如,若当前系
统日期为2006年7月27日,则rxny字段值为“200607”。 (3) 为XS表添加表注释:学生基本信息表。 (4) 创建一个普通索引abcd,要求以rxny字段进行排序,相同时以csrq字段排序。 2. 计算gz表中zfgj字段的值:zfgj= jbgz×12%
3. 利用项目管理器操作:将XIM表改名为XIMB表,并为其设置编辑说明“系名表”。
4. ZY表和XS表已分别存在以zydh字段为索引表达式的主索引zydh和普通索引xszydh。以ZY表为主表、XS表为子表,基于zydh字段建立永久关系,并根据以下要求设置参照完整性规则:当在ZY表中修改和删除记录时,若XS表中有相应的记录(zydh字段的值),则禁止对ZY表进行修改和删除。 练习23
打开练习盘根目录中的项目文件TEST,在该项目中已有一数据库SJK及若干表。
25
1. 按以下要求修改SJK数据库中工资(GZ)表:
(1) 添加一个备注型字段,字段名为 sdssm,并为其设置标题“所得税说明”。 (2) 设置表的记录级有效性规则,要求sfgz不大于yfgz(对已有数据不作验证)。 (3) 创建一个普通索引abcd,要求以grsds字段进行排序,相同时以gh字段排序。 2. 计算gz表中zfgj字段的值:jbgz小于1000时为100,否则为jbgz×10%后“园整”(四舍五入)到百位。
例如123.5园整后为100、151.2园整后为200、251.61园整后为300等等(提示:用ROUND()函数)。 3. 将自由表GZB中职称(zc)为“教授”的记录复制到练习盘根目录下的GZB1表中,然后将GZB1表添加
为项目中的自由表并设置为“包含”。
4. XS表和CJ表已分别存在以xh字段为索引表达式的主索引xsxh和普通索引cjxh。以XS表为主表、CJ表
为子表,基于xh字段建立永久关系,并根据以下要求设置参照完整性规则:在XS表中修改记录时,若CJ表中有相关的记录,则同步对CJ表进行修改;在XS表中删除记录时,若CJ表中有相关的记录,则禁止对XS表进行删除。
练习24
打开练习盘根目录中的项目文件TEST, 在该项目中已有一数据库SJK及若干表。 1.按如下要求修改SJK中课程(KC)表的结构:
(1) 将学分(xf)字段的标题设置为“学分”;
(2) 设置学分(xf)字段的有效性(验证)规则:大于或等于2,且小于或等于10; (3) 设置KC表的记录级有效性规则:kss大于或等于xf;
(4) 对课程代号(kcdh)字段设置输入掩码:只接受4个数字字符;
(5) 创建一个普通索引abcd,要求先按xf字段排序,xf相同时再按kcdh字段排序; (6) 为KC表添加编辑说明为“课程信息表”; (7) 为KC表设置删除触发器:不允许删除。 2. SJK中KC表已存在主索引kcdh(索引表达式为kcdh),CJ表已存在普通索引cjkcdh(索引表达式为kcdh)。
以KC表为主表、CJ表为子表,基于kcdh字段建立永久关系,并设置KC表和CJ表之间的参照完整性:在CJ表中输入记录时,若kcdh在KC表中不存在,则不允许输入。
二、设计查询练习
在TEST项目中已经存在查询chaxun 练习9
已知在SJK数据库的学生(XS)表中含有学号(xh)、姓名(xm)等字段,成绩(CJ)表中含有学号(xh)、成绩(cj)等字段。按如下要求修改查询CHAXUN:
基于XS表和CJ表查询两门或两门以上课程成绩不及格(即低于60)的学生,要求输出xh、xm和不及格课程门数,查询结果按不及格门数降序排序,相同时按学号排序。 练习10
已知在SJK数据库的系名(XIM)表中含有系代号(xdh)、系名(ximing)等字段,学生(XS)表中含有学号(xh)、姓名(xm)、出生日期(csrq)、系代号(xdh)等字段。按如下要求修改查询CHAXUN:
基于XIM表和XS表查询各系的学生人数及平均年龄,要求输出字段为xdh、ximing、人数和平均年龄,查询结果按人数降序排序,且查询结果输出至文本文件abc。 练习11
已知在SJK数据库的教师(JS)表中含有工号(gh)、姓名(xm)、职称代号(zcdh)等字段;工资(GZ)表中含有工号(gh)、工资(jbgz)等字段。按如下要求修改查询CHAXUN:
基于JS表和GZ表查询职称为“教授”(职称代号为“01”)和“副教授”(职称代号为“02”)的教师人数和工资情况。要求输出字段为职称(字段值显示为“教 授”和“副教授”)、人数、最高工资、最低工资和平均工资,结果按平均工资降序排序,且将结果输出至表TEMP。 练习12
已知在SJK数据库的图书(TS)表中含有图书分类号(flh)、出版社(cbs)、价格(jg)和册数(cs)等字段。按如下要求修改查询CHAXUN:
基于TS表查询来源于各出版社的图书入库情况。要求输出字段为:出版社(字段值显示时将尾部的“出版社”这几个字去掉,例如“南京大学出版社”仅显示为“南京大学”)、图书种数、总册数、总金额(注:金额等于价格乘以册数),查询结果按总金额降序排序,且查询结果直接输出至屏幕(即VFP主窗口)。
注:不同的分类号代表不同的图书种类。 练习13
已知在SJK数据库的图书(TS)表中含有图书分类号(flh)、书名(sm)等字段,借阅(JY)表中含有图书分类
26
号(flh)、借阅人员类型(lx)等字段。按如下要求修改查询CHAXUN:
基于TS表和JY表查询各类图书被教师(lx为“J”)和学生(lx为“X”)借阅的次数情况。要求输出字段为:flh、sm、教师借阅次数、学生借阅次数,教师借阅次数和学生借阅次数均为0的记录不显示,查询结果按教师借阅次数降序排序。 练习14
已知在SJK数据库的系名(XIM)表中含有系代号(xdh)、系名(ximing)等字段,教师(JS)表中含有工号(gh)、姓名(xm)、系代号(xdh)、email地址(email)等字段。按如下要求修改查询CHAXUN:
基于XIM表和JS表查询各系在yahoo网站上注册的信箱个数。要求输出字段为xdh、ximing和注册人数,查询结果按注册人数降序排序,且输出至表TEMP。
提示:yahoo网站上注册的信箱是指在email地址中含有“@yahoo.com”子字符串。 练习15
已知在SJK数据库的系名(XIM)表中含有系代号(xdh)、系名(ximing)等字段,教师(JS)表中含有工号(xh)、姓名(xm)、系代号(xdh)、出生日期(csrq)等字段。按如下要求修改查询CHAXUN:
基于XIM表和JS表查询各系青年教师的人数和平均年龄,要求输出字段包括xdh、ximing、人数、平均年龄,结果按人数降序排序,人数相同时按平均年龄排序。
注:青年教师是指年龄不满35岁的教师。 练习16
已知学生(XS)表中含学号(xh)、姓名(xm)、性别(xb)、班级编号(bjbh)等字段;成绩(CJ)表中含有学号(xh)、课程代号(kcdh)、成绩(cj) 等字段。按如下要求修改查询CHAXUN:
基于XS表和CJ表查询:从成绩上看各位学生是否为优秀生。要求输出的字段为:xh、xm、平均分、最低分、优秀生(若为优秀生,则该字段的值为“是”,否则为“否”),输出结果按是否优秀生排序(“是”排在前),相同时再按平均分降序排序。
注:优秀生的条件是各门课的平均分不低于80且每门课的成绩不低于75。 练习17
已知在SJK数据库的学生(XS)表中含有学号(xh)、姓名(xm)、性别(xb)等字段;成绩(CJ)表中含有学号(xh)、课程代号(kcdh)、成绩(cj)等字段。按如下要求修改查询CHAXUN:
基于XS表和CJ表查询课程代号为01~09的各门课程男女学生的人数、最高分和平均分,要求输出kcdh、xb、人数、最高分和平均分,且查询结果输出至屏幕(即VFP主窗口)。 练习18
已知在SJK数据库的系名(XIM)表中含有系代号(xdh)、系名(ximing)等字段,学生(XS)表中含有学号(xh)、姓名(xm)、性别(xb)等字段。按如下要求修改查询CHAXUN:
基于XIM表和XS表查询各系的男女生人数,要求输出字段为xdh、ximing、男生人数和女生人数,查询结果按女生人数降序排序,且男女生人数均为0的系也输出。 练习19
已知在SJK数据库的教师(JS)表中含有工号(gh)、姓名(xm)、系代号(xdh)等字段;工资(GZ)表中含有工号(gh)、工资(jbgz)等字段。按如下要求修改查询CHAXUN:
基于JS表和GZ表查询职称代号为‘02’的各系教师人数、最高工资和平均工资,要求输出字段包括xdh、人数、最高工资、平均工资,结果按平均工资降序排序,且结果输出至临时表TEMP。 练习20
已知在SJK数据库的图书(TS)表中含有图书分类号(flh)、入库日期(rkrq)、价格(jg)和册数(cs)等字段。按如下要求修改查询CHAXUN:
基于图书(TS)表查询2000年(含2000年)以来各年入库的图书情况。要求输出字段为:年份、图书种数、平均价格、总册数、总金额(金额为价格乘以册数),查询结果按年份降序排序,且将查询结果输出至文本文件XYZ。(注:不同的分类号代表不同的图书种类。) 练习21
已知在SJK数据库的图书(TS)表中含有图书分类号(flh)、书名(sm)等字段,借阅(JY)表中含有图书分类号(flh)、读者类型(lx)、读者(dzh)、借阅日期(jyrq)和还书日期(hsrq)等字段。按如下要求修改查询CHAXUN: 基于TS表和JY表查询教师(lx为“J”)借书超过60天、学生(lx为“X”)借书超过45天的图书情况。要求输出字段为:flh、sm、lx、dzh、借阅天数,查询结果按读者类型排序,相同时再按借阅天数降序排序。
练习22
27
已知在SJK数据库的教师(JS)表中含有工号(gh)、姓名(xm)、email地址(email)等字段。按如下要求修改查询CHAXUN:
基于JS表查询各邮件服务器上注册的信箱个数。要求输出字段为:邮件服务器(指email地址中“@”字符后面的部分)和注册人数,查询结果不含无email地址人员的统计,且将注册人数最多的前三条记录输出至临时表TEMP。
练习23
已知在SJK数据库的学生(XS)表中含有学号(xh)、姓名(xm)、性别(xb)等字段。按如下要求修改查询CHAXUN:
基于XS表查询姓名中包含的汉字字数不同的男女生的人数,要求输出字段为:姓名字数(显示为2或3或4,假设汉字均为GBK字符)、xb、人数,查询结果按字数降序排序,相同时按性别排序,且查询结果直接输出至屏幕(即VFP主窗口)。
提示:利用STRTRAN(xx,SPACE(1),SPACE(0))函数可删除字符串xx中的所有空格字符。
练习24
已知SJK数据库的学生(XS)表中包含学号(xh)、姓名(xm)、性别(xb)、班级编号(bjbh)等字段;成绩(CJ)表中包含有学号(xh)、课程代号(kcdh)、成绩(cj)等字段。按如下要求修改查询CHAXUN:
基于XS表和CJ表查询所有获奖学金的同学名单及奖学金的等级。要求输出的字段为xh、xm、选课门数、奖学金等级(字段的内容为“A”或“B”),输出的结果按奖学金等级排序,相同时再按学号升序排序。
注:奖学金等级分为A和B两个等级,A等奖学金的条件是各课程的平均分不低于85,B等奖学金是各课程的平均分不低于75,并且要求获A、B等奖学金获得者应各课程均无不及格成绩(小于60),且选课门数不少于2。
三、 设计菜单练习
练习9
项目TEST中已存在菜单MENU,利用菜单设计器按如下要求修改菜单:
1.如图所示,增加“常用工具”菜单栏及其子菜单(包含分组线、访问键和快捷键的设置);
2.为“练习盘格式化”菜单项设置说明信息:“请插入练习盘!”(即选择该菜单时,在系统的状态栏中显示该信息);
3. 为“计算器”菜单项设置命令:启动Windows中的计算器。
(注:使用命令RUN/n calc.exe)
练习10
项目TEST中已存在菜单MENU,利用菜单设计器按如下要求修改菜单:
1.如图所示,增加“教师管理”菜单栏及其子菜单(包含访问键和快捷键的设置);
2.为“系统管理”菜单中的“恢复系统菜单”菜单项设置命令,功能为:将菜单恢复为VFP系统菜单;
3.在“系统管理”菜单栏下增加VFP系统菜单项“导入”。
练习11
项目TEST中已存在菜单MENU,利用菜单设计器按如下要求修改菜单:
1.如图所示,为“系统管理”菜单栏增加菜单项,其中“退出”为VFP系统菜单项;
2.将“数据恢复”菜单项设置为不可用(即跳过);
28
3. 为“数据备份”菜单项编写过程,要求利用两条命令实现功能:将当前打开的所有表均关闭,然后将所有的表文件复制到D:盘中。(注:复制时可用命令“copy file *.dbf to d:\\”)
练习12
项目TEST中已存在菜单MENU,利用菜单设计器按如下要求修改菜单:
1.如图所示,增加“学生管理”菜单栏及其子菜单(包含分组线、访问键和快捷键的设置);
2.将“帮助”菜单栏设置为不可用(即跳过); 3.为“打印名册”菜单项设置过程,要求:先打开XS表,然后预览报表文件RCJ。 练习13
项目TEST中已存在菜单MENU,利用菜单设计器按如下要求修改菜单:
1.如图所示,增加“数据维护”和“数据查询”菜单栏,并为“数据查询”菜单栏增加子菜单(包含分组线、访问键和快捷键的设置);
2.为“帮助”菜单栏增加VFP系统菜单项“目录”和“索引”;
为新建的“成绩信息”菜单项设置命令:运行表单FormD,并将该菜单项设置为不可用(即跳过)。
练习14
项目TEST中已存在菜单MENU,利用菜单设计器按如下要求修改菜单:
1. 如图所示,为“系统管理”菜单栏增加菜单项及其子菜单(包含分组线、访问键和快捷键的设置); 2. 为“数据备份”菜单项设置说明信息:“备份盘必须有100MB以上的空间”(即选择该菜单时,在系统的状态栏中显示该信息); 3. 为“退出”菜单项设置过程代码,要求用2条命令实现:首先利用SAVE命令将当前内存变量保存到MyMem内存变量文件中,然后退出系统。
练习15
项目TEST中已存在菜单MENU,利用菜单设计器按如下要求修改菜单:
1. 如图所示,增加“图书管理”菜单栏及其子菜单(包含分组线、访问键和快捷键的设置);
2. 为“查询”菜单项设置命令,要求
用SQL命令基于TS表查询图书册数(cs)最多的5本书的分类号(flh)、书名(sm)和册数(cs)。
3.在“系统管理”菜单栏下增加一个VFP系统菜单项“退出”。
项目TEST中已存在菜单MENU,利用菜单设计器按如下要求修改菜单:
1. 如图所示,增加“教师管理”菜单栏及其子菜单“教师档案”和“任课情况”(包含访问键和快捷键的设置);
2. 为“教师管理”菜单中的“任课情况”菜单项设置SQL命令,功能为根据JS表和RK表查询任课教师名单;
(注:该SQL命令为“SELECT DISTINCT Js.* FROM ? ON ?”形式)
3. 在“系统管理”菜单栏的子菜单中增加VFP系统菜单项“退出”。
29