配色: 字号:
mis上机(1207)参考解
2013-01-29 | 阅:  转:  |  分享 
  
《管理信息系统》上机(1207)

数据库的设计与实施

MIS应用程序设计初步

实验环境:个人计算机,WindowsXP操作系统,VisualFoxPro6.0数据库管理软件。

实验内容:

一、SQL查询进阶

1、设置适当文件夹为默认目录。

2、创建“订货管理”数据库。

3、将客户表、订货表和订货明细表添加到该数据库中。

以下任务用SQL命令完成。

4、查询所有客户的客户名、订单号和地址。

select客户名,订单号,地址from客户,订货where客户.客户号=订货.客户号

注:此查询涉及的数据来自多个表,属多表查询。此类查询要求基本连接条件,即表间所有公共字段的值均要分别相等。客户表和订货表有唯一公共字段客户号,故有基本连接条件:客户.客户号=订货.客户号。

5、查询所有订单的订购器件名、订购日期和数量。

6、查询单价最低的2条订货记录。

selecttop2from订货明细orderby单价

注:orderby用于对查询结果排序,默认是升序(asc),降序为desc,topn表示输出最前面的n条记录。

7、查询订购数量最多的4条订购记录。

8、查询每个订单的订单号以及订购总金额。

select订单号,sum(单价数量)from订货明细groupby订单号

注:groupby用于对记录分组,订单号值相同的为一组,分组后集合函数,如求和函数sum,对每个分组分别求和。

9、查询至少有3个订单订购了的器件名和相应的订单数量。

selectcount()as订单数量,器件名from订货明细groupby器件号havingcount()>2

注:having条件通常和groupby联合使用,用于选择满足条件的分组。count()as订单数量用于给count()输出列取别名,即订单数量。

10、查询至少订购了3种器件的订单号和相应的订购器件数量。

11、查询订购总量最多的3种器件名以及相应的订购总量。

selecttop3sum(数量)as订购总量,器件名from订货明细groupby器件号orderby订购总量desc

12、查询客户表中无记录的订单号(即无相应客户号的订单号)。

selectdistinct订单号from订货明细where订单号notin(select订单号from订货)

注:此为嵌套查询。括号内为子查询,外为父查询。查询出订货明细表中没有在订货表中出现的订单号。Distinct的作用是去掉查询结果中的重复行。

13、查询没有订货记录的客户的客户名。

14、将查询8的查询结果输出到数组中,写出简要的测试结论。

select订单号,sum(单价数量)from订货明细groupby订单号intoarrayaa

注:intoarray表示将查询结果输出到某数组中。本例中数组aa保存了所有查询结果。在命令窗口中测试该数组元素的值,语法形式为:aa(n),aa为数组名,整数n为下标。例如

?aa(1)

将输出数组aa的第一个元素值。

15、将查询8的查询结果输出到表中保存。

select订单号,sum(单价数量)from订货明细groupby订单号intotable查询8

注:intotable或intodbf的作用是将查询结果保存到一个表中。本命令执行后将生成查询8.dbf表文件,观察其内容。

16、用命令将表查询8删除。

17、查询客户号为“C10001”客户的订购明细(包含订购日期)。

18、查询绝对价格波动(最高价与最低价之差)最小的4种器件的器件名以及相应的差价。

selecttop4器件名,max(单价)-min(单价)as差价from订货明细groupby器件号orderby差价

19、查询最新一笔订单的订货明细以及订购日期。

select订货明细.,max(订购日期)from订货,订货明细where订货明细.订单号=订货.订单号

二、用vfp向导创建窗口程序

创建一窗口(表单)程序,其功能是对客户表数据进行浏览、修改、添加和删除等常规操作和管理。

步骤如下:

1)文件|新建选择表单选项,点向导按钮;

2)选择表单向导

3)选择客户表的所有字段

























4)选择浮雕式表单样式

5)设置客户号升序为记录排序次序

































6)设置表单标题为客户信息管理,保存并运行表单程序。

7)在该表单中,将客户号为“B21001”记录的地址修改为“生命科技园A1号”;添加一个新客户记录:

客户号:A30112客户名:寰宇网络

地址:科星大道1066号电话:77695233

三、创建简单表单程序

用新建表单方式创建如下界面的表单窗口,要求:

1)表单中有2个标签,2个文本框,1个命令按钮;

2)设置表单的对象的适当属性值,使得表单不能最大化;

选中表单对象,在属性窗口中,选中maxbutton属性,将其值修改为.F.。

3)设置订单总金额文本框对象的适当属性值,使得只能在其中显示输出数据,而不能输入修改数据;

选中订单总金额对象,在属性窗口中,选中readonly属性,将其值修改为.T.。

4)用户在订单号文本框中输入订单号,然后点查询按钮,若订货明细表中存在该订单号,则在订单总金额文本框中显示总金额,否则弹出“没有这个定单!”消息框。























































提示:

1)弹出消息框语句的语法是:messagebox(提示信息,样式,标题)。

如:messagebox(“登陆成功!”,0,“用户登陆”)

2)用查询命令查找表中记录时,若找到满足条件的记录,则found()函数返回.t.,否则返回.f.。

3)条件语句语法是:

If条件表达式

语句块1

Else

语句块2

Endif

功能是:若条件表达式成立,则指定语句块1,否则执行语句块2(如果有)。

4)vfp数据统计命令与SQL统计函数类似:

Average范围数值表达式for条件to变量

sum范围数值表达式for条件to变量

count范围for条件to变量

以上命令分别统计平均值、求和、记录个数,并可将结果保存到变量中。



解答:双击查询命令按钮,在弹出的程序设计窗口中,选中command1对象的click过程,在该过程中编写如下代码:

settalkoff

use订货明细

locateallforALLTRIM(订单号)==ALLTRIM(thisform.text1.value)

iffound()

sum单价数量toxforALLTRIM(订单号)==ALLTRIM(thisform.text1.value)

thisform.text2.value=x

else

thisform.text2.value=""

messagebox("没有这个订单!",0,"订单金额查询")

endif

use

settalkon

献花(0)
+1
(本文系等你在交大首藏)