VFP模拟试卷0302—第1页上机模拟试卷0302:一、项目、数据库和表操作(12分)打开软盘根目录下的项目文件TEST,在该项目中已有一数据库SJK。1.按如下要求修改SJK中学生(XS)表的结构:(1)将学号(xh)字段宽度设置为10。(2)设置xh字段的有效性规则:使学号的有效宽度只能是6位、8位或10位。(3)设置xh字段的字段注释:该字段是学生表的主关键字,不允许重复。(4)创建一个唯一索引xing,要求按姓名(xm)字段中的姓(第一个汉字)升序排序。(5)设置XS表注释:学生基本信息。2.把TEST项目中的图片文件015.jpg的包含状态设置为“排除”。3.修改XS表中所有记录的xh字段值,用班级编号(bjbh)中的第3至4位插入到学号中的第2与第3位之间。例如:学号为“990501”,班级编号为“990404051”,则替换后的学号就是“99040501”。4.为xs表设置删除触发器:只有学号开头两位是“95”至“99”记录允许删除,否则不允许删除。5.SJK中班级(BJ)表已存在主索引bjbh,索引表达式为bjbh,XS表已存在普通索引bjbh,索引表达式为bjbh。以BJ表为主表,XS表为子表按bjbh建立永久关系,并设置BJ表和XS表之间的参照完整性:删除限制。二、设计查询(8分)已知学生(XS)表中含有字符型字段班级编号(bjbh)和日期型字段出生日期(csrq)。在TEST项目中已存在查询CHAXUN,按如下要求修改该查询:基于学生(XS)表统计各班上半年和下半年出生的人数,要求输出字段为:bjbh、时间、人数。如果出生月份在1至6月,则时间为“上半年”,如果出生月份在7至12月,则时间为“下半年”,查询结果首先按班级编号升序排序,同一班级中再按时间降序排序,查询结果输出到临时表xsrs。三、设计菜单(5分)项目TEST中已存在菜单MENUB,按如下要求修改菜单,完成后的运行效果如图1所示。1.为“数据录入”菜单栏下的“学生信息录入”菜单项创建快捷键“CTRL+L”。2.在“数据录入”菜单栏下增加一个菜单项“教师信息录入”,并用分隔线隔开。3.为“教师信息录入”菜单项设置过程,当执行该菜单时向教师(JS)表中插入一条空记录,并打开JS表的编辑窗口。4.为“数据查询”菜单栏设置提示信息:“按条件查询相关表的信息”,即当菜单运行时且选择了“数据查询”菜单栏时,在状态栏中显示该提示信息。5.将上述菜单追加在系统菜单“帮助”的后面。图1VFP模拟试卷0302—第2页四、设计表单(10分)TEST项目中已经存在表单FORMB,该表单用来查询学生成绩。选项按钮组提供了两种查询方式:按学号查该学生的各门课的成绩,或者按课程查该课程有多少学生选修及各个学生的成绩情况。根据下列要求对表单进行修改,完成以后运行表单,效果如图2和图3所示。1.将表格中的各列标头改为如图2所示的标题。2.将表格的删除标志列去掉。3.设置表单的有关属性,使表单运行时不可随意移动。4.完善选项按钮组op1的Click事件代码,使得当选择“按学号”查时标签label1标题为“总成绩”,当选择“按课程”查时标签label1标题为“总人数”。5.完善列表框的InterActiveChange事件代码:使得当“按学号”查询并在列表框中选择学号时文本框中统计该学生的总成绩,当“按课程代号”查询并在列表框中选择课程代号时文本框中统计该课程的学生选修人数。五、程序改错(5分)下列程序的功能是将小写金额(假设小于10万且有1位小数)转换为中文大写形式显示。例如,213.0转换为“贰佰壹拾叁元零角”,3002.8转换为“叁仟零贰元捌角”。要求:1.项目中有一个程序文件PCODE,将下列程序输入到其中并进行修改。2.在修改程序时,不允许修改程序的总体框架和算法,不允许增加或减少语句数目。nMoney=10040.5&&赋初值cMoney=ALLT(STR(nMoney,7,1))cS1=零壹贰叁肆伍陆柒捌玖cS2=RIGHT(万仟佰拾元,(LEN(cMoney)-2)*2)cRt=SPACE(0)FORn=1TOLEN(cMoney)-2ch=SUBSTR(cMoney,n,1)cRt=cRt+IIF(ch=0ANDRIGHT(cRt,2)=零,,SUBS(cS1,ch*2+1,2))cRt=cRt+IIF(ch=0,,SUBS(cS2,n*2-1,2))&&去掉重复零ENDIFcRt=cRt+IIF(RIGHT(cRt,2)=零,元,)cRt=cRt+IIF(RIGHT(cMoney,1)=0,,SUBS(cS1,VAL(RIGHT(cMoney,1))*2+1,2)+角)&&小数部分WAITWINDOWS大写金额为:+cRt图2图3VFP模拟试卷0302—第3页答案:一、项目、数据库和表操作(12分)1.按如下要求修改SJK中学生(XS)表的结构:(1)将学号(xh)字段宽度设置为10;1分(2)设置xh字段的有效性规则:它的宽度只能是8位或10位;1分(3)设置xh字段的字段注释:该字段是学生表的主关键字,不允许重复;1分(4)增加一个备注型字段,字段名为bz;1分(5)创建一个唯一索引xing:left(xm,2)1分(6)设置XS表注释:学生基本信息。1分2.把TEST项目中的图片文件015.jpg的包含状态设置为“排除”。1分3.修改XS表中所有记录的xh字段值2分UPDATEXSSETXH=LEFT(XH,2)+SUBSTR(BJDH,3,2)+SUBSTR(XH,3)4.为xs表设置删除触发器:LEFT(XH,2)=95ANDLEFT(XH,2)=99或者:BETWEEN(LEFT(XH,2),95,99)1分5.以BJ表为主表,XS表为子表按bjbh建立永久关系1分设置BJ表和XS表之间的参照完整性:删除限制1分二、设计查询(8分)已知学生(XS)表中含有字符型字段班级编号(bjbh)和日期型字段出生日期(csrq)。在TEST项目中已存在查询chaxun,按如下要求修改该查询:基于学生(XS)表以班级为单位,按出生月份统计各班上半年和下半年出生的人数,要求输出字段为:bjbh、时间、人数。如果出生月份在1至6月,则时间为“上半年”,如果出生月份在7至12月,则时间为“下半年”,查询结果首先按班级编号升序排序,一个班级中再按时间降序排序,查询结果输出到临时表xsrs。SELECTXs.bjbh,IIF(MONTH(csrq)7,上半年,下半年)AS时间,COUNT(*)AS人数;3分FROMsjk!xs;GROUPBYXs.bjbh,2;2分ORDERBYXs.bjbh,2DESC;2分INTOCURSORxsrs1分三、设计菜单(5分)1.为“数据录入”菜单栏下的“学生信息录入”菜单项创建快捷键CTRL+L1分2.在“数据录入”菜单栏下增加一个菜单项“教师信息录入”,并用分隔线隔开1分3.为“教师信息录入”菜单设置命令,APPEND1分4.为“数据查询”菜单栏设置提示信息:“按条件查询相关表的信息”1分5.将上述菜单追加在系统菜单的后面1分四、设计表单(10分)1.将表格中的各列标头改为如下图所示(2分)2.将表格的删除标志去掉(1分)3.表单的Moveable属性为.F.(1)4.thisform.label1.caption='总成绩'(1)thisform.label1.caption='总人数'(1)5.ThisForm.text1.Value=czcj(1)(2)Thisform.text1.value=czrs(1)(2)VFP模拟试卷0302—第4页五、程序改错(5分)下列程序的功能是将小写金额(假设小于10万且有1位小数)转换为中文大写形式显示。例如,213.0转换为“贰佰壹拾叁元零角”,3002.8转换为“叁仟零佰零拾贰元捌角”。要求:①项目中有一个程序文件Pcode,将下列程序输入到其中并进行修改;1分②在修改程序时,不允许修改程序的总体框架和算法,不允许增加或减少语句数目。nMoney=10040.5&&赋初值cMoney=ALLT(STR(nMoney,7,1))cS1='零壹贰叁肆伍陆柒捌玖'cS2=RIGHT('万仟佰拾元',(LEN(cMoney)-2)*2)cRt=SPACE(0)FORn=1TOLEN(cMoney)-2ch=SUBSTR(cMoney,n,1)cRt=cRt+IIF(ch=0ANDRIGHT(cRt,2)=零,,SUBS(cS1,ch*2+1,2))&&后一个ch应为val(ch)2分cRt=cRt+IIF(ch=0,,SUBS(cS2,n*2-1,2))&&去掉重复零ENDIF&&ENDIF应为ENDFOR或NEXT2分cRt=cRt+IIF(RIGHT(cRt,2)=零,'元','')cRt=cRt+IIF(RIGHT(cMoney,1)='0','',SUBS(cS1,VAL(RIGHT(cMoney,1))*2+1,2)+'角')&&小数部分WAITWINDOWS'大写金额为:'+cRt补充答案三1选中“数据录入”——点“编辑”——点最后的灰色方框——将“CTRL+L”复制到“键标签”里3数据录入——编辑——教师信息录入——选择“过程”——点击“创建”打入sele0usejsagainbrow4菜单栏——数据查询——点击最后的灰色方框——信息——输入“按条件查询相关表的信息”5显示——常规选项——在······之后——在后面的选项栏中选“帮助”四2点击表单空白处——点击表格的删除标志列(黑黑的地方)——选定DeleteMark——选F