cobol入门

更新时间:2023-09-10 12:49:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

CHAPTER 1 COBOL 概述

COBOL 是Common Business Oriented Language 的缩写。它不仅是商业数据处理的理想语言,

而且广泛用于数据管理领域,因此COBOL 语言也被称为”用于管理的语言”。 一。COBOL 语言的特点

最适于数据处理领域:算数计算量少而逻辑处理量多,输入输出量大,数据间存在着一定的逻辑 关系,大量的分类排序;COBOL比较接近英语,容易懂;通用性强,易移植,COBOL结构严谨,层次分明。

二。COBOL的组成部分:

1。标识部(IDENTIFICATION DIVISION):用于标识程序名。

2。环境部(ENVIRONMENT DIVISION):用于说明程序运行的环境。 3。数据部(DATA DIVISION):用于说明程序中涉及的所有数据。

4。过程部(PROCEDURE DIVISION):是程序的核心部分,它决定计算机应进行什么操作。

三。最简单的COBOL 程序举例:

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 源程序的书写格式:

第1 至 6 列为 ”标号区”。 第7列为”续行标志区”

第8至此11列,称为”A区”。程序中有些内容如部头,节头,段头,层号 01,层号 77 及文件

描述符FD等应从A区开始写。

第12至此72列,称为”B区”。写程序中的正文部分。如过程部中的句子只能从B区开始写。

第73至80列,称为”注释区”。 五。COBOL字符集包括:

数字0 — 9 ,字母 A— Z ,a — z , 专用字符:

+ - * / = , . ; ’ ( ) < > $ 及空格。属于系统字符集而不属于COBOL字符集的字符只能出现 在COBOL 程序中的字符串里。 六。常量:

COBOL 常量分为数值常量(如 100,-29),非数值常量(如 ’ABC’ )和表意常量(如 ZERO,SPACE,HIGH-VALUE,LOW-VALUE ,QUOTE ,ALL 常量)。 七。COBOL 所处理的数据的特点

层次的概念:数据间存在的从属关系。 文件的概念:多个记录可以组成一个文件。

记录的概念:具有一定层次关系的一组数据项的最大集合,它是内存中具有独立逻辑含义的最大存取项,具有最高层次。 CHAPTER 2 过程部初步

一。输入输出语句。

1。ACCEPT语句:直接从终端键盘或系统指定的输入设备上输入数据。 ACCEPT 标识符 [FROM 助忆名]

注:A。标识符(identifier)指的是能唯一地标识一个数据项的数据名,不能唯一地标识一个

数据项的数据名不是标识符。标识符可以是组合项。

B。在ACCEPT语句中如不写FROM部分,如ACCEPT A ,则表示从系统隐含指定的

设备上读入一个数据给A。 如果不想从指定的设 备上输入,则要用FROM 选项, 这时”助忆名”需要在环境部中事先说明和那种外部设备相联系。如: ENVIRONMENT DIVISION。(环境部) CONFIGRATION SECTION。(配置节) SPECIAL-NAMES。(专用名段) CONSOLE IS ABC

如在过程部中有 ACCEPT T FROM ABC。 则表示要从控制台接收数据 2。DISPLAY语句:从计算机内存中输出到某一指定的输出设备上。

DISPLAY { 标识符1,常量1}[标识符2,常量2]。。。[UPON 助忆名] ( 标识符和助忆名的说明同上)

ACCEPT语句和DISPLAY语句不必定义文件适用于少量的数据输入输出。

3。READ语句:COBOL语言中数据的输入输出主要是通过对外部文件的读写进行的。READ 语句就是从外部文件上读入数据输 出到程序中的数据项中。在程序中用到的所有文件都需要在环境部中指定程序中用到的文件名与实际外部文件的联系。数据部也要对文件加以描述。指定数据结构各数据项所占的内存单元长度以及数据形式。

COBOL 的存取是以文件为对象以记录为单位的。 READ语句的最简单的格式为: READ 文件名

ENVIRONMENT DIVISION。 INPUT-OUTPUT SECTION。 FILE-CONTROL。

SELECT IN-FILLE ASSIGN TO 外部文件名。

为了存储读入的记录,必须在内存开辟一个与文件记录长度相等的存储区,即’输入文件纪录区’。每一个输入文件都有相应的’输入文件纪录区’,与之一一

对应。亦即在数据部中描述文件的数据结构。 3。READ语句:

