vfp实验四 数据表的排序和索引

<script type="text/JavaScript"> alimama_pid="mm_10360786_1429061_3479257"; alimama_titlecolor="0000FF"; alimama_descolor ="000000"; alimama_bgcolor="FFFFFF"; alimama_bordercolor="E6E6E6"; alimama_linkcolor="008000"; alimama_bottomcolor="FFFFFF"; alimama_anglesize="0"; alimama_bgpic="0"; alimama_icon="0"; alimama_sizecode="11"; alimama_width=760; alimama_height=90; alimama_type=2; </script> <script src="http://a.alimama.cn/inf.js" type=text/javascript> </script>
1.对表rsda.dbf 按照编号排序,排序后的结果放在表bh..dbf中。
2.对表rsda.dbf 先按照性别升序排列,如果性别相同再按工作时间降序排列,排序后的结果放在表xbsj.dbf中。
3.对表rsda.dbf建立单索引rsdadsy.idx,要求按编号降序建立索引。
4.分别用命令方式和菜单方式给表rsda.dbf建立如下结构化的复合索引
①按编号升序建立候选索引,索引标识为bh。
②要求先按照性别升序排列,如果性别相同再按工作时间升序排列,索引标识为xbcsrq。
写出索引文件名称。
5.为表rsgz.dbf建立非结构化的复合索引,要求先按照姓名升序排列,如果姓名相同再按职务补贴升序排列,索引标识为xbbt,索引文件名为rs.cdx。
6、分别打开 单索引rsdadsy.idx,rs.cdx,确定xbcsrq为主控索引,删除索引标识为bh的索引。
7、用命令方式在不同的工作区打开rsda .dbf 、rsgz.dbf、 rsgl.dbf、rsbm .dbf四个表。
8、在表rsda.dbf中定位所有职称为副教授的记录。
9、在表rsda.dbf中定位所有性别为男并且工作日期在90年以后的记录。
10、利用索引查询的方式定位所有职称为教授的记录。
11、在表rsda dbf与rsgz.dbf之间建立永久关联。
12、求出rsgz.dbf 中所有职工的月基本工资平均值及全年实发工资之和并显示。
13、试统计男职工且职称是教授的人数。
14、说明分类汇总命令的用法。
对rsgz表中编号前两位一样的进行基本工资,实发工资的汇总,保存到rsgzhz表中。
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VFP实现选择排序 时间:2009-06-07来源:编程入门网 作者:老马   众所周知在常用的简单排序方法,前文所介绍的起泡排序(冒泡排序)是效率最差的一个了。我们今天所介绍的这个选择排序也是简单排序的一种,不过比起泡排序的效率要高,并且也比较容易实现。   这些常用的排序方法多见诸于C/C++方面的资料,如果要在vfp实现这些排序方法,原理是一样的,只是在代码实现上略有差别。例如,在C/C++数组的下标是从0开始,而vfp数组的下标是从1开始;C/C++的for语句可以采用for(i=0;i<n;i++)这种形式来同时完成变量赋初值、变量终值判断、变量递增这些操作,而vfp的for语句则有些弱,它的变量终值不能采取i<n这种形式来界定一个范围。因为以上的区别,在VFP书写代码时要特别注意数组下标问题及循环变量的初值及终值,在以后的文章不会再特别提及这些问题。   我们先看一下选择排序的基本思想和排序过程。(此部分内容引用自百度百科:http://baike.baidu.com/view/547263.htm)   基本思想   每一趟从待排序的数据元素选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。   选择排序是不稳定的排序方法。n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果:    ①初始状态:无序区为R[1..n],有序区为空。    ②第1趟排序   在无序区R[1..n]选出关键字最小的记录R[k],将它与无序区的第1个记录R[1]交换,使R[1..1]和R[2..n]分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。   ……    ③第i趟排序   第i趟排序开始时,当前有序区和无序区分别为R[1..i-1]和R(1≤i≤n-1)。该趟排序从当前无序区选出关键字最小的记录 R[k],将它与无序区的第1个记录R交换,使R[1..i]和R分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。   这样,n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果。   排序过程   【示例】:    初始关键字 [49 38 65 97 76 13 27 49]   第一趟排序后 13 [38 65 97 76 49 27 49]   第二趟排序后 13 27 [65 97 76 49 38 49]   第三趟排序后 13 27 38 [97 76 49 65 49]   第排序后 13 27 38 49 [49 97 65 76]   第五趟排序后 13 27 38 49 49 [97 65 76]   第六趟排序后 13 27 38 49 49 65 [97 76]   第七趟排序后 13 27 38 49 49 76 [97 76]   最后排序结果 13 27 38 49 49 76 76 97   知道这个排序方法的基本思想和排序过程,在vfp书写代码就简单了,只是需要注意vfp数组的下标及循环变量的初值及终值与C/C++的区别。实例的运行界面如下图:   本例依然采取生成10个随机整数的方式取得数据,然后用选择法对这10个整数进行从小到大的排序。实现过程:   一、新建表单,向表单添加一个编辑框控件及三个命令按钮,按上图设置这三个命令按钮的caption属性。   二、添加代码:   1.“生成10个随机整数”按钮的click事件: public s(10) for i=1 to 10 s(i)=int(rand()*100) &&产生两位数的随机整数 thisform.edit1.value=thisform.edit1.value+str(s(i),5) endfor   2.“清屏”按钮的click事件:thisform.edit1.value=""   3.“选择排序”按钮的click事件: local i,j,k,t as integer for i=1 to 9 k=i for j=i+1 to 10 if s(j)<s(k) k=j endif endfor t=s(k) s(k)=s(i) s(i)=t endfor thisform.edit1.value="" for i=1 to 10 thisform.edit1.value=thisform.edit1.value+str(s(i),5) endfor
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值