VFP机考复习资料.docx
- 文档编号:29831363
- 上传时间:2023-07-27
- 格式:DOCX
- 页数:19
- 大小:20.73KB
VFP机考复习资料.docx
《VFP机考复习资料.docx》由会员分享,可在线阅读,更多相关《VFP机考复习资料.docx(19页珍藏版)》请在冰豆网上搜索。
VFP机考复习资料
VFP-SQL语句部分
1、创建表
CREATETABLE-SQL命令
该命令的一般格式为:
CREATETABLE|dbf<表文件名>(字段名1字段类型[(字段宽度[,小数位数])][,字段名2字段类型[(字段宽度[,小数位数])]]……)
、例:
CREATETABLExscj(xhc(8),xmc(6),xbc
(2),;cjn(5,1),ksrqd)
补充:
C:
字符型
Y:
货币型
N:
数值型
D:
日期型
T:
日期时间型
L:
逻辑型
M:
备注型
G:
通用型
CREATETABLE-SQL命令创建数据库表
命令一般格式:
Createtable表名1[free](字段名1字段类型代号[(字段宽度[,小数位数])][null|notnull][check字段规则1[error“信息1”]][default默认值][primarykey|unique][references表名2[tag索引标识1]][,字段名2字段类型代号[(字段宽度[,小数位数])][null|notnull]][check字段规则2[error“信息2”]][default默认值])|fromarray数组名
使用示例:
createdataxscjgl&&创建学生成绩管理数据库
createtablexs(;
xhc(4)default"1201"primarykey,;&&primarykey主索引
xmc(6),;
xbc
(2)checkxb="男"orxb="女"error"性别只能是男或女"default"女",;
nln
(2)null)&&创建学生表
createtablekc(;
kchc(3)unique,;&&unique唯一索引
kcmc(10),;
xfn(3,1),;
bxkl)&&创建课程表
createtablecj(;
xhc(4)default"1201"referencexstagxh,;
kchc(8),;
ksrqd,;
cjn(5,1))&&创建成绩表
modidata
altertablecjaddprimarykeyxh+kch+str(cj,4,1)tagdh&&为成绩表添加一个主索引
2、修改表结构表
ALTERTABLE-SQL命令功能:
见书P102
命令格式示例:
添加字段ALTERTABLExscjADDCOLUMNkcmcC(14)
重命名字段ALTERTABLExscjRENAMECOLUMNkcmcTOkc
删除字段ALTERTABLExscjDROPCOLUMNkc
修改字段:
ALTERTABLExscjALTERCOLUMNcj(4,1)
补充:
ALTERTABLE–SQL语句如果对表进行操作就不用加COLUMN。
如:
ALTERTABLEJSSETCHECKgzrq ERROR’出生日期必须大于工作日期’&&设置表的有效性 ALTERTABLEJSDROPCHECK&&删除表的有效性规则 ALTERTABLEJSADDPRIMARYKEYjybhTAGjybh&&增加一个主索引 3、插入表数据 INSERT-SQL命令 该命令的一般格式为: INSERTINTO<表名>[(字段名1[,字段名2…])]VALUES(表达式1[,表达式2…]) 例: INSERTINTOxscj(xh,xm,cj)VALUES("81991001","张良",85.5) 4、更新表数据 UPDATE-SQL命令 命令格式: UPDATE<表名>SET字段1=表达式1[,字段2=表达式2…]WHERE条件表达式 例: UPDATExscjSETcj=cj*1.05WHEREcj>80 5、删除表数据 DELETE-SQL命令。 命令格式: DELETEFROM<表名>[WHERE条件表达式] 例: DELETEFROMxscjWHEREcj<60 要将表记录彻底物理删除再在“命令”窗口中输入: PACK 补充: 1>DELETE不能删除个别的字段,它对于给定表只能整个记录整个记录地删除. 2>与INSERT和UPDATA一样,删除一个表中的记录可能会导致与其他表的引用完整性问题.当对数据库进行修改时一定在头脑中有这个概念. 3>DELETE语句只会删除记录,不会删除表.如果要删除表需使用DROPTABLE命令. 6、查询记录 SELECT-SQL命令创建查询 常用的格式: SELECT表名1.字段名1[AS标题名1],表名1.字段名2[AS标题名2],… FROM数据库名! 表名1[,数据库名! 表名2][,数据库名! 表名3] [TOFILE文本文件名|intotable|intocursor表文件名] [WHERE选定条件] [GROUPBY分组字段名] [HAVING分组中的满足条件] [ORDERBY排序字段名1[ASC|DESC][,排序字段名2[ASC|DESC]...]] 示例: 浏览学生中的查询学生student.qpr: SELECT表xs.xhas学号,表xs.xmas姓名,表xs.xbas性别,表xs.csrqas出生日期,表xs.bjas班级名称; FROM数据test! 表xs; WHERE表xs.bj=cs1; ORDERBY表xs.xh; INTOTABLExs 浏览成绩中的按课程查询sub_cj.qpr: SELECT表xs.bjas班级名称,COUNT(表xs.xh)as班级人数,AVG(表cj.cj)as平均分,; MAX(表cj.cj)as最高分,MIN(表cj.cj)as最低分; FROM数据test! 表xs,数据test! 表cj,数据test! 表kc; WHERE表cj.xh=表xs.xh; AND表kc.kcm=表cj.kcm; AND表cj.kcm=sc1; GROUPBY表xs.bj; ORDERBY表xs.bj; INTOTABLEsub_cj 补充: 子查询: 见书P125 UNION组合查询: 见书P125,组合查询必须用SQL语句实现,请大家着重看下。 SELECTDISTINCT……表示只显示一次 SELECTTOP5……表示显示前五条记录 7、创建视图 CREATESQLVIEW命令创建视图 打开数据库,用命令来创建视图: OPENDATABASE数据库名 CREATESQLVIEW视图文件名ASSQL-SELECT语句 例: OPENDATABASESJ CREATSQLVIEWSCOREASSELECTSJCJ.XH,SJCJ.CJ; FROMSJ! SJCJWHERESJCJ.KCH=”计算机基础” 8、索引 一、建立索引文件: 格式: indexon索引关键字|tag索引名|to索引文件名说明: (1).tag索引名: 指定索引名,此索引存放在与表名相同的.cdx文件中。 (2).to索引文件名: 选择此项生成独立索引,即一个索引存放在一个索引文件中;否则生成的是结构化复合索引。 例1: 建立“工资情况”表的结构化复合索引文件,其索引关键字分别为姓名和工资,而索引名分别为xm和gz. use工资情况 browse indexon姓名tagxm indexon工资taggz browse &&分别执行以上命令后,生成了“工资情况.cdx”文件,其中存放了xm和gz两个索引。 例2: 用“姓名”作索引关键字,建立“职工档案.dbf”的独立索引文件,文件名为a.idx。 use职工档案 indexon姓名tohello&&执行此命令,检查默认目录e: \myvfp,会发现多了一个文件: hello.idx use 二、打开索引: 打开表时,系统会自动打开结构化复合索引,但此时显示的仍是物理顺序。 要使索引起作用,必须指定主控索引。 主控索引就是控制当前显示顺序的索引。 也可以在打开表的同时指定主控索引。 1.打开表的同时打开索引并指定主控索引: 格式: use表名[index索引文件名][ordertag顺序号|索引名] 说明: (1).index索引文件名: 用于打开独立索引文件。 (2).ordertag顺序号|索引名: 用于打开结构化复合索引。 其中,顺序号为该索引在复合索引文件中的先后顺序,即在“表设计器”的“索引”选项卡中看到的该索引的位置。 例: 在命令窗口输入以下命令依次执行: use职工档案indexhello&&打开表的同时打开独立索引hello browse&&显示的是按姓名索引的顺序,use use工资情况ordertag2&&显示的是gz索引的顺序,因为gz在“表设计器”中位置为2,use 2.打开表后再打开索引: 格式1: setindexto索引文件名 功能: 打开独立索引文件 格式2: setorderto顺序号|tag索引名 功能: 打开结构化复合索引 例: 在命令窗口依次执行以下命令: use职工档案 brow&&显示物理顺序,setindextohello&&打开独立索引文件hello.idx browse&&显示的是按姓名索引的顺序,use use工资情况 browse&&显示物理顺序 setorderto1&&即将xm指定为主控索引,因为xm在“表设计器”中位置为1,browse&&显示按姓名索引的顺序,setorertogz&&将gz指定为主控索引 browse&&显示的是gz索引的顺序,use 三、关闭索引: 格式1: setindexto 格式2: setorderto 说明: 上两条命令后不加选项,可关闭当前索引。 格式1用于关闭独立索引,格式2关闭复合索引。 索引关闭后,表仍处于打开状态,显示物理顺序。 四、删除索引: 1.独立索引文件的删除: 用删除文件的方法删除,在“我的电脑”中找到对应的.idx文件,将其删除即可。 2.复合索引文件的删除: 格式1: deletetagall 格式2: deletetag索引名 说明: 格式1删除复合索引文件中的所有索引,格式2删除复合索引文件中的指定索引。 一个复合索引文件中的所有索引都被删除后,该复合索引文件即自动删除了。 VFP程序设计部分 课堂例题 例1: 求1/2+2/3+3/5+……前20项的和 程序: clear s=0 p=1 q=2 fori=1to20 s=s+p/q t=p p=q q=t+q endfor ? 's='+str(s,10,6) ? 'i='+str(i) 例2: 判断某数是否为素数 程序: clear input"输入一个数: "ton fori=2toint(sqrt(n)+1) ifn%i=0 exit endif endfor ifn=2 ? alltrim(str(n))+'是一个素数' else ifi>int(sqrt(n)+1) ? alltrim(str(n))+'是一个素数' else ? alltrim(str(n))+'不是一个素数' endif endif 例3: scan语句对比 程序: clear usexs go1 scanforxb='女'andxdh='01' ? xh,xm,xb,xdh endscan 第二种程序: clear selexs go1 dowhileeof()=.f. ifxb='女'andxdh='01' ? xh,xm,xb,xdh endif skip enddo 例4: 将星期输出为“日一二三四五六”。 程序: clear datt(date()) datt({^2009-5-5}) functiondatt parametersdat da='日一二三四五六' i=dow(dat) ? '星期'+substr(da,i*2-1,2) endfunc 例5: 计算所给英语句子中的单词数。 程序: clear input"输入一个英语句子: "tostr i=1 count=0 word=0 fori=1tolen(str) ch=substr(str,i,1) ifch='' word=0 else ifword=0 count=count+1 word=1 endif endif endfor ? '单词的个数: '+alltrim(str(count)) 例6: 字符串中每个字母出现的次数 程序: clear input"输入英语句子: "tostr fori=1to26 ch=chr(i+96) n&ch=0 endfor other=0 fori=1tolen(str) ch=substr(str,i,1) ifbetween(ch,'a','z')orbetween(ch,'A','Z') n&ch=n&ch+1 else other=other+1 endif endfor fori=1to26 ch=chr(i+96) ifn&ch! =0 ? ch+'出现过'+alltrim(str(n&ch))+'次' endif endfor ? 'other'+'出现过'+alltrim(str(other))+'次' 各种函数的实现 1、ABS 程序: clear input'一个数: 'toa ifa>0 ? a else ? -a endif 2、MAX和MIN由于牵扯到数组应该不会考,下面写一个三个数比较的代码,以MAX函数为例。 程序: clear inputtoa inputtob inputtoc max=a ifmax max=b endif ifmax max=c endif ? '最大的数为: '+alltrim(str(max)) 3、MOD 程序: clear input'被除数: 'toa input'除数: 'tob t=a-b dowhilet>=0 t=t-b enddo t=t+b ? alltrim(str(a))+'除以'+alltrim(str(b))+'的余数为: '+alltrim(str(t)) 4、ALLTRIM、LTRIM、RTRIM ALLTRIM可以由LTRIM和RTRIM组成,所以下面我写的是LTRIM和RTRIM的代码,组合后就是ALLTRIM的代码。 LTRIM程序: clear input'输入一个英语句子: 'tostr ch=left(str,1) l=len(str) dowhilech='' l=l-1 str=right(str,l) ch=left(str,1) enddo ? str RTRIM程序: clear input'输入一个英语句子: 'tostr ch=right(str,1) l=len(str) dowhilech='' l=l-1 str=left(str,l) ch=right(str,1) enddo ? str 联想: 去除字符串中所有空格 程序: input'输入一个字符串: 'tostr p=space(0) fori=1tolen(str) ch=substr(str,i,1) ifch! ='' p=p+ch endif endfor ? str+'去掉所有空格后为'+p 5、LEN 程序: clear input'输入一个字符串: 'tostr p=space(0) len=0 dowhilep! =str len=len+1 p=p+substr(str,len,1) enddo ? '字符串长度为: '+alltrim(str(len)) 6、SPACE 程序: clear input'输入一个数字: 'toa fori=1toa ? ? '' endfor 补充部分 题目1: 变量值的交换,如交换a,b的值。 程序: clear input"一个数a: "toa input"一个数b: "tob c=a a=b b=c ? 'a,b交换后为'+alltrim(str(a))+','+alltrim(str(b)) 题目2: 根据学生的成绩给予相应的等低,对应关系如下: 90——100 A 80——89 B 60——79 C 60以下 D 程序: clear input"输入一个学生的成绩: "tocj docase casecj>90 ? 'A' casecj>80 ? 'B' casecj>60 ? 'C' otherwise ? 'D' endcase 题目3: 位数对调,输入一个三位自然数,把这个数的百位与个位数对调,输出对调后的数。 程序: clear input"一个三位数a: "toa b1=int(a/100) b2=mod(int(a/10),10) b3=mod(a,10) b=b3*100+b2*10+b1 ? alltrim(str(a))+'位数对调后为: '+alltrim(str(b)) 类似题型: 计算一个三位数个十百位数字的和。 程序: input"输入一个三位数: "tox s=0 fori=1to3 a=val(substr(str(x,3),i,1)) s=s+a endfor ? "这个三位数的各位之和是: "+alltrim(str(s,2)) 题目4: 求出1-100中所有的素数,并将每个素数按照一排五个输出? 程序: clear y=0&&此变量用来判断输出的素数是第几个,逢五换行 fori=2to100 f=0&&此变量用来判断该数是否为素数 forj=2toint(sqrt(i)) ifmod(i,j)=0 f=1 endif endfor iff=0 ? ? alltrim(str(i))+""&&双问号表示在同一行输出,不换行 y=y+1 ifmod(y,5)=0 ? "" endif endif endfor 题目5: 寻找水仙花数数,求所有这样的三位数,这些三位数等于它各位数字的立方和。 例如,153=1^3+5^3+3^3。 程序: clear&&此方法为穷举法,即将所有可能全部列出。 fori=1to9 forj=0to9 fork=0to9 a=100*i+10*j+k ifa=i^3+j^3+k^3 ? alltrim(str(a)) endif endfor endfor endfor
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VFP 复习资料
![提示](https://static.bdocx.com/images/bang_tan.gif)