2013-02-28 88 views
1

我正试图完成一个我已经开始的程序,但对于我需要做什么以及如何做最后一步感到困惑。说明如下:程序结束时的COBOL报告

在报告结束时: A.打印处理的人员记录数。 B.对部门表进行不成功搜索的记录数。 C.对标题表进行不成功搜索的记录数。

除了最后一步之外,我已经完成了所有的程序。有人能帮我完成这个计划吗?

enter code here  ENVIRONMENT DIVISION. 
    INPUT-OUTPUT SECTION. 
    FILE-CONTROL. 
     SELECT PERSONNEL-FILE 
      ASSIGN TO 'CH12PPPF.DAT' 
      ORGANIZATION IS LINE SEQUENTIAL. 
     SELECT DEPT-TABLE-FILE 
      ASSIGN TO 'CH12PPDT.DAT' 
      ORGANIZATION IS LINE SEQUENTIAL. 
     SELECT TITLE-TABLE-FILE 
      ASSIGN TO 'CH12PPTT.DAT' 
      ORGANIZATION IS LINE SEQUENTIAL. 
     SELECT PRINT-FILE 
      ASSIGN TO 'THORNTONCA4.RPT' 
      ORGANIZATION IS LINE SEQUENTIAL. 
    DATA DIVISION. 
    FILE SECTION. 
    FD PERSONNEL-FILE. 
    01 PERSONNEL-REC. 
     05 SSNO-IN    PIC 9(9). 
     05 NAME-IN    PIC X(20). 
     05 SALARY-IN   PIC 9(6). 
     05 CAMPUS-CODE-IN  PIC 9. 
     05 DEPT-CODE-IN  PIC 99. 
     05 TITLE-CODE-IN  PIC 999. 
    FD DEPT-TABLE-FILE. 
    01 DEPT-REC. 
     05 T-DEPT-NO   PIC 99. 
     05 T-DEPT-NAME   PIC X(10). 
    FD TITLE-TABLE-FILE. 
    01 TITLE-REC. 
     05 T-TITLE-CODE  PIC 999. 
     05 T-TITLE-NAME  PIC X(10). 
    FD PRINT-FILE. 
    01 PRINT-REC    PIC X(80). 
    WORKING-STORAGE SECTION. 
    01 STORED-AREAS. 
     05 MORE-RECS   PIC X(3)  VALUE 'YES'. 
     05 WS-DATE. 
      10 WS-YEAR      PIC 9999. 
      10 WS-MONTH     PIC 99. 
      10 WS-DAY      PIC 99. 
     05 WS-PAGE-CT      PIC 99 
       VALUE ZERO. 
     05 WS-LINE-CT      PIC 99 
       VALUE ZERO. 
    01 HDR1-OUT. 
     05         PIC X(25) 
       VALUE SPACES. 
     05         PIC X(20) 
       VALUE 'FINAL REPORT'. 
     05 DATE-OUT. 
      10 MONTH-OUT     PIC 99. 
      10        PIC X 
       VALUE '/'. 
      10 DAY-OUT      PIC 99. 
      10        PIC X 
       VALUE '/'. 
      10 YEAR-OUT     PIC 9999. 
     05         PIC X(2) 
       VALUE SPACES. 
     05         PIC X(5) 
       VALUE 'PAGE'. 
     05 PAGE-OUT      PIC Z9. 


    ***************************************************************** 
    * The Campus Table consists of 5 10-position names and will be * 
    * accessed as a direct-referenced table. EACH_CAMPUS  * 
    * subscriped by the CAMPUS_CODE_IN will provide the name. * 
    ***************************************************************** 
    01 CAMPUTS-TABLE 
     VALUE 'UPSTATE DOWNSTATE CITY MELVILLE  HUNTINGTON'. 
     05 EACH-CAMPUS 
      OCCURS 5 TIMES  PIC X(10). 
    ***************************************************************** 
    * The Dept Table will be accessed by a SEARCH. Even if the  * 
    * table is entered in Dept No sequence, there would be no * 
    * real benefit to using a SEARCH ALL since there are only * 
    * 25 entries.            * 
    ***************************************************************** 
    01 DEPT-TABLE. 
     05 DEPT-ENTRIES OCCURS 25 TIMES INDEXED BY X1. 
      10 DEPT-NO   PIC 99. 
      10 DEPT-NAME  PIC X(10). 
    ***************************************************************** 
    * The Title Talbe will be accessed by a SEARCH ALL. To use a * 
    * binary seach the entries must be in sequence by a key  * 
    * field and the table should be relatively large.   * 
    ***************************************************************** 
    01 TITLE-TABLE. 
     05 TITLE-ENTRIES OCCURS 50 TIMES 
      ASCENDING KEY IS TITLE-NO INDEXED BY X2. 
      10 TITLE-NO  PIC 999. 
      10 TITLE-NAME  PIC X(10). 
    01 DETAIL-REC. 
     05      PIC X(1) VALUE SPACES. 
     05 SSNO-OUT   PIC 999B99B9999. 
     05      PIC X(1) VALUE SPACES. 
     05 NAME-OUT   PIC X(20). 
     05      PIC X(1) VALUE SPACES. 
     05 SALARY-OUT   PIC $ZZZ,ZZZ. 
     05      PIC X(1) VALUE SPACES. 
     05 CAMPUS-OUT   PIC X(10). 
     05      PIC X(1) VALUE SPACES. 
     05 DEPT-OUT   PIC X(10). 
     05      PIC X(1) VALUE SPACES. 
     05 TITLE-OUT   PIC X(10). 
    PROCEDURE DIVISION. 
    100-MAIN-MODULE. 
     OPEN INPUT PERSONNEL-FILE 
        DEPT-TABLE-FILE 
        TITLE-TABLE-FILE 
      OUTPUT PRINT-FILE 
     MOVE FUNCTION CURRENT-DATE TO WS-DATE 
     MOVE WS-MONTH TO MONTH-OUT 
     MOVE WS-DAY TO DAY-OUT 
     MOVE WS-YEAR TO YEAR-OUT 
     PERFORM 500-HDG-RTN. 
     PERFORM 200-LOAD-DEPT-TABLE 
     PERFORM 300-LOAD-TITLE-TABLE 
     PERFORM UNTIL MORE-RECS = 'NO ' 
      READ PERSONNEL-FILE 
       AT END 
       MOVE 'NO ' TO MORE-RECS 
       NOT AT END 
       PERFORM 400-CALC-RTN 
      END-READ 
     END-PERFORM 
     CLOSE PERSONNEL-FILE 
      DEPT-TABLE-FILE 
      TITLE-TABLE-FILE 
      PRINT-FILE 
     STOP RUN. 
    200-LOAD-DEPT-TABLE. 
     PERFORM VARYING X1 FROM 1 BY 1 
       UNTIL X1 > 25 
      READ DEPT-TABLE-FILE 
      AT END DISPLAY 'NOT ENOUGH DEPT TABLE RECORDS' 
       STOP RUN 
      END-READ 
      MOVE DEPT-REC TO DEPT-ENTRIES (X1) 
     END-PERFORM. 
    300-LOAD-TITLE-TABLE. 
     PERFORM VARYING X2 FROM 1 BY 1 
       UNTIL X2 > 50 
      READ TITLE-TABLE-FILE 
      AT END DISPLAY 'NOT ENOUH TITLE TABLE RECORDS' 
       STOP RUN 
      END-READ 
      MOVE TITLE-REC TO TITLE-ENTRIES (X2) 
      IF X2 > 1 THEN 
       IF TITLE-NO (X2) <= TITLE-NO (X2 - 1) 
       DISPLAY 'TITLE RECORDS ARE NOT IN SEQUENCE' 
       STOP RUN 
       END-IF 
      END-IF 
     END-PERFORM. 
    400-CALC-RTN. 
     MOVE SPACES TO DETAIL-REC 
     MOVE SSNO-IN TO SSNO-OUT 
     MOVE NAME-IN TO NAME-OUT 
     MOVE SALARY-IN TO SALARY-OUT 
     IF CAMPUS-CODE-IN >= 1 AND <= 5 
      MOVE EACH-CAMPUS (CAMPUS-CODE-IN) TO CAMPUS-OUT 
     END-IF 
     SET X1 TO 1 
     SEARCH DEPT-ENTRIES 
      AT END MOVE 'XXXXXXXXXX' TO DEPT-OUT 
      WHEN DEPT-CODE-IN = DEPT-NO (X1) 
      MOVE DEPT-NAME (X1) TO DEPT-OUT 
     END-SEARCH 
     SEARCH ALL TITLE-ENTRIES 
      AT END MOVE 'XXXXXXXXXX' TO TITLE-OUT 
      WHEN TITLE-NO (X2) = TITLE-CODE-IN 
      MOVE TITLE-NAME (X2) TO TITLE-OUT 
     END-SEARCH 
     WRITE PRINT-REC FROM DETAIL-REC 
      AFTER ADVANCING 2 LINES. 
    500-HDG-RTN. 
     ADD 1 TO WS-PAGE-CT 
     MOVE WS-PAGE-CT TO PAGE-OUT 
     WRITE PRINT-REC FROM HDR1-OUT 
      AFTER ADVANCING PAGE 
     MOVE ZEROS TO WS-LINE-CT. 
+0

你是什么意思“打印人员记录数”?如在屏幕上打印?或物理打印机?确切地理解你想要完成的事情有点困难。 – 2013-02-28 05:12:14

+0

您需要为摘要记录创建布局,填充值并打印它。就像您对DETAIL-REC所做的一样,但格式不同。您在阅读时需要对记录进行计数。 – 2013-02-28 05:29:31

+0

@AlastairPitts是的,它意味着打印到屏幕上。我对模糊的指示感到抱歉,但这些是给我的指示。 – 2013-02-28 19:07:35

回答

2

您需要:

农产品代码积累,你需要在报告的最后部分结束 农产品的定义(一个或多个)打印所有值 制作报告的最后一部分,一旦主输入文件已经过处理,即在第一次PERFORM之后和关闭之前,您应该养成在每次IO操作之后使用FILE-STATUS检查所有文件状态的习惯,并且在发生意外事件时准确报告。

你会发现甚至为索引提供良好的名字也是值得的,并尽可能使用88s来进行IF或EVALUATE,并避免使用类似“如果校园代码输入> = 1和< = 5”的东西。