000010 IDENTIFICATIONDIVISION.
000020 PROGRAM-ID. TABLE-PROG.
000030 AUTHOR. TIMOTHY R P BROWN.
000035 000037***************************************************** 000040* Program to update a football league table * 000045* and output a new updated table * 000046* Based on English Premiership season 1999-2000 * 000047*****************************************************
000048
000050 ENVIRONMENTDIVISION.
000060 INPUT-OUTPUTSECTION.
000070 FILE-CONTROL.
000080 SELECT TEAM-REC-IN ASSIGNTO"INPUT.REC"
000090 ORGANIZATIONISSEQUENTIAL.
000100 SELECT WORK-FILE ASSIGNTO SORTWK01. 000105* for MicroFocus compiler 000107* replace SORTWK01 with 'WORKFILE.DAT'
000110 SELECT SORT-OUT ASSIGNTO"SORTED.REC"
000120 ORGANIZATIONISSEQUENTIAL.
000130 SELECT PRINT-FILE ASSIGNTO PRINTER.
000140
000150
000160 DATADIVISION.
000170 FILESECTION.
000180 FD TEAM-REC-IN.
000190 01 TEAM-REC.
000200 03 TEAM-CODE PIC XXX.
000210 03 TEAM-NAME PIC X(20).
000220 03 PLAYED PIC 99.
000230 03 GOALS-FOR PIC 99.
000240 03 GOALS-AGST PIC 99.
000250 03 G-WON PIC 99.
000260 03 G-LOST PIC 99.
000270 03 G-DRAWN PIC 99.
000280 03 GOAL-DIFF PIC S99 SIGNLEADINGSEPARATE.
000290 03 POINTS PIC 99.
000300
000310 SD WORK-FILE.
000320 01 WORK-REC.
000330 03 TEAM-CODE-KEY PIC XXX.
000340 03 PIC X(22).
000350 03 GF-KEY PIC 99.
000360 03 PIC X(8).
000370 03 GD-KEY PIC S99 SIGNLEADINGSEPARATE.
000380 03 POINTS-KEY PIC 99.
000390
000400
000410 FD PRINT-FILE.
000420 01 TEXT-OUT PIC X(60).
000430
000440 FD SORT-OUT.
000450 01 TEAM-REC-OUT.
000460 03 STEAM-CODE PIC XXX.
000470 03 STEAM-NAME PIC X(20).
000480 03 SPLAYED PIC 99.
000490 03 SGOALS-FOR PIC 99.
000500 03 SGOALS-AGST PIC 99.
000510 03 SG-WON PIC 99.
000520 03 SG-LOST PIC 99.
000530 03 SG-DRAWN PIC 99.
000540 03 SGOAL-DIFF PIC S999.
000550 03 SPOINTS PIC 99.
000560
000570
000580
000590
000600 WORKING-STORAGESECTION.
000610
000620 01 M PIC 99.
000630 01 REAL-GOAL-DIFF PIC S999.
000640
000650 01 W-DATE.
000660 03 W-YEAR PIC 99.
000670 03 W-MON PIC 99.
000680 03 W-DAY PIC 99.
000690
000700
000710 01 SCORE.
000720 03 W-H-SCR PIC 9.
000730 03 PIC X VALUE"-".
000740 03 W-A-SCR PIC 9.
000750
000760 01 P-TITLE.
000770 03 PIC X(5) VALUESPACES.
000780 03 TAB-TITLE PIC X(34)
000790 VALUE"The English FA Premier League".
000800
000810 03 P-DATE.
000820 05 P-DAY PIC XX.
000830 05 PIC X VALUE"/".
000840 05 P-MON PIC XX.
000850 05 PIC X VALUE"/".
000860 05 P-YEAR PIC XX.
000870
000880 01 P-UNDERLINE PIC X(45) VALUEALL"-".
000890 01 P-GAP PIC X VALUESPACE.
000900
000910 01 P-HEADER.
000920 03 PIC X(6) VALUESPACES.
000930 03 TAB-TEAM PIC X(4) VALUE"TEAM".
000940 03 PIC X(11) VALUESPACES.
000950 03 PLY PIC X(5) VALUE"Playd".
000960 03 PIC X VALUESPACE.
000970 03 WO PIC XXX VALUE"Won".
000980 03 PIC X VALUESPACE.
000990 03 DR PIC XXXX VALUE"Drwn".
001000 03 PIC X VALUESPACE.
001010 03 LO PIC XXXX VALUE"Lost".
001020 03 PIC X VALUESPACE.
001030 03 GF PIC XXX VALUE"For".
001040 03 PIC X VALUESPACE.
001050 03 GA PIC X(5) VALUE"Agnst".
001060 03 PIC X VALUESPACE.
001070 03 GD PIC XX VALUE"GD".
001080 03 PIC X VALUESPACE.
001090 03 PTS PIC XXX VALUE"PTS".
001100
001110 01 W-TEXT-OUT.
001120 03 P-TAB-POS PIC 99.
001130 03 PIC X VALUESPACE.
001140 03 P-TEAM PIC X(20).
001150 03 P-PLAYED PIC 99.
001160 03 PIC XXX VALUESPACES.
001170 03 P-G-WON PIC Z9.
001180 03 PIC XX VALUESPACES.
001190 03 P-G-DRAWN PIC Z9.
001200 03 PIC XXX VALUESPACES.
001210 03 P-G-LOST PIC Z9.
001220 03 PIC XXX VALUESPACES.
001230 03 P-GOALS-FOR PIC 99.
001240 03 PIC XX VALUESPACES.
001250 03 P-GOALS-AGST PIC 99.
001260 03 PIC XX VALUESPACES.
001270 03 P-GOAL-DIFF PIC ZZ9.
001280 03 PIC XX VALUESPACES.
001290 03 P-POINTS PIC Z9.
001300
001310
001320 01 SCORE-TAB.
001330 03 TAB-SCORE PIC 9 OCCURS 2.
001340 01 T-POINTS-TAB.
001350 03 T-POINTS PIC 99 OCCURS 20.
001360 01 POINTS-TAB.
001370 03 TAB-POINTS PIC 9 OCCURS 2.
001380 01 T-G-FOR-TAB.
001390 03 T-G-FOR PIC 99 OCCURS 20.
001400 01 T-G-AGST-TAB.
001410 03 T-G-AGST PIC 99 OCCURS 20.
001420 01 T-G-DIFF-TAB.
001430 03 T-G-DIFF PIC 99 OCCURS 20.
001440 01 TAB-TEAM-NAME.
001450 03 TEAM PIC XXX OCCURS 2.
001460
001470
001480 01 V-TEAM-FLAG PIC X.
001490 88 V-TEAM VALUE"Y".
001500 01 V-SCORE-FLAG PIC X.
001510 88 V-SCORE VALUE"Y".
001520 01 SORT-ONLY-FLAG PIC X.
001530 88 SORT-ONLY VALUE"Y".
001540
001550
001560 01 ENDING-KEY PIC X VALUESPACE.
001570 01 SWITCH PIC 9.
001580 01 EOF-FLAG PIC X VALUE"N".
001590 01 COUNTER PIC 99.
001600 01 W-GOAL-DIFF PIC 99.
001610 01 LAST-SCORE PIC X.
001620 01 N PIC 99.
001630 001640*****************************************************
001650
001660 PROCEDUREDIVISION.
001670
001680 MAIN-PARAGRAPH.
001690
001700 PERFORM DISPLAY-INSTRUCTIONS
001710 PERFORM INPUT-DATA
001720 PERFORM SORT-TABLE
001730 PERFORM PRINT-TABLE
001740 DISPLAY" Type Q or X to exit program."
001750 ACCEPT ENDING-KEY
001760 STOPRUN. 001770*******************************************************************
001780 DISPLAY-INSTRUCTIONS.
001790 DISPLAY" Instructions"
001800 DISPLAY" "
001810 DISPLAY" Following prompts, enter the first "
001820 DISPLAY"3 letters of the team in lower case. "
001830 DISPLAY" Then enter the score (home team score first)."
001840 DISPLAY" To perform SORT ONLY function, type 'xxx' "
001850 DISPLAY"at both team prompts. ". 001860*******************************************************************
001870 INPUT-DATA.
001880 MOVE"n"TO LAST-SCORE
001890 MOVE"N"TO SORT-ONLY-FLAG
001900 PERFORMUNTIL LAST-SCORE = "y"OR"Y"
001910 MOVE"N"TO V-SCORE-FLAG
001920 MOVE"N"TO V-TEAM-FLAG
001930 PERFORMUNTIL V-TEAM
001940 DISPLAY"INPUT HOME TEAM >"
001950 ACCEPT TEAM (1)
001960 DISPLAY"INPUT AWAY TEAM >"
001970 ACCEPT TEAM (2)
001980 PERFORM VAL-TEAM
001990 END-PERFORM
002000 IF TEAM (1) = "XXX"OR"xxx"THEN
002010 MOVE"Y"TO LAST-SCORE
002020 PERFORM SORT-TABLE
002030 ELSE
002040 PERFORMUNTIL V-SCORE or SORT-ONLY
002050 DISPLAY"INPUT RESULT AS 'X-Y'"
002060 ACCEPT SCORE
002070 MOVE W-H-SCR TO TAB-SCORE (1)
002080 MOVE W-A-SCR TO TAB-SCORE (2)
002090 PERFORM VAL-SCORE
002100 END-PERFORM
002110 DISPLAY"LAST RESULT? Y/N"
002120 ACCEPT LAST-SCORE
002130 PERFORM CALC-POINTS
002140 PERFORM UPDATE-RECORD
002150 END-IF
002160 END-PERFORM. 002170*******************************************************************
002180 VAL-TEAM.
002190 PERFORMVARYING COUNTER FROM 1 BY 1
002200 UNTIL COUNTER > 2
002210
002220 EVALUATETRUE
002230 WHEN TEAM (COUNTER) = "ars"or"ast"or"bra"or
002240 "che"or"cov"or"der"or
002250 "eve"or"lee"or"lei"or
002260 "liv"or"man"or"mid"or
002270 "new"or"she"or"sou"or
002280 "sun"or"tot"or"wat"or
002290 "wes"or"wim"
002300 MOVE"Y"TO V-TEAM-FLAG
002310 WHENOTHERMOVE"N"TO V-TEAM-FLAG
002320 END-EVALUATE
002340 END-PERFORM
002350 IFNOT V-TEAM THENDISPLAY
002360 "INVALID TEAM CODE ENTERED-"
002370 "RE-ENTER BOTH TEAM CODES AGAIN."
002380 END-IF. 002390*******************************************************************
002400 VAL-SCORE.
002410 IF ( W-H-SCR > 9 ) OR ( W-A-SCR > 9 )
002420 THENPERFORM BIG-SCORE
002430 END-IF
002440 IF ( W-H-SCR NOTNUMERIC) OR ( W-H-SCR NOTNUMERIC)
002450 THENMOVE"N"TO V-SCORE-FLAG
002460 ELSEMOVE"Y"TO V-SCORE-FLAG
002470 END-IF
002480 IFNOT V-SCORE THEN
002490 DISPLAY"INVALID SCORE ENTRY. PLEASE RE-ENTER SCORE."
002500 END-IF. 002510*******************************************************************
002520 BIG-SCORE. 002525* Putting a STOP RUN in this paragraph is probably 002527* very bad programming practise. Better logic could be used!
002530 DISPLAY"A team has scored more than 10 goals. "
002540 DISPLAY"This program will terminate now. "
002550 DISPLAY"Following this, the record in Input.rec "
002560 DISPLAY"will have to be ammended manually"
002580 DISPLAY" Following this perform SORT ONLY procedure."
002600 ACCEPT ENDING-KEY
002610 STOPRUN.
002620 002630*******************************************************************
002640 CALC-POINTS.
002650 IF TAB-SCORE (1) > TAB-SCORE (2) THEN
002660 MOVE 3 TO TAB-POINTS (1)
002670 ELSE
002680 IF TAB-SCORE (2) > TAB-SCORE (1) THEN
002690 ADD 3 TO TAB-POINTS (2)
002700 ELSE
002710 MOVE 1 TO TAB-POINTS (1)
002720 MOVE 1 TO TAB-POINTS (2)
002730 END-IF
002740 END-IF.
002750 002760*******************************************************************
002770 UPDATE-RECORD.
002790 MOVE 1 TO N
002800 MOVE 1 TO M
002810 OPEN I-O TEAM-REC-IN
002820 PERFORMUNTIL M > 20
002830 READ TEAM-REC-IN
002840 ATEND
002850 DISPLAY TEAM (1) " has details ammended"
002860 NOTATEND
002870 IF TEAM (1) = TEAM-CODE THEN
002880 PERFORM ADJUST-DATA
002890
002900 END-IF
002910 ADD 1 TO M
002920 END-READ
002930 END-PERFORM
002940
002950 CLOSE TEAM-REC-IN
002955
002970 MOVE 2 TO N
002980 MOVE 1 TO M
002980
002990 OPEN I-O TEAM-REC-IN
003000 PERFORMUNTIL M > 20
003010 READ TEAM-REC-IN
003020 ATEND
003030 DISPLAY TEAM (2) " has details ammended"
003040 NOTATEND
003050 IF TEAM (2) = TEAM-CODE THEN
003060 PERFORM ADJUST-DATA
003080 END-IF
003090 ADD 1 TO M
003100 END-READ
003110 END-PERFORM
003120 CLOSE TEAM-REC-IN
003130 DISPLAY"Table has been updated". 003140*******************************************************************
003150 ADJUST-DATA.
003160 IF N = 1 THENMOVE 2 TO SWITCH
003170 ELSEMOVE 1 TO SWITCH
003180 END-IF
003190 ADD TAB-SCORE (N) TO GOALS-FOR
003200 ADD TAB-SCORE (SWITCH) TO GOALS-AGST
003210 SUBTRACT GOALS-AGST FROM GOALS-FOR GIVING GOAL-DIFF
003220 ADD TAB-POINTS (N) TO POINTS
003230 ADD 1 TO PLAYED
003240 EVALUATE TAB-POINTS (N)
003250 WHEN 3 ADD 1 TO G-WON
003260 WHENZEROADD 1 TO G-LOST
003270 WHEN 1 ADD 1 TO G-DRAWN
003280 END-EVALUATE
003290 REWRITE TEAM-REC. 003300*******************************************************************
003310 SORT-TABLE.
003320 SORT WORK-FILE
003330 ONDESCENDINGKEY POINTS-KEY GD-KEY GF-KEY
003340 USING TEAM-REC-IN
003350 GIVING SORT-OUT.
003360 003370*******************************************************************
003380 PRINT-TABLE.
003390 ACCEPT W-DATE FROMDATE
003400 MOVE W-DAY TO P-DAY
003410 MOVE W-MON TO P-MON
003420 MOVE W-YEAR TO P-YEAR
003430
003440 OPENINPUT SORT-OUT
003450 OUTPUT PRINT-FILE
003460
003470 WRITE TEXT-OUT FROM P-TITLE AFTER 1 LINE
003480 WRITE TEXT-OUT FROM P-UNDERLINE AFTER 1 LINE
003490 WRITE TEXT-OUT FROM P-GAP AFTER 1 LINE
003500 WRITE TEXT-OUT FROM P-HEADER AFTER 1 LINE
003510 MOVE 1 TO N
003520 PERFORMUNTIL N > 20
003530 READ SORT-OUT
003540 ATENDMOVE"Y"TO EOF-FLAG
003550 NOTATEND
003560 MOVE N TO P-TAB-POS
003570 MOVE STEAM-NAME TO P-TEAM
003580 MOVE SPLAYED TO P-PLAYED
003590 MOVE SG-WON TO P-G-WON
003600 MOVE SG-LOST TO P-G-LOST
003610 MOVE SG-DRAWN TO P-G-DRAWN
003620 MOVE SGOALS-FOR TO P-GOALS-FOR
003630 MOVE SGOALS-AGST TO P-GOALS-AGST
003650 MOVE SGOAL-DIFF TO P-GOAL-DIFF
003660 MOVE SPOINTS TO P-POINTS
003670
003680 WRITE TEXT-OUT FROM W-TEXT-OUT
003700 END-READ
003710 ADD 1 TO N
003720 END-PERFORM
003730 CLOSE SORT-OUT PRINT-FILE
003740 DISPLAY"Table is now written to the printer". 003750*******************************************************************
Messung V0.5
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.10Bemerkung:
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.