第一套—基本操作
“规则”框中写:数量>0 and 数量<9999(注意:不加定界符),在“信息”框中输入:“数量超范围”(注意:必须加定界符)
1. 用SQL语句完成下列操作:列出所有与\红\颜色零件相关的信息(供应商号,工程号和数量),并将检索结果按数量降序排序存放于表supply_temp中。
答案: SELECT 供应商号,工程号,数量;
FROM 零件,供应 WHERE 供应.零件号=零件.零件号; AND 颜色=\红\ORDER BY 数量 desc; INTO DBF supply_temp
在表单的rightclick事件中输入:do menu_quick.mpr,保存并运行表单。
SELECT 零件名, 颜色, 重量 FROM 供应 , 零件 where 供应.零件号 = 零件.零件号; And 工程号 = thisform.text1.value order by 零件名 into table pp thisform.grid1.recordsource=\第二套 ——基本操作
2.设计一个表单MYFORM4,表单中有两个命令按钮\查询\名称为Command1)和\退出\名称为Command2)。
(1) 单击\查询\按钮,查询BOOKAUTH数据库中出版过三本以上(含三本)图书的作者信息,查询信息包括:作者姓名,所在城市;查询结果按作者姓名升序保存在表NEW_VIEW4中。
SELECT 作者姓名,所在城市 FROM authors,books ; WHERE Authors.作者编号 = Books.作者编号;
GROUP BY 作者姓名 HAVING COUNT(Books.图书编号) >= 3; ORDER BY 作者姓名;
INTO TABLE NEW_VIEW4
(1) 首先将BOOKS.DBF中所有书名中含有\计算机\个字的图书复制到表BOOKS_BAK中,以下操作均在BOOKS_BAK表中完成; (2) 复制后的图书价格在原价格基础上降价5%;
(3) 从图书均价高于25元(含25)的出版社中,查询并显示图书均价最低的出版社名称以及均价,查询结果保存在表new_table4中(字段名为出版单位和均价)。
SELECT * FROM BOOKS WHERE 书名 LIKE \计算机%\UPDATE BOOKS_BAK SET 价格=价格*0.95
SELECT TOP 1 出版单位,avg(books_bak.价格) as 均价 FROM books_bak; GROUP BY 出版单位 HAVING 均价>=25 ORDER BY 2 INTO TABLE new_table4 第三套-基本操作
为菜单项\查找\设置快捷键Ctrl+T。答案:打开mymenu菜单,选中“文件”,单击“编辑”按钮,为“查找”子菜单设置快捷方式,单击“选项”下的按钮,在弹出的“提示选项”对话框中把光标定位在“键标签”后面的框中,从键盘上按下ctrl+n,确定,最后保存菜单并生成.
1. 用SQL语句完成下列操作:查询与项目号\的项目所使用的任意一个零件相同的项目号、项目名、零件号和零件名称(包括项目号s1自身),结果按项目号降序排序,并存放于item_temp.dbf中,同时将你所使用的SQL语句存储于新建的文本文件item.txt中。 答案:在命令窗口中输入以下命令并执行
SELECT 项目信息.项目号, 项目信息.项目名, 零件信息.零件号,; 零件信息.零件名称 FROM 零件信息 INNER JOIN 使用零件; INNER JOIN 项目信息 ON 使用零件.项目号 = 项目信息.项目号 ; ON 零件信息.零件号=使用零件.零件号 WHERE 使用零件.零件号 IN; (select 零件号 from 使用零件 where 项目号=\
ORDER BY 项目信息.项目号 DESC INTO TABLE item_temp.dbf 新建文本文件,将SQL语句复制过去,注意在保存文本文件时要加上扩展名.txt
设计一个文件名和表单名均为form_item的表单,所有控件的属性必须在表单设计器的属性窗口中设置。表单的标题设为\使用零件情况统计\。表单中有一个组合框(combo1)、一个文本框(text1)和两个命令按钮\统计\(command1)和\退出\(command2)。
运行表单时,组合框中有三个条目\、\、\(只有三个,不能输入新的,RowSourceType的属性为\数组\,Style的属性为\下拉列表框\)可供选择,单击\统计\命令按钮以后,则文本框显示出该项目所用零件的金额合计(某种零件的金额=单价*数量)。
答案: 做好表单后,首先把组合框控件的数据源类型改为“5—数组”,然后将数据源改为相应的数组名,若题目没有要求数组名,可以任取一个如:aa,做好之后,再在表单的load事件(在表到空白处双击)里定义数组: public aa(3) aa(1)=\
aa(2)=\aa(3)=\
在查询按钮的单击事件(即click事件)里输入以下代码: SELECT SUM(零件信息.单价*使用零件.数量); FROM 零件信息 INNER JOIN 使用零件 ; ON 零件信息.零件号 = 使用零件.零件号;
WHERE 使用零件.项目号 = thisform.combo1.value into array bb thisform.text1.value=bb 第四套--——基本操作
4) 修改组合框的InteractiveChange事件代码,使得当用户从组合框选择职员时,能够将该职员所签订单的平均金额自动显示在文本框里。其中,需将命令语句\=m2\改为\=m2\。
在考生文件夹下创建一个下拉式菜单mymenu.mnx,并生成菜单程序mymenu.mpr。运行该菜单程序时会在当前Visual FoxPro系统菜单的\帮助\子菜单之前插入一个\考试\子菜单,如下图所示。 菜单命令\统计\和\返回\的功能都通过执行过程完成。
菜单命令\统计\的功能是以组为单位求订单金额的和。统计结果包含\组别\、\负责人\和\合计\三项内容,其中\负责人\为该组组长(由employee中的\职务\一项指定)的姓名,\合计\为该组所有职员所签订单的金额总和。统计结果应按\合计\降序排序,并存放在tabletwo表中。 答案: 做如图所示菜单,在”显示”—“常规选项”对话框中选:在?之前,在下拉框中选“帮助”,在“统计”菜单项的过程中编写如下代码:SELECT Employee.组别, SUM(Orders.金额) as 合计; FROM 订单管理!employee INNER JOIN 订单管理!orders ; ON Employee.职员号 = Orders.职员号; GROUP BY Employee.组别; INTO TABLE aa.dbf
SELECT Aa.组别, Employee.姓名 AS 负责人, Aa.合计; FROM 订单管理!employee INNER JOIN aa ; ON Employee.组别 = Aa.组别; WHERE Employee.职务 = \组长\ ORDER BY Aa.合计 DESC; INTO TABLE tabletwo.dbf 第五套—基本操作
1. 用SQL语句完成下列操作:检索\田亮\所借图书的书名、作者和价格,结果按价格降序存入book_temp表中。 答案:SELECT Book.书名, Book.作者, Book.价格;
FROM 图书!book INNER JOIN 图书!loans INNER JOIN 图书!borrows ; ON Loans.借书证号 = Borrows.借书证号 ; ON Book.图书登记号 = Loans.图书登记号;
WHERE Borrows.姓名 = \田亮\ ORDER BY Book.价格 DESC; INTO TABLE book_temp.dbf
2. 在考生目录下有一个名为menu_lin的下拉式菜单,请设计顶层表单form_menu,将菜单menu_lin加入到该表单中,使得运行表单时菜单显示在本表单中, 并在表单退出时释放菜单。
答案:新建表单form_menu,表单的ShowWindow属性改为\2-作为顶层表单\。
双击表单空白处,分别输入表单Init和Destroy事件。 ************Init事件中************** DO menu_lin.mpr With This
***********destroy事件中************ Release Menu menu_lin
综合应用:
运行表单时,组合框中有三个条目\清华\、\北航\、\科学\只有三个出版社名称,不能输入新的)可供选择,在组合框中选择出版社名称后,如果单击\统计\命令按钮,则文本框显示出\图书\表中该出版社图书的总数。
答案:步骤1:建立表单,在表单中添加一个组合框、一个文本框和两个命令按钮,并修改各控件的属性,将组合框的rowsourcetype属性改为:1-值,rowsource属性改为:清华,北航,科学,再将组合框的style属性改为:2-下拉列表框,然后双击命令按钮,写入命令按钮的Click事件。
*******\统计\命令按钮的Click事件******
select count(*) from book where 出版社=thisform.combo1.value into array aa THISFORM.TEXT1.VALUE=aa 第六套————基本操作 在考生文件夹下完成如下操作:
1. 用SQL INSERT语句插入元组(\到\零件信息\表(注意不要重复执行插入操作),并将相应的SQL语句存储在文件one.prg中。INSERT INTO 零件信息 VALUES(\
2. 用SQL DELETE语句从\零件信息\表中删除单价小于600的所有记录,并将相应的SQL语句存储在文件two.prg中。
DELETE FROM 零件信息 WHERE 单价<600
3. 用SQL UPDATE语句将\零件信息\表中零件号为\的零件的单价更改为1090,并将相应的SQL语句存储在文件Three.prg中。
UPDATE 零件信息 SET 单价=1090 WHERE 零件号=\
4. 打开菜单文件mymenu.mnx,然后生成可执行的菜单程序mymenu.mpr。
答案:(4)打开菜单mymenu.mnx后,选择系统菜单中的\菜单\,然后选择\生成\。
第1行中的\需改为\;第3行中的\项目号\需改为\零件号\;第5行中的\需改为\。 第七套:——基本操作
4) 修改\显示\按钮的Click事件代码。当单击该按钮时,表格Grid1内将显示在列表框中所选orders表中指定字段的内容。
错误1:FOR i=1 TO thisform.List1.ColumnCount 修改为:FOR i=1 TO thisform.List1.ListCount 错误2:s=thisform.List1.value 修改为:s=thisform.List1.List(i) 错误3:s=s+thisform.List1.value 修改为:s=s+\
2.利用查询设计器创建查询,从orders、employee和customer表中查询2001年5月1日以后(含)所签所有订单的信息。查询结果依次包含\订单号\、\签订日期\、\金额\、\签订者\和\客户名\五项内容,其中\签订者\为签订订单的职员姓名。各记录按签订日期降序排序,签订日期相同按金额降序排序;查询去向为表tableone。最后将查询保存在queryone.qpr文件中,并运行该查询。
步骤2:分别选择字段orders.订单号、orders.签订日期、orders.金额、employee.姓名 AS 签订者、customer.客户名,添加到可用字段中。步骤3:在筛选选项卡中设置筛选条件为:字段处为:orders.签订日期,条件为:>=,实例为:{^2001-05-01}。 综合应用
在考生文件夹下创建一个顶层表单myform.scx(表单的标题为\考试\),然后创建并在表单中添加菜单(菜单的名称为mymenu.mnx,菜单程序的名称为mymenu.mpr)。效果如下图所示。
菜单命令\统计\和\退出\的访问键分别为\和\,功能都通过执行过程完成。
菜单命令\统计\的功能是以客户为单位、从customer和orders表中求出订单金额的和。统计结果包含\客户号\、\客户名\和\合计\三项内容,其中\合计\是指与某客户所签所有订单金额的和。统计结果应按\合计\降序排序,并存放
答案:步骤1:新建表单,将表单的\属性设置为\作为顶层表单\然后设置其Caption属性值为\考试\双击表单空白处,编写表单的\事件代码:
DO mymenu.mpr WITH THIS
步骤2:统计(\\ 步骤4:为\统计\和\退出\菜单项创建过程,写入如下SQL语句。 SELECT Customer.客户号, Customer.客户名, sum(orders.金额) as 合计; FROM customer,orders ; WHERE Customer.客户号 = Orders.客户号; GROUP BY Customer.客户号; ORDER BY 3 DESC; INTO TABLE tabletwo.dbf 第9套:——基本操作 1. 将student表中学号为99035001的学生的院系字段值修改为\经济\。 2. 将score表的\成绩\字段的名称修改为\考试成绩\。 答案:1)update student set 院系=”经济” where 学号=”99035001” (2)打开score表,单击\显示\菜单中的\表设计器\菜单命令,打开表设计器,修改字段名称。 (3)在命令窗口输入SQL命令: ALTER TABLE student ADD UNIQUE 学号 TAG 学号 (4) Index on 课程编号 tag 课程编号 candidate 2. 给定程序(表单)modi2.scx,其功能是请用户输入一个正整数,然后计算从1到该数字之间有几个偶数、几个奇数、几个被3整除的数,并分别显示出来,最后给出总数目。请修改并调试该程序,使之正确运行。 答案:错误1:改为 STORE 0 TO x,s1,s2,s3。 错误2:改为 x=val(thisform.text1.value)。 错误3:改为 if mod(x,3)=0。 步骤2:以同样的方法修改\退出\按钮的Click事件代码为:Thisform.Release 综合应用 1. 修改\添加>\命令按钮Click事件下的语句,使得当单击该命令按钮时,将左边列表框所选项添加到右边的列表框; 答案: thisform.list2.addItem(thisform.list1.value) 2. 修改\移去\命令按钮Click事件下的语句,使得当单击该命令按钮时,将右边列表框所选项移去(删除); 答案: thisform.list2.removeItem(thisform.list2.listindex) 3. \确定\命令按钮Click事件下的程序的功能是查询右边列表框所列课程的学生的考试成绩(依次包含姓名、课程名称和考试成绩3个字段),并先按课程名称升序、再按考试成绩降序存储到表zonghe.dbf中。 注意:程序完成后必须运行,要求将\计算机基础\和\高等数学\从左边的列表框添加到右边的列表框,并单击\确定\命令按钮完成查询和存储。 答案: 步骤1:打开考生文件夹下的表单文件zonghe。 步骤2:\确定\命令按钮的Click事件如下。 ********\确定\按钮的Click事件代码********* SELECT Student.姓名, Course.课程名称, Score.考试成绩; FROM student INNER JOIN score; INNER JOIN course ; ON Score.课程编号 = Course.课程编号 ; ON Student.学号 = Score.学号; where &cn; ORDER BY Course.课程名称, Score.考试成绩 DESC; INTO TABLE zonghe.dbf 第十套——基本操作 4. 将SCORE1表\成绩\字段的默认值设置为空值(NULL)。 答案:(4)同上题打开表设计器,选择\成绩\字段,单击NULL列下的按钮(表示此列允许空值),然后再在\字段有效性\中的默认值中填入\。 简单应用: 1. 在SCORE_MANAGER数据库中查询学生的姓名和2003年的年龄(计算年龄的公式是:2003-Year(出生日期),年龄作为字段名),结果保存在一个新表NEW_TABLE1中。使用报表向导建立报表NEW_REPORT1,用报表显示NEW_TABLE1的内容。报表中数据按年龄升序排列,报表标题是\姓名-年龄\其余参数使用缺省参数。 答案(1)【操作步骤】 步骤1:在命令窗口中输入如下语句,并执行。 SELECT 姓名,2003-Year(出生日期) as 年龄; FROM student; INTO TABLE new_table1 综合应用 表单运行时,用户首先在文本框中输入学号,然后单击\查询\按钮,如果输入学号正确,在表单右侧以表格(名称为Grid1)形式显示该生所选课程名和成绩,否则提示\学号不存在,请重新输入学号\。 再在查询按钮的单击事件里写代码: if score1.学号=alltrim(thisform.text1.value) thisform.grid1.recordsource=\课程名, Score1.成绩; FROM score_manager!score1 INNER JOIN score_manager!course ; ON Score1.课程号 = Course.课程号; WHERE Score1.学号 = alltrim(thisform.text1.value)\ else messagebox(\学号不存在,请重新输入学号\ thisform.grid1.recordsource=\ endif 第11套:——基本操作 1. 设计一个如下图所示的时钟应用程序,具体描述如下: 表单名和表单文件名均为timer,表单表题为\时钟\,表单运行时自动显示系统的当前时间; 1) 显示时间的为标签控件label1(要求在表单中居中,标签文本对齐方式为居中); 2) 单击\暂停\命令按钮(Command1)时,时钟停止; 3) 单击\继续\命令按钮(Command2)时,时钟继续显示系统的当前时间; 4) 单击\退出\命令按钮(Command3)时,关闭表单。 提示:使用计时器控件,将该控件的interval属性设置为500,即每500毫秒触发一次计时器控件的timer事件(显示一次系统时间);将计时器控件的interval属性设置为0将停止触发timer事件;在设计表单时将timer控件的interval属性设置为500。 步骤1:新建一个名为timer的表单。按题目要求添加一个标签控件,一个计时器控件(计时器控件是个小闹钟的样子),3个命令按钮控件。 步骤2:在属性窗口设置各控件的属性如下: 表单的Caption值为:时钟 表单的Name值为:Timer 标签的Alignment的值为:2-中央 步骤3:选中标签,然后执行\格式\→\对齐\菜单中的\水平居中\命令。 计时器的Interval值为500。 ******\暂停\按钮的Click事件代码****** ThisForm.Timer1.Interval=0 ******\继续\按钮的Click事件代码***** ThisForm.Timer1.Interval=500 ******\退出\按钮的Click事件代码***** ThisForm.Release ******\计时器\的timer事件代码******* ThisForm.Label1.Caption=time() 综合应用: 3. 页框控件(PageFrame1)中含有三个页面,每个页面都通过一个表格控件显示有关信息: 1) 第一个页面Page1上的标题为\持有人\,其上的表格控件名为grdCurrency_sl,记录源的类型(RecordSourceType)为\表\,显示自由表currency_sl中的内容; 2) 第二个页面Page2上的标题为\外汇汇率\,其上的表格控件名为grdRate_exchange,记录源的类型(RecordSourceType)为\表\,显示自由表rate_exchange中的内容; 3) 第三个页面Page3上的标题为\持有量及价值\,其上的表格控件名为Grid1,记录源的类型 步骤2:在表单的空白处单击右键,添加表\和\到数据环境中。 步骤3:修改页框的PageCount值为3,在页框上单击右键,在弹出的快捷菜单中单击\编辑\项。将Page1的Caption属性修改为\持有人\,从数据环境中拖拽表\到该页,同样将Page2的Caption属性修改为\外汇汇率\,从数据环境中拖拽表\到该页。将Page3的Caption属性修改为\持有量及价值\,在页框上添加一个表格控件,修改表格控件的属性RecordSourceType为:3-查询,RecordSource为:query。 第13套————基本操作 1. 用SQL语句完成下列操作:列出\林诗因\持有的所有外币名称(取自rate_exchange表)和持有数量(取自currency_sl表),并将检索结果按持有数量升序排序存储于表rate_temp中,同时将你所使用的SQL语句存储于新建的文本文件rate.txt中。 SELECT Rate_exchange.外币名称, Currency_sl.持有数量; FROM currency_sl,rate_exchange ; WHERE Currency_sl.外币代码 = Rate_exchange.外币代码; AND Currency_sl.姓名 = \林诗因\ORDER BY Currency_sl.持有数量; INTO TABLE rate_temp 综合应用 运行表单时,在文本框text1中输入某人的姓名,然后单击\查询\,则text2中会显示出他所持有的全部外币相当于人民币的价值数量。注意:某种外币相当于人民币数量的计算公式:人民币价值数量=该种外币的\现钞买入价\该种外币\持有数量\。