gpt4 book ai didi

cobol - 如何添加页码(COBOL)

转载 作者:行者123 更新时间:2023-12-01 08:09:07 25 4
gpt4 key购买 nike

好的,所以我正在做作业,但是随后我发现我被要求添加页码并为每4条记录更改页数。由于这是一门在线课程,我认为讲座视频中没有关于页码的任何信息。所以主要的问题是

  • 要添加包含日期和页码的标题,
  • 每页打印4条记录,这意味着在打印4条记录后需要更改页面。

  • 我真的不知道该怎么做。

    这是我完成的代码:
       ENVIRONMENT DIVISION.
    FILE-CONTROL. SELECT STOCK-IN ASSIGN TO 'F:/CS201S13/PROJECT2.TXT'
    ORGANIZATION IS LINE SEQUENTIAL.
    SELECT STOCK-OUT ASSIGN TO 'F:/CS201S13/PROJECT2OUTPUT.TXT'
    ORGANIZATION IS LINE SEQUENTIAL.
    DATA DIVISION.
    FILE SECTION.
    FD STOCK-IN.
    01 STOCK-RECORD.
    05 ST-TRANSACTION-INFORMATION.
    10 ST-TRANSACTION-SHARES PIC 9(3).
    10 ST-TRANSACTION-STOCK PIC X(14).
    05 ST-PURCHASE-INFORMATION.
    10 ST-PURCHASE-PRICE PIC 9(5)V99.
    10 ST-PURCHASE-DATE.
    15 ST-PURCHASE-YEAR PIC 99.
    15 ST-PURCHASE-MONTH PIC 99.
    15 ST-PURCHASE-DAY PIC 99.
    05 ST-SALE-INFORMATION.
    10 ST-SALE-PRICE PIC 9(5)V99.
    10 ST-SALE-DATE.
    15 ST-SALE-YEAR PIC 99.
    15 ST-SALE-MONTH PIC 99.
    15 ST-SALE-DAY PIC 99.
    FD STOCK-OUT.
    01 STOCK-RECORD-OUT.
    05 ST-TRANSACTION-INFORMATION-OUT.
    10 ST-TRANSACTION-SHARES-OUT PIC 9(3).
    10 ST-TRANSACTION-STOCK-OUT PIC X(14).
    05 TOTAL-PURCHASE PIC 9(8)V99.
    05 PIC X(4).
    05 TOTAL-SALE PIC 9(8)V99.
    05 PIC X(4).
    05 TOTAL-PROFIT PIC 9(8)V99.
    05 PIC X(4).
    05 ST-PURCHASE-DATE-OUT.
    10 ST-PURCHASE-YEAR-OUT PIC 99.
    10 PIC X VALUE '/'.
    10 ST-PURCHASE-MONTH-OUT PIC 99.
    10 PIC X VALUE '/'.
    10 ST-PURCHASE-DAY-OUT PIC 99.
    05 PIC X(4).
    05 ST-SALE-DATE-OUT.
    10 ST-SALE-YEAR-OUT PIC 99.
    10 PIC X VALUE '/'.
    10 ST-SALE-MONTH-OUT PIC 99.
    10 PIC X VALUE '/'.
    10 ST-SALE-DAY-OUT PIC 99.
    05 PIC X(4).
    05 RECORD-OUT PIC 9 VALUE 0.
    05 PAGE-OUT PIC 9.
    WORKING-STORAGE SECTION.
    01 ARE-THERE-MORE-RECORDS PIC XXX VALUE 'YES'.
    01 IS-THIS-PAGE-FULL PIC XXX VALUE 'NO '.
    PROCEDURE DIVISION.
    100-MAIN-PROCESS.
    OPEN INPUT STOCK-IN
    OUTPUT STOCK-OUT
    MOVE ST-TRANSACTION-INFORMATION TO ST-TRANSACTION-INFORMATION-OUT
    PERFORM UNTIL ARE-THERE-MORE-RECORDS = 'NO '
    READ STOCK-IN
    AT END
    MOVE 'NO ' TO ARE-THERE-MORE-RECORDS
    NOT AT END
    PERFORM 200-PROCEDURE-RTN
    ADD 1 TO RECORD-OUT
    END-READ
    END-PERFORM
    CLOSE STOCK-IN
    STOCK-OUT
    STOP RUN.
    200-PROCEDURE-RTN.
    IF RECORD-OUT = 4
    MOVE 'YES' TO IS-THIS-PAGE-FULL
    MOVE 0 TO RECORD-OUT
    MOVE 'NO ' TO IS-THIS-PAGE-FULL
    ADD 1 TO PAGE-OUT
    END-IF
    MULTIPLY ST-PURCHASE-PRICE BY ST-TRANSACTION-SHARES GIVING TOTAL-PURCHASE
    MULTIPLY ST-SALE-PRICE BY ST-TRANSACTION-SHARES GIVING TOTAL-SALE
    SUBTRACT TOTAL-PURCHASE FROM TOTAL-SALE GIVING TOTAL-PROFIT
    WRITE STOCK-RECORD-OUT.

    最佳答案

    你们既近又远。

    “关闭”,因为在将IS-THIS-PAGE-FULL设置为YES和NO之间需要一些代码。

    “遥不可及”,因为您还有很多工作要做,而不是仅仅“补充”您所拥有的东西。

    程序是写输出文件(STOCK-OUT)和报告,还是STOCK-OUT是报告?如果是报告,请更改名称,以便清楚地知道它是报告,而不是输出文件。

    如果这看起来很多,请不要担心。您应该学习如何在Cobol中编程,以及学习Cobol。不会在一夜之间发生。

    没有特别的顺序:

  • 始终包含FILE-STATUS,以检查所有文件上的所有IO操作。目前,如果您的输入无法打开并且系统没有使程序失败(即使您的程序失败了,那么您大概也会在学习Cobol,使其能够与任何系统一起使用,而不仅仅是您拥有的系统),那么就不会有任何记录。读取后,您的“文件结束测试”将永远不会为YES,并且您将拥有BFL(大胖循环)。通过FILE-STATUS检查,产生有用的消息,包括键/引用/记录号(适用于失败的READ或WRITE)。

  • 您可能会觉得这是很多工作。但是,将一些“模板”文件与所有内容放在一起,然后每次将它们粘贴(甚至复制)到您的程序中。
  • 您在FD中有VALUE子句。这些不会做您想的。
  • 您的页数只有一位数字,不太可能普遍应用。
  • 为什么使用YES和NO作为文字?查看与“条件名称”相关的SET动词,使用88进行测试和“标记/开关”。
  • 打开输入后但在读取记录之前,您具有“MOVE ST-TRANSACTION-INFORMATION”,并且在程序中仅对其具有一个引用。这是行不通的。
  • 要读取文件,请查看“启动读取”方法。

    读取输入
    循环直到文件结束(文件状态为88)
    处理数据
    读取输入
    结束循环

  • 这避免了AT END / NOT AT END,允许处理标头(如果存在)和“空文件”,而不会阻塞主逻辑。代码用标头/尾标(包括正确的数目),键的顺序检查等“扩展”,但是您只需要编码一次,然后“模板化”即可。
  • 根据FD中的VALUE子句,您期望RECORD-OUT为零,因此对4的测试实际上将使您在第一页上获得五个,而在此之后则获得四个。
  • 您始终假定会有“利润”(正数),这是不现实的,但是您不允许为“利润”签名。

  • 现在,为报告。

    对于报表FD,只需简单一点即可完成,即打印线的长度。

    在“工作存储”中,为所需的标题和标题定义数据。定义打印行的数据。由于您处于WORKING-STORAGE中,因此将没有数据移动到其上的所有内容的值都放在PROCEDURE DIVISION中。

    当您编写了四个项目(或程序告诉您)并且您编写了第五个项目时,请写下标题和标题,记住要更新页码。

    我之所以说“或您的程序告诉您什么”,是因为您可以将“已写入的记录”的原始值设置为4。对其进行注释,这样很明显它就是您想要的以及为什么要使用它。原因是,您不必再处理“第一次”标题和其他事情。第一次或在“控制中断”(我想您很快就会知道)上,将“已在页面上完成”设置为页面的最大值,标题会在您需要时弹出。

    格式化打印线。执行段落以打印它(这是“页面已满”测试的位置)。

    注意:可以在日期中的“/”中使用VALUE,也可以在PICture中使用“/”编辑字符,如下所示:
    05  an-input-date PIC X(8) (can be other definitions).
    ...
    05 date-to-print PIC X(4)/XX/XX.
    ...
    MOVE an-input-date TO date-to-print

    我希望看到您使用的是“最小句号/句号”。您可以走得更远。
    MOVE an-input-date TO date-to-print
    .

    然后,您可以在一个段落中获得最终的句号/句号,而不必将其“附加”到任何特定的代码行,这使“四处乱扔代码”变得更加容易,因为您不必考虑“我需要/不需要”需要那里的句号/句号”。

    您也可以在此处浏览一些Cobol问题,并获得一些常规提示和建议。

    关于cobol - 如何添加页码(COBOL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15801076/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com