COBOL语言基础教程

发布时间:   来源:文档文库   
字号:
cobol语言基础培训教程
20090423|5:23下午分类:大型机|Mainframe|标签:cobol数据类型COBOL程序举例cobol入门cobol教程cobol语言型机培训|
CHAPTER1COBOL概述
COBOLCommonBusinessOrientedLanguage的缩写。它不仅是商业数据处理的理想语言,
而且广泛用于数据管理领域,因此COBOL语言也被称为”用于管理的语言”。一。COBOL语言的特点
最适于数据处理领域:算数计算量少而逻辑处理量多,输入输出量大,数据间存在着一定的逻辑关系,大量的分类排序;COBOL比较接近英语,容易懂;通用性强,易移植,COBOL结构严谨,层次分明。
二。COBOL的组成部分:
1。标识部(IDENTIFICATIONDIVISION):用于标识程序名。
2。环境部(ENVIRONMENTDIVISION):用于说明程序运行的环境。3。数据部(DATADIVISION):用于说明程序中涉及的所有数据。
4。过程部(PROCEDUREDIVISION):是程序的核心部分,它决定计算机应进行什么操作。
三。最简单的COBOL程序举例:
COL167812727380IDENTIFICATIONDIVISIONPROGRAM-IDPSAMPLE1ENVIRONMENTDIVISIONDATADIVISION
PROCEUREDIVISION
DISPLAYTHISISACOBOLPROGRAM.STOPRUN
四。COBOL源程序的书写格式:
16列为”标号区”。7列为”续行标志区”8至此11列,称为”A区”程序中有些内容如部头,节头,段头,层号01层号77及文件
描述符FD等应从A区开始写。
12至此72列,称为”B区”。写程序中的正文部分。如过程部中的句子只能B区开始写。
7380列,称为”注释区”。五。COBOL字符集包括:

数字09,字母AZaz,专用字符:
+-*/=,.;(<>$及空格。属于系统字符集而不属于COBOL字符集的字符只能出现COBOL程序中的字符串里。六。常量:
COBOL常量分为数值常量(如100-29),非数值常量(如ABC)和表意常量(如ZEROSPACEHIGH-VALUELOW-VALUEQUOTEALL常量)七。COBOL所处理的数据的特点
层次的概念:数据间存在的从属关系。
文件的概念:多个记录可以组成一个文件。
记录的概念:具有一定层次关系的一组数据项的最大集合,它是内存中具有独立逻辑含义的最大存取项,具有最高层次。CHAPTER2过程部初步
一。输入输出语句。
1ACCEPT语句:直接从终端键盘或系统指定的输入设备上输入数据。ACCEPT标识符[FROM助忆名]
注:A。标识符(identifier指的是能唯一地标识一个数据项的数据名,不能唯一地标识一个
数据项的数据名不是标识符。标识符可以是组合项。
B。在ACCEPT语句中如不写FROM部分,如ACCEPTA,则表示从系统隐含指定的
设备上读入一个数据给A如果不想从指定的设备上输入,则要用FROM,
这时”助忆名”需要在环境部中事先说明和那种外部设备相联系。如:ENVIRONMENTDIVISION。(环境部)CONFIGRATIONSECTION。(配置节)SPECIAL-NAMES。(专用名段)CONSOLEISABC
如在过程部中有ACCEPTTFROMABC则表示要从控制台接收数据2DISPLAY语句:从计算机内存中输出到某一指定的输出设备上。
DISPLAY{标识符1,常量1}[标识符2,常量2]。。。[UPON助忆名]标识符和助忆名的说明同上)
ACCEPT语句和DISPLAY语句不必定义文件适用于少量的数据输入输出。
3READ语句COBOL语言中数据的输入输出主要是通过对外部文件的读写进行的。READ语句就是从外部文件上读入数据输出到程序中的数据项中。在程序中用到的所有文件都需要在环境部中指定程序中用到的文件名与实际外部文件的联系。数据部也要对文件加以描述。指定数据结构各数据项所占的内存单元长度以及数据形式。
COBOL的存取是以文件为对象以记录为单位的READ语句的最简单的格式为:READ文件名

ENVIRONMENTDIVISIONINPUT-OUTPUTSECTIONFILE-CONTROL
SELECTIN-FILLEASSIGNTO外部文件名。为了存储读入的记录,必须在内存开辟一个与文件记录长度相等的存储区,即’输入文件纪录区’。每一个输入文件都有相应的’输入文件纪录区’,与之一一对应。亦即在数据部中描述文件的数据结构。3READ语句:
假设IN-FILE文件每一记录中包含的内容为:产品代码,产品数量,产品单价,生产日期。设某一记录的具体数据如下:
00100100000100019990322
prodcodequantitypriceyearmonday
如果我们希望读入该记录并对各数据项进行处理,则需要在’输入纪录区’中划分出各数据项,以便存放相应的数据。定义输入纪录区以及划分记录区中各数据项的工作是由数据部来完成的。下面我们简单介绍数据部定义记录区方法,针对上面输入数据的特点,我们可以在数据部中对记录区作如下描述:DATADIVISION
FDIN-FILELABLERECORDISSTANDARD01IN-RECORD(定义记录区名为IN-RECORD02PROD-CODEPIC94)。02PROD-QUANTITYPIC95)。02PROD-PRICEPIC96)。02MANU-DATE。(生产日期为一组合项)05DATE-CCYYPIC94)。05DATE-MMPIC92)。05DATE-DDPIC92)。
其中,FDFILEDESCRIPTION,表示从该行起是’文件描述体’。LABLERECORDISSTANDARD所有的磁盘文件和磁带文件都必须写明此句。01层定义’输入纪录区’的名字为IN-RECORD由于01层属于FD描述体,因此也就指定了IN-RECORDIN-FILE的关系。亦即从IN-FILE读入的数据存放在IN-RECORD记录区中。
这样,在执行一次READ语句后,文件中一个记录的数据便输入到内存记录区,按排列顺序分别送到记录区中各数据项中。注意文件的各记录中的数据是不分数据项的,只是按一定的顺序把数据存放在各字节中。所以数据部对记录区中各数据项的描述应该与文件的记录中各数据排列次序和长度相一致。
READ语句的一般形式:READ文件名RECORD[INTO标识][ATEND执行语句]例如:
READIN-FILEINTOTEMP-RECORDATENDSTOPRU