假设 IN-FILE 文件每一记录中包含的内容为:产品代码,产品数量,产品单价,生产日期。设某一记录的具体数据 如下:

0 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 如果我们希望读入该记录并对各数据项进行处理,则需要在 ’输入纪录区’中划分出各数据项,以便存放相应的数据。定义输入纪录区以及划分记录区中各数据项的工作是由数据部来完成的。下面我们简单介绍数据部定义记录区方法,针对上面输入数据的特点,我们可以在数据部中对记录区作如下描述: DATA DIVISION。

FD IN-FILE LABLE RECORD IS STANDARD。 01 IN-RECORD。 (定义记录区名为IN-RECORD) 02 PROD-CODE PIC 9(4)。 02 PROD-QUANTITY PIC 9(5)。 02 PROD-PRICE PIC 9(6)。

02 MANU-DATE。(生产日期为一组合项) 05 DATE-CCYY PIC 9(4)。 05 DATE-MM PIC 9(2)。 05 DATE-DD PIC 9(2)。

其中,FD 即 FILE DESCRIPTION,表示从该行起是’文件描述体’。

LABLE RECORD IS STANDARD :所有的磁盘文件和磁带文件都必须写明此句。 01 层定义’输入纪录区’ 的名字为IN-RECORD,由于 01层属于FD描述体,因此也就指定了 IN-RECORD 和 IN-FILE 的关系。亦即从IN-FILE 读入的数据存放在 IN-RECORD记录区中。

这样,在执行一次READ语句后,文件中一个记录的数据便输入到内存记录区,按排列顺序分别送到记录区中各数据项中。注意文件的各记录中的数据是不分数据项的,只是按一定的顺序把数据存放在各字节中。所以数据部对记录区中各数据项的描述应该与文件的记录中各数据排列次序和长度相一致。

READ 语句的一般形式:READ 文件名 RECORD [INTO 标识符] [AT END 执行语句] , 例如:

READ IN-FILE INTO TEMP-RECORD AT END STOP RUN 该语句除了将读到的数据传送到IN-RECORD之外,还传送到TEMP-RECORD中。在遇到文件尾时,程序结束运行。

4。WRITE语句:将内存中的数据输出到外部设备,主要是由WRITE 语句来完成的。WRITE语句的最简单的格式为:

WRITE 记录名 (注意WRITE语句的操作对象是记录,所以是’记录名’而不是’文件名’)

与输入文件相似输出文件也要在环境部中指定所对应的实际存在的外部文件: ENVIRONMENT DIVISION。

INPUT-OUTPUT SECTION。 FILE-CONTROL。

SELECT OUT-FILLE ASSIGN TO 打印机名。 也要在数据部中定义输出记录区: DATA DIVISION。

FD OUT-FILE LABLE RECORD IS OMITTED。 01 OUT-RECORD。

02 PROD-CODE PIC 9(4)。 02 PROD-QUANTITY PIC 9(5)。 02 PROD-PRICE PIC 9(6)。 02 MANU-DATE

05 DATE-CCYY PIC 9(4)。 05 DATE-MM PIC 9(2)。 05 DATE-DD PIC 9(2)。 LABLE RECORD IS OMITTED :凡输出设备是打印机的都必须写明此句。如输出设备是磁盘,则仍用LABLE RECORD IS STANDARD。

01 层定义’输出纪录区’ 的名字为OUT-RECORD,由于 01层属于FD描述体,因此也就指定了

OUT-RECORD 和OUT-FILE 的关系。

在用WRITE 语句输出一个记录之前,应向输出记录区传送数据。如已将数据传送到上述各数据项中,则在执行 W RITE OUT-RECORD 语句后,则记录区中的数据通过打印机打印出来。

WRITE 语句的一般形式: 标识符 2 LINE BEFORE 整数 LINES WRITE 记录名 [FROM 标识

符 1 ] AFTER ADVANCING 助忆名 PAGE

5。OPEN语句:程序中如果需要读写文件,则该文件必须先用OPEN语句打开,系统在执行READ,WRITE以前先检查该文件是否已在规定的外部设备上准备就绪。

OPEN语句的一般格式为:

INPUT 文件名1 [,文件名2]。。。

OPEN OUTPUT 文件名3 [,文件名4]。。。 。。。

6。CLOSE语句:当对一个文件的读或写的操作已完成,就应关闭该文件。 CLOSE语句的一般格式为:

CLOSE 文件名 1 [,文件名2]。。。

