1、IntouchCOBOL基础培训基础培训因特驰软件北京有限公司因特驰软件北京有限公司Intouch课程设置课程设置u 课程安排课程安排上课:上课:3天,天,6节课,每节课节课,每节课50分钟分钟练习:练习:18天天验收:作业验收:作业+测试(笔试测试(笔试+上机)上机)u 学习方法学习方法(理论学习(理论学习+实际操作)实际操作)1.上课要做好课堂笔记上课要做好课堂笔记2.课下熟读课下熟读PPT,掌握,掌握PPT上的所有要点知识上的所有要点知识3.结合练习,在实操中掌握结合练习,在实操中掌握COBOL的编程技巧的编程技巧4.学习重点在于学习重点在于PPT中涉及到的内容中涉及到的内容u 学习目标
2、学习目标根据项目的程序式样书,编写出合格的根据项目的程序式样书,编写出合格的COBOL程序。程序。Intouch培训内容培训内容一一COBOL概述概述二标识部二标识部三环境部三环境部四数据部四数据部五过程部五过程部六六VSAM文件文件七各部之间的关系七各部之间的关系八程序举例八程序举例九九COBOL的编译、链接、执行的编译、链接、执行十十COBOL语言编程规范语言编程规范Intouch一一.COBOL概述概述1.什么是什么是COBOL语言语言2.COBOL语言的特点语言的特点3.COBOL程序的基本结构程序的基本结构4.COBOL程序结构示意图程序结构示意图5.COBOL程序的书写区域程序的书
3、写区域6.COBOL程序的书写格式程序的书写格式7.COBOL的字符的字符Intouch一一.COBOL概述概述1.什么是什么是COBOL语言语言 COBOL是Common Business Oriented Language的缩写,是面向商业通用编程语言。它是专门为商业数据处理而设计的计算机高级程序语言。广泛用于数据管理领域。应用于多个行业如:银行,证券,金融,制造,等等。1960年4月正式发表COBOL 61。目前最新版COBOL 2002。2.COBOL语言的特点语言的特点 描述性好,能根据需要描述各种形式的数据。适合大批量数据处理,能对数据进行严密的组织(运算简单但运算量大,逻辑运算多
4、)语法接近自然语言(英语),成文自明。遵循ISO标准,通用性强,移植方便。格式固定,结构严谨,层次分明。缺点是比较繁琐。Intouch一一.COBOL概述概述3.COBOL程序的基本结构程序的基本结构 标识部(IDENTIFICATION DIVISION)用来标识程序名称,记录程序的文档记录信息如作者和日期等。环境部(ENVIRONMENT DIVISION)用来描述程序运行和编译的计算机环境,内部数据文件与系统设备的对应关系。数据部(DATA DIVISION)定义程序中所有数据的类型和所占内存的大小。过程部:(PROCEDURE DIVISION)编写程序要执行的语句,是程序的核心。In
5、touch一一.COBOL概述概述4.COBOL程序结构示意图程序结构示意图cobol标识部标识部过程部过程部数据部数据部环境部环境部段段节节段段句子句子节节描述体描述体句子句子节节段段句子句子Intouch一一.COBOL概述概述4.COBOL程序结构示意图程序结构示意图部下设置节,节下设置段或描述体,段下或节下包含句子。节是由一个或多个段组成的,节的定义从节名开始到下一个节名或文本结束为止。定义格式:节名 SECTION.(节名分为系统定义和用户自定义两种)段由一个或多个句子组成,段的定义从段名开始到下一个段名或文本结束为止。定义格式:段名.(段名+点号)(段名分为系统定义和用户自定义两种
6、)文件描述体只能在数据部数据部中定义,用于描述外部文件的属性及其记录的格式。定义格式:FD 文件名.(文件描述体用FD(File Description)语句定义)句子是完整的指令,用相应的动词表示其操作,以一个句号加一个以上的空格来结束。Intouch一一.COBOL概述概述5.COBOL程序的书写区域程序的书写区域 标准COBOL程序每行80列,被分为五个区域 第第0106列为列为“标号区标号区”标号是6位数字,应从小到大,但不一定连续,标号只是方便查阅程序,可以省略。第第07列为列为“注释区注释区”,“DEBUG标识区标识区”“*“:表示本行是注释行,用于注释程序说明。“D“:表示本行是
7、DEBUG行,用于程序调试。第第0811列为列为“A区区”程序中下列语句必须从该区开始书写:部名、节名、段名,描述符部名、节名、段名,描述符(FD),01和和77层层。第第1272列为列为“B区区”程序正文部分,过程部语句必须从该区开始书写。第第7380列为列为“注释区注释区”行注释区,写入此区的内容在编译时被忽略,(一般不推荐使用)Intouch一一.COBOL概述概述6.COBOL程序的书写格式程序的书写格式 大小写字母等价,但引号中的字符除外。如:MOVE A TO B =MOVE a TO b DISPLAY HELLO DISPLAY hello 相邻的两个COBOL字之间有一个以上
8、的空格。运算符和等号左右必须各有一个以上的空格;圆括号外侧必须有一个以上的空格,内侧不必。如:COMPUTE R =A (B +C)/D 逗号,句号,分号左边不能有空格,而右边应有。如:DISPLAY A=,AIntouch一一.COBOL概述概述7.COBOL的字符的字符COBOL字符集包括:数字0-9,字母 A-Z,a-z,15个专用符号:+-*/=,(逗号).(句号);(分号)(引号)$()空格。属于系统字符集而不属于COBOL字符集的字符,只能出现在COBOL程序的字符串或注释行中。如:DISPLAY#HELLO#COBOL字是由上述字符组成的最小单位。(保留字,用户字)保留字:规定五
9、种类型专门用途的字(300多个)键字:如:MOVE,ADD 等可选字:如:USAGE IS 等专用字符:如运算符:+-*/等;比较符 =等表意常量:如:ZERO/ZEROS/ZEROES;SPACE/SPACES;QUOTE/QUOTES;HIGH-VALUE/HIGH-VALUES;LOW-VALUE/LOW-VALUES;ALL;NULL/NULLS专用寄存器:如:LENGTH OF;RETURN-CODE等用户字:用户自定义的名字。如:程序名,文件名,节名,段名,数据名等Intouch一一.COBOL概述概述7.COBOL的字符的字符数据名:相当于其它语言中的变量名,它代表一个具体的数据
10、项。只能由字母(至少一个),数字和连字符“-“组成,连字符不能出现在两端,不能包含空格数据名长度不能超过30个字符(lengthBDIVIDEAINTO B GIVINGC 是指B/A-CDIVIDEABY BGIVINGC是指 A/B-CIntouch五五.过程部(过程部(PROCEDURE DIVISION)7.算数运算语句算数运算语句COMPUTE语句语句:综合算数运算语句,使用算数表达式完成计算一般格式:COMPUTE标示符1,标示符2=算数表达式运算符优先级由高到低顺序为:()、正负号、*、*或 /、+或 例如:C=3,D=5,E=2,F=1COMPUTE A,B=-(C+D)*2/
11、E*3 FC 则:A=-3、B=-3ROUNDED语句语句:四舍五入。用于带有小数点的十进制数运算带有小数点的十进制数运算。当计算结对小数点最右边的数字需要截断时进行四舍五入处理。例如:A,B,C均定义为9V9COMPUTE A ROUNDED =B *CBEFORE 1.0 1.2 1.8AFTER 2.2 1.2 1.8 /2.16Intouch五五.过程部(过程部(PROCEDURE DIVISION)7.算数运算语句算数运算语句ON SIZE ERROR语句语句:长度溢出判断。十进制数运算时,计算结果比数据项的长度要长,则被称为长度溢出。当发生溢出错误时,按程序设计者事先指定的操作处理
12、。例如:A,B,C均定义为9V9COMPUTE A =B *CON SIZE ERROR DISPLAY SIZE ERROR STOP RUN.DISPLAY A.如A,B,C均定义为9V9,B=1.2、C=9.0则AB*C,应该为10.8,此时发生长度溢出。当ROUNDED 与ON SIZE ERROR 一起使用时,先按ROUNDED 作四舍五入处理,再判断是否溢出。REMAINDER语句语句:用于除法语句(DIVIDE)求余数。例如:A、B、C、D均定义为9(02)V9DIVIDE A INTO B GIVING C REMAINDER DBEFORE 3 10 0 0AFTER 3 1
13、0 3.3 0.1 商和余数的值不仅取决于除数和被除数,还取决于数据部中对商和余数的描述如用ROUNDED语句,它只对商起作用,余数不作四舍五入处理长度溢出也只检查商的值是否溢出,而不检查余数Intouch五五.过程部(过程部(PROCEDURE DIVISION)8.字符串语句:字符串语句:STRING、UNSTRING、INSPECTSTRING语句:语句:用来将多个非数值型数据项的值连接后发送到一个接收数据项中,在合并过程中可以删除某些指定的字符。一般格式:STRING str1DELIMITED BYsymbol1 str2DELIMITED BYsymbol2 INTO strn W
14、ITH POINTER position1 ON OVERFLOW perform.END-STRINGDELIMITED BY SIZE:按发送项的长度全部传送到接收项77APICX(04)VALUEABC.77BPICX(04)VALUEJKL.77CPICX(04)VALUEXYZ.77DPICX(16)VALUE*.STRING A,B,C DELIMITED BY SIZE INTO D./D=ABC_JKL_XYZ_*DELIMITED BY SPACE:将发送项空格之前的字符串传送到接收项STRING A,B,C DELIMITED BY SPACE INTO D/D=ABCJK
15、LXYZ*(末尾七个*)Intouch五五.过程部(过程部(PROCEDURE DIVISION)8.字符串语句:字符串语句:STRING、UNSTRING、INSPECTSTRING语句:语句:DELIMITED BY 字符常量:使用其它字符作为定界符,各个发送项可以使用不同的定界符STRING A DELIMITED BY B B DELIMITEDBYL C DELIMITED BY MINTO D./D=AJKXYZ_*(末尾9个*)可以在传送中插入所需字符STRING A,*,B,=,C DELIMITED BY SPACE INTO D/D=ABC*JKL=XYZ*(末尾五个*)P
16、OINTER:如果不想从接收项的最左端开始接收字符,可以使用POINTER短语指定从某一字符位开始接收字符MOVE 3 TO P.STRING A,B,C DELIMITED BY SPACEWITH POINTER PINTO D./D=*ABCJKLXYZ*(头部两个,末尾五个*)Intouch五五.过程部(过程部(PROCEDURE DIVISION)8.字符串语句:字符串语句:STRING、UNSTRING、INSPECTSTRING语句:语句:ON OVERFLOW:如果接收项的字符个数不足,则发生“溢出”,可以进行溢出处理77 D PIC X(10)STRING A,B,C DEL
17、IMITED BY SIZE INTO DON OVERFLOW DISPLAY OVER FLOW./D=ABC_JKL_XY OVER FLOW注意:接收数据项必须是初等项指针项必须是一个整型的初等项STRING语句结束后,接收项中未送入的字符位置上保持原有内容,而不是自动设置空格Intouch五五.过程部(过程部(PROCEDURE DIVISION)8.字符串语句:字符串语句:STRING、UNSTRING、INSPECTUNSTRING语句:语句:将一个发送字符串拆成若干个接收字符串,是STRING语句的逆操作可以使用DELIMITED子句设置分解时的定界符。自左向右累计字符,直到遇
18、见定界符,符号左面的内容按MOVE语句的规则传送到接收项。77 A PIC X(23)VALUE DATE PRODUCT QUANTITY.77 B PIC X(5).77 C PIC X(8).77 D PIC X(8).UNSTRING A DELIMITED BY SPACE INTO B,C,D/B=DATE_、C=PRODUCT_、D=QUANTITYUNSTRING A DELIMITED BY T INTO B,C,D/B=DA_、C=E_PRODUC、D=_QUAN_Intouch五五.过程部(过程部(PROCEDURE DIVISION)8.字符串语句:字符串语句:STRI
19、NG、UNSTRING、INSPECTINSPECT语句:语句:检查一个字符串数据项中某个字符INSPECT TALLYING:统计字符串出现的次数INSPECT A TALLYING N FOR SPACE.检查数据项A中是否有空格,找到一个就将计数器N加1INSPECT REPLACING:用别的字符串替换该字符串INSPECT A REPLACING SPACE BY,.将数据项A中所有空格替换成逗号INSPECT TALLYING REPLACING:替换并统计字符串的次数INSPECT A TALLYING N FOR ALL SPACEREPLACING ALL SPACE BY,
20、.检查数据项A中空格的个数,并将数据项A中所有空格替换成逗号Intouch五五.过程部(过程部(PROCEDURE DIVISION)9.IF语句:语句:条件转移语句。根据给出的判断条件是否满足,来决定执行哪一部分语句一般格式:IF条件条件 语句组语句组1ELSE 语句组语句组2END-IF.关系运算符:ISGREATERTHANISLESSTHANISNOTLESSTHANNOT=ISLESSTHANOREQUALTO=Intouch五五.过程部(过程部(PROCEDURE DIVISION)9.IF语句:语句:条件转移语句。根据给出的判断条件是否满足,来决定执行哪一部分语句关系运算规则:数
21、值变量之间按其代数值进行比较3-200字母型数据之间字典序进行比较xcap ccobol字符型数据之间按其编码规则进行比较ASCII编码:1 A 在条件判断表达式中,只能将同类型的数据进行比较,即数值型数据和数值型数据比较,字符型数据和字符型数据比较。IF结构中.的用法IFA0 DISPLAYA -ADDATOTOTA-END-IFDISPLAY TOTAL.IFA0 DISPLAYA.-ADDATOTOTAL.-DISPLAYTOTAL.Intouch五五.过程部(过程部(PROCEDURE DIVISION)9.IF语句:语句:条件转移语句。根据给出的判断条件是否满足,来决定执行哪一部分语
22、句复合条件:由若干个简单的“条件”组合而成的条件,使用逻辑运算符AND(与),OR(或),如果在一个IF语句中同时用到AND,OR,其优先级是:AND ORIF(A1000 AND A 0类型条件:检查数据项的类型是否符合指定的要求,即数据项的内容是否全为数字或字母IF 数据名 IS NOT NUMERIC|ALPHABETIC|ALPHABETIC-LOWER|ALPHABETIC-UPPER 77 T PIC A(4)VALUE WANG.IF T IS ALPHABETIC/trueIntouch五五.过程部(过程部(PROCEDURE DIVISION)9.IF语句:语句:条件转移语句
23、。根据给出的判断条件是否满足,来决定执行哪一部分语句条件名条件:简单的说,条件名就是用一个数据名代表一个条件例如:为鼓励存款,存款数小于1000元,利息为2%;大于等于1000元但小于10000元,利息为3%;大于等于10000元但小于50000元,利息为4%;大于等于50000元但小于100000元,利息为5%在数据部中可以这样定义:77CKPIC9(05).88T1VALUE0THRU999.88T2VALUE1000THRU9999.88T3VALUE10000THRU49999.88T4VALUE50000THRU99999.CK是条件变量,定义为数值变化的范围T1T4是条件名,紧跟在
24、条件变量之后,必须用层号88定义VULUE子句的作用不是赋初值,而是为条件变量的一个可能值命名对于“88 T1 VALUE 0 THRU 999”应理解为:当CK的值在0999时,条件T1为“真”在过程部可以直接使用条件名条件:IF T1 MOVE 0.02 TO RATE.IF(CK=0 AND CK 10.PERFORM过程名1 VARYING标识符1 FROM初值(整数/标示符)BY 步长(整数/标示符)UNTIL 条件PERFORMTEST-RTN VARYINGT1FROM1BY1UNTIL T1 10.循环变量T1的初值可以为正,负或零;步长不能为零!循环变量T1的值在每次循环中自
25、动按步长增加 Intouch五五.过程部(过程部(PROCEDURE DIVISION)11.PERFORM语句:语句:作为执行语句和实现循环控制语句PERFORM语句可以实现多重循环一般格式:PERFORM段名1 THRU 段名2 VARYING参数1FROM 初值1 BY 步长1 UNTIL 条件1 AFTER 参数2 FROM 初值2 BY 步长2 UNTIL 条件2 AFTER 参数3 FROM 初值3 BY 步长3 UNTIL 条件3PERFORM T VARYINGXFROM 1 BY 1 UNTIL X 9 AFTERYFROM 1 BY 1 UNTIL Y XPERFORM 语
26、句的六种形式:PERFORM T1PERFORM T1 N TIMESPERFORM T1 UNTIL N10PERFORM T1 VARYING X FROM 1 BY 2 UNTIL X10PERFORM T1 VARYING X FORM 1 BY 1 UNTIL X10 AFTER Y FROM 1 BY 2 UNTIL Y8Intouch五五.过程部(过程部(PROCEDURE DIVISION)12.EXIT语句:语句:提供一组过程的公共出口,或者说它指出了被调用过程的逻辑终点,一般用作PERFORM语句序列的出口。EXIT语句必须是段中唯一的语句,前面必须有段名。13.CONTI
27、NUE语句:语句:用来指定一个空操作,即什么也不做,用来占位置。程序将顺序执行到CONTINUE语句的下一条语句。14.GO TO语句:语句:用来改变程序的执行顺序,程序执行到此将无条件转移到指定的标号(段名/节名)一般格式:GO TO 标号由于打乱了原来程序正常的执行顺序,降低了程序的可读性,因此,严禁使用严禁使用。15.CALL语句:语句:调用子程序子程序概述:PERFORM语句只能在同一程序中多次调用某一语句序列,如果被调用部分较复杂或需要被其他程序使用时,可以将其编写为单独的一个程序,即子程序,调用子程序的为主程序。使用子程序的优点:简化主程序,使程序结构清晰子程序功能单一,易于编写和
28、调试,减少错误可由多人完成不同子程序,从而完成复杂任务只需重编译修改的子程序,而不必对所有源程序编译子程序可以重用,减少重复劳动Intouch五五.过程部(过程部(PROCEDURE DIVISION)15.CALL语句:语句:调用简例:主程序子程序st001.cobol.source(MAINPG)st001.cobol.source(SUBPG)IDENTIFICATION DIVISION.IDENTIFICATIONDIVISION.PROGRAM-ID.MAINPG.PROGRAM-ID.SUBPG.DATADIVISION.DATADIVISION.WORKING-STORAGE
29、SECTION.LINKAGE SECTION.01 PARM-IN-DATA.01 LNK-IN-DATA.02 LENPIC S9(2)COMP.03 LENPIC S9(2)COMP.02 PARTNOPIC X(5).XABCD 03 PART-ID PIC X(5).02 SALES PIC 9(5).12345 03 SALES PIC 9(5).01 PARM-OUT-DATAPIC 9(18).01 LNK-OUT-DATAPIC 9(18)PROCEDUREDIVISON.PROCEDUREDIVISION USING LNK-IN-DATA LNK-OUT-DATA.CAL
30、LSUBPG USING PARM-IN-DATA PARM-OUT-DATA DISPLAY PART-ID.ADD 10 TO SALES.STOP RUN.GO BACK.Intouch五五.过程部(过程部(PROCEDURE DIVISION)15.CALL语句:语句:说明:为主程序和各个子程序起有意义的program-id,便于区分主程序使用CALL语句按program-id而不是数据集名调用子程序,注意要使用引号主程序使用CALL USING 子句传递参数子程序LINKAGE节中定义用来接受主程序传递的参数,可以是初等项,或组合项参数的数据结构可以不同,但长度必须相同子程序参数不能
31、使用VALUE子句赋初值子程序在过程部头之后使用USING接受主程序的参数,参数个数必须和CALL语句中USING子句参数个数相同在执行时遇到GOBACK语句,子程序运行完了,主程序继续运行CALL之后的语句16.GOBACK语句:语句:返回语句。停止运行,将控制权返回给上一级。子程序必须用GOBACK,而不能用STOP,因为STOP停止的是一个RUN UNIT(运行单元)。17.STOP RUN语句:语句:停止语句。STOP RUN在逻辑上应该是程序的最后一个语句。STOP RUN 执行后,程序停止运行,停止后不能再接着运行,如需要,可重新运行一次。主程序一般通过STOP RUN语句结束运行
32、单元。Intouch六六.VSAM文件文件(Virtual Storage Access Method)1.什么是什么是VSAM2.VSAM的组织形式和存取方法的组织形式和存取方法3.VSAM文件在环境部文件在环境部4.VSAM文件在数据部文件在数据部5.VSAM文件在过程部文件在过程部6.VSAM文件的建立文件的建立Intouch六六.VSAM文件文件(Virtual Storage Access Method)1.什么是什么是VSAMVSAM是一种虚拟存取方法,它是为了与直接存取存储设备DASD(Direct Access Storage Device-能够在文件上直接地存取任何记录的设备
33、)一起使用而研制的文件管理系统。是大型机上另外一种数据存方法,与PS和PDS最大的差别在于,VSAM是支持索引(index)的,而PS和PDS都是顺序查找的。VSAM的组织形式和存取方法的组织形式和存取方法文件的组织形式:是指数据记录在文件中的排列方式。文件的存取方法:是指从文件中找到数据记录的方法。组组 织织 形形 式式存取方法存取方法进入顺序数据组织Entry Sequential Organization进入顺序数据集 ESDSEntry Sequenced Data Set键顺序数据组织Indexed Sequential Organization键顺序数据集 KSDSKey Sequ
34、enced Data Set相对记录数据组织Relative Organization相对记录数据集RRDSRelative Record Data SetIntouch六六.VSAM文件文件(Virtual Storage Access Method)2.VSAM的组织形式和存取方法的组织形式和存取方法ESDS进入顺序数据集记录以进入数据集的顺序排列,新加入的记录排数据集的末尾。可以按照排列顺序进行存取,也可以指定记录的相对字节地址对特定记录进行存取。KSDS键字顺序数据集记录由索引部分和数据部分组成,索引部分包含树型结构的多级索引。数据部分内的记录按键值顺序排列。可以按键值进行顺序存取,也
35、可利用索引,根据键值进行直接存取。RRDS相对记录数据集文件空间被划分成若干逻辑框,每个逻辑框只存放一个记录,从第一个逻辑框开始赋予连续的记录号,记录以其相对记录号顺序存放,访问也是通过相对记录号来进行访问。Intouch六六.VSAM文件文件(Virtual Storage Access Method)3.VSAM文件在环境部文件在环境部ESDS进入顺序数据集SELECT内部文件名ASSIGN TOAS-外部文件名.ORGANIZATIONISSEQUENTIAL.ACCESSMODEISSEQUENTIAL.FILESTATUSIS变量名.KSDS键字顺序数据集SELECT内部文件名ASS
36、IGN TO外部文件名.ORGANIZATIONISINDEXED.RECORDKEYIS变量名变量名.ACCESSMODEIS(SEQUENCIAL,RANDOM,DYNAMIC).FILESTATUSIS变量名.RECORD KEY用于指定文件中KEY在程序中的名称。RRDS相对记录数据集SELECT内部文件名ASSIGN TO外部文件名.ORGANIZATIONISRELATIVE.RELATIVE KEYIS变量名.ACCESSMODEIS(SEQUENCIAL,RANDOM,DYNAMIC).FILESTATUSIS变量名.FILE STATUS用于指定文件状态返回码在程序中的名称。
37、用于指定文件状态返回码在程序中的名称。Intouch六六.VSAM文件文件(Virtual Storage Access Method)4.VSAM文件在数据部文件在数据部VSAM文件的描述与一般的PS文件类似,如果为KSDS文件,需要在记录中指定REORD-KEY数据项,即在环境部中定义的RECORD KEY的变量名。如:外部文件STUDENTFILE101LILEI_19900521102HANMEIMEI_19910610环境部定义如下:ENVIRONMENTDIVISION.INPUT-OUTPUTSECTION.FILE-CONTROL.SELECTIN-FILLEASSIGNTOS
38、TUDENTFILE.ORGANIZATIONISINDEXED.RECORDKEYISSTUD-ID.数据部定义如下:FDIN-FILE.01STUDENT-RECORD.05STUD-IDPIC9(03).05STUD-NAMEPICX(20).05STUD-BIRTH.10BIRTH-YYYYPIC9(04).10BIRTH-MMPIC9(02).10BIRTH-DDPIC9(02).Intouch六六.VSAM文件文件(Virtual Storage Access Method)5.VSAM文件在过程部文件在过程部VSAM文件的操作与一般的PS文件类似,如果为KSDS文件,在读取记录时
39、,可顺序读取还可以通过指定KEY值来读取特定的记录,或符合指定KEY值范围的一组记录。在写入KSDS文件时要注意,KEY值一定要唯一,否则会出错。如:外部文件STUDENTFILE101LILEI_19900521102HANMEIMEI_19910610103LUCI_19910520环境部定义如下:ENVIRONMENTDIVISION.INPUT-OUTPUTSECTION.FILE-CONTROL.SELECTIN-FILLEASSIGNTOSTUDENTFILE.ORGANIZATIONISINDEXED.RECORDKEYISSTUD-ID.数据部定义如下:FDIN-FILE.01
40、STUDENT-RECORD.05STUD-IDPIC9(03).05STUD-NAMEPICX(20).05STUD-BIRTH.10BIRTH-YYYY PIC9(04).10BIRTH-MMPIC9(02).10BIRTH-DDPIC9(02).Intouch六六.VSAM文件文件(Virtual Storage Access Method)5.VSAM文件在过程部文件在过程部顺序读取记录:顺序读取记录:ACCESSMODE SPROCEDURE DIVISION.OPENINPUTIN-FILE.READIN-FILE./101LILEI_19900521 READIN-FILE./1
41、02HANMEIMEI_19910610 READIN-FILE./103LUCI_19910520 CLOSE IN-FILE.指定指定KEY值读取记录:值读取记录:ACCESS MODE RPROCEDURE DIVISION.OPENINPUTIN-FILE.MOVE101TOSTUD-ID.READIN-FILE./101LILEI_19900521 MOVE102 TOSTUD-ID READIN-FILE./102HANMEIMEI_19910610 CLOSEIN-FILE.指定指定KEY值范围,顺序读取在值范围,顺序读取在KEY值范围内的一组记录:值范围内的一组记录:ACCES
42、S MODE DPROCEDURE DIVISION.OPENINPUTIN-FILE.MOVE101TOSTUD-ID.STARTIN-FILEKEY IS STUD-ID.READIN-FILENEXT./102HANMEIMEI_19910610 READIN-FILENEXT./103LUCI_19910520 CLOSEIN-FILE.Intouch六六.VSAM文件文件(Virtual Storage Access Method)6.VSAM文件的建立文件的建立Intouch七七.各部之间的关系各部之间的关系IDENTIFICATIONDIVISION.PROGRAM-ID.PRO
43、GRAM1.给程序加上标识以便识别ENVIRONMENTDIVISION.CONFIGRATIONSECTION.INPUT-OUTPUTSECTION.FILE-CONTROL.SELECTPRODFILE ASSIGN TO FILE1.描述程序中用到的文件与外部文件的关系及控制信息DATA DIVISION.FILE SECTION.FD PRODFILE LABEL RECORD IS STANDARD.01 PROD-REC PICX(200).WORKING-STORAGE SECTION.01 WS-VARIBALES.05 WS-I PIC9(02).描述程序中用到的所有文件及
44、其记录中各数据项的属性及程序中用到的所有中间数据项的描述.Intouch七七.各部之间的关系各部之间的关系PROCEDURE DIVISION.MAIN-RTNSECTION.PERFORM 处理节处理节3-RTNPERFORM 处理节处理节2-RTN PERFORM 处理节处理节1-RTN.MAIN-EXT.STOP RUN.处理节1-RTNSECTION.语句序列1 语句序列N.处理节1-EXT.EXIT.程序的核心部分,他决定计算机进行什么操作.如,文件的读写及其他处理Intouch七七.各部之间的关系各部之间的关系PROCEDURE DIVISION.ABEND-RTNSECTION.
45、语句序列1 语句序列N.ABEND-EXT.GOBACK.程序出错时处理。1.输出程序出错信息2.为RETURN-CODE赋值3.关闭文件4.GOBACK 语句 Intouch八八.程序举例程序举例1.例1 读入一组产品销售记录,每读入一个记录,计算出销售总额(数量X单价).然后输出该产品的全部数据.数据形式如下:1 9 9 2 1 2 3 1 0 0 0 0 0 1 A A A A 0 1 0 0 5 0 0 01 9 9 3 1 2 3 1 1 0 0 0 0 1 B B B B 0 2 0 0 6 0 0 0-DATE PRODCODE CUST AMT PRICE程序如下:IDENTI
46、FICATIONDIVISION.PROGRAM-ID.PEXAM1.ENVIRONMENTDIVISION.CONFIGRATIONSECTION.INPUT-OUTPUTSECTION.FILE-CONTROL.SELECTINPUT-FILEASSIGNTOFILE1 ORGANIZATIONISSEQUENTIAL ACCESSMODEISSEQUENTIAL FILE STATUSISWS-INPUT-FILE-STATUS.Intouch八八.程序举例程序举例SELECTOUTPUT-FILEASSIGNTOFILE2 ORGANIZATIONISSEQUENCIAL ACCESS
47、MODEISSEQUENCIAL FILESTATUSISWS-OUTPUT-FILE-STATUS.DATADIVISION.FILLESECTION.FDINPUT-FILE.01IN-REC.05DATE PIC 9(8).05PROD-CODEPIC 9(6).05CUSTOMER-CODEPIC X(4).05QUANTITYPIC 9(4).05UNIT-PRICE PIC 9(4).FDOUTPUT-FILE.01OUT-REC.05DATEPIC 9999B99B99.05FILLERPIC X(5)05PROD-CODEPIC 9(6).05FILLERPIC X(5).In
48、touch八八.程序举例程序举例05CUSTOMER-CODEPIC X(4).05FILLERPIC X(5).05QUANTITYPIC ZZZ9.05FILLERPIC X(5).05UNIT-PRICEPIC$(5).05FILLERPIC X(5).05SALES-VALUEPIC$(9).WORKING-STORAGESECTION.01WS-VARIBLES.05WS-INPUT-FILE-STATUS PIC9(2).05WS-OUTPUT-FILE-STATUSPIC9(2).PROCEDUREDIVISION.A000-MAINSECTION.PERFORMA100-OPE
49、N-FILESPERFORMR000-READ-FILEPERFORMA200-PROCESS-RECORD UNTIL WS-INPUT-FILE-STATUS=10PERFORMA300-CLOSE-FILES.A000-EXIT.STOP RUN.Intouch八八.程序举例程序举例A100-OPEN-FILESSECTION.OPENINPUTINPUT-FILEOUTPUTOUTPUT-FILE.IFWS-INPUT-FILE-STATUS NOT=0DISPLAYINPUT-FILE OPEN NOT SUCCESSFULPERFORMZ000-ABENDEND-IFIFWS-OU
50、TPUT-FILE-STATUS NOT=0DISPLAYOUTPUT-FILE OPEN NOT SUCCESSFULPERFORMZ000-ABEND END-IF.A100-OPEN-FILES-EXT.EXIT.A200-PROCESS-RECORDSECTION.MOVECORRIN-RECTOOUT-REC COMPUTE SALES-VALUE=QUANTITY OF IN-REC*UNIT-PRICE OF IN-REC PERFORMW000-WRITE-FILE PERFORMR000-READ-FILE.A200-PROCESS-RECORD-EXT.EXIT.A300-