N该语句除了将读到的数据传送到IN-RECORD之外,还传送到TEMP-RECORD中。在遇到文件尾时,程序结束运行。
4WRITE语句将内存中的数据输出到外部设备,主要是由WRITE语句来完成的。WRITE语句的最简单的格式为:
WRITE记录名(注意WRITE语句的操作对象是记录,所以是’记录名’而不是’文件名’)
与输入文件相似输出文件也要在环境部中指定所对应的实际存在的外部文件:ENVIRONMENTDIVISIONINPUT-OUTPUTSECTIONFILE-CONTROL
SELECTOUT-FILLEASSIGNTO打印机名。也要在数据部中定义输出记录区:DATADIVISION
FDOUT-FILELABLERECORDISOMITTED01OUT-RECORD
02PROD-CODEPIC94)。02PROD-QUANTITYPIC95)。02PROD-PRICEPIC96)。02MANU-DATE
05DATE-CCYYPIC94)。05DATE-MMPIC92)。05DATE-DDPIC92)。LABLERECORDISOMITTED凡输出设备是打印机的都必须写明此句。如输出设备是磁盘,则仍用LABLERECORDISSTANDARD01层定义’输出纪录区’的名字为OUT-RECORD由于01层属于FD描述体,因此也就指定了
OUT-RECORDOUT-FILE的关系。
在用WRITE语句输出一个记录之前,应向输出记录区传送数据。如已将数据传送到上述各数据项中,则在执行WRITEOUT-RECORD语句后,则记录区中的数据通过打印机打印出来。
WRITE语句的一般形式:标识2LINE
BEFORE整数LINESWRITE记录名[FROM标识
1]AFTERADVANCING助忆名PAGE
5OPEN语句:程序中如果需要读写文件,则该文件必须先用OPEN语句打开,系统在执行READWRITE以前先检查该文件是否已在规定的外部设备上准备就绪。
OPEN语句的一般格式为:

