上机部分
一、项目、数据库和表操作(12分)
练习1
打开T盘根目录下的项目文件JXGL,在该项目文件中已有一数据库JXSJ。
1.按如下要求在数据库JXSJ中新建一个表名为AB的数据库表。
(3)设置YZBM字段的有效性规则:不允许包含空格字符;
(4)为表创建主索引abcd,要求客户编号不能重复录入。
2.为教材(JC)表设置更新触发器;出版社名称(CBSMC)字段的值必须是以“出版社”三个字结尾。
3.为学生(XS)表增加一个年龄字段(字段名为NL,类型为整型),并为籍贯(JG 字段)为“江苏”的学生计算年龄:年龄等于当前系统日期的年份减去出生日期(CSRQ 字段)的年份。
4.已知院系专业(YXZY)表和教师(JS)表存在相同的院系专业代码(YXZYDM)字段,以YXZY表为主表,JS表为子表,按YXZYDM建立永久关系,并设置YXZY表和JS表之间的参照完整性;删除限制。
练习2
打开T:盘根目录下的项目文件JXGL,在该项目文件中已有一数据库JXSJ。
1.按如下要求在数据库JXSJ中新建一个表名为AB的数据库表。
(3)为JBR字段设置有效性规则:不能为空(即必须含有非空格字符=not empty());(4)创建一个普通索引abcd,要求按RKRQ字段排序,相同时按CPBH字段排序。2.为教材(JC)表设置更新触发器;课程代码为“60010”时必须选用“上海外语教育出版社”出版的教材。
3.为JS表增加一个备注字段(字段名为BZ,类型为备注型),并为它赋值;如果性
别为“女”,并且年龄大于或等于55,则BZ字段的值为“退休”(注:年龄为当前系统日期的年份减去出生日期(CSRQ字段)的年份)。
4.已知课程(KC)表和教材(JC)表存在相同的课程代码(KCDM)字段,以KC表为主表,JC表为子表,按KCDM建立永久关系,并设置KC表和JC表之间的参照完整性;插入限制。
练习3
打开T盘根目录下的项目文件jxgl,在该项目文件中已有一数据库jxsj。
1.按如下要求在数据库jxsj中新建一个表名为ab的数据库表。
(1)按下表所示创建ab表的表结构(包括字段的标题属性):
(3)为cksl字段设置有效性规则:不能为负数—cksl>=0;
(4)创建一个普通索引abcd,要求按wlbh字段排序,相同时按ckrq字段排序—wlbh+dtoc(ckrq)。
2.为教材(jc)表设置更新触发器;课程代码(kcdm字段)为“4039”时,必须选用2002年以后出版(cbnf字段)的教材。--(kcdm=”4039”and cbnf>=”2003”) or kcdm<>”4039”或cbnf=”2003”or kcdm<>”4039”或iif(kcdm=”4039”,cbnf>=”2003”,.T.,.T.)
3.将jc表中单价(dj字段)大于或等于25元的记录全部加注删除标志。Delete from jc where dj>=25
4.已知院系(yxzy)表和教材(js)表存在相同的院系专业代码(yxzydm)字段,以yxzy表为主表,js表为子表,按因yxzydm建立永久关系,并设置yxzy表和js表之间的参照完整性;插入限制。先在窗口中写close tables all
练习4
打开T盘根目录下的项目文件jxgl,在该项目文件中已有一数据库jxsj。
1.按如下要求在数据库jxsj中新建一个表名为ab的数据库表。
(1)按下表所示创建ab表的表结构(包括字段的标题属性):
(3)为表设置有效性规则:当bwbz字段的值为.T.时,zw字段的值不能为空;
iif(bwbz,.not.empty(zw),empty(zw))
(4)创建一个普通索引abcd,要求按将班委(bwbz字段值为.T.)排在前面,非班委(bwbz字段值为.F.)排在后面。
2.为学生(xs)表设置更新触发器;班级编号(bjbh字段)必须与入学日期(rxrq 字段)的年份保持一致。
3.将kc表增加一个备注字段(字段名为bz,类型为备注型),并为院系专业代码(yxzydm 字段)为空的记录赋值,bz字段的值为“各专业的课时数相同”。
4.已知教师(js)表和课程安排(kcap)表存在相同的工号(gh)字段,以js表为主表,kcap表为子表,按gh建立永久关系,并设置js表和kcap表之间的参照完整性;插入限制。
练习5
打开T盘根目录下的项目文件jxgl,在该项目文件中已有一数据库jxsj。
1.按如下要求在数据库jxsj中新建一个表名为ab的数据库表。
(1)按下表所示创建ab表的表结构(包括字段的标题属性):
(3)为sg字段设置有效性规则:不小于100,且不大于250;
(4)为表创建一个普通索引abcd,要求按csrq字段排序,相同时按sg字段排序。2.为课程(kc)表设置插入触发器;如果课程类型(lx字段)为“通修课程”,则院系专业代码(yxzydm字段)为空,否则不为空。
3.位xs表增加一个备注字段(字段名为bz,类型为备注型),并为它赋值:若学生的籍贯(jg字段)不为“江苏”,则将bz字段的值置为“外省学生”。
4.已知课程(kc)表和教材(jc)表存在相同的课程代码(kcdm)字段,以kc表为主表,jc表为子表,按kcdm建立永久关系,并设置kc表和jc表之间的参照完整性;更新级联。
练习6
打开T盘根目录下的项目文件jxgl,在该项目文件中已有一数据库jxsj。
1.按如下要求在数据库jxsj中新建一个表名为ab的数据库表。
(1)按下表所示创建ab表的表结构(包括字段的标题属性):
(2)为gkcj设置有效性规则:大约或等于500,且小于或等于750;
(3)为csrq字段设置默认值:1985年1月1日;
(4)创建一个普通索引abcd,要求按高考成绩(gkcj字段)排序,相同时按毕业中学(byzx)排序。
2.为学生(xs)表设置更新触发器;班级编号(bjbh字段)的后四位必须与院系专业代码(yxzydm字段)的前四位相等。
3.将教材(jc)表中出版年份(cbnf字段)在2002年之前(含2002年)的教材全部加注删除标志。
4.已知课程(kc)表和课程安排(kcap)表存在相同的课程代码(kcdm)字段,以kc表为主表,kcdm表为子表,按kcdm建立永久关系,并设置kc表和kcap表之间的参照完整性;删除限制。
练习7
打开T盘根目录下的项目文件jxgl,在该项目文件中已有一数据库jxsj。
1.按如下要求在数据库jxsj中新建一个表名为ab的数据库表。
(1)按下表所示创建ab表的表结构(包括字段的标题属性):
(3)设置wbbz字段的有效性规则:不能为空(提示:使用EMPTY函数);
(4)创建一个普通索引abcd,要求按rq字段排序,相同时按wbbz字段排序。
2.为学生(xs)表设置删除触发器;班级编号(bjbh字段)的后四位与院系专业代码(yxzydm字段)的前四位不一致的可以删除。
3.为教材(jc)表增加一个进价字段(字段名为jj),其结构与单价(dj)字段相同,且为其赋值:jj等于dj的85%。
4.已知院系专业(yxzy)表和学生(xs)表存在相同的院系专业代码(yxzydm)字段,以yxzy表为主表,xs表为子表,按yxzydm建立永久关系,并设置yxzy表和xs表之间的参照完整性;删除限制。
二、设计查询(8分)
在TEST项目中已经存在查询chaxun
练习1
已知学生(XS)表存储了每个学生的基本信息,其中含学号(XH,C)、职称(XM,C)等字段,成绩(CJ)表存储了每个学生各门课程的成绩信息,其中含学号(XH,C)、课程代码(KCDM,C)和成绩(CJ,N)等字段。按如下要求修改JXGL项目中的查询CHAXUN:
基于XS表和CJ表所有已登记的成绩中全部课程均合格的学生名单及其合格课程门数,要求输出字段为:XH、XM、合格门数,查询结果按合格门数降序排序。(提示:“全部课程均合格”就是指最低分数大于或等于60。)
练习2
已知学生(XS)表存储了每个学生的基本信息,其中含学号(XH,C)、职称(XM,C)等字段,成绩(CJ)表存储了每个学生各门课程的成绩信息,其中含学号(XH,C)、课程代码(KCDM,C)和成绩(CJ,N)等字段。按如下要求修改JXGL项目中的查询CHAXUN:
基于XS表和CJ表统计所有已登记的成绩中,有两门或两门以上课程不合格的学生的总课程门数和成绩不合格门数,要求输出字段为:XH、XM、不合格门数,查询结果按不合格门数降序排序。(注:“不合格”就是指成绩小于60)
练习3
已知学生(XS)表存储了每个学生的基本信息,其中含学号(xh,C)、姓名(xm,C)和班级编号(bjbh,C)等字段,成绩(cj)表存储了每个学生各门课程的成绩信息,其中含学号(xh,C)、成绩(xj,N)等字段。按如下要求修改JXGL项目中的查询CHAXUN:
基于XS表和CJ表,查询班级编号为“050202”的那些没有登记过任何课程成绩的学生名单,要求输出字段为:xh、xm,查询结果按学号升序排序。(提示:采用左联接)
练习4
已知课程安排(KCAP)表是用来存储各学期各班教学课程安排信息的表,其中含有学期编码(XQBM,C)、班级编号(BJBH,C)和课程代码(KCDM,C)等字段,课程(KC)表中含有课程代码(KCDM,C)、课程名称(kcmc,C)和课时数(KSS,N)等字段。按如下要求修改JXGL项目中的查询CHAXUN:
基于KCAP表和KC表按班级统计同一门课程跨2个或2个以上学期教学的课程。要求输出字段为:bjbh、kcdm、kcmc、开课学期数,查询结果按课程代码排序。
练习5
已知课程安排(KCAP)表是用来存储各学期各班教学课程安排信息的表,其中含有学期编码(XQBM,C)、班级编号(BJBH,C)和课程代码(KCDM,C)等字段,课程(KC)表中含有课程代码(KCDM,C)、课程名称(kcmc,C)和课时数(KSS,N)等字段。按如下要求修改JXGL项目中的查询CHAXUN:
基于KCAP表和KC表统计学期编码为“2004-2005学年第1学期”的上课总课时数超过10的教师清单。要求输出字段为:工号、上课总课时数,查询结果按上课总课时降序排序。
练习6
已知教师(JS)表中含有文化程度代码(WHCD,C)、职称(ZC,C)和出生日期(CSRQ,D)等字段,在数据库中含有文化程度视图(whcd),视图含有文化程度代码(DM)和文化程度名称(MC)字段。按如下要求修改JXGL项目中的查询CHAXUN:基于JS表和WHCD视图统计各类学历的教师最早参加工作年龄和平均参加工作年龄。要求输出字段为:文化程度名称、最早参加工作年龄、平均参加工作年龄,查询结果按文化程度名称排序。(提示:参加工作年龄可以按工作日期与出生日期年份之差求得。)
练习7
已知教材(jc)表存储了各门课程的教材使用情况,其中含有出版社名称(cbsmc,C)、作者(zz,C)和出版年份(cbnf,C)等字段。按如下要求修改JXGL项目中的查询CHAXUN:
基于jc表查询2000年以后(含2000年)在同一个出版社出版了2本或2本以上教材的所有作者,要求输出字段为:作者、出版社名称、出版教材数,查询结果按出版教材数降序排序。
三、设计菜单(5分)
练习1
JXGL项目中已存在菜单MENU,其中定义了“文件”菜单栏及其中的“退出菜单”项。按如下要求设计菜单,完成后的运行效果如图1所示。
1.创建“浏览学生记录”菜单栏,并创建其子菜单“浏览”、“上一
记录”、“下一记录”;
2.在菜单项“浏览”和“上一记录”之间插入分组线;
3.在“上一记录”和“下一记录”分别设置命令:SKIP -1和SKIP。
练习2
JXGL项目中已存在菜单MENU,其中定义了“文件”菜单栏及其中的“退出菜单”项。按如下要求设计菜单,完成后的运行效果如图1所示。
1.创建“浏览课程记录”菜单栏,并创建其子菜单“浏览”、“上一记
录”、“下一记录”;
2.为“浏览”菜单项设置访问键“AL T+B”;
3.为“浏览”菜单项设置SELECT-SQL命令,功能是显示KC表的所有数据。
练习3
JXGL项目中已存在菜单MENU,其中定义了“文件”菜单栏
及其中的“退出菜单”项。按如下要求设计菜单,完成后的运行效
果如图1所示。
1.在“文件”菜单栏下增加“运行”菜单项,并创建其子菜单“程
序”、“表单”;
2.为“表单”菜单项设置命令:DO FORM ?;
3.在“文件”菜单栏下插入系统菜单项“关闭”;
4.在“关闭”和“退出菜单”菜单项之间插入分组线。
练习4
JXGL项目中已存在菜单MENU,其中定义了“文件”菜单栏及其中的“退出菜单”项。按如下要求设计菜单,完成后的运行效果如图1所示。
1.在“文件”菜单栏下增加“屏幕设置”菜单项,并创建其子
菜单“背景图案…”、“背景色…”;
2.为“背景图案…”菜单项添加过程代码:
cF=GETFILE(“bmp,jpg”)
_SCREEN.Picture=cF
3.为“背景图案…”菜单设置命令:_SCREEN.BackColor=GETCOLOR();
4.在“屏幕设置”和“退出菜单”菜单项之间插入分组线。
练习5
JXGL项目中已存在菜单MENU,其中定义了“文件”菜单栏及
其中的“退出菜单”项。按如下要求设计菜单,完成后的运行效果
如图1所示。
1.创建“教材管理”菜单栏,并创建其子菜单“教材浏览”、“教材
查询”;
2.为“教材浏览”菜单项设置命令:SELECT * FROM jc;
3.在“教材浏览”和“教材查询”菜单栏之间插入分组线;
练习6
JXGL项目中已存在菜单MENU,其中定义了“文件”菜单栏及其
中的“退出菜单”项。按如下要求设计菜单,完成后的运行效果如图
1所示。
1.创建“课程管理”菜单栏,并创建其子菜单“课程浏览”、“定位行…”;
2.为“课程浏览”菜单项设置命令:SELECT * FROM kc;
3.在“定位行…”菜单项设置“跳过”条件:!USED(”kc”);
练习7
JXGL项目中已存在菜单MENU,其中定义了“文件”菜单
栏及其中的“退出菜单”项。按如下要求设计菜单,完成后的
运行效果如图1所示。
1.在“文件”菜单栏下创建“记录定位”菜单项,并创建其子
菜单“First”、“Previous”、“Next”、“Last”;
2.将菜单项“First”、“Previous”、“Next”、“Last”的单词首字母设置为访问键;
3.为“First”菜单项添加过程代码:
GO TOP
BROWSE
4.为菜单项“Last”设置命令:GO BOTTOM
四、设计表单(10分)
练习1
表单F072F用于浏览所选
表的数据。按下列要求修改表
单,修改后表单运行时如图2
所示。
1.修改表单的有关属性,使表
单的标题为“浏览表”,且表单
运行时不可移动其位置。
2.在表格控件下方添加一个标
签控件(对象名为Label1)和
文本框控件(对象名为Text1),
并且将标签控件的显示文本修
改为“记录数”。
3.修改表格控件的有关属性,
使其数据只读。
4.修改命令按钮的标题属性,使其显示文本为“选择表”,访问键为AL T+S,且完善其Click事件代码,要求在原代码之后添加3条命令,功能分别为:设置表格控件的数据源,使表格中显示当前工作区中打开的表的数据;设置文本框Text1的属性,使其显示当前打开表的记录数;刷新表单。
5.设置表单的Destroy事件的处理代码,其功能是关闭所有打开的表。
练习2
表单F072F浏览所选表的
数据。按下列要求修改表单,
修改后表单运行时如图2所
示。
1.修改表单的有关属性,使表
单的标题为“示例”,且最大化
按钮不可用。
2.删除表单上的表格控件,在
其位置添加一个列表框控件
(对象名为List1),且将其数据
源类型设置为“别名”。
3.修改表格控件的有关属性,
使其数据只读。
4.修改命令按钮的标题属性,
使其显示文本为“选择表”,访
问键为AL T+T,且完善其Click事件代码,要求在原代码之后添加2条命令,功能分别为:设置列表框控件的RowSource属性,使列表框中显示当前工作区中打开的表的数据;设置列表框的ColumnCount属性,使其列数为当前工作区中打开表的字段数。
表单F072g用于选择所选表的学校,浏览毕业于该学校的教师名单(教师工号gh、姓名xm)。按下列要求修改表单,修改后表单运行时如图2所示。
1.修改表单的有关属性,使表单的标题为“校友”,且无
最小化按钮和最大化按钮。
2.向表单上添加一个标签控件(对象名为Label1)、一个
组合框控件(对象名为Combo1)和一个列表框控件(对
象名为List1)。
3.将标签控件的显示文本修改为“学校”,其控件大小为
自动调整。
4.将组合框控件的RowSourceType属性设置为“SQL语
句”,RowSource为“SELECT DISTINCT byxx FROM js
ORDER BY 1 INTO CURSOR temp1”(注:js表中byxx
字段的含义是“毕业学校”)。
5.将列表框控件的列数设置为2,数据源类型设置为
“SQL语句”。
6.为组合框控件的InterActiveChange事件设置代码,要求用一条命令来设置列表框的数据源,使得根据组合框中选择的学校,在列表框中显示毕业于该学校的教师工号(gh)和姓名(xm)。
7.设置表单的Destroy事件处理代码,其功能是关闭所有打开的表和临时表
练习4
表单F072g用于根据所输入的检索词在教材(jc)表中检索教材书目。按下列要求修改表单,修改后表单运行时如图
2所示。
1.修改表单的有关属性,使表单的
标题为“教材检索”,且运行时表单
自动居中。
2.在表单上分别添加一个标签控
件、文本框控件和命令按钮控件,
且标签和命令按钮控件上显示的文
本分别为“检索词”和“检索”。
3.向表单的数据环境中添加教材
(jc)表,并利用鼠标的拖放操作,
将该表从数据环境设计器窗口拖放
到表单上,以生成一个表格控件(如
图2所示),然后将其DeleteMark和ReadOnly属性分别设置为.F.和.T.。
4.为“检索”命令按钮设置Click事件代码,其功能是根据文本框的值检索有关教材,例如在文本框中输入“思想”,则表格中仅显示教材名称(jcmc字段)中包含有“思想”的教材。要求利用两条命令实现功能:首先根据文本框的值对jc表记录进行筛选,然后刷新表单。
表单F072h用于用户登录。按下列要求修改表单,修改后表单运行时如图2所示。
1.修改表单的有关属性,使表单的标题为“登录”,且无最小化、最大化按钮。
2.分别添加标签控件、文本框控件和命令按钮(如图2
所示),且标签控件的显示文本为“再次输入密码”,命
令按钮控件上显示文本为“确定”、访问键为“AL T+Y”。
3.为输入密码的两个文本框控件设置PasswordChar属性
值,使其在运行时输入的密码字符均显示为“*”。
4.为添加的用于再次输入密码的文本框控件设置
LostFocus事件处理代码,其功能是检查两次输入的密码
是否相同:若两次输入的密码不同,则用于
MESSAGEBOX()函数显示提示信息“两次输入的密码不
同!”,然后将焦点定位到第一个密码输入文本框。要求
用4行命令实现,这4行命令分别是IF…、
=MESSAGEBOX…、THISFORM…和ENDIF。
5.为添加的命令按钮设置Click事件代码,要求用2条命令实现:首先将VFP主窗口(对象名为_SCREEN)的标题设置为用户名(即文本框Text1的值),然后关闭表单。练习6
表单F072h用于用户登录,假定输入的用户名为学生姓名(基于xs表的xm字段),密码假定为学号(xh字段)。按下列要求修改表单,修
改后表单运行时如图2所示。
1.修改表单的有关属性,使表单的标题为“登录”,且运
行时自动居中、边框样式为“固定对话框”。
2.向表单的数据环境中添加xs表,并将其设置为只读。
3.添加一个图像(Image)控件,并且将其设置为显示
pc.ico图标文件、背景为透明。
4.添加一个命令按钮,并且命令按钮控件上显示文本为
“确定”、访问键为“AL T+Y”。
5.为添加的命令按钮设置Click事件代码,其功能是根
据输入的用户名和密码在xs表中查找(假定用户名对应
姓名、密码为学号),若找到则将VFP主窗口(对象名为_SCREEN)的标题设置为用户名(即文本框Text1的值),然后关闭表单,否则显示“用户名或密码不正确!”消息框并返回。要求用下列代码来实现其功能(该代码需要完善):
LOCA TE FOR xm=ALL T(THISFORM.Text1.V alue)…
IF !EOF()
_SCREEN.CAPTION=…
ELSE
=MESSAGEBOX…
ENDIF
THISFORM….
表单F072k用于根据所选的表,将其导出为文本文件或Microsoft Excel文件。按下列要求修改表单,修改后表单运行时如图2所示。
1.修改表单的有关属性,使表单的标题为“导
出”,且表单运行时自动居中。
2.将两个标签控件的显示文本分别设置为“导
出类型”、“导出文件名”,将两个选项按钮的
显示文本分别设置为“文本文件”和“Excel
文件”,将命令按钮Command2的显示文本设
置为“导出”。
3.完善表单的ABCD方法代码,要求在两个
空行处分别添加一条命令,其功能分别是将当
前工作区中打开的表复制为文本文件和Excel
文件,文件名由文本框Text2给定。(注:命
令中表述导出文件的文件名时,用名称表达式
“(ALL TRIM(THISFORM.Text2.V alue))”。)
4.为命令按钮Command2设置Click事件代码,要求用两条命令分别实现:首先调用表单的ABCD方法,然后关闭表单。
五、程序改错(5分)
练习1:
下面程序的功能是找出100~999以内,且满足以下条件的数:1)百位数字与十位数字之和对10取模等于个位数;2)该数是素数(仅能被1和本身整除的数称为“素数”)。例如101、167、257等为符合要求的数。要求:
①将下列程序输入到项目中的程序文件PCODE中,并对其中的2条错误语句进行修改;
②在修改程序时,不允许修改程序的总体框架和算法,不允许增加或减少语句数目。
CLEAR
IF i=100 to 999
yn=.T.
FOR j=3 TO i-1
IF MOD(i,j)=0
yn=.F.
EXIT
ENDIF
ENDFOR
IF yn
S=ALL T(STR(i))
S1=SUBS(s,3,1)
S2=SUBS(s,2,1)
S3=SUBS(s,1,1)
IF MOD(s2+s3,10)=s1
?i
ENDIF
ENDIF
ENDFOR
练习2:
以下程序的功能是:在屏幕上显示如图3所示的菱形。要求:
①将下列程序输入到项目中的程序文件PCODE中,并对其中的2条错误语句进行修改;
②在修改程序时,不允许修改程序的总体框架和算法,不允许增加或减少语句数目。
SET TALK OFF
C="ABCDEF"
CLEAR
FOR i=1 to LEN(c)
?SPACE(10-i)
FOR j=1 to 2*i-1
*??SUBS(c,i)
??SUBS(c,i,1)
ENDFOR
ENDFOR
*FOR i=LEN(c) to 1
FOR i=LEN(c) to 1 step -1
?SPACE(10-i)
FOR j=1 to 2*i-1
??SUBS(c,i,1)
ENDFOR
ENDFOR
练习3:
下列程序用来产生30个0~100个之间的随机整数,并且找出其中的最大偶数和最小奇数。要求:
①将下列程序输入到项目中的程序文件PCODE中,并对其中的2条错误语句进行修改;
②在修改程序时,不允许修改程序的总体框架和算法,不允许增加或减少语句数目。
CLEAR
DIMENSION A(30)
FOR i=1 TO 30
A(i)=INT(RAND()*200)
ENDFOR
Mmax=-1
Mmin=100
FOR i=1 TO 30
??STR(A(i),3)