<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    superwei

    導(dǎo)航

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    統(tǒng)計

    常用鏈接

    留言簿(4)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    COBOL 教程

    COBOL 教程 - -

    TagCOBOL    教程                                          

    目錄

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

    CHAPTER 1 COBOL 概述

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

    一。COBOL 語言的特點
            最適于數(shù)據(jù)處理領(lǐng)域:算數(shù)計算量少而邏輯處理量多,輸入輸出量大,數(shù)據(jù)間存在著一定的邏輯  關(guān)系,大量的分類排序;COBOL比較接近英語,容易懂;通用性強,易移植,COBOL結(jié)構(gòu)嚴謹,層次分明。
     
    二。COBOL的組成部分:
    1。標(biāo)識部(IDENTIFICATION DIVISION):用于標(biāo)識程序名。
    2。環(huán)境部(ENVIRONMENT DIVISION):用于說明程序運行的環(huán)境。
    3。數(shù)據(jù)部(DATA  DIVISION):用于說明程序中涉及的所有數(shù)據(jù)。
    4。過程部(PROCEDURE DIVISION):是程序的核心部分,它決定計算機應(yīng)進行什么操作。
     
    三。最簡單的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 列為 “標(biāo)號區(qū)”。        第7列為“續(xù)行標(biāo)志區(qū)”
           第8至此11列,稱為“A區(qū)”。程序中有些內(nèi)容如部頭,節(jié)頭,段頭,層號 01,層號 77 及文件
    描述符FD等應(yīng)從A區(qū)開始寫。
           第12至此72列,稱為“B區(qū)”。寫程序中的正文部分。如過程部中的句子只能從B區(qū)開始寫。
           第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ù)的特點
           層次的概念:數(shù)據(jù)間存在的從屬關(guān)系。
           文件的概念:多個記錄可以組成一個文件。
     
           記錄的概念:具有一定層次關(guān)系的一組數(shù)據(jù)項的最大集合,它是內(nèi)存中具有獨立邏輯含義的最大存取項,具有最高層次。

    CHAPTER 2 過程部初步-----最基本的過程部語句

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

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

         假設(shè)   IN-FILE  文件每一記錄中包含的內(nèi)容為:產(chǎn)品代碼,產(chǎn)品數(shù)量,產(chǎn)品單價,生產(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
         如果我們希望讀入該記錄并對各數(shù)據(jù)項進行處理,則需要在  ‘輸入紀錄區(qū)’中劃分出各數(shù)據(jù)項,以便存放相應(yīng)的數(shù)據(jù)。定義輸入紀錄區(qū)以及劃分記錄區(qū)中各數(shù)據(jù)項的工作是由數(shù)據(jù)部來完成的。下面我們簡單介紹數(shù)據(jù)部定義記錄區(qū)方法,針對上面輸入數(shù)據(jù)的特點,我們可以在數(shù)據(jù)部中對記錄區(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)日期為一組合項)
                        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 :所有的磁盤文件和磁帶文件都必須寫明此句。
    01 層定義‘輸入紀錄區(qū)’ 的名字為IN-RECORD,由于 01層屬于FD描述體,因此也就指定了 IN-RECORD 和 IN-FILE 的關(guān)系。亦即從IN-FILE 讀入的數(shù)據(jù)存放在 IN-RECORD記錄區(qū)中。
    這樣,在執(zhí)行一次READ語句后,文件中一個記錄的數(shù)據(jù)便輸入到內(nèi)存記錄區(qū),按排列順序分別送到記錄區(qū)中各數(shù)據(jù)項中。注意文件的各記錄中的數(shù)據(jù)是不分數(shù)據(jù)項的,只是按一定的順序把數(shù)據(jù)存放在各字節(jié)中。所以數(shù)據(jù)部對記錄區(qū)中各數(shù)據(jù)項的描述應(yīng)該與文件的記錄中各數(shù)據(jù)排列次序和長度相一致。

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

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


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


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

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


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

    二。算數(shù)運算語句

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

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

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

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

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

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

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

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

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

    CHAPTER 2 過程部初步-----最基本的過程部語句

    一。標(biāo)識部(IDENTIFICATION  DIVISION)
            IDENTIFICATION       DIVISION.
            PROGRAM-ID.             程序名。
            [AUTHOR。                 作者名。 ]
            [INSTALLATION。     計算機設(shè)置場所。 ]
            [DATE-WRITTEN。    源程序編寫日期。 ]
            [DATE-COMPILED。 源程序編譯日期。 ]
            [SECURITY。              保密程度。]
    二。環(huán)境部(ENVIRONMENT  DIVISION)
            ENVIRONMENT          DIVISION.
            CONFIGRATION         SECTION。
            SOURCE-COMPUTER。     源計算機名。
            OBJECT-COMPUTER。      目標(biāo)計算機名。
            [SPECIAL-NAMES。           專用名描述項。 ]
            [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 包括兩個段,即:FILE-CONTROL   和 I-O-CONTROL。FILE-CONTROL段是為文件分配外部文件。I-O-CONTROL段的作用是可以指定目標(biāo)程序運行時,幾個文件共用一個內(nèi)存區(qū),以省內(nèi)存。在此暫不作介紹。
    FILE-CONTROL段的主要功能是給程序中使用的文件命名。指出存放該文件的外部設(shè)備及其它有關(guān)文件控制的信息。對文件的描述是由SELECT子句實現(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ù)項屬性,描述數(shù)據(jù)結(jié)構(gòu)。所有在過程部中出現(xiàn)的數(shù)據(jù)項都必須在數(shù)據(jù)部中對它們的屬性進行說明。包括數(shù)據(jù)項的類型,數(shù)據(jù)項間的關(guān)系,記錄與文件的關(guān)系,文件的屬性。
    2。 數(shù)據(jù)的層次和層號:COBOL中把有從屬關(guān)系的數(shù)據(jù)用層次(level)關(guān)系來描述。數(shù)據(jù)的層次結(jié)構(gòu)是:記錄--》組合項--》初等項。如,在前面READ語句中定義的 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)用來描述數(shù)據(jù)的層次結(jié)構(gòu)的層號從01到49。記錄的層次最高,定為01層號。
     (2)從屬項的層號比其下屬項的層號高。層號不必要求連續(xù)。
     (3)從屬于同一組合項但不互相從屬的數(shù)據(jù)項具有相同的層號。
    3。數(shù)據(jù)部的結(jié)構(gòu):  數(shù)據(jù)部中通常用到的有以下幾個節(jié):
     (1)FILE SECTION:描述程序中用到的輸入輸出文件及其記錄中各數(shù)據(jù)項的屬性。
     (2)WORKING-STORAGE SECTION:描述程序中用到的中間數(shù)據(jù)項。
     (3)LINKAGE SECTION:描述與調(diào)用程序間發(fā)生數(shù)據(jù)傳遞的數(shù)據(jù)項。
     (4)REPORT SECTION:為了完成報表編制功能,此節(jié)用來規(guī)定欲輸出的報表的
              ‘體裁’,設(shè)計各報表欄的打印形式和方法等。
    二。文件節(jié)。
     1。文件節(jié)的作用:  程序中每一個輸入或輸出文件都要在文件節(jié)中加以描述。內(nèi)容包括:文件名和文件屬性;文件中包括的記錄名字;每個記錄中數(shù)據(jù)的層次關(guān)系;記錄中各數(shù)據(jù)項的數(shù)據(jù)形式和占內(nèi)存的大小。
    2。文件描述:          最簡單的文件描述體的一般格式為:
      FD 文件名
                 LABLE      RECORD        IS           STANDARD
                          RECORDS      ARE  OMITTED
       DATA        RECORD        IS  數(shù)據(jù)名
                          RECORDS      ARE        
    3。記錄描述:記錄描述體由01層號開始,后跟記錄名。如果記錄本身就是一個初等項,則在記錄名后描述記錄長度;否則,數(shù)據(jù)名后跟句點,下面定義記錄的數(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ù)項描述: 在每一個初等項的名字后跟一個PIC子句。用它來描述數(shù)據(jù)的類型和長度。PIC子句在下面詳細說明。
    5。文件節(jié)的書寫格式:   FD從A區(qū)開始書寫,01層號也從A區(qū)開始,其它層號可以從A區(qū)也可以從B區(qū)開始。為了看起來層次分明,最好從B區(qū)開始。
    三。PIC 子句。PIC即PICTURE的縮寫。PIC子句用來描述每一個初等項。它說明:(1)數(shù)據(jù)項是什么類型。(2)數(shù)據(jù)項占多大內(nèi)存域。(3)是否需要按打印的要求準備有關(guān)字符。PIC子句的主要作用在于描述一個初等項的一般特征和編輯要求。
    1。數(shù)值型數(shù)據(jù)的描述:
           ‘9’描述符:  表示該位置上可以放入一個0 ~ 9 之間的數(shù)字。因此:
     01          A        PIC 999。           或
     01          A        PIC 9(3)。
     表示A可以存放000 ~ 999 之間的一個三位數(shù)。有幾個9表示有幾位數(shù)。
     注意:(1)在數(shù)值型數(shù)據(jù)項中只能放數(shù)字不能放空格。
                 (2)用‘9’描述符只能表示整數(shù),如輸入小數(shù)部分,則小數(shù)部分被舍棄。
                 (3)如送入一個負數(shù),則負號被舍棄。

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

    ‘S’描述符:  如果想在數(shù)據(jù)項中放入一個帶符號的數(shù),可以用‘S’描述符。如:
     03         M         PIC   S9(3)V9(2)。
     注意:(1)S描述符必須是最左邊的一個描述符。
                 (2)在內(nèi)存中,S不占位數(shù),在傳送或運算時起作用。
    2。字母型數(shù)據(jù)的描述:字母型數(shù)據(jù)項用A描述符,在這種類型的數(shù)據(jù)項中只允許存放字母或空格。
    3。字符型數(shù)據(jù)的描述:由任意的COBOL字符組成的數(shù)據(jù),稱為字符型數(shù)據(jù),它是非數(shù)值型的,不能用于計算。用X描述符來表示字符型數(shù)據(jù)。如:
     03         M        PIC   X(5)。
     注意:(1)字符型數(shù)據(jù)可以用X描述符,也可以用9和A描述符來描述。如描述數(shù)據(jù)
          ‘COB-74’可以用PIC  X(6),也可以用    PIC   A(3)X9(2)。
                 (2)字母型數(shù)據(jù)既可以用A描述,也可以用X。
                 (3)字符型數(shù)據(jù)中可以放數(shù)字。
    4。編輯型描述符:編輯型數(shù)據(jù)項只是作為輸出數(shù)據(jù)時增加或改變某些所需的符號,起編輯作用,它不是作計算用的。下面分別介紹編輯數(shù)據(jù)項中用到的編輯描述符。
     (1)。插入小數(shù)點‘。’,用‘。’描述符。如:
                   77         T        PIC   99。99。
       (2)。插入逗號‘,’作分位號,用‘,’描述符。如:
                   02         A        PIC  999,999。99。 (或PIC  9(3),9(3)。9(2))
     (3)。插入空格,用‘B’描述符。如:
                   02         A        PIC   B9(3)B。
     (4)。插入正負號,用‘+’或‘-’描述符。如:
                   02         A1      PIC   +9(3)。(或 PIC   9(3)+)
                   02         A2      PIC   -9(3)。(或PIC  9(3)-)
                   注意:描述符‘+’,一侓加符號。描述符‘-’只對負值加負號。
     (5)。插入‘$’ 。如:
                   02         A1       PIC   $999。99。
                   02         A2       PIC  +$99999。
                   02         A3       PIC  -$999。9。
     (6)。浮動插入正負號和‘$’
                   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ù)值為負時,在編輯型數(shù)               據(jù)項中最后兩個字節(jié)中置DB或CR,數(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ù)項分為兩部分,一部分是屬于輸入或輸出文件的,另一部分是非輸入或輸出的數(shù)據(jù)。如一些中間變量或用作累計的數(shù)據(jù)項等。非輸入輸出的數(shù)據(jù)就應(yīng)在工作單元節(jié)中描述,還可以用工作單元節(jié)來賦初值。
    2。VALUE子句:用于給變量賦初值。如:
     02      A        PIC       9(3)     VALUE   123。
    注意: (1)只有對工作單元節(jié)中的數(shù)據(jù)項才能賦初值,不能對文件節(jié)中輸入輸出文件中的           數(shù)據(jù)項賦初值。
     (2)如果在組合項的描述體中使用VALUE,初值只能是表意常量或非數(shù)值型常量。           對組合項整體而言,一律按字符型數(shù)據(jù)項處理。
     (3)當(dāng)用一個帶符號的數(shù)值作初值時,相應(yīng)的PIC子句中應(yīng)有‘S’描述符。
     (4)賦初值時應(yīng)該注意類型的一致性。
     (5)VALUE子句給出的值應(yīng)適合PIC子句的描述范圍,否則會出現(xiàn)截斷或產(chǎn)生錯誤。

    CHAPTER 5 過程部之二

    一。MOVE 語句的較高技巧

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

    接收項

    數(shù)值型

    數(shù)值型

    數(shù)值編輯型

    字母型

    字符型

    字符編輯型

    組合項

    發(fā)送項

    整數(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

    組合項

    Y

    Y

    Y


    2。用CORRESPONDING子句的傳送 —— 對應(yīng)傳送(同名傳送)
           對應(yīng)傳送的一般格式:
     MOVE         CORRESPONDING             標(biāo)識符1       TO        標(biāo)識符2
                          CORR
           說明:(1)如果兩個組合項中包括的項不同,則只傳送同名的項。
                       (2)傳送的兩者間必須有成對的同名數(shù)據(jù)項,而且這一對中必須至少有一個項是
                初等項。否則不能作為對應(yī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。除法語句中的余數(shù)語句(REMAINDER 子句):DIVIDE 語句只能求商不能求余數(shù)。如想求余數(shù),可用       REMAINDER 子句。
     如:  DIVIDE        A        INTO      B            GIVING       C         REMAINDER             D
          注意:(1)商和余數(shù)的值不僅取決于除數(shù)和被除數(shù),還取決于數(shù)據(jù)部中對商和余數(shù)的描述。
                      (2)如用ROUNDED子句,它只對商起作用,余數(shù)不作四舍五入處理,在計算余
               數(shù)時,仍按四舍五入前的值為準。
       (3) 長度溢出也只檢查商的值是否溢出,而不檢查余數(shù)。
    三。IF語句的較高技巧
     1。符號條件:
     數(shù)據(jù)名       IS  [NOT]          POSITIVE
     算術(shù)表達式               NEGATIVE
                     ZERO
    2。類型條件:
     標(biāo)識符 IS        [NOT]    NUMERIC
               ALPHABETIC
    3。條件名條件:用來表示條件變量當(dāng)前值的名字叫條件名。條件名本身是一個條件,它有一個值(‘真’或‘假’),用它來檢查條件變量的值是否落在條件名所代表的值的范圍中,當(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 過程部之三——執(zhí)行語句(PERFORM)

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

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

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

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

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

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

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

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

    IDENTIFICATION   DIVISION.
    PROGRAM-ID.        PROGRAM1.
    給程序加上標(biāo)識以便識別.
    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ù)項的屬性及程序中用到的所有中間數(shù)據(jù)項的描述.
    PROCEDURE  DIVISION. 程序的核心部分,他決定計算機進行什么操作.如,文件的讀寫及其他處理


    二.程序舉例:
    例1:
    讀入一組產(chǎn)品銷售記錄,每讀入一個記錄,計算出銷售總額(數(shù)量X單價).然后打印出該產(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)機及批量程序的一些差異

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

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

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

    posted on 2005-11-01 09:07 小辭猬 閱讀(8060) 評論(6)  編輯  收藏 所屬分類: COBOL

    評論

    # re: COBOL 教程 2006-05-18 15:50 游客

    這個東西怎么學(xué)啊!!
    好難啊!!
      回復(fù)  更多評論   

    # re: COBOL 教程 2006-05-18 15:51 游客

    學(xué)好了是不是很有用啊  回復(fù)  更多評論   

    # re: COBOL 教程 2006-05-18 17:42 小辭猬

    入門不難,但是要學(xué)精就比較難,但是一旦修煉成功,那你的口袋也就鼓了  回復(fù)  更多評論   

    # re: COBOL 教程 2006-11-03 15:42 gpp

    thanks a lot  回復(fù)  更多評論   

    # 請問哪里可以下載cobol85或者別開發(fā)工具? 2006-12-01 18:03 qiuyu

    您好!
    小弟想學(xué)習(xí)cobol,現(xiàn)在還沒開始呢。特向您請教。
    哪里可以下載cobol85或者別開發(fā)工具?
    如果可以的話,有勞您發(fā)到我的郵箱:dreamjason@126.com.謝謝先!!
    ^_^^_^  回復(fù)  更多評論   

    # re: COBOL 教程 2006-12-06 18:15 小辭猬[匿名]

    實在是對不起,我手上沒有,不過,你可以上網(wǎng)找找看!  回復(fù)  更多評論   


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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 日产久久强奸免费的看| 亚洲va中文字幕无码久久不卡| 免费三级毛片电影片| 日本免费在线中文字幕| a级毛片高清免费视频| 两个人看的www免费视频| 韩国免费a级作爱片无码| 四虎精品成人免费视频| 免费无码国产在线观国内自拍中文字幕 | 真人做人试看60分钟免费视频 | 亚洲AV永久无码精品一福利 | 亚洲色欲www综合网| 亚洲成人免费网址| 亚洲av片不卡无码久久| 日韩亚洲不卡在线视频中文字幕在线观看| 久久精品国产亚洲av麻豆图片| 国产亚洲精品成人AA片| 亚洲国产午夜精品理论片在线播放| 亚洲hairy多毛pics大全| 看一级毛片免费观看视频| 一级毛片试看60分钟免费播放| 国产精品免费大片一区二区| 久久精品成人免费看| 1000部拍拍拍18勿入免费视频软件 | 久久免费区一区二区三波多野| 日韩人妻一区二区三区免费| 在线精品一卡乱码免费| 午夜影视在线免费观看| 亚洲Aⅴ无码一区二区二三区软件 亚洲AⅤ视频一区二区三区 | 羞羞的视频在线免费观看| 亚洲第一视频在线观看免费| 国产精品免费观看调教网| 91香蕉成人免费网站| 波多野结衣视频在线免费观看 | 日韩免费视频网站| 亚洲免费一区二区| 亚洲AV无码久久精品蜜桃| 亚洲日韩国产精品乱-久| 免费人成在线观看播放a| A级毛片高清免费视频在线播放| 在线观看成人免费视频不卡|