INPUT文件名1[,文件名2]。。。
OPENOUTPUT文件名3[,文件名4]。。。。。。6CLOSE语句:当对一个文件的读或写的操作已完成,就应关闭该文件。CLOSE语句的一般格式为:
CLOSE文件名1[,文件名2]。。。
COBOL通过2位长度的文件状态字(FILE-STATUS来表示文件的操作结果是否成功,常见的文件状态值及意义:二。算数运算语句
1ADD语句:
格式1ADD标识符1,标识符2。。。TO标识符m[,标识n]。。。
常量1,常量2
格式2ADD标识符1,标识符2,标识符3常量1,常量2,常量3。。。GIVING标识符m[,标识符n]。。。
2SUBTRACT语句:
格式1SUBTRACT标识符1,标识符2。。。FROM标识m[,标识符n]。。。常量1,常量2
格式2SUBTRACT标识符1,标识符2。。。FROM标识符常量1,常量
2常量
GIVING标识符n[,标识符p]。。。
3MULTIPLY语句:
格式1MULTIPLY标识符1BY标识符2[,标识符3]。。。常量1
格式2MULTIPLY标识符1BY标识符2GIVING标识符3[,标识符4]。。。常量1常量24DIVIDE语句:
格式1DIVIDE标识符
1INTO标识符2[,标识符3]。。。常量1

格式2DIVIDE标识符
1INTO标识符2GIVING标识符3[标识符4]常量1BY常量2
Bà
意:DIVIDEAINTOB是指B/A
DIVIDEAINTOCàBGIVINGC是指B/ADIVIDEABYBCàGIVINGCA/B
5COMPUTE语句:
COMPUTE标识符1[,标识符2]。。。=算术表达式
运算的优先级由高到低顺序为:(),正负号***/+-
如:C=3D=5E=2F=1则:
COMPUTAB=-C+D*2/E**3-F=-3三。传送语句MOVE
MOVE语句用来实现内存中数据的传送(而不是内存和外设之间的传送)。MOVE语句的一般格式为:
MOVE标识符
1TO标识符2[,标识符3]。。。常量1
MOVE语句的传送规则:
1,如果接收项和发送项在数据部中描述的类型和长度相同,则按字节一一对应传送。
2,如果接收项和发送项长度不相同,而二者都是数值数据项,则按小数点对齐处理。
3,对字母或字符数据(非数值型数据)的传送,按左对齐处理。4,初等项和组合项之间可以相互传送。
关于各类数据之间的传送规则将在第五章中介绍。四。转移语句(GOTO
当需要使程序改变正常执行的顺序时,可以使用无条件转移语句GOTO其一般格式为:
格式1GOTO过程名
格式2GOTO过程名1[过程2]。。过程名nDEPENDINGON标识符
注意:只能转移到段或节的开头,不能转移到段或节的当中某一语句。段名或节名为过程名。
五。条件语句(IF
当需要根据给出的某些条件是否满足来决定应执行哪一部分语句时,可以使用条件语句IF其一般格式为:
IF条件语句组

1ELSE语句组1[END-IF]
NEXTSENTENCENEXTSENTENCE
COBOL关系运算
符:ISGREATERTHAN(>
ISLESSTHAN(<ISEQUALTO(=NOTGREATERTHAN(NOT>(<=
NOTLESSTHAN(NOT<(>=NOTEQUALTO(NOT=注意:句点在IF语句中的特殊作用。如:IFA>0DISPLAYA
ADDATOTOTALDISPLAYTOTALIFA>0DISPLAYA
ADDATOTOTALDISPLAYTOTAL。就不同。
为避免出现问题应该使用显式终止符(END-IFEND-PERFORM等)代替隐式终止符(句点”。”)
六。停止语句(STOP
其一般格式为:STOPRUN常量
STOPRUN执行后,程序停止运行,停止后不能再接着运行,如需要,可重新运行一次。
STOP常量,表示程序暂时挂起不往下执行,显示出此常量。七。返回语句(GOBACK
停止运行,将控制权返回给上一级。可用本语句代替STOP语句。子程序必须用GOBACK
不能用STOP:因为STOP停止的是一个RUNUNIT(运行单元)。CHAPTER3标识部和环境部
一。标识部(IDENTIFICATIONDIVISIONIDENTIFICATIONDIVISION.
PROGRAM-ID.程序名。
[AUTHOR作者名。][INSTALLATION计算机设置场所。][DATE-WRITTEN源程序编写日期。][DATE-COMPILED源程序编译日期。]
[SECURITY保密程度。]二。环境部(ENVIRONMENTDIVISION

ENVIRONMENTDIVISION.CONFIGRATIONSECTIONSOURCE-COMPUTER源计算机名。OBJECT-COMPUTER目标计算机名。
[SPECIAL-NAMES专用名描述项。][INPUT-OUTPUTSECTION
FILE-CONTROL{文件控制描述体}。。。[I-O-CONTROL输入输出控制描述体]]1CONFIGRATIONSECTION专有名段的一般格式:SPECIAL-NAMES
[DICIMAL-POINTISCOMMA][CURRENCYSIGNIS非数值常量。]
[专用名IS助忆名。]
2INPUT-OUTPUTSECTION
INPUT-OUTPUTSECTION包括两个段,即:
FILE-CONTROLI-O-CONTROLFILE-CONTROL段是为文件分配外部文件。I-O-CONTROL段的作用是可以指定目标程序运行时,几个文件共用一个内存区,以省内存。在此暂不作介绍。
FILE-CONTROL段的主要功能是给程序中使用的文件命名。指出存放该文件的外部设备及其它有关文件控制的信息。对文件的描述是由SELECT子句实现的。FILE-CONTROL段的一般格式:
INPUT-OUTPUTSECTIONFILE-CONTROL
SELECT文件名ASSIGNTO外部文件名[ORGANIZAIONIS...](SEQUENCIAL,INDEXED,RELATIVE
[ACCESSMODEIS...](SEQUENCIAL,RANDOM,DYNAMIC
[RECORDKEYIS...][FILESTATUSIS...]CHAPTER4数据部之一
一。数据部概述。
1数据部的作用是定义数据项属性,描述数据结构。所有在过程部中出现的数据项都必须在数据部中对它们的属性进行说明。包括数据项的类型,数据项间的关系,记录与文件的关系,文件的属性。
2数据的层次和层号:COBOL中把有从属关系的数据用层次(level)关系来描述。数据的层次结构是:记录–》组合项–》初等项。如,在前面READ语句中定义的IN-FILE文件具有如下结构:01IN-RECORD
02PROD-CODEPIC94)。

02PROD-QUANTITYPIC95)。02PROD-PRICEPIC96)。02MANU-DATE
05DATE-CCYYPIC94)。05DATE-MMPIC92)。05DATE-DDPIC92)。层次规定如下:
1)用来描述数据的层次结构的层号从0149。记录的层次最高,定为01号。
2)从属项的层号比其下属项的层号高。层号不必要求连续。3)从属于同一组合项但不互相从属的数据项具有相同的层号。3。数据部的结构:数据部中通常用到的有以下几个节:1FILESECTION描述程序中用到的输入输出文件及其记录中各数据项的属性。
2WORKING-STORAGESECTION:描述程序中用到的中间数据项。3LINKAGESECTION:描述与调用程序间发生数据传递的数据项。
4REPORTSECTION为了完成报表编制功能,此节用来规定欲输出的报表的‘体裁’,设计各报表栏的打印形式和方法等。二。文件节。1文件节的作用:程序中每一个输入或输出文件都要在文件节中加以描述。内容包括:文件名和文件属性;文件中包括的记录名字;每个记录中数据的层次关系;记录中各数据项的数据形式和占内存的大小。
2。文件描述:最简单的文件描述体的一般格式为:FD文件名
LABLERECORDISSTANDARD
RECORDSAREOMITTED
DATARECORDIS数据名RECORDSARE
3。记录描述:记录描述体由01层号开始,后跟记录名。如果记录本身就是一个初等项,则在记录名后描述记录长度;否则,数据名后跟句点,下面定义记录的数据结构。如:DATADIVISIONFILESECTIONFDIN-FILE
LABLERECORDISSTANDARD
DATARECORDISIN-FILE-RECORD
01IN-FILE-RECORDPICX80)。
DATADIVISIONFILESECTIONFDIN-FILE
LABLERECORDISSTANDARD
DATARECORDISIN-FILE-RECORD

01IN-FILE-RECORDPICX80)。
01IN-FILE-RECORD05DATEPIC98)。05PROD-CODEPIC94)。
05PROD-PRICEPIC96)。4。数据项描述:在每一个初等项的名字后跟一个PIC子句。用它来描述数据的类型和长度。PIC子句在下面详细说明。
5。文件节的书写格式:FDA区开始书写,01层号也从A区开始,其它层号可以从A区也可以从B区开始。为了看起来层次分明,最好从B区开始。三。PIC子句。PICPICTURE的缩写。PIC子句用来描述每一个初等项。它说明:(1)数据项是什么类型。(2)数据项占多大内存域。(3)是否需要按打印的要求准备有关字符。PIC子句的主要作用在于描述一个初等项的一般特征和编辑要求。
1。数值型数据的描述:
9′描述符:表示该位置上可以放入一个0~9之间的数字。因此:01APIC999
01APIC93)。
表示A可以存放000~999之间的一个三位数。有几个9表示有几位数。注意:(1)在数值型数据项中只能放数字不能放空格。
2)用’9′描述符只能表示整数,如输入小数部分,则小数部分被舍弃。3)如送入一个负数,则负号被舍弃。
V’描述符:指出在数值数据结构中隐含的小数点的位置。小数点不占内存单元。如:
03MPIC93V92)。注意:(1V在描述符的最后,则等于无小数点。2)一个数据的描述符中只能出现一个V
3)进行数据传送或运算时,按隐含的小数点位置对准进行传送或运算。4V表示的小数点只在传送或运算时起作用,不能被显示或打印出来。S’描述符:如果想在数据项中放入一个带符号的数,可以用’S'描述符。如:
03MPICS93V92)。注意:(1S描述符必须是最左边的一个描述符。2)在内存中,S不占位数,在传送或运算时起作用。
2。字母型数据的描述:字母型数据项用A描述符,在这种类型的数据项中只允许存放字母或空格。
3。字符型数据的描述:由任意的COBOL字符组成的数据,称为字符型数据,它是非数值型的,不能用于计算。用X描述符来表示字符型数据。如:03MPICX5)。
注意:(1)字符型数据可以用X描述符,也可以用9A描述符来描述。如描述数据

