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

本文介绍了两个COBOL程序设计实例,第一个实例演示了如何读取产品销售记录并计算销售总额,第二个实例展示了如何更新库存文件,包括读取交易记录、查找匹配的主记录进行更新,以及处理未找到主记录的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.各部之间的关系: 


二.程序举例: 
例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  fileInput
INVMASTInventory  master  fileUpdate
ERRTRANUnmatched inventory transaction fileOutput
  
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. 

内容概要:本文介绍了奕斯伟科技集团基于RISC-V架构开发的EAM2011芯片及其应用研究。EAM2011是一款高性能实时控制芯片,支持160MHz主频和AI算法,符合汽车电子AEC-Q100 Grade 2和ASIL-B安全标准。文章详细描述了芯片的关键特性、配套软件开发套件(SDK)和集成开发环境(IDE),以及基于该芯片的ESWINEBP3901开发板的硬件资源和接口配置。文中提供了详细的代码示例,涵盖时钟配置、GPIO控制、ADC采样、CAN通信、PWM输出及RTOS任务创建等功能实现。此外,还介绍了硬件申领流程、技术资料获取渠道及开发建议,帮助开发者高效启动基于EAM2011芯片的开发工作。 适合人群:具备嵌入式系统开发经验的研发人员,特别是对RISC-V架构感兴趣的工程师和技术爱好者。 使用场景及目标:①了解EAM2011芯片的特性和应用场景,如智能汽车、智能家居和工业控制;②掌握基于EAM2011芯片的开发板和芯片的硬件资源和接口配置;③学习如何实现基本的外设驱动,如GPIO、ADC、CAN、PWM等;④通过RTOS任务创建示例,理解多任务处理和实时系统的实现。 其他说明:开发者可以根据实际需求扩展这些基础功能。建议优先掌握《EAM2011参考手册》中的关键外设寄存器配置方法,这对底层驱动开发至关重要。同时,注意硬件申领的时效性和替代方案,确保开发工作的顺利进行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值