VFP2007秋上机试题
上机部分
一、项目、数据库和表操作(12分)
练习1
打开软盘根目录下的项目文件JXGL,在该项目文件中已有一数据库JXSJ。
1.按如下要求在数据库JXSJ中新建一个表名为AB的数据库表。
(3)设置BH字段格式,使得在该字段中输入数据时自动删除其前导空格和结尾空格;(4)为表创建一个主索引abcd,使BH字段不能输入重复值。
2.为教师(JS)表设置插入触发器;工号(GH)字段的值必须是6个字节的非空格字符(这里指去除首尾空格后,其长度为6)。
3.为教师(JS)表增加一个备注型字段(字段名为BZ),并将所有职称(ZC字段)为“教授”记录的BZ字段的值设置为“学科带头人”。
4.已知学生(XS)表和成绩(CJ)表存在相同的学号(XH)字段,以XS表为主表,CJ表为子表,按XH建立永久关系,并设置XS表和CJ表之间的参照完整性;删除级联。
练习2
打开软盘根目录下的项目文件JXGL,在该项目文件中已有一数据库JXSJ。
1.按如下要求在数据库JXSJ中新建一个表名为AB的数据库表。
(3)为CSRQ字段设置有效性规则:必须是1980年以后(包括1980年)出生的学生;(4)创建一个普通索引abcd,使表中记录按学生的年龄排序,相同时按XB字段排序。注:年龄为当前年份与出生年份(由CSRQ字段指定)之差。
2.为教师(JS)表设置删除触发器;禁止删除。
3.修改院系专业(YXZY)表的备注(BZ)字段的值,修改方法是:若代码(YXZYDM
字段)以“11”开头,则BZ字段值设置为“一本招生”。
4.已知课程(KC)表和成绩(CJ)表存在相同的课程代码(KCDM)字段,以KC表为主表,CJ表为子表,按KCDM建立永久关系,并设置KC表和CJ表之间的参照完整性;删除限制。
练习3
打开软盘根目录下的项目文件JXGL,在该项目文件中已有一数据库JXSJ。
1.按如下要求在数据库JXSJ中新建一个表名为AB的数据库表。
(1)按下表所示创建AB表的表结构(包括字段的标题属性):
(3)为表设置有效性规则:BH1首字符必须与BH2的首字符相同;
(4)创建一个普通索引abcd,按BH1字段排序,相同时按XH字段排序。
2.为教材(JC)表设置删除触发器;出版年份(CBNF字段)在2000年以前的记录(不包括2000年)允许删除。
3.将成绩(CJ)表中课程代码(KCDM字段)为“9501”的记录的备注(BZ)字段值修改为“选修”。
4.已知课程(KC)表和课程安排(KCAP)表存在相同的课程代码(KCDM)字段,以KC表为主表,KCAP表为子表,按KCDM建立永久关系,并设置KC表和KCAP表之间的参照完整性;更新级联。
练习4
打开软盘根目录下的项目文件JXGL,在该项目文件中已有一数据库JXSJ。
1.按如下要求在数据库JXSJ中新建一个表名为AB的数据库表。
(1)按下表所示创建AB表的表结构(包括字段的标题属性):
(3)为表设置有效性规则:KPSL小于活等于XSSL;
(4)创建一个普通索引abcd,要求按RQ字段排序,相同时按BH字段排序。
2.为教材(JC)表设置插入触发器;国际标准图书编号(ISDN字段)必须以“IS”开头,否则不允许插入。
3.为成绩(CJ)表中中增加一个平时成绩字段(字段名为PSCJ),其类型和宽度与
成绩(CJ)字段相同,并将所有记录的PSCJ置为85。
4.已知教师(JS)表和课程安排(KCAP)表存在相同的工号(GH)字段,以JS表为主表,KCAP表为子表,按GH建立永久关系,并设置JS表和KCAP表之间的参照完整性;删除限制。
练习5
打开软盘根目录下的项目文件jxgl,在该项目文件中已有一数据库jxsj。
1.按如下要求在数据库jxsj中新建一个表名为ab的数据库表。
(1)按下表所示创建ab表的表结构(包括字段的标题属性):
(3)为jyrq字段设置有效性规则:借阅日期不允许在当前系统日期之后;
(4)为表创建一个普通索引abcd,要求按xh字段排序,相同时按jyrq字段排序。2.为教材(JC)表设置插入触发器;单价(dj字段)超过30元的不允许插入。3.针对成绩(cj)表,根据成绩(cj)表的值修改备注(bz)字段的值:cj大于或等于85,bz字段的值为“优”。
4.已知院系专业信息(yxzy)表和学生(xs)表存在相同的院系专业代码(yxzydm)字段,以yxzy表为主表,xs表为子表,按yxzydm建立永久关系,并设置yxzy表和xs表之间的参照完整性;插入限制。
练习6
打开软盘根目录下的项目文件jxgl,在该项目文件中已有一数据库jxsj。
1.按如下要求在数据库jxsj中新建一个表名为ab的数据库表。
(1)按下表所示创建ab表的表结构(包括字段的标题属性):
后,至少在同一天;
(3)为jyrq字段设置默认值:等于当前系统日期;
(4)为表创建一个普通索引abcd,要求按xh字段排序,相同时按借阅天数排序(借阅天数为hsrq与jyrq之差)。
2.为成绩(cj)表设置更新触发器;成绩(cj字段)必须大于或等于0,且小于或等于100。
工龄等于当前系统日期的年份减去工作日期(gzrq字段)的年份。
4.已知院系专业信息(yxzy)表和js表存在相同的院系专业代码(yxzydm)字段,以yxzy表为主表,js表为子表,按yxzydm建立永久关系,并设置yxzy表和js表之间的参照完整性;更新级联。
练习7
打开软盘根目录下的项目文件jxgl,在该项目文件中已有一数据库jxsj。
1.按如下要求在数据库jxsj中新建一个表名为ab的数据库表。
(1)按下表所示创建ab表的表结构(包括字段的标题属性):
(3)设置bmlb字段的格式属性,使其只能输入一个大写字母;
(4)创建一个普通索引abcd,要求按bmlb字段排序,相同时按bmlb字段排序。2.为课程安排(kcap)表设置更新触发器;学期编码(xqbm字段)为“2006-2007学年第2学期”的记录允许更新。
3.为教师(js)表增加一个备注字段(字段名为bz,类型为备注型)字段,并为它赋值:如果年龄小于或等于45,则bz字段的值为“中青年教师”。(注:年龄等于当前系统日期的年份减去出生日期(csrq)的年份。)
4.已知课程(kc)表和教材(jc)表存在相同的课程代码(kcdm)字段,以kc表为主表,jc表为子表,按kcdm建立永久关系,并设置kc表和jc表之间的参照完整性;插入限制。
练习8
打开软盘根目录下的项目文件jxgl,在该项目文件中已有一数据库jxsj。
1.按如下要求在数据库jxsj中新建一个表名为ab的数据库表。
(1)按下表所示创建ab表的表结构(包括字段的标题属性):
(3)为表创建有效性规则:当zw不为空时rzrq不为空,zw为空时rzrq为空;(4)创建一个普通索引abcd,要求按ssbm字段排序,相同时按rybh字段排序。2.为教师(js)表设置删除触发器;聘用日期(pyrq字段)为空的记录允许删除。
值:年龄等于当前系统日期的年份减去出生日期(csrq字段)的年份。
4.已知学生(xs)表和成绩(cj)表存在相同的学号(xh)字段,以xs表为主表,cj表为子表,按xh建立永久关系,并设置xs表和cj表之间参照完整性;更新级联。
二、设计查询(8分)
在TEST项目中已经存在查询chaxun
练习1
已知教师(JS)表中含有文化程度代码(WHCD,C)、职称(ZC,C)和出生日期(CSRQ,D)等字段,数据库中的文化程度视图(WHCD)含有文化程度代码(DM)和文化程度名称(MC)字段。按如下要求修改JXGL项目中的查询CHAXUN:基于JS表和WHCD视图统计各类职称、各类文化程度的教师人数、最小年龄。要求输出字段为:职称、文化程度名称、人数、最小年龄,查询结果按职称和文化程度名称排序。(注:年龄按当前年份与出生年份之差求得。)
练习2
已知教师(JS)表中含有政治面貌代码(ZZMM,C)、职称(ZC,C)和出生日期(CSRQ,D)等字段,数据库中的政治面貌视图(ZZMM)含有政治面貌代码(DM)和政治面貌名称(MC)字段。按如下要求修改JXGL项目中的查询CHAXUN:基于JS表和ZZMM视图统计各类职称、各类政治面貌的教师人数、平均小年龄。要求输出字段为:职称、政治面貌名称、人数、平均年龄,查询结果按职称和政治面貌名称排序。(注:年龄按当前年份与出生年份之差求得。)
练习3
已知课程安排(KCAP)表是用来存储各学期各班教学课程安排信息的表,其中含有学期编码(XQBM,C)、班级编号(BJBH,C)和课程代码(KCDM,C)等字段,课程(KC)表中含有课程代码(KCDM,C)、课程名称(kcmc,C)和课时数(KSS,N)等字段。按如下要求修改JXGL项目中的查询CHAXUN:
基于KCAP表和KC表统计学期编码为“2004-2005学年第1学期”的各班开课门数、总课时数。要求输出字段为:班级编号、开课门数、总课时数,查询结果按班级编号排序。
练习4
已知课程安排(KCAP)表是用来存储各学期各班教学课程安排信息的表,其中含有学期编码(XQBM,C)、班级编号(BJBH,C)和课程代码(KCDM,C)等字段,课程(KC)表中含有课程代码(KCDM,C)、课程名称(kcmc,C)和课时数(KSS,N)等字段。按如下要求修改JXGL项目中的查询CHAXUN:
基于KCAP表和KC表统计班级编号为“040202”班每学期的开课门数和总课时数。要求输出字段为:学期编码、开课门数、总课时数,查询结果按学期编码排序。
练习5
已知课程(kc)表中含有课程代码(kcdm,C)、课程名称(kcmc,C)等字段,在成绩(cj)表中含有学生的学号(xh,C)、成绩(cj,N)、课程代码(kcdm,C)等字段,按如下要求修改jxgl项目中的查询chaxun:
基于kc表和cj表统计各门课程的学习人数、平均分。查询的输出字段为kcdm、kcmc、学习人数、平均分,要求统计结果中仅包含平均分在75(含75)以上的那些课程,且按平均分降序排序。
练习6
已知课程(kc)表中含有课程代码(kcdm,C)、课程名称(kcmc,C)等字段,在成绩(cj)表中含有学生的学号(xh,C)、成绩(cj,N)、课程代码(kcdm,C)等字段,按如下要求修改jxgl项目中的查询chaxun:
基于kc表和cj表统计所有课程的学习人数、平均分,查询的输出字段为:kcmc、kcmc、平均均分。要求统计结果中包含kc表中的所有课程,若cj表中无某课程相关学生的成绩记录,则该课程的“平均分”显示为NULL值;统计结果按平均分降序排序,相同时按课程代码升序排序。(提示:使用左联接。)
练习7
已知课程(kc)表中含有课程代码(kcdm,C)、课程名称(kcmc,C)等字段,在成绩(cj)表中含有学生的学号(xh,C)、成绩(cj,N)、课程代码(kcdm,C)等字段,若成绩不低于60分时,学生可以取得对应课程的学分。按如下要求修改jxgl 项目中的查询chaxun:
基于kc表和cj表统计每个学生已取得的总学分和所学课程门数。查询的输出字段为学号、总学分、课程门数,查询结果按总学分降序和学号升序排序。
练习8
已知课程安排(kcap)表是用来存储各学期各班教学课程安排信息的表,其中含有学期编码(xqbm,C)、班级编号(bjbh,C)和课程代码(kcdm,C)等字段,课程(kc)表中含有课程代码(kcdm,C)、课程名称(kcmc,C)和课时数(kss,N)等字段。按如下要求修改JXGL项目中的查询CHAXUN:
基于kcap表和kc表统计班级编号为“040202”班每学期的开课门数和总课时数。要求输出字段为:学期编码、开课门数、总课时数,查询结果按学期编码排序。
三、设计菜单(5分)
练习1
JXGL项目中已存在菜单menu,其中定义了“文件”菜单栏及
其中的“退出菜单”项。按如下要求设计菜单,完成后的运行效果
如图1所示。
1.为“文件”菜单设置访问健“AL T+F”;图1
2.在“文件”菜单下增加“打开”菜单项,并为“打开”菜单项创建两个子菜单项“数据库”和“表”,并为“数据库”菜单项设置命令“OPEN DA TABASE”;
3.在“打开”和“退出菜单”菜单项之间插入分组线。
练习2
JXGL项目中
已存在菜单
menu,其中定义
了“文件”菜单
栏及其中的“退出菜单”项。按如下要求设计菜单,完成后的运行效果如图1所示。
1.将“文件”菜单改为“自定义”;
2.设置有关选项,使菜单运行时,“自定义”菜单追加在系统菜单之后;
3.为“退出菜单”项设置快捷键“CTRL+X”;
4.在“自定义”菜单下增加“运行外部EXE程序”菜单项;
5.为“运行外部EXE程序”菜单项添加如下过程代码:
exeFile=GETFIE(“exe”)
RUN/N &exeFile
练习3
JXGL项目中已存在菜
单menu,其中定义了“文
件”菜单栏及其中的“退出
菜单”项。按如下要求设计菜单,完成后的运行效果如图1所示。
1.将“文件”菜单改为“自定义”,并设置访问键“AL T+C”;
2.设置有关选项,使菜单运行时,“自定义”菜单追加在系统“文件”菜单之前;
3.在“自定义”菜单下增加“设置背景色”菜单项,并为“设置背景色”菜单项创建子菜单“设置…”和“还原”;
4.指定“还原”菜单执行命令:_SCREEN.BackColor=RGB(255,255,255)。
练习4
JXGL项目中已存在菜单menu,其中定义了“文件”菜单栏及其中的“退出菜单”
项。按如下要求设计菜单,完成后的运行效果如图1所示。
1.创建“运行”菜单栏,并创建其子菜单项“PRG程序”和“表单
程序…”;
2.将菜单项“PRG程序”中的“P”字母设置为访问键“AL T+P”;
3.在菜单项“PRG程序”和“表单程序…”之间插入分组线;
4.指定“表单程序…”菜单执行命令:DO FORM ?。
练习5
JXGL项目中已存在菜单menu,其中定义了“文件”菜单栏及其中的“退出菜单”项。按如下要求设计菜单,完成后的运行效果如图1所示。
1.在“文件”菜单栏下创建“新建…”子菜单项;
2.在“文件”菜单栏下插入系统菜单“打开”;
3.在菜单项“打开”和“退出菜单”之间插入分组线;
4.为菜单项“退出菜单”设置快捷键“CTRL+X”和状态栏提示
信息“恢复系统菜单”。
练习6
JXGL项目中已存在菜单menu,其中定义了“文件”菜单栏及其中的“退出菜单”项。按如下要求设计菜单,完成后的运行效果如图1所示。
1.创建“教学管理”菜单栏,并创建子菜单“课程”、“教师”和“学
生”;
2.设置“课程”菜单项的热键“AL T+K”;
3.为“课程”菜单项设置SELECT-SQL命令,以显示kc表中的所有数据;
4.为“学生”菜单项设置快捷键“CTRL+T”。
练习7
JXGL项目中已存在菜单menu,其中定义了“文件”菜单栏及
其中的“退出菜单”项。按如下要求设计菜单,完成后的运行效果
如图1所示。
1.在“文件”菜单栏下增加“浏览表”子菜单项;
2.在菜单项“浏览表”和“退出菜单”之间插入分组线;
3.在“浏览表”菜单下创建“学生表”和“成绩表”子菜单;
4.为菜单项“学生表”设置SELECT-SQL命令,以显示xs表中的所有数据。
练习8
JXGL项目中已存在菜单menu,其中定义了“文件”菜单栏及其中的“退出菜单”项。按如下要求设计菜单,完成后的运行效果如图1所示。
1.在“文件”菜单栏增加“新建…”菜单项;
2.在菜单项“新建…”和“退出菜单”之间插入分组线;
3.在“新建…”菜单下创建“Table”和“Database”子菜
单;
4.为菜单项“Table”中的“T”字母键设置热键“AL T+T”。
5.为菜单项“Table”设置命令:CREA TE。
四、设计表单(10分)
练习1
表单F072A用于显示民族、政治面貌和
文化程度代码表,其数据源分别为数据库
中的三个视图(MZ、ZZMM、WHCD)。
按下列要求修改表单,修改后表单运行时
如图2所示。
1.修改表单的有关属性,使表单的标题为
“代码表”,图标使用PC.ICO文件,且表
单运行时自动居中。
2.将视图ZZMM和WHCD添加到数据环
境中。
3.在表格的上方添加一个选项按钮组,要
求将其对象名设置为Mzw,选项按钮组的
布局与各按钮的标题如图所示(提示:可
利用“生成器”设置按钮个数、标题和水平布局)。
4.为添加的选项按钮组Mzw的InteractiveChange事件编写事件代码,其功能是:运行表单时根据选项按钮组中按钮的选择,表格中显示相应的代码表(要求:利用DO CASE 程序结构,根据选项按钮组的值设置表格控件的RecordSource属性)。
5.将表单上命令按钮的标题修改为“关闭”,并为该按钮编写事件代码,其功能是单击该按钮可关闭表单。
练习2
表单F072A用于显示民族、政治面
貌和文化程度代码表,其数据源分别为
数据库中的三个视图(MZ、ZZMM、
WHCD)。按下列要求修改表单,修改后
表单运行时如图2所示。
1.修改表单的有关属性,使表单的标题
为“代码表”;将视图ZZMM和WHCD
添加到数据环境中;设置表格的有关属
性,使得表格无删除标记列、无水平滚
动条。
2.删除表单上的命令按钮控件;在表格
的上方添加一个标签控件和组合框控
件,并将标签中显示文本设置为“选择类型”,组合框设置为下拉列表框。
3.为下拉列表框设置数据源,要求RowSourceType属性为“值”,下拉列表中显示3行:民族、政治面貌、文化程度。
4.为下拉列表框设置InteractiveChange事件代码,要求表格能根据下拉列表框中的选择显示相应视图中的数据(要求:利用DO CASE程序结构,根据组合框的值设置表格控件的RecordSource属性)。
表单F072B用于根据所选择民族,显示该民族的教师信息,其数据源分别为数据库中的三个视图MZ和表JS。按下列要求修改表单,
修改后表单运行时如图2所示。
1.修改表单的有关属性,使表单运行时自动居中,
边框样式为“固定对话框”,标题为“查询”。
2.修改下拉列表框的Rowsource属性,使其下拉
列表框显示MZ视图的两列数据。
3.在下拉列表框控件与表格控件之间添加一个标
签控件,并将其对象名改为Lmz,显示文本为“所
有民族”。
4.设置表格控件的数据源,要求RecordSource属
性为“别名”,RecordSource属性为JS表。
5.为下拉列表框控件的InteractiveChange事件编
写事件代码,其功能是根据下拉列表框中选择的值,修改标签Lmz的标题,并使表格中显示相应民族的教师数据。要求是:首先修改表单的UserMethod方法程序(完善一条命令、在空白处添加一条命令),然后在下拉列表框控件的InteractiveChange事件中调用该UserMethod方法。
6.为“打印”命令按钮编写Click事件代码,要实现的功能是预览报表文件RTEST。练习4
表单F072B用于根据所选择民族,显示所选
民族的教师工号(gh)与姓名(xm),其数据源
分别为数据库中的三个视图MZ和表JS。按下列
要求修改表单,修改后表单运行时如图2所示。
1.修改表单的有关属性,使表单运行时自动居
中。
2.修改下拉列表框的有关属性,使其下拉列表框
显示MZ视图的两列数据。
3.设置表格控件的数据源,要求
RecordSourceType属性为“SQL说明”,
RecordSource属性值设置为“select gh,xm from js
into cursor temp”。
4.在表格控件上面添加一个文本框控件,将其对
象名改为Tmz,V alue属性值为“所有民族”,且
将该控件设置为不能响应用户引发的事件。
5.为下拉列表框控件的InteractiveChange事件编写事件代码,其功能是根据下拉列表框中选择的值(所选民族),控制文本框Lmz的V alue属性值和表格中显示的数据。要求是:用两条命令分别设置文本框Tmz的V alue属性值和表格的RecordSource属性值。
6.修改表单上的命令按钮控件,将其标题改为“退出”,访问键为AL T+X。
表单f072c用于根据所选择课程,显示学生的
考试成绩。按下列要求修改表单,修改后表单运
行时如图2所示。
1.修改表单的有关属性,使表单无最大化、最小
化按钮,图标为pc.ico文件。
2.修改组合框的InteractiveChange事件代码,其
功能是:根据组合框中选择的课程,表格中显示
相应课程的成绩(要求:在原代码的倒数第2行
增加一条SET命令来实现)。
3.修改表格的有关属性,使其无水平滚动条,无
删除标记列,且表格中的数据只读。
4.删除表单上的复选框控件。
5.修改表单的ForSave方法程序代码,要求在原
代码之后增加一条命令,其功能是:将当前工作
区中打开的表复制到一个新文件中,且新文件的
文件名由cFile变量指定,新文件类型为.XLS。
6.添加一个命令按钮,标题为“保持”、访问键为“AL T+S”(如图2所示),并设置其Click事件处理代码,其功能是调用表单的ForSave方法程序。
练习6
表单F072d用于根据所选择的数据库,显示其结构信息(标题、字段名和数据类型)。按下列要求修改表单,修改后表单运行时如图2(a)所示,选择js表后如图2(b)所示。
1.将表单的标题修改为“查看表结构”,且表单运行时自行居中。
2.如图2所示,在表单上添加一个列表框控件(ListBox),且要求其对象名为List1,高度为200,宽度为260。(a) (b)
3.修改表单的DisplayTS方
法程序代码,要求在原代码
的“ENDFOR”前一行增加
一条命令,其功能是将变量
cItem的值添加到列表框中。
4.修改表单上的命令按钮,
要求其标题为“选择数据库
表”,访问键为“AL T+S”,其
大小为自动调整,并设置
Click事件处理代码,要求利
用2条命令实现:先清除列
表框中的内容(提示:调用列表框的Clear方法),然后调用表单的DislayTS方法。
表单F072d用于根据所选择的数据库,显示其结构信息(标题属性值、字段名和数据类型)。按下列要求修改表单,修改后表单运行时如图2(a)所示,选择js表后如图2(b)所示。(a) (b)
1.修改表单的有关属性,使表单
的标题为“显示表结构”,且表
单为“作为顶层表单”。
2.如图2所示,在表单上添加一
个编辑框控件(EditBox),要求
其对象名为Edit1,且数据只读。
3.修改表单的DisplayTS方法程
序代码,要求在原代码的
“ENDFOR”前一行增加一条命
令,功能是将变量cItem的值以
新的一行添加到编辑框中。(提
示:CHR(13)为换行符)
4.修改表单上的命令按钮,要求其标题为“选择数据库表”,访问键为“AL T+S”,其大小为高度为26,宽度为130,并设置Click事件处理代码,要求利用2条命令实现:先清除编辑框中的内容,调用表单的DislayTS方法。
练习8
表单F072e用于根据浏览各院系专业的课程设置。按下列要求修改表单,修改后表
单运行时如图2所示。
1.修改表单的有关属性,使表单的标
题为“课程设置”,且表单运行不可移
动。
2.将yszy表添加到表单的数据环境
中。
3.在表格控件的下方添加标签控件
(对象名为默认值Label1),且将其标
题改为“所有院系专业”(运行时用于
显示具体的院系专业名称),控件大小
自动调整。
4.修改表单的ShowYxzy方法的程序
代码,该方法的功能是根据kc表中的
院系专业代码(yxzydm)在yxzy表中
查找相应的院系名称(yxmc)和专业名称(zymc),并将标签控件的标题修改为院系名称和专业名称(如图2所示),要求在原代码中(空行处)添加2条命令来实现。5.设置表格控件的有关属性,使表格中的数据只读、表格无删除标记列,并且设置表格控件的AfterRowColChange事件处理代码,其功能是调用表单的ShowYxzy方法。
五、程序改错(5分)
练习1:
下面程序的功能是:第一个循环随机生成30个大写英文字母,并且存放到数组C 中,第二个循环实现数组C中30个元素内容的排序(从小到大)。要求:
①将下列程序输入到项目中的程序文件PCODE中,并对其中的2条错误语句进行修改;
②在修改程序时,不允许修改程序的总体框架和算法,不允许增加或减少语句数目。
CLEAR
DIMENSION c(30)
FOR i=1 TO 30 &&第一个循环
n=CHR(64+MAX(1,MOD(INT(RAND()*100),27)))
c(i)=n
ENDFOR
FOR i=1 TO 30 &&第二个循环
m=c(i)
FOR t=i+1 TO 30