COB-74′可以用PICX6),也可以用PICA3X92)。2)字母型数据既可以用A描述,也可以用X3)字符型数据中可以放数字。
4。编辑型描述符:编辑型数据项只是作为输出数据时增加或改变某些所需的符号,起编辑作用,它不是作计算用的。下面分别介绍编辑数据项中用到的编辑描述符。
1)。插入小数点’。’,用’。’描述符。如:
77TPIC9999(2)。插入逗号’,’作分位号,用’,’描述符。如:02APIC99999999(或PIC93),93)。92))
3)。插入空格,用’B'描述符。如:
02APICB93B4)。插入正负号,用’+'或’-'描述符。如:02A1PIC+93(PIC93+
02A2PIC-93)。(或PIC93-
注意:描述符’+',一侓加符号。描述符’-'只对负值加负号。5)。插入’$'。如:
02A1PIC$9999902A2PIC+$9999902A3PIC-$99996)。浮动插入正负号和’$
02A1PIC$$$99.99.02A2PIC$$$$$.$$.02A3PIC++9.99.
7)。取消高位零,用’Z'和’*'描述符。在高位零的位置上代以空格或’*'如:
02A1PICZ5)。99
02A2PIC*5)。*2)。02A3PIC+ZZZZZZZZZZ02A4PIC-*******99
8)。插入’DB’和’CR’字符。DBCR只能用作固定插入,当数值为负时,在编辑型数据项中最后两个字节中置DBCR,数值为正时,此两字节留空格。如:
02A1PIC$93)。99DB02A2PIC$93)。99CR5.常用数值型数据
四。工作单元节(WORKING-STORAGESECTION
1。工作单元节的作用:程序中用的数据项分为两部分,一部分是属于输入或输出文件的,另一部分是非输入或输出的数据。如一些中间变量或用作累计的数据

项等。非输入输出的数据就应在工作单元节中描述,还可以用工作单元节来赋初值。
2VALUE子句:用于给变量赋初值。如:
02APIC93VALUE123
注意:1)只有对工作单元节中的数据项才能赋初值,不能对文件节中输入输出文件中的数据项赋初值。
2)如果在组合项的描述体中使用VALUE,初值只能是表意常量或非数值型常量。对组合项整体而言,一律按字符型数据项处理。3)当用一个带符号的数值作初值时,相应的PIC子句中应有’S'描述符。4)赋初值时应该注意类型的一致性。
5VALUE子句给出的值应适合PIC子句的描述范围,否则会出现截断或产生错误。
CHAPTER5过程部之二一。MOVE语句的较高技巧
1。各种类型数据之间的传送规则见下表:(Y:表示合法传送。N:表示非法传送。空白:表示某些时候是合法的。)接收项发送项
数值型整数
数值非整YYYNNYNYN
数值编辑字母YYYNNYNYN
NNNYNNYNY
字符
YNYYYYNYYYY
字符编辑YNYYYYNYYYY
组合项YYYYYYYYYYY
数值型整数Y数值型非整
Y

