yeafee@夜飛郎

          it's usually better to solve problems with simplicity and finesse rather than muscle.

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            33 隨筆 :: 3 文章 :: 2 評(píng)論 :: 0 Trackbacks

          目錄

          CHAPTER?? 1 COBOL 概述
          CHAPTER?? 2 過(guò)程部初步
          CHAPTER?? 3 標(biāo)識(shí)部和環(huán)境部
          CHAPTER?? 4 數(shù)據(jù)部之一
          CHAPTER?? 5 過(guò)程部之二
          CHAPTER?? 6 過(guò)程部之三
          CHAPTER?? 7 各部之間的關(guān)系及程序舉例
          CHAPTER?? 8 聯(lián)機(jī)及批量程序的一些差異
          CHAPTER?? 9 COBOL 編程規(guī)范

          CHAPTER 1 COBOL 概述

          COBOL 是Common Business Oriented Language 的縮寫(xiě)。它不僅是商業(yè)數(shù)據(jù)處理的理想語(yǔ)言,
          而且廣泛用于數(shù)據(jù)管理領(lǐng)域,因此COBOL 語(yǔ)言也被稱為“用于管理的語(yǔ)言”。

          一。COBOL 語(yǔ)言的特點(diǎn)
          ??????? 最適于數(shù)據(jù)處理領(lǐng)域:算數(shù)計(jì)算量少而邏輯處理量多,輸入輸出量大,數(shù)據(jù)間存在著一定的邏輯? 關(guān)系,大量的分類排序;COBOL比較接近英語(yǔ),容易懂;通用性強(qiáng),易移植,COBOL結(jié)構(gòu)嚴(yán)謹(jǐn),層次分明。
          ?
          二。COBOL的組成部分:
          1。標(biāo)識(shí)部(IDENTIFICATION DIVISION):用于標(biāo)識(shí)程序名。
          2。環(huán)境部(ENVIRONMENT DIVISION):用于說(shuō)明程序運(yùn)行的環(huán)境。
          3。數(shù)據(jù)部(DATA? DIVISION):用于說(shuō)明程序中涉及的所有數(shù)據(jù)。
          4。過(guò)程部(PROCEDURE DIVISION):是程序的核心部分,它決定計(jì)算機(jī)應(yīng)進(jìn)行什么操作。
          ?
          三。最簡(jiǎn)單的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 源程序的書(shū)寫(xiě)格式:
          ?????? 第1 至 6 列為 “標(biāo)號(hào)區(qū)”。??????? 第7列為“續(xù)行標(biāo)志區(qū)”
          ?????? 第8至此11列,稱為“A區(qū)”。程序中有些內(nèi)容如部頭,節(jié)頭,段頭,層號(hào) 01,層號(hào) 77 及文件
          描述符FD等應(yīng)從A區(qū)開(kāi)始寫(xiě)。
          ?????? 第12至此72列,稱為“B區(qū)”。寫(xiě)程序中的正文部分。如過(guò)程部中的句子只能從B區(qū)開(kāi)始寫(xiě)。
          ?????? 第73至80列,稱為“注釋區(qū)”。
          ?
          五。COBOL字符集包括:
          ?
          ?????? 數(shù)字0 --- 9 ,字母 A--- Z ,a --- z , 專用字符:+? -? * / = , . ; ‘ ( ) < > $ 及空格。屬于系統(tǒng)字符集而不屬于COBOL字符集的字符只能出現(xiàn)??? 在COBOL 程序中的字符串里。
          ?
          六。常量:
          ?
          ??????? COBOL 常量分為數(shù)值常量(如 100,-29),非數(shù)值常量(如 ‘ABC’ )和表意常量(如 ZERO,SPACE,HIGH-VALUE,LOW-VALUE ,QUOTE ,ALL 常量)。
          ?
          七。COBOL 所處理的數(shù)據(jù)的特點(diǎn)
          ?????? 層次的概念:數(shù)據(jù)間存在的從屬關(guān)系。
          ?????? 文件的概念:多個(gè)記錄可以組成一個(gè)文件。
          ?
          ?????? 記錄的概念:具有一定層次關(guān)系的一組數(shù)據(jù)項(xiàng)的最大集合,它是內(nèi)存中具有獨(dú)立邏輯含義的最大存取項(xiàng),具有最高層次。

          CHAPTER 2 過(guò)程部初步-----最基本的過(guò)程部語(yǔ)句

          一。輸入輸出語(yǔ)句。
          1。ACCEPT語(yǔ)句:直接從終端鍵盤(pán)或系統(tǒng)指定的輸入設(shè)備上輸入數(shù)據(jù)。
          ???? ACCEPT?? 標(biāo)識(shí)符 [FROM 助憶名]
          注:A。標(biāo)識(shí)符(identifier)指的是能唯一地標(biāo)識(shí)一個(gè)數(shù)據(jù)項(xiàng)的數(shù)據(jù)名,不能唯一地標(biāo)識(shí)一個(gè)
          ????????????? 數(shù)據(jù)項(xiàng)的數(shù)據(jù)名不是標(biāo)識(shí)符。標(biāo)識(shí)符可以是組合項(xiàng)。
          ??????? B。在ACCEPT語(yǔ)句中如不寫(xiě)FROM部分,如ACCEPT?? A? ,則表示從系統(tǒng)隱含指定的
          ?????????????? 設(shè)備上讀入一個(gè)數(shù)據(jù)給A。 如果不想從指定的設(shè) 備上輸入,則要用FROM 選項(xiàng),
          ?????????????? 這時(shí)“助憶名”需要在環(huán)境部中事先說(shuō)明和那種外部設(shè)備相聯(lián)系。如:
          ENVIRONMENT??? DIVISION。(環(huán)境部)
          CONFIGRATION? SECTION。(配置節(jié))
          SPECIAL-NAMES。(專用名段)
          CONSOLE?? IS? ABC
          如在過(guò)程部中有 ACCEPT? T? FROM ABC。 則表示要從控制臺(tái)接收數(shù)據(jù)
          2。DISPLAY語(yǔ)句:從計(jì)算機(jī)內(nèi)存中輸出到某一指定的輸出設(shè)備上。
          ???? DISPLAY? { 標(biāo)識(shí)符1,常量1}[標(biāo)識(shí)符2,常量2]。。。[UPON 助憶名]
          ?????????????????????? ( 標(biāo)識(shí)符和助憶名的說(shuō)明同上)
          ???? ACCEPT語(yǔ)句和DISPLAY語(yǔ)句不必定義文件適用于少量的數(shù)據(jù)輸入輸出。
          3。 READ語(yǔ)句:COBOL語(yǔ)言中數(shù)據(jù)的輸入輸出主要是通過(guò)對(duì)外部文件的讀寫(xiě)進(jìn)行的。READ 語(yǔ)句就是從外部文件上讀入數(shù)據(jù)輸出到程序中的數(shù)據(jù)項(xiàng)中。在程序中用到的所有文件都需要在環(huán)境部中指定程序中用到的文件名與實(shí)際外部文件的聯(lián)系。數(shù)據(jù)部也要對(duì)文件加以描述。指定數(shù)據(jù)結(jié)構(gòu)各數(shù)據(jù)項(xiàng)所占的內(nèi)存單元長(zhǎng)度以及數(shù)據(jù)形式。
          ???? COBOL 的存取是以文件為對(duì)象以記錄為單位的。
          READ語(yǔ)句的最簡(jiǎn)單的格式為:?READ?文件名?

          ??ENVIRONMENT?DIVISION。
          ??INPUT-OUTPUT?SECTION。
          ??FILE-CONTROL。
          ????????? SELECT????? IN-FILLE??? ASSIGN? TO????? 外部文件名。
          為了存儲(chǔ)讀入的記錄,必須在內(nèi)存開(kāi)辟一個(gè)與文件記錄長(zhǎng)度相等的存儲(chǔ)區(qū),即‘輸入文件紀(jì)錄區(qū)’。每一個(gè)輸入文件都有相應(yīng)的‘輸入文件紀(jì)錄區(qū)’,與之一一對(duì)應(yīng)。亦即在數(shù)據(jù)部中描述文件的數(shù)據(jù)結(jié)構(gòu)。
          3。READ語(yǔ)句:

          ???? 假設(shè)?? IN-FILE? 文件每一記錄中包含的內(nèi)容為:產(chǎn)品代碼,產(chǎn)品數(shù)量,產(chǎn)品單價(jià),生產(chǎn)日期。設(shè)某一記錄的具體數(shù)據(jù)
          ???? 如下: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
          ???? 如果我們希望讀入該記錄并對(duì)各數(shù)據(jù)項(xiàng)進(jìn)行處理,則需要在? ‘輸入紀(jì)錄區(qū)’中劃分出各數(shù)據(jù)項(xiàng),以便存放相應(yīng)的數(shù)據(jù)。定義輸入紀(jì)錄區(qū)以及劃分記錄區(qū)中各數(shù)據(jù)項(xiàng)的工作是由數(shù)據(jù)部來(lái)完成的。下面我們簡(jiǎn)單介紹數(shù)據(jù)部定義記錄區(qū)方法,針對(duì)上面輸入數(shù)據(jù)的特點(diǎn),我們可以在數(shù)據(jù)部中對(duì)記錄區(qū)作如下描述:
          ?DATA?DIVISION。
          ?FD???? IN-FILE?? LABLE??? RECORD? IS?? STANDARD。
          ?01????? IN-RECORD。?? (定義記錄區(qū)名為IN-RECORD)
          ?????????? 02???? PROD-CODE?PIC?? 9(4)。
          ?????????? 02???? PROD-QUANTITY?PIC?? 9(5)。
          ?????????? 02???? PROD-PRICE?PIC?? 9(6)。
          ?????????? 02???? MANU-DATE。(生產(chǎn)日期為一組合項(xiàng))
          ??????????????????? 05?? DATE-CCYY?PIC?? 9(4)。
          ??????????????????? 05?? DATE-MM?PIC?? 9(2)。
          ??????????????????? 05?? DATE-DD?PIC?? 9(2)。

          其中,F(xiàn)D 即 FILE DESCRIPTION,表示從該行起是‘文件描述體’。
          LABLE RECORD IS STANDARD :所有的磁盤(pán)文件和磁帶文件都必須寫(xiě)明此句。
          01 層定義‘輸入紀(jì)錄區(qū)’ 的名字為IN-RECORD,由于 01層屬于FD描述體,因此也就指定了 IN-RECORD 和 IN-FILE 的關(guān)系。亦即從IN-FILE 讀入的數(shù)據(jù)存放在 IN-RECORD記錄區(qū)中。
          這樣,在執(zhí)行一次READ語(yǔ)句后,文件中一個(gè)記錄的數(shù)據(jù)便輸入到內(nèi)存記錄區(qū),按排列順序分別送到記錄區(qū)中各數(shù)據(jù)項(xiàng)中。注意文件的各記錄中的數(shù)據(jù)是不分?jǐn)?shù)據(jù)項(xiàng)的,只是按一定的順序把數(shù)據(jù)存放在各字節(jié)中。所以數(shù)據(jù)部對(duì)記錄區(qū)中各數(shù)據(jù)項(xiàng)的描述應(yīng)該與文件的記錄中各數(shù)據(jù)排列次序和長(zhǎng)度相一致。

          READ 語(yǔ)句的一般形式:READ???? 文件名?? RECORD [INTO? 標(biāo)識(shí)符]? [AT?? END? 執(zhí)行語(yǔ)句] , 例如:
          ????? READ? IN-FILE?? INTO TEMP-RECORD?? AT? END?? STOP? RUN? 該語(yǔ)句除了將讀到的數(shù)據(jù)傳送到IN-RECORD之外,還傳送到TEMP-RECORD中。在遇到文件尾時(shí),程序結(jié)束運(yùn)行。

          4。WRITE語(yǔ)句:將內(nèi)存中的數(shù)據(jù)輸出到外部設(shè)備,主要是由WRITE 語(yǔ)句來(lái)完成的。WRITE語(yǔ)句的最簡(jiǎn)單的格式為:
          ????? WRITE??????? 記錄名 (注意WRITE語(yǔ)句的操作對(duì)象是記錄,所以是‘記錄名’而不是‘文件名’)?
          ???? 與輸入文件相似輸出文件也要在環(huán)境部中指定所對(duì)應(yīng)的實(shí)際存在的外部文件:
          ??ENVIRONMENT?DIVISION。
          ??INPUT-OUTPUT?SECTION。
          ??FILE-CONTROL。
          ????????? SELECT????? OUT-FILLE??? ASSIGN? TO????? 打印機(jī)名。
          也要在數(shù)據(jù)部中定義輸出記錄區(qū):
          ?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 :凡輸出設(shè)備是打印機(jī)的都必須寫(xiě)明此句。如輸出設(shè)備是磁盤(pán),則仍用LABLE RECORD IS STANDARD。
          01 層定義‘輸出紀(jì)錄區(qū)’ 的名字為OUT-RECORD,由于 01層屬于FD描述體,因此也就指定了
          OUT-RECORD 和OUT-FILE 的關(guān)系。


          在用WRITE 語(yǔ)句輸出一個(gè)記錄之前,應(yīng)向輸出記錄區(qū)傳送數(shù)據(jù)。如已將數(shù)據(jù)傳送到上述各數(shù)據(jù)項(xiàng)中,則在執(zhí)行 W RITE?? OUT-RECORD 語(yǔ)句后,則記錄區(qū)中的數(shù)據(jù)通過(guò)打印機(jī)打印出來(lái)。


          WRITE 語(yǔ)句的一般形式:???????????????????? 標(biāo)識(shí)符 2?LINE
          ????????????????????? BEFORE?????????????????? 整數(shù)??LINES
          ?????? WRITE???? 記錄名? [FROM? 標(biāo)識(shí)符 1 ]?????? AFTER???????? ADVANCING????????? 助憶名??
          ????????????????????? PAGE
          5。OPEN語(yǔ)句:程序中如果需要讀寫(xiě)文件,則該文件必須先用OPEN語(yǔ)句打開(kāi),系統(tǒng)在執(zhí)行READ,WRITE以前先檢查該文件是否已在規(guī)定的外部設(shè)備上準(zhǔn)備就緒。
          ????? OPEN語(yǔ)句的一般格式為:

          ??INPUT?文件名1 [,文件名2]。。。
          ? OPEN? ?OUTPUT?文件名3 [,文件名4]。。。???? 。。。
          6。CLOSE語(yǔ)句:當(dāng)對(duì)一個(gè)文件的讀或?qū)懙牟僮饕淹瓿桑蛻?yīng)關(guān)閉該文件。
          ????? CLOSE語(yǔ)句的一般格式為:?
          ?CLOSE?文件名? 1?? [,文件名2]。。。


          COBOL通過(guò)2位長(zhǎng)度的文件狀態(tài)字(FILE-STATUS)來(lái)表示文件的操作結(jié)果是否成功,常見(jiàn)的文件狀態(tài)值及意義:

          二。算數(shù)運(yùn)算語(yǔ)句

          1。ADD語(yǔ)句:
          ?格式1:ADD??? ?標(biāo)識(shí)符1?,標(biāo)識(shí)符2。。。? TO 標(biāo)識(shí)符m [,標(biāo)識(shí)符n]。。。
          ???常量1?,常量2

          ?格式2:ADD??? ?標(biāo)識(shí)符1???? ,標(biāo)識(shí)符2????? ,標(biāo)識(shí)符3
          ???常量1???????? ,常量2????????? ,常量3

          ??? 。。。GIVING 標(biāo)識(shí)符m [,標(biāo)識(shí)符n]。。。

          2。SUBTRACT語(yǔ)句:
          ???? 格式1:SUBTRACT?????? 標(biāo)識(shí)符1?,標(biāo)識(shí)符2 。。。 FROM 標(biāo)識(shí)符m [,標(biāo)識(shí)符n]。。。
          ???????????????????????????? 常量1?,常量2

          ???? 格式2:SUBTRACT?????? 標(biāo)識(shí)符1????? ,標(biāo)識(shí)符2?? 。。。? FROM????? 標(biāo)識(shí)符?
          ?????????????? ??????? ??????????? 常量1????????? ,常量2?????????????????????????????????????? 常量
          ?????GIVING 標(biāo)識(shí)符n [,標(biāo)識(shí)符p]。。。

          3。MULTIPLY語(yǔ)句:
          ???? 格式1:MULTIPLY??????? 標(biāo)識(shí)符1???????? BY?標(biāo)識(shí)符2 [,標(biāo)識(shí)符3]。。。
          ????????????????????????????? 常量1,?

          ???? 格式2:MULTIPLY??????? 標(biāo)識(shí)符1???????? BY?標(biāo)識(shí)符2? GIVING 標(biāo)識(shí)符3 [,標(biāo)識(shí)符4]。。。
          ????????????????????????????? 常量1?,?常量2
          4。DIVIDE語(yǔ)句:
          ???? 格式1:DIVIDE????????????? 標(biāo)識(shí)符1???????? INTO?標(biāo)識(shí)符2 [,標(biāo)識(shí)符3]。。。
          ????????????????????????????? 常量1 ?

          ???? 格式2:DIVIDE???????????? 標(biāo)識(shí)符1???????? INTO?標(biāo)識(shí)符2? GIVING 標(biāo)識(shí)符3 [,標(biāo)識(shí)符4]。。。
          ??????????????????????????? 常量1? BY?常量2

          ???? 注意:?DIVIDE?? ?A? INTO ?B? ??是指?? ?B/A?B??????????
          ?DIVIDE? ?A? INTO? ?B?? GIVING? C??? ?是指?B/A?C
          ???????????????? ?DIVIDE?? ?A? BY???? ?B?? GIVING? C??? ?是指?? ?A/B?C?
          5。COMPUTE 語(yǔ)句:
          ???????????????? COMPUTE?????????? 標(biāo)識(shí)符1? [,標(biāo)識(shí)符2 ]。。。= 算術(shù)表達(dá)式
          ???????????????? 運(yùn)算的優(yōu)先級(jí)由高到低順序?yàn)椋海ǎ?fù)號(hào)? ,** ,* 或? /?? ,+ 或 -
          ???????????????? 如:C = 3 ,D = 5 ,E = 2 , F = 1 則:
          ???????????????? COMPUT?? A,B = -(C + D)* 2 /? E ** 3 -? F = -3
          三。傳送語(yǔ)句 (MOVE)
          ??????? MOVE 語(yǔ)句用來(lái)實(shí)現(xiàn)內(nèi)存中數(shù)據(jù)的傳送(而不是內(nèi)存和外設(shè)之間的傳送)。
          ??????? MOVE語(yǔ)句的一般格式為:
          ?MOVE????????? 標(biāo)識(shí)符1??????? TO????????? 標(biāo)識(shí)符2 [,標(biāo)識(shí)符3]。。。
          ????????????????????? 常量1??
          MOVE語(yǔ)句的傳送規(guī)則:
          ?1,如果接收項(xiàng)和發(fā)送項(xiàng)在數(shù)據(jù)部中描述的類型和長(zhǎng)度相同,則按字節(jié)一一對(duì)應(yīng)傳送。
          ?2,如果接收項(xiàng)和發(fā)送項(xiàng)長(zhǎng)度不相同,而二者都是數(shù)值數(shù)據(jù)項(xiàng),則按小數(shù)點(diǎn)對(duì)齊處理。
          ?3,對(duì)字母或字符數(shù)據(jù)(非數(shù)值型數(shù)據(jù))的傳送,按左對(duì)齊處理。
          ?4,初等項(xiàng)和組合項(xiàng)之間可以相互傳送。
          ??????? 關(guān)于各類數(shù)據(jù)之間的傳送規(guī)則將在第五章中介紹。
          四。轉(zhuǎn)移語(yǔ)句(GO? TO)
          ??????? 當(dāng)需要使程序改變正常執(zhí)行的順序時(shí),可以使用無(wú)條件轉(zhuǎn)移語(yǔ)句 GO? TO 。其一般格式為:
          ??????? 格式1:?GO???????? TO???? 過(guò)程名
          ??????? 格式2:????? GO????????? TO??? 過(guò)程名1? [,過(guò)程名2]。。過(guò)程名n?? DEPENDING??? ON????? 標(biāo)識(shí)符
          ???????
          ??????? 注意:只能轉(zhuǎn)移到段或節(jié)的開(kāi)頭,不能轉(zhuǎn)移到段或節(jié)的當(dāng)中某一語(yǔ)句。段名或節(jié)名為過(guò)程名。
          五。條件語(yǔ)句(IF)
          ??????? 當(dāng)需要根據(jù)給出的某些條件是否滿足來(lái)決定應(yīng)執(zhí)行哪一部分語(yǔ)句時(shí),可以使用條件語(yǔ)句IF。
          ??????? 其一般格式為:
          ???????? ?IF???????? 條件???? 語(yǔ)句組1?????????????? ELSE?????? 語(yǔ)句組1?????????????????? [END-IF]
          ????? ????????????????????????? NEXT? SENTENCE??????? ????????????? NEXT? SENTENCE
          ??????????????????????

          ???????? COBOL關(guān)系運(yùn)算符: ?IS???????? GREATER???? THAN??? (>)
          ???IS???????? LESS????????????? THAN??? (<)???????????????????????????????????????????
          ???IS???????? EQUAL????????? TO????????? (=)
          ???NOT??? GREATER???? THAN??? (NOT >) (<=)
          ???NOT??? LESS????????????? THAN??? (NOT <) (>=)
          ???NOT??? EQUAL????????? TO???????? (NOT =)
          注意:句點(diǎn)在IF 語(yǔ)句中的特殊作用。
          ?如:IF??? A >? 0?
          ???????????????????????????????????????????? DISPLAY??????? A。??
          ???????? ADD????????? A????????? TO??? TOTAL。???????????????? ?
          ???????? DISPLAY???????? TOTAL。?????????????? ?
          ?與?? IF??? A? >? 0
          ?????????????? DISPLAY? A
          ??????????????? ADD???????? A???? TO??? TOTAL。
          ??????? DISPLAY??????? TOTAL。就不同。
          為避免出現(xiàn)問(wèn)題應(yīng)該使用顯式終止符(END-IF,END-PERFORM等)代替隱式終止符(句點(diǎn)“。”)
          六。停止語(yǔ)句(STOP)
          ??????? 其一般格式為:?????????? STOP????????? RUN
          ?????????? 常量
          ??????? STOP?? RUN? 執(zhí)行后,程序停止運(yùn)行,停止后不能再接著運(yùn)行,如需要,可重新運(yùn)行一次。
          ??????? STOP? 常量,表示程序暫時(shí)掛起不往下執(zhí)行,顯示出此常量。
          七。返回語(yǔ)句(GOBACK)
          ??????? 停止運(yùn)行,將控制權(quán)返回給上一級(jí)。可用本語(yǔ)句代替STOP語(yǔ)句。子程序必須用GOBACK而
          不能用STOP:因?yàn)镾TOP停止的是一個(gè)RUN UNIT(運(yùn)行單元)。

          CHAPTER 2 過(guò)程部初步-----最基本的過(guò)程部語(yǔ)句

          一。標(biāo)識(shí)部(IDENTIFICATION? DIVISION)
          ??????? IDENTIFICATION?????? DIVISION.
          ??????? PROGRAM-ID.???????????? 程序名。
          ??????? [AUTHOR。???????????????? 作者名。 ]
          ??????? [INSTALLATION。???? 計(jì)算機(jī)設(shè)置場(chǎng)所。 ]
          ??????? [DATE-WRITTEN。??? 源程序編寫(xiě)日期。 ]
          ??????? [DATE-COMPILED。 源程序編譯日期。 ]
          ??????? [SECURITY。????????????? 保密程度。]
          二。環(huán)境部(ENVIRONMENT? DIVISION)
          ??????? ENVIRONMENT????????? DIVISION.
          ??????? CONFIGRATION???????? SECTION。
          ??????? SOURCE-COMPUTER。???? 源計(jì)算機(jī)名。
          ??????? OBJECT-COMPUTER。????? 目標(biāo)計(jì)算機(jī)名。
          ??????? [SPECIAL-NAMES。?????????? 專用名描述項(xiàng)。 ]
          ??????? [INPUT-OUTPUT???????? SECTION。
          ??????? FILE-CONTROL。????? {文件控制描述體}。。。
          ??????? [I-O-CONTROL。?????? 輸入輸出控制描述體]]
          1。CONFIGRATION? SECTION。
          ????????????? 專有名段的一般格式:
          ?SPECIAL-NAMES。
          ??????? [DICIMAL-POINT????? IS?? COMMA。]
          ??????????????????????????????????? [CURRENCY?? SIGN IS?? 非數(shù)值常量。]????
          ??????? [專用名?????????????????????? IS??? 助憶名。]?????
          2。INPUT-OUTPUT?? SECTION。
          ????? INPUT-OUTPUT? SECTION 包括兩個(gè)段,即:FILE-CONTROL?? 和 I-O-CONTROL。FILE-CONTROL段是為文件分配外部文件。I-O-CONTROL段的作用是可以指定目標(biāo)程序運(yùn)行時(shí),幾個(gè)文件共用一個(gè)內(nèi)存區(qū),以省內(nèi)存。在此暫不作介紹。
          FILE-CONTROL段的主要功能是給程序中使用的文件命名。指出存放該文件的外部設(shè)備及其它有關(guān)文件控制的信息。對(duì)文件的描述是由SELECT子句實(shí)現(xiàn)的。FILE-CONTROL段的一般格式:
          ?INPUT-OUTPUT?????? SECTION。
          ?FILE-CONTROL。
          ?SELECT?????? 文件名??? ASSIGN??? TO?? 外部文件名
          ?[ORGANIZAION????????? IS?…?? ]?????? (SEQUENCIAL , INDEXED , RELATIVE)
          ?[ACCESS???? MODE????? IS?…?? ]?????? (SEQUENCIAL, RANDOM , DYNAMIC)
          ?[RECORD?? KEY?????????? IS ?…?? ]
          ?[FILE? STATUS??? IS?????????? …?? ]

          CHAPTER 4 數(shù)據(jù)部之一

          一。數(shù)據(jù)部概述。
          ? 1。 數(shù)據(jù)部的作用是定義數(shù)據(jù)項(xiàng)屬性,描述數(shù)據(jù)結(jié)構(gòu)。所有在過(guò)程部中出現(xiàn)的數(shù)據(jù)項(xiàng)都必須在數(shù)據(jù)部中對(duì)它們的屬性進(jìn)行說(shuō)明。包括數(shù)據(jù)項(xiàng)的類型,數(shù)據(jù)項(xiàng)間的關(guān)系,記錄與文件的關(guān)系,文件的屬性。
          2。 數(shù)據(jù)的層次和層號(hào):COBOL中把有從屬關(guān)系的數(shù)據(jù)用層次(level)關(guān)系來(lái)描述。數(shù)據(jù)的層次結(jié)構(gòu)是:記錄--》組合項(xiàng)--》初等項(xiàng)。如,在前面READ語(yǔ)句中定義的 IN-FILE 文件具有如下結(jié)構(gòu):
          ?01????? 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)。
          層次規(guī)定如下:
          ?(1)用來(lái)描述數(shù)據(jù)的層次結(jié)構(gòu)的層號(hào)從01到49。記錄的層次最高,定為01層號(hào)。
          ?(2)從屬項(xiàng)的層號(hào)比其下屬項(xiàng)的層號(hào)高。層號(hào)不必要求連續(xù)。
          ?(3)從屬于同一組合項(xiàng)但不互相從屬的數(shù)據(jù)項(xiàng)具有相同的層號(hào)。
          3。數(shù)據(jù)部的結(jié)構(gòu):? 數(shù)據(jù)部中通常用到的有以下幾個(gè)節(jié):
          ?(1)FILE SECTION:描述程序中用到的輸入輸出文件及其記錄中各數(shù)據(jù)項(xiàng)的屬性。
          ?(2)WORKING-STORAGE SECTION:描述程序中用到的中間數(shù)據(jù)項(xiàng)。
          ?(3)LINKAGE SECTION:描述與調(diào)用程序間發(fā)生數(shù)據(jù)傳遞的數(shù)據(jù)項(xiàng)。
          ?(4)REPORT SECTION:為了完成報(bào)表編制功能,此節(jié)用來(lái)規(guī)定欲輸出的報(bào)表的
          ????????? ‘體裁’,設(shè)計(jì)各報(bào)表欄的打印形式和方法等。
          二。文件節(jié)。
          ?1。文件節(jié)的作用:? 程序中每一個(gè)輸入或輸出文件都要在文件節(jié)中加以描述。內(nèi)容包括:文件名和文件屬性;文件中包括的記錄名字;每個(gè)記錄中數(shù)據(jù)的層次關(guān)系;記錄中各數(shù)據(jù)項(xiàng)的數(shù)據(jù)形式和占內(nèi)存的大小。
          2。文件描述:????????? 最簡(jiǎn)單的文件描述體的一般格式為:
          ??FD?文件名
          ??????????? ?LABLE????? RECORD??????? IS?????????? STANDARD
          ????????????????????? RECORDS????? ARE ?OMITTED
          ???DATA??????? RECORD??????? IS ?數(shù)據(jù)名
          ????????????????????? RECORDS????? ARE????????
          3。記錄描述:記錄描述體由01層號(hào)開(kāi)始,后跟記錄名。如果記錄本身就是一個(gè)初等項(xiàng),則在記錄名后描述記錄長(zhǎng)度;否則,數(shù)據(jù)名后跟句點(diǎn),下面定義記錄的數(shù)據(jù)結(jié)構(gòu)。如:
          ?DATA?DIVISION。
          ?FILE?SECTION。
          ?FD??? IN-FILE
          ????????? LABLE??? RECORD IS STANDARD。
          ????????? DATA????? RECORD IS IN-FILE-RECORD。
          ?01???? IN-FILE-RECORD???????? ?PIC???????? X(80)。
          ??DATA?DIVISION。
          ?FILE?SECTION。
          ?FD??? IN-FILE
          ????????? LABLE??? RECORD IS STANDARD。
          ????????? DATA????? RECORD IS IN-FILE-RECORD。
          ?01???? IN-FILE-RECORD???????? ?PIC???????? X(80)。
          或??? (?01???? IN-FILE-RECORD。
          ????????? 05???? DATE??PIC?? 9(8)。
          ????????? 05???? PROD-CODE?PIC?? 9(4)。
          ????????? 05???? PROD-PRICE?PIC?? 9(6)。???????????? )
          4。數(shù)據(jù)項(xiàng)描述: 在每一個(gè)初等項(xiàng)的名字后跟一個(gè)PIC子句。用它來(lái)描述數(shù)據(jù)的類型和長(zhǎng)度。PIC子句在下面詳細(xì)說(shuō)明。
          5。文件節(jié)的書(shū)寫(xiě)格式:?? FD從A區(qū)開(kāi)始書(shū)寫(xiě),01層號(hào)也從A區(qū)開(kāi)始,其它層號(hào)可以從A區(qū)也可以從B區(qū)開(kāi)始。為了看起來(lái)層次分明,最好從B區(qū)開(kāi)始。
          三。PIC 子句。PIC即PICTURE的縮寫(xiě)。PIC子句用來(lái)描述每一個(gè)初等項(xiàng)。它說(shuō)明:(1)數(shù)據(jù)項(xiàng)是什么類型。(2)數(shù)據(jù)項(xiàng)占多大內(nèi)存域。(3)是否需要按打印的要求準(zhǔn)備有關(guān)字符。PIC子句的主要作用在于描述一個(gè)初等項(xiàng)的一般特征和編輯要求。
          1。數(shù)值型數(shù)據(jù)的描述:
          ?????? ‘9’描述符:? 表示該位置上可以放入一個(gè)0 ~ 9 之間的數(shù)字。因此:
          ?01????????? A??????? PIC 999。?????????? 或
          ?01????????? A??????? PIC 9(3)。
          ?表示A可以存放000 ~ 999 之間的一個(gè)三位數(shù)。有幾個(gè)9表示有幾位數(shù)。
          ?注意:(1)在數(shù)值型數(shù)據(jù)項(xiàng)中只能放數(shù)字不能放空格。
          ???????????? (2)用‘9’描述符只能表示整數(shù),如輸入小數(shù)部分,則小數(shù)部分被舍棄。
          ???????????? (3)如送入一個(gè)負(fù)數(shù),則負(fù)號(hào)被舍棄。

          ‘V’描述符:? 指出在數(shù)值數(shù)據(jù)結(jié)構(gòu)中隱含的小數(shù)點(diǎn)的位置。小數(shù)點(diǎn)不占內(nèi)存單元。如:
          ?03???????? M???????? PIC?? 9(3)V9(2)。
          ?注意:(1)V在描述符的最后,則等于無(wú)小數(shù)點(diǎn)。
          ???????????? (2)一個(gè)數(shù)據(jù)的描述符中只能出現(xiàn)一個(gè)V。
          ???????????? (3)進(jìn)行數(shù)據(jù)傳送或運(yùn)算時(shí),按隱含的小數(shù)點(diǎn)位置對(duì)準(zhǔn)進(jìn)行傳送或運(yùn)算。
          ???????????? (4)V表示的小數(shù)點(diǎn)只在傳送或運(yùn)算時(shí)起作用,不能被顯示或打印出來(lái)。???

          ‘S’描述符:? 如果想在數(shù)據(jù)項(xiàng)中放入一個(gè)帶符號(hào)的數(shù),可以用‘S’描述符。如:
          ?03???????? M???????? PIC?? S9(3)V9(2)。
          ?注意:(1)S描述符必須是最左邊的一個(gè)描述符。
          ???????????? (2)在內(nèi)存中,S不占位數(shù),在傳送或運(yùn)算時(shí)起作用。
          2。字母型數(shù)據(jù)的描述:字母型數(shù)據(jù)項(xiàng)用A描述符,在這種類型的數(shù)據(jù)項(xiàng)中只允許存放字母或空格。
          3。字符型數(shù)據(jù)的描述:由任意的COBOL字符組成的數(shù)據(jù),稱為字符型數(shù)據(jù),它是非數(shù)值型的,不能用于計(jì)算。用X描述符來(lái)表示字符型數(shù)據(jù)。如:
          ?03???????? M??????? PIC?? X(5)。
          ?注意:(1)字符型數(shù)據(jù)可以用X描述符,也可以用9和A描述符來(lái)描述。如描述數(shù)據(jù)
          ????? ‘COB-74’可以用PIC? X(6),也可以用??? PIC?? A(3)X9(2)。
          ???????????? (2)字母型數(shù)據(jù)既可以用A描述,也可以用X。
          ???????????? (3)字符型數(shù)據(jù)中可以放數(shù)字。
          4。編輯型描述符:編輯型數(shù)據(jù)項(xiàng)只是作為輸出數(shù)據(jù)時(shí)增加或改變某些所需的符號(hào),起編輯作用,它不是作計(jì)算用的。下面分別介紹編輯數(shù)據(jù)項(xiàng)中用到的編輯描述符。
          ?(1)。插入小數(shù)點(diǎn)‘。’,用‘。’描述符。如:
          ?????????????? 77???????? T??????? PIC?? 99。99。
          ?? (2)。插入逗號(hào)‘,’作分位號(hào),用‘,’描述符。如:
          ?????????????? 02???????? A??????? PIC? 999,999。99。 (或PIC? 9(3),9(3)。9(2))
          ?(3)。插入空格,用‘B’描述符。如:
          ?????????????? 02???????? A??????? PIC?? B9(3)B。
          ?(4)。插入正負(fù)號(hào),用‘+’或‘-’描述符。如:
          ?????????????? 02???????? A1????? PIC?? +9(3)。(或 PIC?? 9(3)+)
          ?????????????? 02???????? A2????? PIC?? -9(3)。(或PIC? 9(3)-)
          ?????????????? 注意:描述符‘+’,一侓加符號(hào)。描述符‘-’只對(duì)負(fù)值加負(fù)號(hào)。
          ?(5)。插入‘$’ 。如:
          ?????????????? 02???????? A1?????? PIC?? $999。99。
          ?????????????? 02???????? A2?????? PIC? +$99999。
          ?????????????? 02???????? A3?????? PIC? -$999。9。
          ?(6)。浮動(dòng)插入正負(fù)號(hào)和‘$’
          ?????????????? 02???????? A1?????? PIC? $$$99.99.
          ?????????????? 02???????? A2?????? PIC? $$$$$.$$.??
          ?????????????? 02???????? A3?????? PIC? ++9.99.
          ?
          ?(7)。取消高位零,用‘Z’和‘*’描述符。在高位零的位置上代以空格或‘*’。如:
          ?????????????? 02???????? A1?????? PIC? Z(5)。99。
          ?????????????? 02???????? A2?????? PIC? *(5)。*(2)。??
          ?????????????? 02???????? A3?????? PIC? +ZZZ,ZZZ,ZZ。ZZ。
          ?????????????? 02???????? A4?????? PIC? -*,***,***。99。
          ?(8)。插入‘DB’和‘CR’字符。DB和CR只能用作固定插入,當(dāng)數(shù)值為負(fù)時(shí),在編輯型數(shù)?????????????? 據(jù)項(xiàng)中最后兩個(gè)字節(jié)中置DB或CR,數(shù)值為正時(shí),此兩字節(jié)留空格。如:
          ?????????????? 02???????? A1?????? PIC? $9(3)。99DB???????
          ?????????????????????????????????????????? 02???????? A2?????? PIC? $9(3)。99CR。
          5.常用數(shù)值型數(shù)據(jù)

          四。工作單元節(jié)(WORKING-STORAGE SECTION)

          ?1。工作單元節(jié)的作用:程序中用的數(shù)據(jù)項(xiàng)分為兩部分,一部分是屬于輸入或輸出文件的,另一部分是非輸入或輸出的數(shù)據(jù)。如一些中間變量或用作累計(jì)的數(shù)據(jù)項(xiàng)等。非輸入輸出的數(shù)據(jù)就應(yīng)在工作單元節(jié)中描述,還可以用工作單元節(jié)來(lái)賦初值。
          2。VALUE子句:用于給變量賦初值。如:
          ?02????? A??????? PIC?????? 9(3)???? VALUE?? 123。
          注意:?(1)只有對(duì)工作單元節(jié)中的數(shù)據(jù)項(xiàng)才能賦初值,不能對(duì)文件節(jié)中輸入輸出文件中的?????????? 數(shù)據(jù)項(xiàng)賦初值。
          ?(2)如果在組合項(xiàng)的描述體中使用VALUE,初值只能是表意常量或非數(shù)值型常量。?????????? 對(duì)組合項(xiàng)整體而言,一律按字符型數(shù)據(jù)項(xiàng)處理。
          ?(3)當(dāng)用一個(gè)帶符號(hào)的數(shù)值作初值時(shí),相應(yīng)的PIC子句中應(yīng)有‘S’描述符。
          ?(4)賦初值時(shí)應(yīng)該注意類型的一致性。
          ?(5)VALUE子句給出的值應(yīng)適合PIC子句的描述范圍,否則會(huì)出現(xiàn)截?cái)嗷虍a(chǎn)生錯(cuò)誤。

          CHAPTER 5 過(guò)程部之二

          一。MOVE 語(yǔ)句的較高技巧

          ?1。各種類型數(shù)據(jù)之間的傳送規(guī)則見(jiàn)下表:(Y:表示合法傳送。N:表示非法傳送。空白:表示某些時(shí)候是合法的。)
          ?

          接收項(xiàng)

          數(shù)值型

          數(shù)值型

          數(shù)值編輯型

          字母型

          字符型

          字符編輯型

          組合項(xiàng)

          發(fā)送項(xiàng)

          整數(shù)

          非整數(shù)






          數(shù)值型整數(shù)

          Y

          Y

          Y

          N

          Y

          Y

          Y

          數(shù)值型非整數(shù)

          Y

          Y

          Y

          N

          N

          N

          Y

          數(shù)值編輯型

          Y

          Y

          Y

          N

          Y

          Y

          Y

          字母型

          N

          N

          N

          Y

          Y

          Y

          Y

          字符型





          Y

          Y

          Y

          字符編輯型

          N

          N

          N

          N

          Y

          Y

          Y

          數(shù)值常量

          Y

          Y

          Y

          N

          N

          N

          Y

          非數(shù)值常量

          N

          N

          N

          Y

          Y

          Y

          Y

          ZERO

          Y

          Y

          Y

          N

          Y

          Y

          Y

          SPACE

          N

          N

          N

          Y

          Y

          Y

          Y

          組合項(xiàng)





          Y

          Y

          Y


          2。用CORRESPONDING子句的傳送 —— 對(duì)應(yīng)傳送(同名傳送)
          ?????? 對(duì)應(yīng)傳送的一般格式:
          ?MOVE???????? CORRESPONDING???????????? 標(biāo)識(shí)符1?????? TO??????? 標(biāo)識(shí)符2
          ????????????????????? CORR
          ?????? 說(shuō)明:(1)如果兩個(gè)組合項(xiàng)中包括的項(xiàng)不同,則只傳送同名的項(xiàng)。
          ?????????????????? (2)傳送的兩者間必須有成對(duì)的同名數(shù)據(jù)項(xiàng),而且這一對(duì)中必須至少有一個(gè)項(xiàng)是
          ??????????? 初等項(xiàng)。否則不能作為對(duì)應(yīng)項(xiàng)傳送。
          ?????????????????? (3)所謂同名,指的是它們有相同的全程受限,即全程同名。????????
          ?假如T1和T2的描述分別為:
          ?01???????? T1。??01???????? T2。
          ??????? 02? X。??????? 02??? X。
          ????????????? 03? X1。。。????????????? ??03???? X2。。。
          ????????????? 03? X3。。。??????????????????????????????????? 03???? X1。。。
          ??????? 02? Y1。??????? 02??? Y。??????
          ????????????? 03? A1。。。?????????????? ??03????? A1。。。
          ?則T1中的A1與T2中的A1就不是全程同名。


          4。除法語(yǔ)句中的余數(shù)語(yǔ)句(REMAINDER 子句):DIVIDE 語(yǔ)句只能求商不能求余數(shù)。如想求余數(shù),可用?????? REMAINDER 子句。
          ?如:? DIVIDE??????? A??????? INTO????? B??????????? GIVING?????? C???????? REMAINDER???????????? D
          ????? 注意:(1)商和余數(shù)的值不僅取決于除數(shù)和被除數(shù),還取決于數(shù)據(jù)部中對(duì)商和余數(shù)的描述。
          ????????????????? (2)如用ROUNDED子句,它只對(duì)商起作用,余數(shù)不作四舍五入處理,在計(jì)算余
          ?????????? 數(shù)時(shí),仍按四舍五入前的值為準(zhǔn)。
          ?? (3) 長(zhǎng)度溢出也只檢查商的值是否溢出,而不檢查余數(shù)。
          三。IF語(yǔ)句的較高技巧
          ?1。符號(hào)條件:
          ?數(shù)據(jù)名?????? IS? [NOT]????????? POSITIVE
          ?算術(shù)表達(dá)式?????????????? NEGATIVE
          ???????????????? ZERO
          2。類型條件:
          ?標(biāo)識(shí)符?IS??????? [NOT]??? NUMERIC
          ?????????? ALPHABETIC
          3。條件名條件:用來(lái)表示條件變量當(dāng)前值的名字叫條件名。條件名本身是一個(gè)條件,它有一個(gè)值(‘真’或‘假’),用它來(lái)檢查條件變量的值是否落在條件名所代表的值的范圍中,當(dāng)條件變量的值落在條件名所代表的值的范圍中,則此條件名所表示的條件為‘真’,否則為‘假’。
          ?條件名條件的一般格式:
          ?88?????????? 條件名??????? {? VALUE????? IS}??????? 常量1??????? [{THRU}????? 常量2]
          ???????????????? [常量3?????? [ [{THRU}????? 常量4]] 。。。]
          ?????????????? ?如:?02????? WS-FILE-STATUS?????? PIC????? 9(2)。
          ??????????? 88???????? WS-FILE-NORMAL????????? VALUE? 0,93。??????
          ??????????? 88???????? WS-FILE-EOF?????????? VALUE? 10。

          CHAPTER 6 過(guò)程部之三——執(zhí)行語(yǔ)句(PERFORM)

          一。執(zhí)行語(yǔ)句的作用:在一個(gè)COBOL程序中,過(guò)程部中往往有一部分語(yǔ)句需要執(zhí)行多次。為了讓重復(fù)的部分在程序中只出現(xiàn)一次,可以把重復(fù)的部分單獨(dú)寫(xiě)成一段或一節(jié)(有一個(gè)段名或節(jié)名),每次執(zhí)行這部分語(yǔ)句時(shí)轉(zhuǎn)去該段,執(zhí)行完轉(zhuǎn)回來(lái)。這時(shí)候就需要用到執(zhí)行語(yǔ)句(PERFORM )。

          二。執(zhí)行語(yǔ)句的一般形式:
          ??????????? PERFORM?????????? 過(guò)程名1??????? [THRU]??????????????? 過(guò)程名2

          三。使用PERFORM語(yǔ)句實(shí)現(xiàn)循環(huán):
          ? 1。?PERFORM?????????? 過(guò)程名1??????? [{THRU}??????????????? 過(guò)程名2?? ]??????? 整數(shù)???????? TIMES
          ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? 標(biāo)識(shí)符
          ???????
          ?2。?PERFORM?????????? 過(guò)程名1??????? [{THRU}??????????????? 過(guò)程名2?? ]??????? UNTIL???? 條件

          ?3。?PERFORM?????????? 過(guò)程名1??????? [{THRU}??????????????? 過(guò)程名2?? ]???????
          ??VARYING??? 標(biāo)識(shí)符1??????? FROM?? 常數(shù)1??????? BY?????? 常數(shù)2???????????? UNTIL?? 條件
          ??????????????????????????????????????????????????????????????????? ? 標(biāo)識(shí)符2??????????????????????????? 標(biāo)識(shí)符3

          四。執(zhí)行語(yǔ)句的多重循環(huán)形式:COBOL 允許三重循環(huán),其一般格式可寫(xiě)為:
          ?PERFORM????????? 過(guò)程名1??????? [{THRU}??????????????? 過(guò)程名2?? ]???????
          ??[VARYING?? 參數(shù)1??????? FROM?? 初值1??????? BY?????? 步長(zhǎng)1???????????? UNTIL?? 條件1 ]
          ??[AFTER???????? 參數(shù)2??????? FROM?? 初值2??????? BY?????? 步長(zhǎng)2???????????? UNTIL?? 條件2 ]
          ??[AFTER???????? 參數(shù)3??????? FROM?? 初值3??????? BY?????? 步長(zhǎng)3???????????? UNTIL?? 條件3 ]

          五。出口語(yǔ)句(EXIT):EXIT語(yǔ)句提供了一組過(guò)程的公共出口,即指出了被調(diào)用過(guò)程的邏輯終點(diǎn)。

          CHAPTER 7 各部之間的關(guān)系及程序舉例

          一.各部之間的關(guān)系:

          IDENTIFICATION?? DIVISION.
          PROGRAM-ID.??????? PROGRAM1.
          給程序加上標(biāo)識(shí)以便識(shí)別.

          ENVIRONMENT? DIVISION.
          CONFIGRATION?? SECTION.
          INPUT-OUTPUT??? SECTION.
          FILE-CONTROL.
          ??????? SELECT??? PRODFILE? ASSIGN? TO FILE1.
          描述程序中用到的文件與外部文件的關(guān)系及控制信息
          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).
          描述程序中用到的所有文件及其記錄中各數(shù)據(jù)項(xiàng)的屬性及程序中用到的所有中間數(shù)據(jù)項(xiàng)的描述.

          PROCEDURE? DIVISION.
          程序的核心部分,他決定計(jì)算機(jī)進(jìn)行什么操作.如,文件的讀寫(xiě)及其他處理


          二.程序舉例:
          例1:
          讀入一組產(chǎn)品銷售記錄,每讀入一個(gè)記錄,計(jì)算出銷售總額(數(shù)量X單價(jià)).然后打印出該產(chǎn)品的全部數(shù)據(jù).數(shù)據(jù)形式如下:

          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
          程序如下:
          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
          ????????? .

          輸出的數(shù)據(jù)形式如下:
          1992 12 31???? 000001???? AAAA????? 100????? $5000????? $500000

          1993 12 31???? 100001???? BBBB?????? 200????? $6000????? $1200000


          例2:
          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
          ?
          Process specifications
          ??????? This program updates an inventory master file (INVMAST) based on the data in a sequential
          file of valid inventory transaction records (VALTRAN). The inventory master file is indexed? by item number and updated randomly.

          ??????? 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.

          程序如下:
          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????????????? = ‘00’
          ????????????????????? 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?????? =?? ‘00’
          ???????????????????? 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.

          CHAPTER 8 聯(lián)機(jī)及批量程序的一些差異

          批量聯(lián)機(jī)
          對(duì)大量數(shù)據(jù)的集中處理對(duì)特定的少量數(shù)據(jù)操作
          一般在非營(yíng)業(yè)時(shí)間運(yùn)行一般在營(yíng)業(yè)時(shí)間運(yùn)行
          對(duì)效率要求較高對(duì)實(shí)時(shí)性要求較高
          在操作系統(tǒng)中通過(guò)后臺(tái)作業(yè)流來(lái)調(diào)度運(yùn)行在CICS平臺(tái)上通過(guò)CICS激活運(yùn)行
          資源由作業(yè)流和程序管理資源由CICS集中管理,程序?qū)Y源使用通過(guò)調(diào)用CICS提供的語(yǔ)句
          一般會(huì)使用INPUT-OUTPUT SECTION.
          FILE-CONTROL. FILE SECTION.
          不會(huì)使用INPUT-OUTPUT SECTION.
          FILE-CONTROL. FILE SECTION.
          出錯(cuò)處理通過(guò)檢測(cè)文件狀態(tài)字出錯(cuò)處理通過(guò)檢測(cè)CICS返回狀態(tài)字

          CHAPTER 9 COBOL-II 編程規(guī)范

          1. 使用結(jié)構(gòu)化的編程方法 ,開(kāi)發(fā)一致的、可理解的和易于維護(hù)的COBOL程序 .結(jié)構(gòu)化編程應(yīng)遵循“KISS”法則,即:“Keep It Simple & Stupid” for EASY TO READ ,EASY TO DEBUG ,EASY TO MAINTAIN.
          2.只用順序,循環(huán),選擇3種程序結(jié)構(gòu)及組合去表示程序邏輯
          3.每個(gè)控制結(jié)構(gòu)只有一個(gè)入口和一個(gè)出口(結(jié)構(gòu)可以是一個(gè)模塊,段,節(jié),子程序)。
          4.不要爲(wèi)了時(shí)空效率而犧牲清晰性。
          5.程序的清晰性首先在於邏輯的清晰,然後才是格式的清晰。
          6.清晰的格式有助於清晰的思維。
          7.確信所有變量在被使用時(shí)都被正確地置初值。
          8.避免濫用語(yǔ)言特色,應(yīng)使程序簡(jiǎn)潔易讀。
          9.使用有意義的、簡(jiǎn)化的變量名及詞語(yǔ)標(biāo)號(hào)。
          10.盡量使用標(biāo)準(zhǔn)的公用子程序執(zhí)行既定的程序功能。
          11.避免不必要的複雜的算術(shù)和邏輯表達(dá)式。
          12.避免重復(fù)的控制序列以及不必要的轉(zhuǎn)移。
          13.不要用注釋去精確地重復(fù)程序代碼,要使得注釋有價(jià)值。
          14.嚴(yán)格控制非限制性轉(zhuǎn)移語(yǔ)句“GOTO”的使用,除非下面兩種情況:當(dāng)不使用時(shí)將會(huì)模糊而不是澄清功能;
          ?? 在同一程序單元內(nèi)正向轉(zhuǎn)移。

          出處...
          posted on 2007-07-11 11:25 @yeafee 閱讀(1315) 評(píng)論(0)  編輯  收藏 所屬分類: As400

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 澄城县| 宁都县| 伊通| 本溪市| 扶沟县| 三门县| 曲松县| 海丰县| 尼木县| 抚宁县| 阳泉市| 綦江县| 巴中市| 修水县| 长岛县| 镶黄旗| 岗巴县| 阿拉善左旗| 天祝| 大英县| 东阳市| 遂溪县| 洪洞县| 延川县| 台东县| 屏南县| 田阳县| 新竹市| 化德县| 达尔| 革吉县| 曲水县| 萨迦县| 遂溪县| 汨罗市| 无棣县| 深州市| 历史| 商南县| 绵阳市| 嘉禾县|