热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

CHAPTER7各部之间的关系及程序举例

一.各部之间的关系:IDENTIFICATIONDIVISION.PROGRAM-ID.PROGRAM1
一.各部之间的关系:
IDENTIFICATION   DIVISION.
PROGRAM-ID.        PROGRAM1.
给程序加上标识以便识别.
ENVIRONMENT  DIVISION.
CONFIGRATION   SECTION.
INPUT-OUTPUT    SECTION.
FILE-CONTROL.
        SELECT    PRODFILE  ASSIGN  TO FILE1.
描述程序中用到的文件与外部文件的关系及控制信息
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).
描述程序中用到的所有文件及其记录中各数据项的属性及程序中用到的所有中间数据项的描述.
PROCEDURE  DIVISION. 程序的核心部分,他决定计算机进行什么操作.如,文件的读写及其他处理


二.程序举例:
例1:
读入一组产品销售记录,每读入一个记录,计算出销售总额(数量X单价).然后打印出该产品的全部数据.数据形式如下:

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
          .

输出的数据形式如下:
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.
     


推荐阅读
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • vue使用
    关键词: ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • IhaveconfiguredanactionforaremotenotificationwhenitarrivestomyiOsapp.Iwanttwodiff ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • IB 物理真题解析:比潜热、理想气体的应用
    本文是对2017年IB物理试卷paper 2中一道涉及比潜热、理想气体和功率的大题进行解析。题目涉及液氧蒸发成氧气的过程,讲解了液氧和氧气分子的结构以及蒸发后分子之间的作用力变化。同时,文章也给出了解题技巧,建议根据得分点的数量来合理分配答题时间。最后,文章提供了答案解析,标注了每个得分点的位置。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
author-avatar
孟倩-951127
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有