数值编辑型Y字母型字符型数值常量ZEROSPACE组合项
NYYN
字符编辑型N非数值常量N
2。用CORRESPONDING子句的传送对应传送(同名传送)对应传送的一般格式:
MOVECORRESPONDING标识符1TO标识符2

CORR
说明:(1)如果两个组合项中包括的项不同,则只传送同名的项。
2)传送的两者间必须有成对的同名数据项,而且这一对中必须至少有一个项
初等项。否则不能作为对应项传送。
3)所谓同名,指的是它们有相同的全程受限,即全程同名。假如T1T2的描述分别为:
01T101T202X02X
03X1。。。03X2。。。03X3。。。03X1。。。02Y102Y
03A1。。。03A1。。。T1中的A1T2中的A1就不是全程同名。
4。除法语句中的余数语句(REMAINDER子句):DIVIDE语句只能求商不能求余数。如想求余数,可用REMAINDER子句。
如:DIVIDEAINTOBGIVINGCREMAINDERD
注意:(1)商和余数的值不仅取决于除数和被除数,还取决于数据部中对商和余数的描述。
2)如用ROUNDED子句,它只对商起作用,余数不作四舍五入处理,在计算余数时,仍按四舍五入前的值为准。
(3长度溢出也只检查商的值是否溢出,而不检查余数。三。IF语句的较高技巧1。符号条件:
数据名IS[NOT]POSITIVE算术表达式NEGATIVEZERO
2。类型条件:
标识符IS[NOT]NUMERICALPHABETIC
3。条件名条件:用来表示条件变量当前值的名字叫条件名。条件名本身是一个条件,它有一个值(’真’或’假’),用它来检查条件变量的值是否落在条件名所代表的值的范围中,当条件变量的值落在条件名所代表的值的范围中,则此条件名所表示的条件为’真’,否则为’假’。条件名条件的一般格式:
88条件
{VALUEIS}常量1[{THRU}常量2]
[常量3[[{THRU}常量4]]。。。]
如:02WS-FILE-STATUSPIC92

88WS-FILE-NORMALVALUE09388WS-FILE-EOFVALUE10CHAPTER6过程部之三
一。执行语句的作用:在一个COBOL程序中,过程部中往往有一部分语句需要执行多次。为了让重复的部分在程序中只出现一次,可以把重复的部分单独写成一段或一节(有一个段名或节名),每次执行这部分语句时转去该段,执行完转回来。这时候就需要用到执行语句(PERFORM)。
二。执行语句的一般形式:
PERFORM过程名
1[THRU]过程名2三。使用PERFORM语句实现循环:
1PERFORM过程名
1[{THRU}过程名2]整数TIMES标识符
2PERFORM过程名
1[{THRU}过程名2]UNTIL条件
3PERFORM过程名
1[{THRU}过程名2]
VARYING标识符1FROM常数1BY常数
2UNTIL条件
标识符2标识3
四。执行语句的多重循环形式:COBOL允许三重循环,其一般格式可写为:PERFORM过程名
1[{THRU}过程名2]
[VARYING参数1FROM初值1BY步长
1UNTIL条件1]
[AFTER参数2FROM初值2BY步长
2UNTIL条件2]
[AFTER参数3FROM初值

3BY步长
3UNTIL条件3]
五。出口语句(EXIT):EXIT语句提供了一组过程的公共出口,即指出了被调用过程的逻辑终点。
CHAPTER7各部之间的关系及程序举例.各部之间的关系:
IDENTIFICATIONDIVISION.
PROGRAM-ID.PROGRAM1.
ENVIRONMENTDIVISION.CONFIGRATIONSECTION.INPUT-OUTPUTSECTION.FILE-CONTROL.
SELECTPRODFILEASSIGNTOFILE1.
给程序加上标识以便识别.描述程序中用到的文件与外部文件的关系及控制信息
描述程序中用到的
DATADIVISION.所有文件FILESECTION.及其记录FDPRODFILELABELRECORDISSTANDARD.中各数据01PROD-RECPICX(200.项的属性WORKING-STORAGESECTION.及程序中01WS-VARIBALES.用到的所05WS-IPIC9(2.有中间数
据项的描.
程序的核心部分,他决定计算机进行什么操.,件的读写及其他处
PROCEDUREDIVISION.
.程序举例:1:
读入一组产品销售记录,每读入一个记录,计算出销售总额(数量X单价.然后打印出该产品的全部数据.数据形式如下:

19921231000001AAAA01005000
19931231100001BBBB02006000
————————-—————–———————————
DATEPRODCODECUSTAMTPRICE程序如下:
IDENTIFICATIONDIVISION.
PROGRAM-ID.PEXAM1ENVIRONMENTDIVISION.CONFIGRATIONSECTION.INPUT-OUTPUTSECTION.FILE-CONTROL.
SELECTINPUT-FILEASSIGNTOFILE1
ORGANIZATIONISSEQUENCIAL
ACCESSMODEISSEQUENCIAL
FILE-STATUSISWS-INPUT-FILE-STATUS.
SELECTOUTPUT-FILEASSIGNTOP-FILEORGANIZATIONISSEQUENCIAL
ACCESSMODEISSEQUENCIAL
FILE-STATUSISWS-OUTPUT-FILE-STATUS.
DATADIVISION.FILLESECTION.FDINPUT-FILELABELRECORDISSTANDARD.01IN-REC.
05DATEPIC9(8.05PROD-CODEPIC9(6.05CUSTOMER-CODEPICX(4.05QUANTITYPIC9(4.
05UNIT-PRICEPIC9(4.
FDOUTPUT-FILELABELRECORDISSTANDARD.01OUT-REC.
05DATEPIC9999B99B99.

05050505050505050505FILLERPICX(5.PROD-CODEPIC9(6.FILLERPICX(5.CUSTOMER-CODEPICX(4.FILLERPICX(5.QUANTITYPICZZZ9.FILLERPICX(5.
UNIT-PRICEPIC$(5.FILLERPICX(5.SALES-VALUEPIC$(8.
WORKING-STORAGESECTION.01WS-VARIBLES.
05WS-INPUT-FILE-STATUSPIC9(2.
88WS-INPUT-FILE-SUCCESSFULVALUE0.
88WS-INPUT-FILE-EOFVALUE23.
05WS-OUTPUT-FILE-STATUSPIC9(2.
88WS-OUTPUT-FILE-SUCCESSFULVALUE0.PROCEDUREDIVISION.A000-MAIN.PERFORMPERFORMPERFORMF
PERFORMSTOPRUN.
A000-EXIT.EXIT.
A100-OPEN-FILESR000-READ-FILE
A200-PROCESS-RECORDUNTILWS-INPUT-FILE-EOA300-CLOSE-FILES
A100-OPEN-FILES.
OPENINPUTINPUT-FILEOUTPUTOUTPUT-FILE
IFNOTWS-INPUT-FILE-SUCCESSFULDISPLAY
INPUT-FILEOPENNOTSUCCESSFULUPONCONSOLEPERFORMZ000-ABENDEND-IF
IFNOTWS-OUTPUT-FILE-SUCCESSFUL

DISPLAY
OUTPUT-FILEOPENNOTSUCCESSFULUPONCONSOLEPERFORMZ000-ABENDEND-IF.
A200-PROCESS-RECORD.INITIALIZEOUT-REC
MOVECORRIN-RECTOOUT-REC
COMPUTESALES-VALUE=QUANTITYOFIN-REC*UNIT-PRICEOFOUT-RECPERFORMW000-WRITE-FILEPERFORMR000-READ-FILE.
A300-CLOSE-FILE.
CLOSEINPUT-FILEOUTPUT-FILE.
R000-READ-FILE.READINPUT-FILE
IFNOTWS-INPUT-FILE-SUCCESSFULANDNOTWS-INPUT-FILE-EOFDISPLAY
INPUT-FILEREADNOTSUCCESSFULUPONCONSOLEPERFORMZ000-ABENDTHRUZ000-EXIT
END-IF.
W000-WRITE-FILE.
WRITEOUT-RECAFTER1IFNOTWS-OUTPUT-FILE-SUCCESSFULDISPLAY
OUTPUT-FILEWRITENOTSUCCESSFULUPONCONSOLE
PERFORMZ000-ABENDEND-IF.
Z000-ABEND.
DISPLAYPROGRAMABEND!UPONCONSOLEPERFORMA300-CLOSE-FILESTHRUA300-EXITMOVE16TORETURN-CODE

GOBACK.
输出的数据形式如下:
19921231000001AAAA100$5000$500000
19931231100001BBBB200$6000$1200000
2:
Program:INVI300Updateinventoryfile(randomFileVALTRANINVMASTERRTRAN
Description
ValidinventorytransactionfileInventorymasterfile
Unmatchedinventorytransactionfile
UseInputUpdateOutput
Processspecifications
Thisprogramupdatesaninventorymasterfile(INVMASTbasedonthedatainasequential
fileofvalidinventorytransactionrecords(VALTRAN.Theinventorymasterfileisindexedbyitemnumberandupdatedrandomly.
Iftheprogramfindsamasterrecordwiththesameitemnumberasatransaction,itusesthe
transactiondatatoupdatethemasterrecord.Itdoesthisbyincreasingtheonhandquantity
inthemasterrecordbythereceiptquantityinthetransactionrecord.
Iftheprogramcannotfindamasterrecordforatransaction,itwritesthetransactionrecordon
thefileoferrortransactions(ERRTRAN.TherecordformatformatforERRTRANissameasforVALTRAN.
Thebasicprocessingrequirementsare:1.Readatransactionrecord.
2.Readthemasterrecordwiththesameitemnumberasinthetransactionrecord.

3.Ifthemasterrecordisfound,updateandrewritethematchingmasterrecord.
4.Ifthetransactionisnotfound,writethetransactionrecordonthefileoferrortransactions.程序如下:
IDENTIFICATIONDIVISION.PROGRAM-ID.INV1300.
ENVIRONENTDIVISON.INPUT-OUTPUTSECTION.FILE-CONTROL.
SELECTVALTRANASSIGNTOSYS020-AS-VALTRAN.SELECTINVMASTASSIGNTOSYS021-INVMATORGANIZATIONISINDEXED
ACCESSISRANDOMRECORDKEYISMR-ITEM-NO
FILESTATUSISINVMAST-ERROR-CODE.
SELECTERRTRANASSIGNTOSYS022-AS-ERRTRAN.DATADIVISION.FILESECTION.FDVALTRAN
LABELRECORDSARESTANDARD.
01VALID-TRANSACTION-AREAPICX(21.FDINVMAST
LABELRECORDSARESTANDARD.01MASTER-RECORD-AREA.05MR-ITEM-NOPICX(5.05FILLERPICX(45.FDERRTRAN
LABELRECORDSARESTANDARD.
01ERROR-TRANSACTIONPICX(21.WORKING-STORAGESECTION.01SWITCHES.
05VALTRAN-EOF-SWITCHPICXVALUEN.
88VALTRAN-EOFVALUEY.
05MASTER-FOUND-SWITCHPICX.
88MASTER-FOUNDVALUEY.
01FILE-STATUS-FIELD.
05INVMAST-ERROR-CODEPICX(2.

01INVENTROY-TRANSACTION-RECORD.05IT-ITEM-NOPICX(5.05IT-VENOR-NOPICX(5.
05IT-RECEIPT-DATEPICX(6.
05IT-RECEIPT-QUANTITYPICS9(5.01INVENTORY-MASTER-RECORD.05IM-DESCRIPTIVE-DATA.
10IM-ITEM-NOPICX(5.10IM-ITEM-DESCPICX(20.
10IM-UNIT-COSTPICS9(3V9(2.
10IM-UNIT-PRICEPICS9(3V9(2.05IM-INVENTORY-DATA.
10IM-REORDER-POINTPICS9(5.10IM-ON-HANDPICS9(5.10IM-ON-ORDERPICS9(5.PROCEDUREDIVISION.
A000-UPDATE-INVENTORY-FILE.
OPENINPUTVALTRANI-OINVMASTOUTPUTERRTRAN
PERFORMB000-PROCESS-INVENTORY-TRANTHRUB000-EXIT
UNTILVALTRAN-EOF
CLOSEVALTRANINVMASTERRTRAN
DISPLAYPROGRAMINV1300NORMALENDGOBACK.
B000-PROCESS-INVENTORY-TRAN.
PERFORMB100-READ-INVENTORY-TRAN
IFNOTVALTRAN-EOF
PERFORMB200-READ-INVENTORY-MASTERIFMASTER-FOUND
PERFORMB300-UPDATE-INVENTORY-MASTERELSE
PERFORMB400-WRITE-ERROR-TRANEND-IFEND-IF.B000-EXIT.EXIT.

B100-READ-INVENTRORY-TRAN.
READVALTRANINTOINVENTORY-TRANSACTION-RECORD
ATENDMOVE
Y'TOVALTRAN-EOF-SWITCH.B100-EXIT.EXIT.
B200-READ-INVENTORY-MASTER.
MOVEIT-ITEM-NOTOMR-ITEM-NO
READINVMASSTINTOINVENTORY-MASTER-RECORDIFINVMAST-ERROR-CODE=00MOVE
Y'TOMASTER-FOUND-SWITCHELSE
MOVE
N'TOMASTER-FOUND-SWITCHEND-IF.
B300-UPDATE-INVENTORY-MASTER.
ADDIT-RECEIPT-QUANTITYTOIM-ON-HAND
REWRITEMASTER-RECORD-AREAFROMINVENTORY-MASTER-RECORD
IFINVMAST-ERROR-CODENOT=00
DISPLAYINV1300REWRITEINVMASTERROR.ITEMNUMBER=IM-ITEM-NODISPLAYFILESTATUS=INVMAST-ERROR-CODEMOVE
Y'TOVALTRAN-EOF-SWITHEND-IF.B300-EXIT.EXIT.
B400-WRITE-ERROR-TRAN.
WRITEERROR-TRANSACTIONFROMINVENTORY-TRANSACTION-RECORD.B400-EXIT.

EXIT.
IDENTIFICATIONDIVISION.PROGRAM-ID.PROGRAM3.ENVIRONMENTDIVISION.DATADIVISION.
WORKING-STORAGESECTION.
01WS-RESPPICS9(8COMP.88WS-RESP-NORMALVALUE0.010505108888881010

PGM3COM.
CUST-NOPIC9(8.PGM3-OUT.
PGM3-RETURN-CODEPICX(2.
PGM3-SUCCESSFULVALUE.
PGM3-CUST-NBR-ERRVALUE01.PGM3-CUST-NOT-FNDVALUE02.PGM3-ACPIC9(5.PGM3-BALPIC9(11.
01MASTER-RECORD.
05MASTER-KEYPIC9(8.05CUST-NAMEPICX(20.05CHECK-ACPIC9(5.05BALPIC9(11.LINKAGESECTION.
01DFHCOMMAREAPICX(26.
PROCEDUREDIVISION.A000-MAIN-PROCESS.
MOVEDFHCOMMAREATOPGM3COMINITIALIZEPGM3-OUT
PERFORMB000-VALIDATIONTHRUB000-EXITIFPGM3-SUCCESSFUL
PERFORMC000-PROCESSTHRUC000-EXIT

END-IF.
A999-RETURN.
MOVEPGM3COMTODFHCOMMAREA.EXECCICSRETURNEND-EXEC.GOBACK.*
B000-VALIDATION.
IFCUST-NONOTNUMERICSETPGM3-CUST-NBR-ERRTOTRUEEND-IF.
B000-EXIT.EXIT.*
C000-PROCESS.
MOVECUST-NOTOMASTER-KEYEXECCICSREADFILE(VMASTERRIDFLD(MASTER-KEY
INTO(MASTER-RECORD
LENGTH(LENGTHOFMASTER-RECORDRESP(WS-RESPEND-EXEC
IFWS-RESPNOT=DFHRESP(NORMAL
IFWS-RESP=DFHRESP(NOTFNDSETPGM3-CUST-NOT-FNDTOTRUEELSE
EXECCICSABENDABCODE(ABCDEND-EXECEND-IFELSE
MOVECHECK-ACTOPGM3-ACMOVEBALTOPGM3-BALEND-IF.
C000-EXIT.EXIT.
CHAPTER8联机及批量程序的一些差异批量
对大量数据的集中处理
联机
对特定的少量数据操作

一般在非营业时间运行对效率要求较高
一般在营业时间运行对实时性要求较高
在操作系统中通过后台作业流来
CICS平台上通过CICS激活运行
调度运行
资源由作业流和程序管理
资源由CICS集中管理,程序对资源使用通过调用CICS提供的语句
一般会使用
不会使用INPUT-OUTPUTSECTION.
INPUT-OUTPUTSECTION.
FILE-CONTROL.FILESECTION.
FILE-CONTROL.FILESECTION.出错处理通过检测文件状态字
出错处理通过检测CICS返回状态字
CHAPTER9COBOL编程规范
1.使用結構化的編程方法,開發一致的、可理解的和易于維護的COBOL程序.結構化編程應遵循”KISS”法則,即:”
KeepItSimple&StupidforEASYTOREAD,EASYTODEBUG,EASYTOMAINTAIN.
2.只用顺序,循环,选择3种程序結構及組合去表示程序邏輯
3.每個控制結構只有一個入口和一個出口(結構可以是一個模塊,段,節,子程序)。
4.不要爲了時空效率而犧牲清晰性。
5.程序的清晰性首先在於邏輯的清晰,然後才是格式的清晰。6.清晰的格式有助於清晰的思維。
7.確信所有變量在被使用時都被正確地置初值。8.避免濫用語言特色,應使程序簡潔易讀。9.使用有意義的、簡化的變量名及詞語標號。
10.盡量使用標準的公用子程序執行既定的程序功能。11.避免不必要的複雜的算術和邏輯表達式。12.避免重復的控制序列以及不必要的轉移。
13.不要用注釋去精確地重復程序代碼,要使得注釋有價值。
14.嚴格控制非限制性轉移語句”GOTO”的使用,除非下面兩種情況:當不使用時將會模糊而不是澄清功能;在同一程序單元内正向轉移。http://wenku.baidu.com/view/59c0070b79563c1ec5da7178.html###


本文来源:https://www.2haoxitong.net/k/doc/37e48d046f1aff00bfd51ed0.html

《COBOL语言基础教程.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式