好的,所以我正在做作业,但后来我发现我被要求为每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.
Run Code Online (Sandbox Code Playgroud)
你们都很近,而且很远.
"关闭",因为在将IS-THIS-PAGE-FULL设置为YES和NO之间需要一些代码.
"很远",因为你有很多事要做,而不仅仅是"修补"你拥有的东西.
程序是编写输出文件(STOCK-OUT)和报告,还是STOCK-OUT报告?如果是报告,请更改名称,以便明确它是报告,而不是输出文件.
不要担心,如果这看起来很多.您应该学习如何在Cobol中编程,以及学习Cobol.不会在一夜之间发生.
没有特别的顺序:
您可能会觉得这是很多工作.但是,将所有内容放在一起的"模板"文件中,然后每次将这些文件粘贴(甚至复制)到程序中.
FD中有VALUE子句.这些不符合你的想法.
您的页数有一位数,这不太可能具有一般应用.
为什么使用YES和NO作为文字?查看SET动词,与"条件名称"相关,使用88进行测试和"标志/开关".
在输入打开之后但在读取记录之前,您有"移动ST-TRANSACTION-INFORMATION",并且在程序中只有一个引用它.这不会起作用.
要读取文件,请查看"启动读取"方法.
读取输入循环直到文件结束(文件状态为88)处理数据读取输入结束循环
这避免了AT END/NOT AT END,允许处理标题(如果存在)和"空文件"而不会堵塞主逻辑.代码"扩展"与标题/预告片(包括正确的数字),键的序列检查等,但你只需要编码一次然后"模板"它.
根据你的FD中的VALUE子句,你希望RECORD-OUT为零,所以4的测试实际上会让你在第一页上得到5,其后是4.
您总是假设会有"利润"(正数),这是不现实的,但您不允许"利润"的签名值.
现在,为报告.
对于您的报告FD,只需简单的一点,打印线的长度.
在WORKING-STORAGE中,定义所需标题和标题的数据.定义打印行的数据.由于您处于工作存储状态,因此在PROCEDURE DIVISION中为所有不具有MOVEd数据的内容添加VALUE.
当你写了四个项目(或当你的程序告诉你这个)并且你有五分之一时,写下标题和标题,记住更新页码.
我说"或当你的程序告诉你这个"时,因为你可以将"写入的记录"的原始值设置为4.注释它,以便很清楚它是你想要的,以及为什么你想要它.原因是,你不必再处理"第一次"标题和其他事情.第一次,或者在"控制中断"(我想你很快就会到达那些)将"已经完成在页面上"设置为页面的最大值,并且标题会在你想要的时候弹出.
格式化打印行.执行para打印(这是"页面已满"测试的位置).
注意:您可以在日期中使用VALUE作为"/"s,或者可以使用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
Run Code Online (Sandbox Code Playgroud)
我喜欢看到你正在使用"最小全停/期间".你可以再往前走一点.
MOVE an-input-date TO date-to-print
.
Run Code Online (Sandbox Code Playgroud)
然后你在一个段落中得到你的最后一个句号/句号,而没有"附加"到任何特定的代码行,这使得"折腾代码"更容易,因为你不必考虑"我需要/不需要那里的全停/期间".
您还可以在这里查看一些Cobol问题,并了解一些常规技巧和建议.