000100 Identification Division. 000200 Program-Id. FREQPGM3. 000300 Environment Division. 000400 Input-Output Section. 000500 File-Control. 000600 Select FREQFILE Assign to FREQFDD 000700 Organization is Indexed 000800 Access is Sequential 000900 Record Key is Flight-Date in File-Record 001000 File Status is Freqfile-Status 001100 . 001200 Select FREQMILE Assign to FREQMDD 001300 Organization is Indexed 001400 Access is Random 001500 Record Key is City-Pair in Mile-Record 001600 File Status is Freqmile-Status 001700 . 001800 Select FREQLIST Assign to FREQLDD 001900 Organization is Sequential 002000 Access is Sequential 002100 File Status is Freqlist-Status 002200 . 002300 Data Division. 002400 File Section. 002500 FD FREQFILE. 002600 01 File-Record. 002700 88 End-Of-Freq-File Value High-Value. 002800 05 Pic X(01). 002900 05 Flight-Date Pic X(05). 003000 05 City-Pair. 003010 10 Origin Pic X(03). 003020 10 Pic X(01). 003030 10 Dest Pic X(03). 003100 05 Airline-Id Pic X(02). 003200 05 Flight-Number Pic 9(04). 003300 05 Class-Of-Travel Pic X(01). 003400 88 Tourist Value 'Y'. 003500 88 Business Value 'C'. 003600 88 Firstclass Value 'F'. 003700 05 Mileage Pic 9(05). 003800 05 Pic X(55). 003900 004000 FD FREQMILE. 004100 01 Mile-Record. 004200 05 City-Pair. 004300 10 Origin Pic X(03). 004400 10 Pic X(01). 004500 10 Dest Pic X(03). 004600 05 Pic X(01). 004700 05 Mileage Pic 9(05). 004800 05 Pic X(67). 004900 005000 FD FREQLIST Recording mode F. 005100 01 Listrow Pic X(120). 005200 005300*--------------------------------------- 005400 Working-Storage Section. 005500*--------------------------------------- 005600 005700 77 Mileage-Total Pic 9(08) Value 0. 005800 77 Incbonus-Value Pic 9(08) Value 0. 005900 77 Incbonus-Total Pic 9(08) Value 0. 006000 006100 01 Freqfile-Status Pic X(02). 006200 88 Freqfile-Openerror Values '01' thru '99'. 006300 01 Freqmile-Status Pic X(02). 006400 88 Freqmile-Openerror Values '01' thru '99'. 006500 01 Freqlist-Status Pic X(02). 006600 88 Freqlist-Openerror Values '01' thru '99'. 006700 006800 01 List-Blankrow. 006900 05 Pic X(120) Value Spaces. 007000 007100 01 List-Header1. 007200 05 Pic X(35) Value 'Frequent Flyer Report'. 007300 007400 01 List-Header2. 007500 05 Flight-Date Pic X(07) Value 'Date'. 007600 05 Flight-Id Pic X(05) Value 'Id'. 007700 05 Flight-Number Pic X(05) Value 'Fl#'. 007800 05 Class-Of-Travel Pic X(03) Value 'Cl'. 007900 05 City-Pair Pic X(09) Value 'C-Pair'. 008000 05 Mileage Pic X(09) Value 'Mileage'. 008100 05 Incbonus Pic X(10) Value 'Inc Bonus'. 008200 008300 01 List-Trailer. 008400 05 Pic X(25) 008500 Value 'Total Mileage '. 008600 05 Mileage Pic Z(11). 008700 05 Incbonus Pic Z(11). 008800 008900 01 List-Detail. 009000 05 Flight-Date Pic X(05). 009100 05 Pic X(02). 009200 05 Airline-Id Pic X(02). 009300 05 Pic X(02). 009400 05 Flight-Number Pic Z(04). 009500 05 Pic X(02). 009600 05 Class-Of-Travel Pic X(01). 009700 05 Pic X(02). 009800 05 City-Pair Pic X(07). 009900 05 Pic X(02). 010000 05 Mileage Pic Z(07). 010100 05 Pic X(04). 010200 05 Incbonus Pic Z(07). 010300 010400 010500*--------------------------------------- 010600 Procedure Division. 010700*--------------------------------------- 010800 Display '==> FREQREAD is starting...' 010900 Perform Open-Files 011000 Perform Write-Freq-Headers 011100 Perform Read-Freqfile Until End-Of-Freq-File 011200 Perform Write-Freq-Trailer 011300 Perform Close-Files 011400 Display '==> FREQREAD ended normally' 011500 GoBack 011600 . 011700*------------------------------------- 011800 Read-Freqfile. 011900*------------------------------------- 012000 Read Freqfile 012100 At End 012200 Set End-Of-Freq-File to True 012300 Not At End 012400 Perform Write-Freq-Detail 012500 End-Read 012600 . 012700*------------------------------------- 012800 Calculate-Bonus. 012900*------------------------------------- 013000 Evaluate True 013100 When Mileage in File-Record Less Than 500 013200 Move 500 to Incbonus-Value 013300 Incbonus in List-Detail 013400 When Tourist 013500 Move Mileage in File-Record to 013600 Incbonus-Value 013700 Incbonus in List-Detail 013800 When Business 013900 Compute Incbonus-Value = 014000 Mileage in File-Record * 1.25 014100 Move Incbonus-Value to 014200 Incbonus in List-Detail 014300 When Firstclass 014400 Compute Incbonus-Value = 014500 Mileage in File-Record * 1.50 014600 Move Incbonus-Value to 014700 Incbonus in List-Detail 014800 End-Evaluate 014900 015000 Add Incbonus-Value to Incbonus-Total 015100 . 015200*------------------------------------- 015300 Read-Freqmile. 015400*------------------------------------- 015500 Move City-Pair in File-Record to 015600 City-Pair in Mile-Record 015700 Read Freqmile 015800 Invalid Key 015900 Perform Read-FreqMile-Again 016000 Not Invalid Key 016100 Move Mileage in Mile-Record to 016200 Mileage in List-Detail 016300 End-Read 016400 . 016500*------------------------------------- 016600 Read-Freqmile-Again. 016700*------------------------------------- 016800* Reverse City-Pair 016900*------------------------------------- 017000 Move Origin in File-Record to 017100 Dest in Mile-record 017200 Move Dest in File-Record to 017300 Origin in Mile-record 017400 Read Freqmile 017500 Invalid Key 017600 Display 'Hittar inte City-Pair: ' 017700 City-Pair in Mile-Record 017800 Move 99 to Return-Code 017900 GoBack 018000 Not Invalid Key 018100 Move Mileage in Mile-Record to 018200 Mileage in List-Detail 018300 End-Read 018400 . 018500*------------------------------------- 018600 Write-Freq-Headers. 018700*------------------------------------- 018800 Write Listrow from List-Header1 018900 Write Listrow from List-Blankrow 019000 Write Listrow from List-Header2 019100 Write Listrow from List-Blankrow 019200 . 019300*------------------------------------- 019400 Write-Freq-Trailer. 019500*------------------------------------- 019600 Write Listrow 019700 from List-Blankrow 019800 Move Mileage-Total to 019900 Mileage in List-Trailer 020000 Move Incbonus-Total to 020100 Incbonus in List-Trailer 020200 Write Listrow 020300 from List-Trailer 020400 . 020500*------------------------------------- 020600 Write-Freq-Detail. 020700*------------------------------------- 020800 Perform Read-FreqMile 020900 Perform Calculate-Bonus 021000 Move Corr File-Record to List-Detail 021100 Add Mileage in File-Record to 021200 Mileage-Total 021300 021400 Write Listrow from List-Detail 021500 . 021600*------------------------------------- 021700 Open-Files. 021800*------------------------------------- 021900 Open Input FREQFILE 022000 If Freqfile-Openerror 022100 Display '==> Openerror: FREQFILE' 022200 Display '==> Status : ' Freqfile-Status 022300 Move 21 to Return-Code 022400 Goback 022500 End-If 022600 Display '==> FREQFILE is Open' 022700 022800 Open Input FREQMILE 022900 If Freqmile-Openerror 023000 Display '==> Openerror: FREQMILE' 023100 Display '==> Status : ' Freqmile-Status 023200 Move 22 to Return-Code 023300 Goback 023400 End-If 023500 Display '==> FREQMILE is Open' 023600 023700 Open Output FREQLIST 023800 If Freqlist-Openerror 023900 Display '==> Openerror: FREQLIST' 024000 Display '==> Status : ' Freqlist-Status 024100 Move 23 to Return-Code 024200 Goback 024300 End-If 024400 Display '==> FREQLIST is Open' 024500 . 024600*------------------------------------- 024700 Close-Files. 024800*------------------------------------- 024900 Close FREQFILE 024910 FREQMILE 025000 FREQLIST 025100 . 025200 End Program FREQPGM3. 025300