Arrays 在cobol中使用数组循环访问客户机和预订类型
尝试使用数组解决此问题。 问题是: 我面临的问题是:必须以一种更简单的方式循环浏览预订类型。当我查看输出时,它会多次显示客户编号、客户名称和地址,并使用不应显示的相同输入 任何帮助都将不胜感激 以下是程序:Arrays 在cobol中使用数组循环访问客户机和预订类型,arrays,cobol,Arrays,Cobol,尝试使用数组解决此问题。 问题是: 我面临的问题是:必须以一种更简单的方式循环浏览预订类型。当我查看输出时,它会多次显示客户编号、客户名称和地址,并使用不应显示的相同输入 任何帮助都将不胜感激 以下是程序: Process Apost. Identification Division. Program-ID. BOOKINGARR. * * Page 554 No 3. ARRAYS. * Data in sequence by Client No. Print the average
Process Apost.
Identification Division.
Program-ID. BOOKINGARR.
*
* Page 554 No 3. ARRAYS.
* Data in sequence by Client No. Print the average cost of
* trip for each booking type. Use arrays.
*
Environment Division.
Configuration Section.
Source-Computer. IBM-AS400.
Object-Computer. IBM-AS400.
Input-Output Section.
File-Control.
Select Input-File Assign to Database-Bookingpf.
Select Output-File Assign to Printer-Qsysprt.
Data Division.
File Section.
FD Input-File.
01 Input-File-Rec.
Copy DDS-BookingR of Bookingpf.
FD Output-File.
01 Output-File-Rec Pic x(120).
Working-Storage Section.
01 END-OF-FILE PIC X VALUE 'N'.
01 WS-ARRAY.
05 WS-TABLE-ENTRIES OCCURS 4 TIMES.
10 WS-TOTAL-COST PIC 9(7)V99.
10 WS-TRIP-COUNT PIC 999.
10 WS-AVG-COST PIC 9(7)V99 VALUE ZERO.
10 WS-BOOKING-TYPE PIC 9.
01 ARRAY-INDEX PIC 99.
01 EMPTY-POINTER PIC 99.
01 ARRAY-EMPTY PIC XXX.
01 PROGRAM-HEADER.
05 PIC X(2) VALUE SPACES.
05 PIC X(10) VALUE 'CLIENT NO.'.
05 PIC X(3) VALUE SPACES.
05 PIC X(11) VALUE 'CLIENT NAME'.
05 PIC X(6) VALUE SPACES.
05 PIC X(14) VALUE 'CLIENT ADDRESS'.
05 PIC X(4) VALUE SPACES.
05 PIC X(9) VALUE 'BOOK TYPE'.
05 PIC X(4) VALUE SPACES.
05 PIC X(12) VALUE 'AVERAGE COST'.
01 REPORT-LINE.
05 PIC X(2) VALUE SPACES.
05 CLIENTNO-OUT PIC 999.
05 PIC X(10) VALUE SPACES.
05 CLIENTNA-OUT PIC X(16).
05 PIC X(1) VALUE SPACES.
05 CLIENTADD-OUT PIC X(19).
05 PIC X(3) VALUE SPACES.
05 BOOKTYPE-OUT PIC Z.
05 PIC X(8) VALUE SPACES.
05 AVGCOST-OUT PIC $Z,ZZ9.99.
05 PIC X(12) VALUE SPACES.
Procedure Division.
000-MAIN.
OPEN INPUT INPUT-FILE
OUTPUT OUTPUT-FILE.
PERFORM 100-MOVE.
PERFORM 1000-READ.
PERFORM 300-UPDATE-BOOKINGS
UNTIL END-OF-FILE = 'Y'.
WRITE OUTPUT-FILE-REC FROM PROGRAM-HEADER.
PERFORM 600-WRITE-TO-SCREEN
VARYING ARRAY-INDEX FROM 1 BY 1
UNTIL ARRAY-INDEX > 4.
CLOSE INPUT-FILE, OUTPUT-FILE.
STOP RUN.
100-MOVE.
MOVE 1 TO EMPTY-POINTER.
MOVE 'Y' TO ARRAY-EMPTY.
MOVE SPACES TO UPDATE-DONE.
PERFORM 150-ZERO-OUT-ARRAY
VARYING ARRAY-INDEX FROM 1 BY 1 UNTIL
ARRAY-INDEX > 4.
150-ZERO-OUT-ARRAY.
MOVE ZEROS TO WS-BOOKING-TYPE (ARRAY-INDEX).
MOVE ZEROS TO WS-TOTAL-COST (ARRAY-INDEX).
MOVE ZEROS TO WS-TRIP-COUNT (ARRAY-INDEX).
MOVE ZEROS TO WS-AVG-COST (ARRAY-INDEX).
1000-READ.
READ INPUT-FILE AT END MOVE 'Y' TO END-OF-FILE.
300-UPDATE-BOOKINGS.
IF ARRAY-EMPTY = 'Y'
PERFORM 400-ADD-1-TO-COUNT
MOVE 'N' TO ARRAY-EMPTY
ELSE
MOVE 'N' TO UPDATE-DONE
PERFORM 500-GET-BOOKING-AVERAGE
VARYING ARRAY-INDEX FROM 1 BY 1
UNTIL ARRAY-INDEX = EMPTY-POINTER
OR
UPDATE-DONE = 'Y'.
IF UPDATE-DONE = 'N'
PERFORM 400-ADD-1-TO-COUNT.
PERFORM 1000-READ.
400-ADD-1-TO-COUNT.
MOVE BOOKTYPE TO WS-BOOKING-TYPE (EMPTY-POINTER).
ADD 1 TO WS-TRIP-COUNT (EMPTY-POINTER).
MOVE COSTOFTRIP TO WS-TOTAL-COST (EMPTY-POINTER).
MOVE COSTOFTRIP TO WS-AVG-COST (EMPTY-POINTER).
ADD 1 TO EMPTY-POINTER.
500-GET-BOOKING-AVERAGE.
IF BOOKTYPE = WS-BOOKING-TYPE (ARRAY-INDEX)
ADD 1 TO WS-TRIP-COUNT (ARRAY-INDEX)
ADD COSTOFTRIP TO WS-TOTAL-COST (ARRAY-INDEX)
COMPUTE WS-AVG-COST (ARRAY-INDEX) =
WS-TOTAL-COST (ARRAY-INDEX) /
WS-TRIP-COUNT (ARRAY-INDEX)
MOVE 'Y' TO UPDATE-DONE.
600-WRITE-TO-SCREEN.
MOVE CLIENTNO TO CLIENTNO-OUT.
MOVE CLIENTNA TO CLIENTNA-OUT.
MOVE CLIENTADD TO CLIENTADD-OUT.
MOVE WS-BOOKING-TYPE (ARRAY-INDEX) TO BOOKTYPE-OUT.
MOVE WS-AVG-COST (ARRAY-INDEX) TO AVGCOST-OUT.
WRITE OUTPUT-FILE-REC FROM REPORT-LINE
AFTER ADVANCING 1 LINE.
对COBOL段落进行编号的原因是为了更容易找到它们。在一个几千行的程序中,它为维护人员节省了大量的精力。你将第1000段置于第150段和第300段之间 现代COBOL程序通常在段落或章节名称的末尾以及段落或章节的末尾有句号。有些人在段落或章节的最后一行用句号而不是句号来表示“继续”或“退出”语句 现代COBOL程序使用显式作用域终止符,特别是在
IF
语句上,而不是在句号上
COBOL被批评为冗长;许多COBOL程序员通过命名他们的段落来表示其中包含的代码正在做什么,从而将这一点变成了一种美德。例如,100-MOVE
可能更好地命名为100-INITIALIZE
关于堆栈溢出,我建议您熟悉“代码示例”按钮“{}”,而不是用粗体标记段落
如果练习的目的是计算每种预订类型的平均成本,我建议使用预订类型作为数组的下标。对于您读取的每条记录,将COSTOFTRIP
添加到WS-TOTAL-COST(BOOKTYPE)
并增加WS-TRIP-COUNT(BOOKTYPE)
。在文件末尾,通过使用计算执行不同的循环中数组的每个元素,计算每个图书类型的平均旅行成本
对于额外的积分,在将其用作下标之前,请验证BOOKTYPE
是否为数字,并使用一个内嵌的PERFORM
来计算平均值。我知道您使用的是Stern&Stern
目标是:
打印每种预订类型的平均旅行成本。使用数组
意味着输出应该只包含两列和四行,以及任何标题。比如说,
Booking Type Average Cost
------------ ------------
Cruise ZZZZ9.99
Air-Independent ZZZZ9.99
Air-Tour ZZZZ9.99
Other ZZZZ9.99
要实现这一点,您需要将这四个描述放在一个数组中,并将每种预订类型的总成本和计数累加到一个数组中。处理完所有记录后,计算平均值并打印结果,同时在数组中循环
你试图做的比要求的多得多 你能帮我通过程序科吗?我对此感到很困惑。cschneid@GreenSaucer42这并不是一个让别人告诉你程序正在做什么的好地方。如果你将之前的问题完全编辑在同一个问题上,情况会好得多: