??xml version="1.0" encoding="utf-8" standalone="yes"?>
CHAPTER 1 COBOL 概述
CHAPTER 2 q程部初?
CHAPTER 3 标识部和环境?
CHAPTER 4 数据部之一
CHAPTER 5 q程部之?
CHAPTER 6 q程部之?
CHAPTER 7 各部之间的关pdE序举例
CHAPTER 8 联机及批量程序的一些差?
CHAPTER 9 COBOL ~程规范
COBOL 是Common Business Oriented Language 的羃写。它不仅是商业数据处理的理想语言Q?
而且q泛用于数据理领域Q因此COBOL 语言也被UCؓ“用于管理的语言”?
一。COBOL 语言的特?
最适于数据处理领域Q算数计量而逻辑处理量多Q输入输出量大,数据间存在着一定的逻辑 关系Q大量的分类排序QCOBOL比较接近pQ容易懂Q通用性强Q易UL,COBOLl构严}Q层ơ分明?
二。COBOL的组成部分:
1。标识部QIDENTIFICATION DIVISIONQ:用于标识E序名?
2。环境部QENVIRONMENT DIVISIONQ:用于说明E序q行的环境?
3。数据部QDATA DIVISIONQ:用于说明E序中涉及的所有数据?
4。过E部QPROCEDURE DIVISIONQ:是程序的核心部分Q它军_计算机应q行什么操作?
三。最单的COBOL E序举例Q?
COL 1 ---6 7 8 12---72 73---80
IDENTIFICATION DIVISION?
PROGRAM-ID?PSAMPLE1?
ENVIRONMENT DIVISION?
DATA DIVISION?
PROCEURE DIVISION?
DISPLAY ‘THIS IS A COBOL PROGRAM.?
STOP RUN?
四。COBOL 源程序的书写格式Q?
W? ?6 列ؓ “标号区”。 ?W?列ؓ“箋行标志区?
W?x11列,UCؓ“A区”。程序中有些内容如部_节头Q段_层号 01Q层?77 及文?
描述WFD{应从A区开始写?
W?2x72列,UCؓ“B区”。写E序中的正文部分。如q程部中的句子只能从B区开始写?
W?3?0列,UCؓ“注释区”?
五。COBOL字符集包括:
数字0 --- 9 Q字?A--- Z Qa --- z , 专用字符Q? - * / = , . ; ?( ) < > $ 及空根{属于系l字W集而不属于COBOL字符集的字符只能出现 在COBOL E序中的字符串里?
六。常量:
COBOL 帔R分ؓ数值常量(?100Q?29Q,非数值常量(?‘ABC?Q和表意帔RQ如 ZEROQSPACEQHIGH-VALUEQLOW-VALUE QQUOTE QALL 帔RQ?
七。COBOL 所处理的数据的特点
层次的概念:数据间存在的从属关系?
文g的概念:多个记录可以l成一个文件?
记录的概念:h一定层ơ关pȝ一l数据项的最大集合,它是内存中具有独立逻辑含义的最大存取项Q具有最高层ơ?
一。输入输句?
1。ACCEPT语句Q直接从l端键盘或系l指定的输入讑֤上输入数据?
ACCEPT 标识W?[FROM 助忆名]
注:A。标识符(identifier)指的是能唯一地标识一个数据项的数据名Q不能唯一地标识一?
数据的数据名不是标识符。标识符可以是组合项?
B。在ACCEPT语句中如不写FROM部分Q如ACCEPT A Q则表示从系l隐含指定的
讑֤上读入一个数据给A?如果不想从指定的?备上输入Q则要用FROM 选项,
q时“助忆名”需要在环境部中事先说明和那U外部设备相联系。如Q?
ENVIRONMENT DIVISION。(环境部)
CONFIGRATION SECTION。(配置节)
SPECIAL-NAMES。(专用名段Q?
CONSOLE IS ABC
如在q程部中?ACCEPT T FROM ABC?则表C从控制台接收数据
2。DISPLAY语句Q从计算机内存中输出到某一指定的输备上?
DISPLAY { 标识W?Q常?}[标识W?Q常?]。。。[UPON 助忆名]
Q?标识W和助忆名的说明同上Q?
ACCEPT语句和DISPLAY语句不必定义文g适用于少量的数据输入输出?
3?READ语句QCOBOL语言中数据的输入输出主要是通过对外部文件的dq行的。READ 语句是从外部文件上d数据输出到程序中的数据项中。在E序中用到的所有文仉需要在环境部中指定E序中用到的文g名与实际外部文g的联pR数据部也要Ҏ件加以描q。指定数据结构各数据Ҏ占的内存单元长度以及数据形式?
COBOL 的存取是以文件ؓ对象以记录ؓ单位的?
READ语句的最单的格式为: READ 文g名?
ENVIRONMENT DIVISION?
INPUT-OUTPUT SECTION?
FILE-CONTROL?
SELECT IN-FILLE ASSIGN TO 外部文g名?
Z存储d的记录,必须在内存开辟一个与文g记录长度相等的存储区Q即‘输入文件纪录区’。每一个输入文仉有相应的‘输入文件纪录区’,与之一一对应。亦卛_数据部中描述文g的数据结构?
3。READ语句Q?
假设 IN-FILE 文g每一记录中包含的内容为:产品代码Q品数量,产品单hQ生产日期。设某一记录的具体数?
如下Q? 0 1 0 0 1 0 0 0 0 0 1 0 0 0 1 9 9 9 0 3 2 2
prodcode quantity price year mon day
如果我们希望d该记录ƈ对各数据进行处理,则需要在 ‘输入纪录区’中划分出各数据,以便存放相应的数据。定义输入纪录区以及划分记录Z各数据项的工作是由数据部来完成的。下面我们简单介l数据部定义记录区方法,针对上面输入数据的特点,我们可以在数据部中对记录Z如下描述Q?
DATA DIVISION?
FD IN-FILE LABLE RECORD IS STANDARD?
01 IN-RECORD。 ?Q定义记录区名ؓIN-RECORDQ?
02 PROD-CODE PIC 9Q?Q?
02 PROD-QUANTITY PIC 9Q?Q?
02 PROD-PRICE PIC 9Q?Q?
02 MANU-DATE。(生日期Zl合)
05 DATE-CCYY PIC 9Q?Q?
05 DATE-MM PIC 9Q?Q?
05 DATE-DD PIC 9Q?Q?
其中QFD ?FILE DESCRIPTIONQ表CZ该行h‘文件描qC’?
LABLE RECORD IS STANDARD Q所有的盘文g和磁带文仉必须写明此句?
01 层定义‘输入纪录区?的名字ؓIN-RECORDQ由?01层属于FD描述体,因此也就指定?IN-RECORD ?IN-FILE 的关pR亦即从IN-FILE d的数据存攑֜ IN-RECORD记录Z?
q样Q在执行一ơREAD语句后,文g中一个记录的数据便输入到内存记录区,按排列顺序分别送到记录Z各数据项中。注意文件的各记录中的数据是不分数据的Q只是按一定的序把数据存攑֜各字节中。所以数据部对记录区中各数据的描述应该与文件的记录中各数据排列ơ序和长度相一致?
READ 语句的一般Ş式:READ 文g名 ?RECORD [INTO 标识W] [AT END 执行语句] Q?例如Q?
READ IN-FILE INTO TEMP-RECORD AT END STOP RUN 该语句除了将d的数据传送到IN-RECORD之外Q还传送到TEMP-RECORD中。在遇到文g时Q程序结束运行?
4。WRITE语句Q将内存中的数据输出到外部设备,主要是由WRITE 语句来完成的。WRITE语句的最单的格式为:
WRITE 记录?Q注意WRITE语句的操作对象是记录Q所以是‘记录名’而不是‘文件名’)
与输入文件相D出文件也要在环境部中指定所对应的实际存在的外部文gQ?
ENVIRONMENT DIVISION?
INPUT-OUTPUT SECTION?
FILE-CONTROL?
SELECT OUT-FILLE ASSIGN TO 打印机名?
也要在数据部中定义输录区Q?
DATA DIVISION?
FD OUT-FILE LABLE RECORD IS OMITTED?
01 OUT-RECORD。 ?
02 PROD-CODE PIC 9Q?Q?
02 PROD-QUANTITY PIC 9Q?Q?
02 PROD-PRICE PIC 9Q?Q?
02 MANU-DATE
05 DATE-CCYY PIC 9Q?Q?
05 DATE-MM PIC 9Q?Q?
05 DATE-DD PIC 9Q?Q?
LABLE RECORD IS OMITTED Q凡输出讑֤是打印机的都必须写明此句。如输出讑֤是磁盘,则仍用LABLE RECORD IS STANDARD?
01 层定义‘输出纪录区?的名字ؓOUT-RECORDQ由?01层属于FD描述体,因此也就指定?
OUT-RECORD 和OUT-FILE 的关pR?
在用WRITE 语句输出一个记录之前,应向输出记录Z送数据。如已将数据传送到上述各数据项中,则在执行 W RITE OUT-RECORD 语句后,则记录区中的数据通过打印机打印出来?
WRITE 语句的一般Ş式: 标识W?2 LINE
BEFORE 整数 LINES
WRITE 记录名?[FROM 标识W?1 ] AFTER ADVANCING 助忆名 ?
PAGE
5。OPEN语句Q程序中如果需要读写文Ӟ则该文g必须先用OPEN语句打开Q系l在执行READQWRITE以前先检查该文g是否已在规定的外部设备上准备qA?
OPEN语句的一般格式ؓQ?
INPUT 文g? [Q文件名2]。。?
OPEN OUTPUT 文g? [Q文件名4]。。。 ?。。?
6。CLOSE语句Q当对一个文件的L写的操作已完成,应关闭该文件?
CLOSE语句的一般格式ؓQ?
CLOSE 文g名?1 [Q文件名2]。。?
COBOL通过2位长度的文g状态字(FILE-STATUS)来表C文件的操作l果是否成功Q常见的文g状态值及意义:
二。算数运语?
1。ADD语句Q?
格式1QADD 标识W? Q标识符2。。。?TO 标识Wm [Q标识符n]。。?
帔R1 Q常?
格式2QADD 标识W? Q标识符2 Q标识符3
帔R1 Q常? Q常?
。。。GIVING 标识Wm [Q标识符n]。。?/p>
2。SUBTRACT语句Q?
格式1QSUBTRACT 标识W? Q标识符2 。。?FROM 标识Wm [Q标识符n]。。?
帔R1 Q常?
格式2QSUBTRACT 标识W? Q标识符2 。。。?FROM 标识W?
帔R1 Q常? 帔R
GIVING 标识Wn [Q标识符p]。。?
3。MULTIPLY语句Q?
格式1QMULTIPLY 标识W? BY 标识W? [Q标识符3]。。?
帔R1Q?
格式2QMULTIPLY 标识W? BY 标识W? GIVING 标识W? [Q标识符4]。。?
帔R1 Q 常?
4。DIVIDE语句Q?
格式1QDIVIDE 标识W? INTO 标识W? [Q标识符3]。。?
帔R1
格式2QDIVIDE 标识W? INTO 标识W? GIVING 标识W? [Q标识符4]。。?
帔R1 BY 帔R2
注意Q DIVIDE A INTO B 是指 B/AB
DIVIDE A INTO B GIVING C 是指 B/AC
DIVIDE A BY B GIVING C 是指 A/BC
5。COMPUTE 语句Q?
COMPUTE 标识W? [Q标识符2 ]。。? 术表达?
q算的优先由高C序为:Q)Q正负号 Q?* Q? 或?/ Q? ?-
如:C = 3 QD = 5 QE = 2 Q?F = 1 则:
COMPUT AQB = -QC + DQ? 2 / E ** 3 - F = -3
三。传送语?QMOVEQ?
MOVE 语句用来实现内存中数据的传送(而不是内存和外设之间的传送)?
MOVE语句的一般格式ؓQ?
MOVE 标识W? TO 标识W? [Q标识符3]。。?
帔R1
MOVE语句的传送规则:
1Q如果接攉和发送项在数据部中描q的cd和长度相同,则按字节一一对应传送?
2Q如果接攉和发送项长度不相同,而二者都是数值数据项Q则按小数点寚w处理?
3Q对字母或字W数据(非数值型数据Q的传送,按左寚w处理?
4Q初{项和组合项之间可以怺传送?
关于各类数据之间的传送规则将在第五章中介l?
四。{U语句(GO TOQ?
当需要ɽE序改变正常执行的顺序时Q可以用无条g转移语句 GO TO 。其一般格式ؓQ?
格式1Q GO TO q程?
格式2Q ?GO TO q程? [Q过E名2]。。过E名n DEPENDING ON 标识W?
注意Q只能{UdD|节的开_不能转移到段或节的当中某一语句。段名或节名E名?
五。条件语句(IFQ?
当需要根据给出的某些条g是否满来决定应执行哪一部分语句Ӟ可以使用条g语句IF?
其一般格式ؓQ?
IF 条g 语句l? ELSE 语句l? [END-IF]
NEXT SENTENCE NEXT SENTENCE
COBOL关系q算W: IS GREATER THAN (>)
IS LESS THAN (<)
IS EQUAL TO (=)
NOT GREATER THAN (NOT >) (<=)
NOT LESS THAN (NOT <) (>=)
NOT EQUAL TO (NOT =)
注意Q句点在IF 语句中的Ҏ作用?
如:IF A > 0
DISPLAY A。 ?
ADD A TO TOTAL。 ?
DISPLAY TOTAL。 ?
与 ?IF A > 0
DISPLAY A
ADD A TO TOTAL?
DISPLAY TOTAL。就不同?
为避免出现问题应该用显式终止符QEND-IFQEND-PERFORM{)代替隐式l止W(句点“。”)
六。停止语句(STOPQ?
其一般格式ؓQ ?STOP RUN
帔R
STOP RUN 执行后,E序停止q行Q停止后不能再接着q行Q如需要,可重新运行一ơ?
STOP 帔RQ表C程序暂时挂起不往下执行,昄出此帔R?
七。返回语句(GOBACKQ?
停止q行Q将控制权返回给上一U。可用本语句代替STOP语句。子E序必须用GOBACK?
不能用STOPQ因为STOP停止的是一个RUN UNITQ运行单元)?
一。数据部概述?
1?数据部的作用是定义数据项属性,描述数据l构。所有在q程部中出现的数据项都必d数据部中对它们的属性进行说明。包括数据项的类型,数据w的关p,记录与文件的关系Q文件的属性?
2?数据的层ơ和层号QCOBOL中把有从属关pȝ数据用层ơ(levelQ关pL描述。数据的层次l构是:记录--》组合项--》初{项。如Q在前面READ语句中定义的 IN-FILE 文gh如下l构Q?
01 IN-RECORD。 ?
02 PROD-CODE PIC 9Q?Q?
02 PROD-QUANTITY PIC 9Q?Q?
02 PROD-PRICE PIC 9Q?Q?
02 MANU-DATE。 ?
05 DATE-CCYY PIC 9Q?Q?
05 DATE-MM PIC 9Q?Q?
05 DATE-DD PIC 9Q?Q?
层次规定如下Q?
Q?Q用来描q数据的层次l构的层号从01?9。记录的层次最高,定ؓ01层号?
Q?Q从属项的层h其下属项的层号高。层号不必要求连l?
Q?Q从属于同一l合但不互总属的数据具有相同的层号?
3。数据部的结构: 数据部中通常用到的有以下几个节:
Q?QFILE SECTIONQ描q程序中用到的输入输出文件及其记录中各数据项的属性?
Q?QWORKING-STORAGE SECTIONQ描q程序中用到的中间数据项?
Q?QLINKAGE SECTIONQ描qC调用E序间发生数据传递的数据V?
Q?QREPORT SECTIONQؓ了完成报表编制功能,此节用来规定Ʋ输出的报表?
‘体裁’,设计各报表栏的打印Ş式和Ҏ{?
二。文件节?
1。文件节的作用: E序中每一个输入或输出文g都要在文件节中加以描q。内容包括:文g名和文g属性;文g中包括的记录名字Q每个记录中数据的层ơ关p;记录中各数据的数据形式和占内存的大?
2。文件描qͼ 最单的文g描述体的一般格式ؓQ?
FD 文g?
LABLE RECORD IS STANDARD
RECORDS ARE OMITTED
DATA RECORD IS 数据?
RECORDS ARE
3。记录描qͼ记录描述体由01层号开始,后跟记录名。如果记录本w就是一个初{项Q则在记录名后描q记录长度;否则Q数据名后跟句点Q下面定义记录的数据l构。如Q?
DATA DIVISION?
FILE SECTION?
FD IN-FILE
LABLE RECORD IS STANDARD?
DATA RECORD IS IN-FILE-RECORD?
01 IN-FILE-RECORD PIC XQ?0Q?
DATA DIVISION?
FILE SECTION?
FD IN-FILE
LABLE RECORD IS STANDARD?
DATA RECORD IS IN-FILE-RECORD?
01 IN-FILE-RECORD PIC XQ?0Q?
或 ?Q?1 IN-FILE-RECORD?
05 DATE PIC 9Q?Q?
05 PROD-CODE PIC 9Q?Q?
05 PROD-PRICE PIC 9Q?Q。 ?Q?
4。数据项描述Q?在每一个初{项的名字后跟一个PIC子句。用它来描述数据的类型和长度。PIC子句在下面详l说明?
5。文件节的书写格式: FD从A区开始书写,01层号也从A区开始,其它层号可以从AZ可以从B区开始。ؓ了看h层次分明Q最好从B区开始?
三。PIC 子句。PIC即PICTURE的羃写。PIC子句用来描述每一个初{项。它说明Q(1Q数据项是什么类型。(2Q数据项占多大内存域。(3Q是否需要按打印的要求准备有兛_W。PIC子句的主要作用在于描qC个初{项的一般特征和~辑要求?
1。数值型数据的描qͼ
?’描q符Q?表示该位|上可以攑օ一? ~ 9 之间的数字。因此:
01 A PIC 999。 ??
01 A PIC 9Q?Q?
表示A可以存放000 ~ 999 之间的一个三位数。有几个9表示有几位数?
注意Q(1Q在数值型数据中只能放数字不能放I格?
Q?Q用?’描q符只能表示整数Q如输入数部分Q则数部分被舍弃?
Q?Q如送入一个负敎ͼ则负可舍弃?
‘V’描q符Q?指出在数值数据结构中隐含的小数点的位|。小数点不占内存单元。如Q?
03 M PIC 9Q?QV9Q?Q?
注意Q(1QV在描q符的最后,则等于无数炏V?
Q?Q一个数据的描述W中只能出现一个V?
Q?Q进行数据传送或q算Ӟ按隐含的数点位|对准进行传送或q算?
Q?QV表示的小数点只在传送或q算时v作用Q不能被昄或打印出来。 ?
‘S’描q符Q?如果惛_数据中攑օ一个带W号的数Q可以用‘S’描q符。如Q?
03 M PIC S9Q?QV9Q?Q?
注意Q(1QS描述W必L最左边的一个描q符?
Q?Q在内存中,S不占位数Q在传送或q算时v作用?
2。字母型数据的描qͼ字母型数据项用A描述W,在这U类型的数据中只允许存攑֭母或I格?
3。字W型数据的描qͼ׃Q意的COBOL字符l成的数据,UCؓ字符型数据,它是非数值型的,不能用于计算。用X描述W来表示字符型数据。如Q?
03 M PIC XQ?Q?
注意Q(1Q字W型数据可以用X描述W,也可以用9和A描述W来描述。如描述数据
‘COB-74’可以用PIC XQ?Q,也可以用 PIC AQ?QX9Q?Q?
Q?Q字母型数据既可以用A描述Q也可以用X?
Q?Q字W型数据中可以放数字?
4。编辑型描述W:~辑型数据项只是作ؓ输出数据时增加或改变某些所需的符PL辑作用,它不是作计算用的。下面分别介l编辑数据项中用到的~辑描述W?
Q?Q。插入小数点‘。’,用‘。’描q符。如Q?
77 T PIC 99?9?
(2Q。插入逗号‘,’作分位P用‘,’描q符。如Q?
02 A PIC 999Q?99?9?Q或PIC 9Q?Q,9Q?Q?Q?Q)
Q?Q。插入空|用‘B’描q符。如Q?
02 A PIC B9Q?QB?
Q?Q。插入正负号Q用?’或?’描q符。如Q?
02 A1 PIC +9Q?Q??PIC 9Q?Q?Q?
02 A2 PIC -9Q?Q。(或PIC 9Q?Q?Q?
注意Q描q符?’,一侓加W号。描q符?’只对负值加负号?
Q?Q。插入??。如Q?
02 A1 PIC $999?9?
02 A2 PIC +$99999?
02 A3 PIC -$999??
Q?Q。Q动插入正负号和??
02 A1 PIC $$$99.99.
02 A2 PIC $$$$$.$$.
02 A3 PIC ++9.99.
Q?Q。取消高位零Q用‘Z’和?’描q符。在高位零的位置上代以空格或?’。如Q?
02 A1 PIC ZQ?Q?9?
02 A2 PIC *Q?Q?Q?Q。 ?
02 A3 PIC +ZZZQZZZQZZ。ZZ?
02 A4 PIC -*Q?**Q?**?9?
Q?Q。插入‘DB’和‘CR’字W。DB和CR只能用作固定插入Q当数gؓ负时Q在~辑型数 据项中最后两个字节中|DB或CRQ数gؓ正时Q此两字节留I格。如Q?
02 A1 PIC $9Q?Q?9DB
02 A2 PIC $9Q?Q?9CR?
5.常用数值型数据
四。工作单元节QWORKING-STORAGE SECTIONQ?
1。工作单元节的作用:E序中用的数据项分ؓ两部分,一部分是属于输入或输出文g的,另一部分是非输入或输出的数据。如一些中间变量或用作累计的数据项{。非输入输出的数据就应在工作单元节中描述Q还可以用工作单元节来赋初倹{?
2。VALUE子句Q用于给变量赋初倹{如Q?
02 A PIC 9Q?Q ?VALUE 123?
注意Q (1Q只有对工作单元节中的数据项才能赋初|不能Ҏ件节中输入输出文件中的 ?数据赋初倹{?
Q?Q如果在l合的描述体中使用VALUEQ初值只能是表意帔R或非数值型帔R。 ?对组合项整体而言Q一律按字符型数据项处理?
Q?Q当用一个带W号的数g初值时Q相应的PIC子句中应有‘S’描q符?
Q?Q赋初值时应该注意cd的一致性?
Q?QVALUE子句l出的值应适合PIC子句的描q范_否则会出现截断或产生错误?
一。MOVE 语句的较高技?/p>
1。各U类型数据之间的传送规则见下表Q(YQ表C合法传送。NQ表C非法传送。空白:表示某些时候是合法的。)
接收?/p> |
数值型 |
数值型 |
数值编辑型 |
字母?/p> |
字符?/p> |
字符~辑?/p> |
l合?/p> |
发送项 |
整数 |
非整?/p> |
|
|
|
|
|
数值型整数 |
Y |
Y |
Y |
N |
Y |
Y |
Y |
数值型非整?/p> |
Y |
Y |
Y |
N |
N |
N |
Y |
数值编辑型 |
Y |
Y |
Y |
N |
Y |
Y |
Y |
字母?/p> |
N |
N |
N |
Y |
Y |
Y |
Y |
字符?/p> |
|
|
|
|
Y |
Y |
Y |
字符~辑?/p> |
N |
N |
N |
N |
Y |
Y |
Y |
数值常?/p> |
Y |
Y |
Y |
N |
N |
N |
Y |
非数值常?/p> |
N |
N |
N |
Y |
Y |
Y |
Y |
ZERO |
Y |
Y |
Y |
N |
Y |
Y |
Y |
SPACE |
N |
N |
N |
Y |
Y |
Y |
Y |
l合?/p> |
|
|
|
|
Y |
Y |
Y |
CHAPTER 6 q程部之三——执行语句(PERFORMQ?/a>
一。执行语句的作用Q在一个COBOLE序中,q程部中往往有一部分语句需要执行多ơ。ؓ了让重复的部分在E序中只出现一ơ,可以把重复的部分单独写成一D|一节(有一个段名或节名Q,每次执行q部分语句时转去该段Q执行完转回来。这时候就需要用到执行语句(PERFORM Q?
二。执行语句的一般Ş式:
PERFORM q程? [THRU] q程?
三。用PERFORM语句实现循环Q?
1。 PERFORM q程? [{THRU} q程? ] 整数 TIMES
标识W?
2。 PERFORM q程? [{THRU} q程? ] UNTIL 条g
3。 PERFORM q程? [{THRU} q程? ]
VARYING 标识W? FROM 常数1 BY 常数2 UNTIL 条g
标识W? 标识W?
四。执行语句的多重循环形式QCOBOL 允许三重循环Q其一般格式可写ؓQ?
PERFORM q程? [{THRU} q程? ]
[VARYING 参数1 FROM 初? BY 步长1 UNTIL 条g1 ]
[AFTER 参数2 FROM 初? BY 步长2 UNTIL 条g2 ]
[AFTER 参数3 FROM 初? BY 步长3 UNTIL 条g3 ]
五。出口语句(EXITQ:EXIT语句提供了一l过E的公共出口Q即指出了被调用q程的逻辑l点?
一.各部之间的关p?
IDENTIFICATION DIVISION. PROGRAM-ID. PROGRAM1. |
l程序加上标识以便识?
|
ENVIRONMENT DIVISION. CONFIGRATION SECTION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT PRODFILE ASSIGN TO FILE1. |
描述E序中用到的文g与外部文件的关系及控制信?br /> |
DATA DIVISION. FILE SECTION. FD PRODFILE LABEL RECORD IS STANDARD. 01 PROD-REC PIC X(200). WORKING-STORAGE SECTION. 01 WS-VARIBALES. 05 WS-I PIC 9(2). |
描述E序中用到的所有文件及其记录中各数据项的属性及E序中用到的所有中间数据项的描q? |
PROCEDURE DIVISION. |
E序的核心部?他决定计机q行什么操??文g的读写及其他处理 |
?E序举例:
?:
d一l品销售记?每读入一个记?计算出销售总额(数量X单h).然后打印产品的全部数?数据形式如下:
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 0
1 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
E序如下:
IDENTIFICATION DIVISION.
PROGRAM-ID. PEXAM1
ENVIRONMENT DIVISION.
CONFIGRATION SECTION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT INPUT-FILE ASSIGN TO FILE1
ORGANIZATION IS SEQUENCIAL
ACCESS MODE IS SEQUENCIAL
FILE-STATUS IS WS-INPUT-FILE-STATUS.
SELECT OUTPUT-FILE ASSIGN TO P-FILE
ORGANIZATION IS SEQUENCIAL
ACCESS MODE IS SEQUENCIAL
FILE-STATUS IS WS-OUTPUT-FILE-STATUS.
DATA DIVISION.
FILLE SECTION.
FD INPUT-FILE LABEL RECORD IS STANDARD.
01 IN-REC.
05 DATE PIC 9(8).
05 PROD-CODE PIC 9(6).
05 CUSTOMER-CODE PIC X(4).
05 QUANTITY PIC 9(4).
05 UNIT-PRICE PIC 9(4).
FD OUTPUT-FILE LABEL RECORD IS STANDARD.
01 OUT-REC.
05 DATE PIC 9999B99B99.
05 FILLER PIC X(5).
05 PROD-CODE PIC 9(6).
05 FILLER PIC X(5).
05 CUSTOMER-CODE PIC X(4).
05 FILLER PIC X(5).
05 QUANTITY PIC ZZZ9.
05 FILLER PIC X(5).
05 UNIT-PRICE PIC $(5).
05 FILLER PIC X(5).
05 SALES-VALUE PIC $(8).
WORKING-STORAGE SECTION.
01 WS-VARIBLES.
05 WS-INPUT-FILE-STATUS PIC 9(2).
88 WS-INPUT-FILE-SUCCESSFUL VALUE 0.
88 WS-INPUT-FILE-EOF VALUE 23.
05 WS-OUTPUT-FILE-STATUS PIC 9(2).
88 WS-OUTPUT-FILE-SUCCESSFUL VALUE 0.
PROCEDURE DIVISION.
A000-MAIN.
PERFORM A100-OPEN-FILES
PERFORM R000-READ-FILE
PERFORM A200-PROCESS-RECORD UNTIL WS-INPUT-FILE-EOF
PERFORM A300-CLOSE-FILES
STOP RUN
.
A000-EXIT.
EXIT
.
A100-OPEN-FILES.
OPEN INPUT INPUT-FILE
OUTPUT OUTPUT-FILE
IF NOT WS-INPUT-FILE-SUCCESSFUL
DISPLAY ‘INPUT-FILE OPEN NOT SUCCESSFUL’ ?UPON CONSOLE
PERFORM Z000-ABEND
END-IF
IF NOT WS-OUTPUT-FILE-SUCCESSFUL
DISPLAY ‘OUTPUT-FILE OPEN NOT SUCCESSFUL’ ?UPON CONSOLE
PERFORM Z000-ABEND
END-IF
.
A200-PROCESS-RECORD.
INITIALIZE OUT-REC
MOVE CORR IN-REC TO OUT-REC
COMPUTE SALES-VALUE = QUANTITY OF IN-REC * UNIT-PRICE OF OUT-REC
PERFORM W000-WRITE-FILE
PERFORM R000-READ-FILE
.
A300-CLOSE-FILE.
CLOSE INPUT-FILE
OUTPUT-FILE
.
R000-READ-FILE.
READ INPUT-FILE
IF NOT WS-INPUT-FILE-SUCCESSFUL AND NOT WS-INPUT-FILE-EOF
DISPLAY ‘INPUT-FILE READ NOT SUCCESSFUL’ ?UPON CONSOLE
PERFORM Z000-ABEND THRU Z000-EXIT
END-IF
.
W000-WRITE-FILE.
WRITE OUT-REC AFTER 1
IF NOT WS-OUTPUT-FILE-SUCCESSFUL
DISPLAY ‘OUTPUT-FILE WRITE NOT SUCCESSFUL’ ?UPON CONSOLE
PERFORM Z000-ABEND
END-IF
.
Z000-ABEND.
DISPLAY ‘PROGRAM ABEND !’ ?UPON CONSOLE
PERFORM A300-CLOSE-FILES THRU A300-EXIT
MOVE 16 TO RETURN-CODE
GOBACK
.
输出的数据Ş式如?
1992 12 31 000001 AAAA 100 $5000 $500000
1993 12 31 100001 BBBB 200 $6000 $1200000
?:
Program : INVI300 Update inventory file (random)
File | Description | Use |
VALTRAN | Valid inventory transaction file | Input |
INVMAST | Inventory master file | Update |
ERRTRAN | Unmatched inventory transaction file | Output |
If the program finds a master record with the same item number as a transaction, it uses the
transaction data to update the master record .It does this by increasing the on hand quantity
in the master record by the receipt quantity in the transaction record.
If the program cannot find a master record for a transaction, it writes the transaction record on
the file of error transactions (ERRTRAN). The record format format for ERRTRAN is same as
for VALTRAN.
The basic processing requirements are:
1. Read a transaction record.
2. Read the master record with the same item number as in the transaction record.
3. If the master record is found , update and rewrite the matching master record.
4. If the transaction is not found , write the transaction record on the file of error transactions.
E序如下:
IDENTIFICATION DIVISION.
PROGRAM-ID. INV1300.
ENVIRONENT DIVISON.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT VALTRAN ASSIGN TO SYS020-AS-VALTRAN.
SELECT INVMAST ASSIGN TO SYS021-INVMAT
ORGANIZATION IS INDEXED
ACCESS IS RANDOM
RECORD KEY IS MR-ITEM-NO
FILE STATUS IS INVMAST-ERROR-CODE.
SELECT ERRTRAN ASSIGN TO SYS022-AS-ERRTRAN.
DATA DIVISION.
FILE SECTION.
FD VALTRAN
LABEL RECORDS ARE STANDARD.
01 VALID-TRANSACTION-AREA PIC X(21).
FD INVMAST
LABEL RECORDS ARE STANDARD.
01 MASTER-RECORD-AREA.
05 MR-ITEM-NO PIC X(5).
05 FILLER PIC X(45).
FD ERRTRAN
LABEL RECORDS ARE STANDARD.
01 ERROR-TRANSACTION PIC X(21).
WORKING-STORAGE SECTION.
01 SWITCHES.
05 VALTRAN-EOF-SWITCH PIC X VALUE ‘N?
88 VALTRAN-EOF VALUE ‘Y?
05 MASTER-FOUND-SWITCH PIC X.
88 MASTER-FOUND VALUE ‘Y?
01 FILE-STATUS-FIELD.
05 INVMAST-ERROR-CODE PIC X(2).
01 INVENTROY-TRANSACTION-RECORD.
05 IT-ITEM-NO PIC X(5).
05 IT-VENOR-NO PIC X(5).
05 IT-RECEIPT-DATE PIC X(6).
05 IT-RECEIPT-QUANTITY PIC S9(5).
01 INVENTORY-MASTER-RECORD.
05 IM-DESCRIPTIVE-DATA.
10 IM-ITEM-NO PIC X(5).
10 IM-ITEM-DESC PIC X(20).
10 IM-UNIT-COST PIC S9(3)V9(2).
10 IM-UNIT-PRICE PIC S9(3)V9(2).
05 IM-INVENTORY-DATA.
10 IM-REORDER-POINT PIC S9(5).
10 IM-ON-HAND PIC S9(5).
10 IM-ON-ORDER PIC S9(5).
PROCEDURE DIVISION.
A000-UPDATE-INVENTORY-FILE.
OPEN INPUT VALTRAN
I-O INVMAST
OUTPUT ERRTRAN
PERFORM B000-PROCESS-INVENTORY-TRAN THRU B000-EXIT
UNTIL VALTRAN-EOF
CLOSE VALTRAN
INVMAST
ERRTRAN
DISPLAY ‘PROGRAM INV1300 NORMAL END?
GOBACK.
B000-PROCESS-INVENTORY-TRAN.
PERFORM B100-READ-INVENTORY-TRAN
IF NOT VALTRAN-EOF
PERFORM B200-READ-INVENTORY-MASTER
IF MASTER-FOUND
PERFORM B300-UPDATE-INVENTORY-MASTER
ELSE
PERFORM B400-WRITE-ERROR-TRAN
END-IF
END-IF.
B000-EXIT.
EXIT.
B100-READ-INVENTRORY-TRAN.
READ VALTRAN INTO INVENTORY-TRANSACTION-RECORD
AT END MOVE ‘Y’ ?TO VALTRAN-EOF-SWITCH.
B100-EXIT.
EXIT.
B200-READ-INVENTORY-MASTER.
MOVE IT-ITEM-NO TO MR-ITEM-NO
READ INVMASST INTO INVENTORY-MASTER-RECORD
IF INVMAST-ERROR-CODE = ?0?
MOVE ‘Y’ ?TO MASTER-FOUND-SWITCH
ELSE
MOVE ‘N’ ?TO MASTER-FOUND-SWITCH
END-IF.
B300-UPDATE-INVENTORY-MASTER.
ADD IT-RECEIPT-QUANTITY TO IM-ON-HAND
REWRITE MASTER-RECORD-AREA FROM INVENTORY-MASTER-RECORD
IF INVMAST-ERROR-CODE NOT = ?0?
DISPLAY ?INV1300 REWRITE INVMAST ERROR . ITEM NUMBER = ?IM-ITEM-NO
DISPLAY ?FILE STATUS = ’ ?INVMAST-ERROR-CODE
MOVE ‘Y’ ?TO VALTRAN-EOF-SWITH
END-IF.
B300-EXIT.
EXIT.
B400-WRITE-ERROR-TRAN.
WRITE ERROR-TRANSACTION FROM INVENTORY-TRANSACTION-RECORD.
B400-EXIT.
EXIT.
IDENTIFICATION DIVISION.
PROGRAM-ID. PROGRAM3.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-RESP PIC S9(8) COMP.
88 WS-RESP-NORMAL VALUE 0.
01 PGM3COM.
05 CUST-NO PIC 9(8).
05 PGM3-OUT.
10 PGM3-RETURN-CODE PIC X(2).
88 PGM3-SUCCESSFUL VALUE ' '.
88 PGM3-CUST-NBR-ERR VALUE '01'.
88 PGM3-CUST-NOT-FND VALUE '02'.
10 PGM3-AC PIC 9(5).
10 PGM3-BAL PIC 9(11).
01 MASTER-RECORD.
05 MASTER-KEY PIC 9(8).
05 CUST-NAME PIC X(20).
05 CHECK-AC PIC 9(5).
05 BAL PIC 9(11).
LINKAGE SECTION.
01 DFHCOMMAREA PIC X(26).
PROCEDURE DIVISION.
A000-MAIN-PROCESS.
MOVE DFHCOMMAREA TO PGM3COM
INITIALIZE PGM3-OUT
PERFORM B000-VALIDATION THRU B000-EXIT
IF PGM3-SUCCESSFUL
PERFORM C000-PROCESS THRU C000-EXIT
END-IF
.
A999-RETURN.
MOVE PGM3COM TO DFHCOMMAREA.
EXEC CICS RETURN END-EXEC.
GOBACK.
*
B000-VALIDATION.
IF CUST-NO NOT NUMERIC
SET PGM3-CUST-NBR-ERR TO TRUE
END-IF
.
B000-EXIT.
EXIT.
*
C000-PROCESS.
MOVE CUST-NO TO MASTER-KEY
EXEC CICS READ FILE ('VMASTER')
RIDFLD(MASTER-KEY)
INTO (MASTER-RECORD)
LENGTH(LENGTH OF MASTER-RECORD)
RESP (WS-RESP)
END-EXEC
IF WS-RESP NOT = DFHRESP(NORMAL)
IF WS-RESP = DFHRESP(NOTFND)
SET PGM3-CUST-NOT-FND TO TRUE
ELSE
EXEC CICS ABEND ABCODE('ABCD') END-EXEC
END-IF
ELSE
MOVE CHECK-AC TO PGM3-AC
MOVE BAL TO PGM3-BAL
END-IF
.
C000-EXIT.
EXIT.
扚w | 联机 |
对大量数据的集中处理 | 对特定的量数据操作 |
一般在非营业时间运?/td> | 一般在营业旉q行 |
Ҏ率要求较?/td> | 对实时性要求较?/td> |
在操作系l中通过后台作业来调度q行 | 在CICSq_上通过CICSȀz运?/td> |
资源׃业流和程序管?/td> | 资源由CICS集中理Q程序对资源使用通过调用CICS提供的语?/td> |
一般会使用INPUT-OUTPUT SECTION. FILE-CONTROL. FILE SECTION. | 不会使用INPUT-OUTPUT SECTION. FILE-CONTROL. FILE SECTION. |
出错处理通过文件状态字 | 出错处理通过CICSq回状态字 |