新二级VF上机实验答案.docx
- 文档编号:8814139
- 上传时间:2023-05-15
- 格式:DOCX
- 页数:57
- 大小:503.13KB
新二级VF上机实验答案.docx
《新二级VF上机实验答案.docx》由会员分享,可在线阅读,更多相关《新二级VF上机实验答案.docx(57页珍藏版)》请在冰点文库上搜索。
新二级VF上机实验答案
第1章VisualFoxPro数据库基础
1.1上机实验1
2、修改表的结构modifystructure(或使用表设计器)
3、关闭表use
打开表uselx(或单击文件----打开----类型选择dbf----lx表)
4、对“lx”表完成以下操作
①list姓名,性别,出生日期
或者:
listfields姓名,性别,出生日期(fields可舍略)
2listfor性别=”男”
3listfor数学>=80and数学<=90
4listfor是否委培
5listfor(政治面目="团员"or政治面目="群众")and性别="女"
5、对“lx”表完成以下操作
①gotop
2gobottom
3go6
dispay
④skip2
6、对“lx”表完成以下操作
1uselx
deletenext3
2pack
7、对“lx”表完成以下操作
1Replacefor性别=”女”数学with数学+20
2Replacefor出生日期={^1971-3-5}英语with英语-5
第2章数据与数据处理
2.1上机实验2
setdefaultto"d:
\vf上机实验素材\上机实验2"命令先指定默认目录,然后再进行相关操作。
2.1.1对表中记录的处理
1.对“xuesheng”表完成以下操作
①显示表中记录号为偶数的记录。
方法1:
listforrecno()%2=0
方法2:
listformod(recno(),2)=0
方法3:
listforint(recno()/2)=recno()/2
②显示表中记录号能被5整除的记录。
方法1:
listforrecno()%5=0
方法2:
listformod(recno(),5)=0
③显示表中记录号为1、4、7、10……的记录。
方法1:
listforrecno()%3=1
方法2:
listformod(recno(),3)=1
④显示表中出生年份是7的倍数的记录。
方法1:
listforyear(出生日期)%7=0
方法2:
listformod(year(出生日期),7)=0
⑤显示表中在1983年以后出生的记录。
listforyear(出生日期)>1983
⑥显示表中在1986年10月1日以前出生的学生记录。
listfor出生日期<{^1986/10/01}
⑦显示表中姓名中含有“小”的记录。
方法1:
listfor"小"$姓名
方法2:
listforat("小",姓名)<>0
方法3:
listforat("小",姓名)>=1
⑧显示表中姓“王”的所有记录。
方法1:
listforleft(姓名,2)="王"
方法2:
listforsubstr(姓名,1,2)="王"
方法3:
listforat("王",姓名)=1
方法4:
listfor姓名="王"
⑨显示表中姓名最后一个字是“军”的所有记录。
listforright(alltrim(姓名),2)="军"
2.将“chengji”表中所有学号的第一个字符替换成“8”。
usechengji
replaceall学号withstuff(学号,1,1,"8")
2.1.2函数、表达式综合应用
1.利用系统的当前日期,显示“今天是XXXX年XX月XX日”
方法1:
?
"今天是"+str(year(date()))+"年"+str(month(date()))+"月"+
str(day(date()))+"日"
方法2:
setcenturyon
x=dtoc(date())
?
"今天是"+right(x,4)+"年"+left(x,2)+"月"+substr(x,4,2)+"日"
方法3:
setdatetolong
?
"今天是"+dtoc(date())
2.上机操作查看以下表达式的结果
①?
left("123456789",len("数据库"))123456
②?
len(space(15)-space(20))35
③?
val(substr("1999",3)+right(str(year(date())),2))+159924.00
④?
val(substr("奔腾586",5,1))*len("VisualFoxPro")65.00
⑤?
str(109.87,7,3)109.870
⑥?
at("人民","中华人民共和国")5
⑦dd=date()
?
str(year(dd),4)+"年"+str(month(dd),2)+"月"+str(day(dd),2)+"日"
XXXX年YY月ZZ日(根据系统的当前日期值而定)
第3章VisualFoxPro数据库及其操作
3.1上机实验3
setdefaultto"d:
\vf上机实验素材\上机实验3"命令先指定默认目录,然后再进行相关操作。
3.1.1表的基本操作
1.新建表和输入记录
create学生信息
2.对表中记录的基本操作
上述操作完成后,对“学生”表完成以下操作:
①显示表中所有女同学的记录。
方法1:
listfor性别="女"
方法2:
listfor性别!
="男"
②显示表中笔试成绩大于等于80分的男同学记录。
listfor笔试>=80and性别="男"
③显示表中成绩合格的学生姓名、性别、出生日期信息。
方法1:
listfields姓名,性别,出生日期for合格=.T.
方法2:
listfields姓名,性别,出生日期for合格
④显示表中在1983年1月1日以后出生的学生记录。
listfor出生日期>{^1983/01/01}
⑤显示满族和汉族的男生信息。
listfor(民族="满"or民族="汉")and性别="男"
⑥显示表中记录号为奇数记录。
方法1:
listformod(recno(),2)=1
方法2:
listforint(recno()/2)<>recno()/2
⑦显示表中笔试和机试成绩都及格的男同学的姓名、性别、出生日期信息并将显示结果保存到文件“成绩合格.txt”中。
listfor笔试>=60and机试>=60and性别="男"fields姓名,性别,出生日期
tofile成绩合格
⑧先逻辑删除表中笔试和机试任意一门不及格的学生记录,然后对这些记录做物理删除。
deletefor笔试<60or机试<60
pack
⑨修改“学生”表的结构,给表增加一个字段“总分N(5)”,并计算所有同学的总分。
replaceall总分with笔试+机试
3.1.2索引
1.打开“学生”表完成下列索引操作:
①按姓名升序建立一个独立索引文件,文件名为xmsy。
(用indexon…to…命令)
indexon姓名toxmsy
②按年龄降序建立一个独立索引文件,文件名为nljx。
(用indexon…to…命令)
indexon-年龄tonljx
③在“性别”字段上建立一个普通索引,索引名和表达式均为:
性别。
(用indexon…tag…命令)
indexon性别tag性别
④在“学号”字段上建立一个降序的候选索引,索引表达式为:
学号,索引名为:
xh。
(用indexon…tag…命令)
indexon学号tagxhdesccandidate
2.打开“选课”表完成下列索引操作:
①在学号、课程号和成绩字段上分别建立普通索引,索引名和表达式均为默认。
这种索引的创建可以利用表设计器来实现,具体步骤是:
调用表设计器
选择“学号”字段选择“索引”列中的升序
选择“课程号”字段选择“索引”列中的升序
选择“成绩”字段选择“成绩”列中的升序
确定(如下图所示)
②建立一个候选索引,表达式为:
学号+课程号,索引名为:
xhkc。
这种索引的创建可以利用表设计器来实现,具体步骤是:
调用表设计器
选择“索引”选项卡
根据题目要求,对应设置索引名和表达式选择索引类型为:
侯选索引
确定(如下图所示)
3.1.3顺序定位查找
使用locatefor和continue命令查找“学生”表中所有男生的记录,并逐个显示出来。
use学生
locatefor性别="男"
display
continue
display
重复执行continue和display命令,直到无记录显示为止。
3.1.4数据库综合操作
1.字段有效性
打开数据库“选课管理”,对其中的表完成下列操作:
①为“学生”表的“性别”字段增加约束:
性别只能为"男"或"女"。
规则表达式为:
性别$"男女",默认值为"女"。
本题应在表设计器中完成操作,具体操作步骤为:
调用表设计器
选择“性别”字段
根据题意在字段有效性属性中设置规则和默认值
确定(如下图所示)
②为“选课”表的“成绩”字段增加约束:
成绩值不能小于零。
规则表达式为:
成绩>=0,信息为:
"成绩应大于等于零"。
本题应在表设计器中完成操作,具体操作步骤为:
调用表设计器
选择“成绩”字段
根据题意在字段有效性属性中设置规则和信息
确定(如下图所示)
2.永久性关联
打开数据库“宾馆”,根据其中各表的名称、字段名的含义和存储的内容建立表之间的永久联系,并根据要求建立相应的普通索引,索引名与建索引的字段名相同,升序排序。
打开数据库“宾馆”(调用数据库的设计器)
为“入住”表的“客户号”和“客房号”字段分别建立普通索引
为“客房”表的“类型号”字段建立普通索引
将“客户”表中的主索引(客户号)拖动到“入住”表的普通索引(客户号)上
将“客房”表中的主索引(客房号)拖动到“入住”表的普通索引(客房号)上
将“房价”表中的主索引(类型号)拖动到“客房”表的普通索引(类型号)上
至此,本数据库中的所有表之间的永久性关联创建结束(如下图所示)
3.参照完整性
打开数据库“SDB”,在其中的表完成下列操作:
①将当前文件夹下的自由表CLASS(班级表)和TEACHER(教师表)添加到学生数据库SDB中。
②为班级表CLASS创建一个主索引和普通索引(升序),主索引的索引名和索引表达式均为班级号;普通索引的索引名和索引表达式均为班主任号。
为教师表TEACHER创建一个主索引,索引名和索引表达式均为教师号。
③通过"班级号"字段建立班级CLASS和学生表STUDENT表间的永久联系。
通过班级表CLASS的"班主任号"字段与TEACHER的"教师号"字段建立班级表CLASS和教师表TEACHER间的永久联系。
为以上建立的两个联系设置参照完整性约束:
更新规则为"级联",删除规则为"限制"。
插入规则为"限制"。
按题目要求先添加表并完成相关索引的建立
将“class”表中的主索引(班级号)拖动到“student”表的普通索引(班级号)上
将“teacher”表中的主索引(教师号)拖动到“class”表的普通索引(班主任号)上
这时,完成了3个表之间永久性关联的创建(如下图所示)。
在数据库设计器中单击右键在快捷菜单中选择“编辑参照完整性”菜单项(如遇到不能编辑的提示(如下图所示),应事先清理数据库(数据库-清理数据库))
在随后出现的“参照完整性对话框”中设置基于两个联系设置参照完整性约束
(如下图所示)
3.1.5临时性关联的应用
首先为xuesheng表添加一个字段:
总成绩N(6,1),然后和chengji表建立临时性关联并计算xuesheng表中每个学生总成绩字段的值。
先为xuesheng表增加字段:
总成绩N(6,1),然后执行以下命令序列:
closeall
select1&&选择1号工作区
usechengji&&打开chengji表,该表是被关联表
indexon学号tagxh&&为chengji的“学号”字段建立索引
select2&&选择2号工作区
usexuesheng&&打开xuesheng表,该表是主关联表
setrelationto学号intoa&&通过“学号”建立与a(chengji表的别名)表的联系
replaceall总成绩witha.数学+a.英语+a.信息技术
&&用a表中的数据修改xuesheng表中的总成绩
第4章关系数据库标准语言SQL
4.1上机实验4
setdefaultto"d:
\vf上机实验素材\上机实验4"命令先指定默认目录,然后再进行相关操作。
4.1.1数据定义和数据操纵
1.打开数据库“选课管理”对其中的表完成以下操作:
①使用SQL语句创建一个表结构与“学生”表结构完全一致的“学生1”表
createtable学生1(学号C
(2),姓名C(10),性别C
(2),年龄I,系C
(1))
②使用SQL语句为“学生1”表中的“性别”字段定义字段有效性,其中规则表达式为:
性别="男"OR性别="女";信息为:
"性别只能为男或女";默认值为:
"女"。
altertable学生1altercolumn性别setcheck性别="男"OR性别="女"error"性别只能为男或女"
altertable学生1altercolumn性别setdefault"女"
③使用SQL语句将“学生1”表中的“系”字段名更改为“系别”。
altertable学生1renamecolumn系to系别
④使用SQL语句为“学生1”表增加字段“联系方式C(11)”。
altertable学生1addcolumn联系方式c(11)
⑤使用SQL语句删除“学生1”表文件。
droptable学生1
2.打开数据库“选课管理”完成以下操作:
①使用SQL语句为“课程”表增加一条新记录,课程号和课程名称字段值分别为:
"C8"、"逻辑学"。
insertinto课程values("C8","逻辑学")
②使用SQL语句将“学生”表中所有学生增加1岁。
update学生set年龄=年龄+1
③使用SQL语句逻辑删除“选课”表中成绩不及格的记录。
deletefrom选课where成绩<60
4.1.2数据查询
1.打开数据库“选课管理”根据其中的表完成以下查询操作:
①查询年龄在20和24之间的并且性别为“男”的学生信息。
select*;
from学生;
where年龄between20and24and性别="男"
等价于:
select*;
from学生;
where年龄>=20and年龄<=24and性别="男"
②查询学生的学号、姓名及其所选的课程名称和成绩信息。
selecta.学号,姓名,课程名称,成绩;
from学生a,选课b,课程c;
wherea.学号=b.学号andb.课程号=c.课程号
等价于:
selecta.学号,姓名,课程名称,成绩;
from学生ajoin选课bjoin课程c;
onb.课程号=c.课程号ona.学号=b.学号
③查询选课在5门以上(含)的学生的学号、姓名、平均分和选课门数,查询结果按平均分降序排序存放到表stu_temp中,(stu_temp表中的字段名依次为学号、姓名、平均分、选课门数)。
selecta.学号,姓名,avg(成绩)as平均分,count(*)as选课门数;
from学生a,选课b;
wherea.学号=b.学号;
groupbya.学号having选课门数>=5;
orderby平均分desc;
intotablestu_temp
等价于:
selecta.学号,姓名,avg(成绩)as平均分,count(*)as选课门数;
from学生ajoin选课b;
ona.学号=b.学号;
groupbya.学号having选课门数>=5;
orderby平均分desc;
intotablestu_temp
④查询没有被任何学生选择的课程信息。
select*;
from学生;
where学号notin(select学号from选课)
2.打开数据库“宾馆”根据其中的表完成以下查询操作:
①查询房价大于280元的客房的客房号、类型号、类型名、和价格。
selecta.*,类型名,价格;
from客房a,房价b;
wherea.类型号=b.类型号and价格>280
等价于:
selecta.*,类型名,价格;
from客房ajoin房价b;
ona.类型号=b.类型号;
where价格>280
②查询退房日期大于或等于2005-04-01的顾客的客户号、身份证、姓名、工作单位和该客户入住的客房号、类型名、价格信息,将查询结果按价格降序排序保存到表tabd中。
selecta.客户号,身份证,姓名,工作单位,b.客房号,类型名,价格;
from客户a,入住b,客房c,房价d;
wherea.客户号=b.客户号andb.客房号=c.客房号andc.类型号=d.类型号
and退房日期>={^2005/04/01};
orderby价格desc;
intotabletabd
等价于:
selecta.客户号,身份证,姓名,工作单位,b.客房号,类型名,价格;
from客户ajoin入住bjoin客房cjoin房价d;
onc.类型号=d.类型号onb.客房号=c.客房号ona.客户号=b.客户号;
where退房日期>={^2005/04/01};
orderby价格desc;
intotabletabd
3.基于自由表“xuesheng”和“chengji”完成以下查询操作:
①查询数学、英语、信息技术三门课中至少有一门在90分以上(含)的学生记录。
查询结果包含学号、姓名、数学、英语和信息技术5个字段,记录按照学号降序排序,查询去向为表table1。
selecta.学号,姓名,数学,英语,信息技术;
fromxueshenga,chengjib;
wherea.学号=b.学号and(数学>=90or英语>=90or信息技术>=90);
orderbya.学号desc;
intotabletable1
等价于:
selecta.学号,姓名,数学,英语,信息技术;
fromxueshengajoinchengjib;
ona.学号=b.学号;
where数学>=90or英语>=90or信息技术>=90;
orderbya.学号desc;
intotabletable1
②查询所有1982年出生的汉族学生记录。
查询结果包括学号、姓名、数学、英语和信息技术5个字段,记录按照数学成绩降序排序,查询去向为表table2。
selecta.学号,姓名,数学,英语,信息技术;
fromxueshenga,chengjib;
wherea.学号=b.学号andyear(出生日期)=1982and民族="汉";
orderby数学desc;
intotabletable2
等价于:
selecta.学号,姓名,数学,英语,信息技术;
fromxueshengajoinchengjib;
ona.学号=b.学号;
whereyear(出生日期)=1982and民族!
="汉";
orderby数学desc;
intotabletable2
4.打开数据库“订货管理”根据其中的表完成以下查询操作:
①查询所有仓库的平均面积。
selectavg(面积)from仓库
②查询向供应商S3发过订单的职工的职工号和仓库号。
select职工号,仓库号from职工;
where职工号in(select职工号from订购单where供应商号="S3")
等价于:
selectdistincta.职工号,仓库号;
from职工a,订购单b;
wherea.职工号=b.职工号and供应商号="S3"
等价于:
selectdistincta.职工号,仓库号;
from职工ajoin订购单b;
ona.职工号=b.职工号;
where供应商号="S3"
③查询和职工E1、E3都有业务联系的北京的供应商信息。
SELE*FROM供应商WHERE地址='北京'AND;
(供应商号IN(SELE供应商号FROM订购单WHERE职工号='E1'));
AND(供应商号IN(SELE供应商号FROM订购单WHERE职工号='E3'))
④查询每个仓库中工资多于1230元的职工个数。
select仓库号,count(*)as职工数;
from职工;
where工资>=1220;
groupby仓库号
⑤查询工资低于本仓库平均工资的职工信息。
select仓库号,avg(工资)as平均工资;
from职工groupby仓库号;
intotable平均
selecta.*;
from职工a,平均b;
wherea.仓库号=b.仓库号and工资<平均工资
等价于:
select*;
from职工a;
where工资<(selectavg(工资)from职工bwhereb.仓库号=a.仓库号)
第5章查询和视图
5.1上机实验5
setdefaultto"d:
\vf上机实验素材\上机实验5"命令先指定默认目录,然后再进行相关操作。
5.1.1查询
1.基于自由表“xuesheng”和“chengji”完成以下查询设计:
①利用查询设计器创建查询,从xuesheng和chengji表中找出所有1982年出生的汉族学生记录。
查询结果包含学号、姓名、数学、英语和信息技术5个字段;各记录按学号降序排序;查询去向为表tablel,最后将查询保存在queryl.qpr文件中,并运行该查询。
调用查询设计器
依次将xuesheng和chengji表添加到查询设计器中(联接条件为学号)
在字段选项卡中选择学号、姓名、数学、英语和信息技术5个字段
在
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二级 VF 上机 实验 答案