资源描述
Visual Foxpro 6.0,程序设计基础,重庆工商大学计算机学院计算机基础教研室,作业中的问题,、建立关联的步骤,、上机成绩,=,“,缺考,”,or,“,不及格,”,、,replace all,成绩合格否,with,“,T,”,;,for,笔试成绩,=60 and,上机成绩,=,优秀,or,上机成绩,=,及格,第十一讲 多表程序及表的多重循环,多表程序,表的多重循环,内容提要,多表程序,例(实验指导书,P35,):根据如下两个数据表,分别设计程序完成以下功能。,职工号,姓名,职称,单位课时费,001,丁伟,讲师,33,003,黄鹂,副教授,45,002,邓兴,教授,58,004,李力,助教,25,课程名,授课教师,课时数,大学计算机,002,64,软件工程,001,80,C+,002,80,计算机英语,001,64,会计学,004,72,计量学,003,64,金融学,004,80,大学计算机,001,64,软件工程,002,80,输入课程名,查询该课程授课教师姓名和职称;,统计每位教师总的课时费。,kc.dbf,js.dbf,方法,一,:,clear,accept,请输入查询课程名称:,to,kcm,?,课程名:,+,kcm,select,姓名,as,教师姓名,职称,from,js,kc,;,where,职工号,=,授课教师,and,课程名,=,kcm,to screen,return,方法二,:,clear,set safety off,sele,1,use,js,index on,职工号,tag,zgh,sele,2,use,kc,set,rela,to,授课教师,into,js,accept,请输入查询课程名称:,to,kcm,?,课程名:,+,kcm,?,教师姓名 职称,scan,for,课程名,=,kcm,?a.,姓名,space(4),a.,职称,endscan,close all,set safety on,return,数据环境,输入,输出,方法,一,:,clear,sele,姓名,as,教师姓名,sum(,学时数,)*,单位课时费,as,课时费,;,from,js,inner join,kc,on,职工号,=,授课教师,;,group by,授课教师,return,方法,二,:,clear,set safety off,sele,1,use,kc,index on,授课教师,tag,skjs,total on,授课教师,to,zks,use,zks,index on,授课教师,to,skjs,sele,2,use,js,set,rela,to,职工号,into a,?,教师姓名 课时费,scan,?,姓名,a.,学时数*单位课时费,endscan,close all,set safety on,return,汇总,数据环境,输出,例:有一职工代码表(,ZD.DBF,),人事信息表(,RS.DBF,),ZD.DBF,代码 职称,013,助理工程师,015,技术工人,002,工程师,001,高工,RS.DBF,编号 姓名 性别 职称 基本工资 工龄工资 扣款 实发工资,1041,赵娟 女,013 113.00 13.00 25.70,5101,骆艺 男,002 150.00 21.00 31.51,1030,沈峥 女,015 87.00 5.00 11.00,4103,刘芳 女,001 180.00 25.00 45.60,5130,杨山 男,002 150.00 15.00 24.00,1025,刘柳 男,013 113.00 8.00 15.00,编一个程序,完成以下任务:,计算实发工资(实发工资,=,基本工资,+,工龄工资,-,扣款)并填入,RS.DBF,中。,统计各类职称的基本工资,工龄工资,扣款,实发工资总数。,显示统计结果,其中统计表中“高工,工程师,助理工程师,技术工人”等职称名字必须通过职工代码表得到,并以代码的索引顺序显示,其格式如下:,基本工资 工龄工资 扣款 实发工资,高工,.,工程师,.,.,合计,.,clea,clea,all,set talk off,set safe off,sele,1,use,rs,replace all,实发工资,with,基本工资,+,工龄工资,-,扣款,inde,on,职称,tag,zcdm,total on,职称,to,hz,use,hz,inde,on,职称,tag,zcdm,sele,2,use,zd,set,rela,to,代码,into,hz,要完成表中字段的计算,并填入表中,必须是表中字段,为什么用该命令?目的是什么?,该程序涉及到几个表,RS.DBF HZ.DBF ZD.DBF,一对一关系,汇总,?,基本工资 工龄工资 扣款 实发工资,scan,?,职称,hz,.,基本工资,hz,.,工龄工资,hz,.,扣款,hz,.,实发工资,endscan,?,合计,jb,gl,kk,sf,clos,all,set talk on,set safe on,retu,store,0 to,jb,gl,kk,sf,sum,hz,.,基本工资,hz,.,工龄工资,hz,.,扣款,hz,.,实发工资,to,jb,gl,kk,sf,jb,=,jb,+,hz,.,基本工资,gl,=,gl,+,hz,.,工龄工资,kk,=,kk,+,hz,.,扣款,sf,=,sf,+,hz,.,实发工资,inde,on,代码,tag dm&,按代码升序排列,例:设有学生档案表、成绩表和学生课程表的表结构如下:,学生档案表(,xsda.dbf,):,学号,(C,10),,,姓名,(C,8),,,性别,(C,2),,,入学总分,(N(5,1),。,学生成绩表(,xscj.dbf,):,学号,(C,10),(,有重复值,),课程号,(C,5),(,有重复值,),学期,(C,1),,,考试成绩,(N(5,1),。,学生课程表(,xskc.dbf,):,课程号,(C,5),,,课程名,(C,14),。,按如下要求编写一个程序:,根据以上,3,个表,显示所有学生各门课程的学号、姓名、课程名、考试成绩。,通过键盘任意,输入一个课程号和学期,,计算并显示该门课程该学期的平均分、最高分和最低分,显示该门课程该学期所有需要参加补考的学生的补考通知单,其格式如下:,补考通知单,XXX,同学:,第,X,学期你的,XXXXXX,课程考试不及格,请利用假,期看书复习,作好补考准备。,注意:补考通知单中的“,X”,需用数据表中的相应数据填充。,clear,clear all,set safe off,set talk off,select 1,use,xsda,inde,on,学号,tag,xh,select 2,use,xskc,inde,on,课程号,tag,kch,select 3,use,xscj,set relation to,学号,into,xsda,set relation to,课程号,into,xskc,additive,数据环境,?,学号 姓名 课程名 考试成绩,scan,?,学号,xsda,.,姓名,xskc,.,课程名,考试成绩,endscan,accept,请输入课程号:,to,kch,accept,请输入学期:,to,xq,?,该门课程该学期的平均分为:,pjf,?,该门课程该学期的最高分为:,zgf,?,该门课程该学期的最低分为:,zdf,calculate,avg,(,考试成绩,),max(,考试成绩,),min(,考试成绩,)to,pjf,zgf,zdf,for,课程号,=,kch,and,学期,=,xq,输入,计,算,scan for,成绩,60 and,课程号,=,kch,and,学期,=,xq,?,补考通知单,?,xsda,.,姓名,+,同学:,?,第,+,学期,+,学期你的,+,xskc,.,课程名,+,课程考试不及格,请利用假,?,期看书复习,作好补考准备。,endscan,close all,set talk on,set safe on,return,表的双重循环,例:利用学生,.dbf,和选课,.dbf,,通过,反复,输入学生的学号(,输入回车键退出,),查询学生的姓名、籍贯、课程号以及成绩情况。,方法,1,:,set safety off,sele,1,use,学生,alias,xs,index on,学号,tag,xh,sele,2,use,选课,set relation to,学号,into,xs,do while.t.,&,外循环,accept,请输入学生的学号:,to,xh,?“,姓名 专业班级 课程号 成绩,scan for,学号,=,xh,&,内循环,?,xs,.,姓名,xs,.,籍贯,课程号,成绩,endscan,enddo,close all,set safety on,return,if,len(alltrim(xh,)=0,exit,endif,If,alltrim(xh,)=“#”,方法,2,:,clear all,do while.t.,accept,请输入学生的学号:,to,xh,if,len(alltrim(xh,)=0,exit,endif,select,姓名,籍贯,课程号,成绩,from,选课,xk,学生,xs,where,xs,.,学号,=,xh,and,xk,.,学号,=,xs,.,学号,to screen,enddo,学生情况表,ST.DBF,学号 姓名 性别 总成绩,KI01,王子仪 女,409,KI02,李丽萍 女,512,KI03,张雨 男,390,KI04,马思成 男,400,KI05,陈艳 女,395,家庭情况表,FAM.DBF,学号 亲属姓名 关系 部门,KI01,王松 父亲,DE3,KI01,刘利 母亲,DE1,KI02,李永 父亲,DE1,KI03,张永强 父亲,DE5,KI03,赵雯 母亲,DE7,KI03,张明 哥哥,DE3,KI04,李翠花 母亲,DE3,KI05,陈兴平 父亲,DE5,KI05,陈大伟 爷爷,DE2,例(实验指导书,P40,):现有两个表文件,表结构及部分记录如下,编写程序,,反复输入部门,,查询亲属在该部门工作的学生名单,(,即按亲属工作部门查询学生,),。要求输出式如下,(,假设输入的部门为,DE3):,DE3,部 门,学生姓名 亲属关系 亲属姓名,王子仪 父亲 王松,张明 哥哥 张明,马思成 母亲 李翠花,方法一,:,clear,set talk off,sele,1,use,st,inde,on,学号,tag,xh,sele,2,use,fam,set,rela,to,学号,into a,yn,=y,do while,uppe(yn,)=Y,accept,请输入部门:,to,bm,clea,?space(15)+bm+,部门,?,学生姓名 亲属关系 亲属名单,scan for,部门,=,bm,?a.,姓名,+,关系,+,亲属姓名,ends,wait,是否还要继续,?(,y/n,)to,yn,enddo,close all,set talk on,return,方法二,:,CLEAR,yn,=y,do while,upper(yn,)=Y,accept,请输入部门:,to,bm,clea,?space(15)+bm+,部门,select,stu,.,姓名,as,学生姓名,关系,as,亲属关系,亲属姓名,as,亲属名单,from,stu,fam,;,where,stu,.,学号,=fam.,学号,and,部门,=,bm,to screen,wait,是否还要继续,?(,y/n,)to,yn,enddo,retu,(0801),设有一学生成绩表,STU.DBF,对,“编号”已经建立复合索引,。其内容如下:,记录号编号 高数 外语 计算机,10701120909878,20701128857681,30702003778767,40702010506087,50
展开阅读全文