COBOL通过2位长度的文件状态字(FILE-STATUS)来表示文件的操作结果是否成功,常见的文件状态值及意义: 二。算数运算语句

1。ADD语句:

格式1:ADD 标识符1 ,标识符2。。。 TO 标识符m [,标识符n]。。。 常量1 ,常量2

格式2:ADD 标识符1 ,标识符2 ,标识符3 常量1 ,常量2 ,常量3 。。。GIVING 标识符m [,标识符n]。。。

2。SUBTRACT语句:

格式1:SUBTRACT 标识符1 ,标识符2 。。。 FROM 标识符m [,标识符n]。。。 常量1 ,常量2

格式2:SUBTRACT 标识符1 ,标识符2 。。。 FROM 标识符

常量1 ,常量2 常量 GIVING 标识符n [,标识符p]。。。

3。MULTIPLY语句:

格式1:MULTIPLY 标识符1 BY 标识符2 [,标识符3]。。。 常量1,

格式2:MULTIPLY 标识符1 BY 标识符2 GIVING 标识符3 [,标识符4]。。。 常量1 , 常量2 4。DIVIDE语句: 格式1:DIVIDE 标识符1 INTO 标识符2 [,标识符3]。。。 常量1

格式2:DIVIDE 标识符1 INTO 标识符2 GIVING 标识符3 [,标识符4]。。。 常量1 BY 常量2

B à 注意: DIVIDE A INTO B 是指 B/A DIVIDE A INTO Cà B GIVING C 是指 B/A

DIVIDE A BY B C àGIVING C 是指 A/B 5。COMPUTE 语句:

COMPUTE 标识符1 [,标识符2 ]。。。= 算术表达式

运算的优先级由高到低顺序为:(),正负号 ,** ,* 或 / ,+ 或 - 如:C = 3 ,D = 5 ,E = 2 , F = 1 则:

COMPUT A,B = -(C + D)* 2 / E ** 3 - F = -3 三。传送语句 (MOVE)

MOVE 语句用来实现内存中数据的传送(而不是内存和外设之间的传送)。 MOVE语句的一般格式为:

MOVE 标识符1 TO 标识符2 [,标识符3]。。。 常量1

MOVE语句的传送规则:

1,如果接收项和发送项在数据部中描述的类型和长度相同,则按字节一一对应

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.

CHAPTER 8 联机及批量程序的一些差异 批量

对大量数据的集中处理 一般在非营业时间运行 对效率要求较高

联机

对特定的少量数据操作 一般在营业时间运行 对实时性要求较高

在操作系统中通过后台作业流

在CICS平台上通过CICS激活运行

来调度运行

资源由作业流和程序管理

资源由CICS集中管理,程序对资源使用通过调用CICS提供的语句

一般会使用

不会使用INPUT-OUTPUT SECTION.

INPUT-OUTPUT SECTION.

FILE-CONTROL. FILE SECTION.

FILE-CONTROL. FILE SECTION.

出错处理通过检测文件状态字 出错处理通过检测CICS返回状态字 CHAPTER 9 COBOL 编程规范

1.使用結構化的編程方法 ,開發一致的、可理解的和易于維護的COBOL程序 .結構化編程應遵循”KISS”法則,即:”

Keep It Simple & Stupid” for EASY TO READ ,EASY TO DEBUG ,EASY TO MAINTAIN.

2.只用顺序,循环,选择3种程序結構及組合去表示程序邏輯

3.每個控制結構只有一個入口和一個出口(結構可以是一個模塊,段,節,子程序)。

4.不要爲了時空效率而犧牲清晰性。

5.程序的清晰性首先在於邏輯的清晰,然後才是格式的清晰。 6.清晰的格式有助於清晰的思維。

7.確信所有變量在被使用時都被正確地置初值。 8.避免濫用語言特色,應使程序簡潔易讀。 9.使用有意義的、簡化的變量名及詞語標號。

10.盡量使用標準的公用子程序執行既定的程序功能。 11.避免不必要的複雜的算術和邏輯表達式。 12.避免重復的控制序列以及不必要的轉移。

13.不要用注釋去精確地重復程序代碼,要使得注釋有價值。

14.嚴格控制非限制性轉移語句”GOTO”的使用,除非下面兩種情況:當不使用時將會模糊而不是澄清功能; 在同一程序單元内正向轉移。

本文来源:https://www.bwwdw.com/article/e5qh.html

Top