IDENTIFICATION DIVISION. PROGRAM-ID. HW05BH. AUTHOR. Brian Hamil. DATE-WRITTEN. 2/04/19. DATA DIVISION. WORKING-STORAGE SECTION. 01 EMPLOYEE-RECORD-IN. 05 EMP-PAY-DATE-IN. 10 EMP-PAY-YY PIC X(02). 10 EMP-PAY-MM PIC X(02). 10 EMP-PAY-DD PIC X(02). 05 EMP-NUMBER PIC X(03). 05 EMP-NAME. 10 EMP-LAST-NAME PIC X(15). 10 EMP-FIRST-NAME PIC X(10). 05 HOURS-WORKED PIC 99V99. 05 PAY-RATE PIC 99V99. 05 EMP-PAY-TYPE PIC X. 88 HOURLY-PAY VALUE 'H', 'h'. 88 SALARY-PAY VALUE 'S', 's'. 05 EMP-POSITION PIC X. 88 PROGRAMMER VALUE 'P', 'p'. 88 ACCOUNTANT VALUE 'A', 'a'. 88 MANAGER VALUE 'M', 'm'. 88 INTERN VALUE 'I', 'i'. 88 TESTER VALUE 'T', 't'. 88 DEFALUT VALUE 'X', 'x'. 01 EMP-TITLE PIC X(18). 01 EMP-PAY-DISPLAY PIC X(18). 01 EMP-MESSAGE PIC X(30). 01 EMP-TAX-RATE PIC V99 VALUE .32. 01 EMPLOYEE-PAY-TOTALS. 05 EMP-GROSS-PAY PIC 9(04)V99. 05 EMP-NET-PAY PIC 9(04)V99. 05 EMP-TAXES PIC 9(04)V99. 05 EMP-OVERTIME-RATE PIC 9(02)V99. 05 EMP-OVERTIME-PAY PIC 9(04)V99. 01 PROGRAM-TOTALS. 05 LOOP-COUNTER PIC 999(03) VALUE 1. 05 RECORD-LEN PIC 999(03) VALUE 16. 05 TOTAL-GROSS-PAY PIC 9(05)V99. 05 TOTAL-NET-PAY PIC 9(05)V99. 05 TOTAL-TAXES PIC 9(05)V99. 05 TOTAL-HOURS-S PIC 9(03)V99. 05 TOTAL-HOURS-H PIC 9(03)V99. 05 TOTAL-HOURS PIC 9(03)V99. 05 SYS-DATE. 10 SYS-YEAR PIC 9(04). 10 SYS-MONTH PIC 9(02). 10 SYS-DAY PIC 9(02). 05 AVERAGE-GROSS-PAY PIC 9(05)V99. 05 AVERAGE-TAXES PIC 9(05)V99. 05 AVERAGE-NET-PAY PIC 9(05)V99. 05 TEMP PIC 9(05). 05 OVERTIME-HOURS PIC 9(03)V99. 05 OVERTIME-HOURLY PIC 9(03)V99. 05 OVERTIME-SALARY PIC 9(03)V99. 05 TOTAL-OVERTIME PIC 9(03)V99. 05 OVERTIME-PAY PIC 9(04)V99. 01 WS-POSITIONS. 05 WS-PROGRAMMER. 10 WS-PROGRAMMER-CODE PIC X(01) VALUE 'P'. 10 WS-PROGRAMMER-TITLE PIC X(18) VALUE 'PROGRAMMER'. 10 WS-PROGRAMMER-RATE PIC 9(02)V99 VALUE 65.00. 05 WS-ACCOUNTANT. 10 WS-ACCOUNTANT-CODE PIC X(01) VALUE 'A'. 10 WS-ACCOUNTANT-TITLE PIC X(18) VALUE 'ACCOUNTANT'. 10 WS-ACCOUNTANT-RATE PIC 9(02)V99 VALUE 58.00. 05 WS-MANAGER. 10 WS-MANAGER-CODE PIC X(01) VALUE 'M'. 10 WS-MANAGER-TITLE PIC X(18) VALUE 'MANAGER'. 10 WS-MANAGER-RATE PIC 9(02)V99 VALUE 62.00. 05 WS-INTERN. 10 WS-INTERN-CODE PIC X(01) VALUE 'I'. 10 WS-INTERN-TITLE PIC X(18) VALUE 'INTERN'. 10 WS-INTERN-RATE PIC 9(02)V99 VALUE 22.00. 05 WS-TESTER. 10 WS-TESTER-CODE PIC X(01) VALUE 'T'. 10 WS-TESTER-TITLE PIC X(18) VALUE 'TESTER'. 10 WS-TESTER-RATE PIC 9(02)V99 VALUE 22.00. 05 WS-DEFAULT. 10 WS-DEFAULT-CODE PIC X(01) VALUE 'X'. 10 WS-DEFAULT-TITLE PIC X(18) VALUE 'UNDEFINED POSITION'. 10 WS-DEFAULT-RATE PIC 9(02)V99 VALUE 20.00. PROCEDURE DIVISION. 0000-DRIVER. 0100-INITIALIZE-PROGRAM. 1000-PROCESS-PAYROLL-RECORDS. 1100-DETERMINE-POSITION-AND-PAY. 1200-CALCULATE-PAYROLL. 1300-UPDATE-PROGRAM-TOTALS. 1400-DISPLAY-PAYROLL-RECORD-INFO. 1900-ACCEPT-RECORD. 2000-PROVIDE-FINAL-TOTALS. 3000-CLOSE-PROGRAM. DISPLAY 'PAYROLL HW04BH FOR Brian Hamil.'. DISPLAY WS-PROGRAMMER-CODE ' ' WS-PROGRAMMER-TITLE ' ' WS-PROGRAMMER-RATE DISPLAY WS-ACCOUNTANT-CODE ' ' WS-ACCOUNTANT-TITLE ' ' WS-ACCOUNTANT-RATE DISPLAY WS-MANAGER-CODE ' ' WS-MANAGER-TITLE ' ' WS-MANAGER-RATE DISPLAY WS-INTERN-CODE ' ' WS-INTERN-TITLE ' ' WS-INTERN-RATE DISPLAY WS-TESTER-CODE ' ' WS-TESTER-TITLE ' ' WS-TESTER-RATE DISPLAY WS-DEFAULT-CODE ' ' WS-DEFAULT-TITLE ' ' WS-DEFAULT-RATE DISPLAY ' -- BEGINNING OF RECORDS --'. DISPLAY '--'. PERFORM UNTIL LOOP-COUNTER = 16 ACCEPT EMPLOYEE-RECORD-IN EVALUATE TRUE WHEN HOURLY-PAY MOVE 'HOURLY' TO EMP-PAY-DISPLAY WHEN SALARY-PAY MOVE 'SALARY' TO EMP-PAY-DISPLAY MOVE ' -- NOT ELIGIBLE --' TO EMP-MESSAGE MOVE 0 TO EMP-OVERTIME-PAY MOVE 0 TO EMP-OVERTIME-RATE WHEN OTHER MOVE 'INVALID' TO EMP-PAY-DISPLAY END-EVALUATE EVALUATE TRUE WHEN PROGRAMMER MOVE WS-PROGRAMMER-RATE TO PAY-RATE MOVE WS-PROGRAMMER-CODE TO EMP-POSITION MOVE WS-PROGRAMMER-TITLE TO EMP-TITLE WHEN ACCOUNTANT MOVE WS-ACCOUNTANT-RATE TO PAY-RATE MOVE WS-ACCOUNTANT-CODE TO EMP-POSITION MOVE WS-ACCOUNTANT-TITLE TO EMP-TITLE WHEN MANAGER MOVE WS-MANAGER-RATE TO PAY-RATE MOVE WS-MANAGER-CODE TO EMP-POSITION MOVE WS-MANAGER-TITLE TO EMP-TITLE WHEN INTERN MOVE WS-INTERN-RATE TO PAY-RATE MOVE WS-INTERN-CODE TO EMP-POSITION MOVE WS-INTERN-TITLE TO EMP-TITLE WHEN TESTER MOVE WS-TESTER-RATE TO PAY-RATE MOVE WS-TESTER-CODE TO EMP-POSITION MOVE WS-TESTER-TITLE TO EMP-TITLE WHEN OTHER MOVE WS-DEFAULT-RATE TO PAY-RATE MOVE WS-DEFAULT-CODE TO EMP-POSITION MOVE WS-DEFAULT-TITLE TO EMP-TITLE END-EVALUATE IF HOURS-WORKED > 40 SUBTRACT 40 FROM HOURS-WORKED GIVING OVERTIME-HOURS IF EMP-PAY-TYPE = 'H' OR 'h' MULTIPLY PAY-RATE BY 1.5 GIVING EMP-OVERTIME-RATE MULTIPLY OVERTIME-HOURS BY EMP-OVERTIME-RATE GIVING EMP-OVERTIME-PAY MULTIPLY PAY-RATE BY 40 GIVING EMP-GROSS-PAY ADD EMP-OVERTIME-PAY TO EMP-GROSS-PAY GIVING EMP-GROSS-PAY ELSE IF EMP-PAY-TYPE = 'S' OR 's' MULTIPLY PAY-RATE BY 40 GIVING EMP-GROSS-PAY ELSE MULTIPLY PAY-RATE BY HOURS-WORKED GIVING EMP-GROSS-PAY ELSE MULTIPLY HOURS-WORKED BY PAY-RATE GIVING EMP-GROSS-PAY END-IF MULTIPLY EMP-GROSS-PAY BY EMP-TAX-RATE GIVING EMP-TAXES SUBTRACT EMP-TAXES FROM EMP-GROSS-PAY GIVING EMP-NET-PAY DISPLAY 'RECORD ENTRY : ' EMPLOYEE-RECORD-IN DISPLAY 'PAY DATE : ' EMP-PAY-MM '/' EMP-PAY-DD '/' EMP-PAY-YY DISPLAY 'EMPLOYEE NAME: ' EMP-LAST-NAME ', ' EMP-FIRST-NAME DISPLAY ' NUMBER : ' EMP-NUMBER DISPLAY ' HOURS : ' HOURS-WORKED DISPLAY ' OT HOURS : ' OVERTIME-HOURS DISPLAY ' PAY RATE : $' PAY-RATE DISPLAY ' OT RATE : $' EMP-OVERTIME-RATE EMP-MESSAGE DISPLAY ' POSITION : ' EMP-POSITION DISPLAY ' TITLE : ' EMP-TITLE DISPLAY ' PAY TYPE : ' EMP-PAY-DISPLAY DISPLAY ' GROSS PAY: $' EMP-GROSS-PAY DISPLAY ' OT PAY : $' EMP-OVERTIME-PAY EMP-MESSAGE DISPLAY ' TAXES : $' EMP-TAXES DISPLAY ' NET PAY : $' EMP-NET-PAY DISPLAY '--' ADD EMP-GROSS-PAY TO TOTAL-GROSS-PAY ADD EMP-TAXES TO TOTAL-TAXES ADD EMP-NET-PAY TO TOTAL-NET-PAY IF EMP-PAY-TYPE = 'H' OR 'h' ADD HOURS-WORKED TO TOTAL-HOURS-H ADD OVERTIME-HOURS TO OVERTIME-HOURLY ELSE ADD HOURS-WORKED TO TOTAL-HOURS-S ADD OVERTIME-HOURS TO OVERTIME-SALARY ADD 1 TO LOOP-COUNTER END-PERFORM. DISPLAY ' -- END OF RECORDS --'. ADD TOTAL-HOURS-H TO TOTAL-HOURS-S GIVING TOTAL-HOURS. ADD OVERTIME-SALARY TO OVERTIME-HOURLY GIVING TOTAL-OVERTIME. DIVIDE TOTAL-GROSS-PAY BY LOOP-COUNTER GIVING AVERAGE-GROSS-PAY. DIVIDE TOTAL-TAXES BY LOOP-COUNTER GIVING AVERAGE-TAXES. DIVIDE TOTAL-NET-PAY BY LOOP-COUNTER GIVING AVERAGE-NET-PAY MOVE FUNCTION CURRENT-DATE TO SYS-DATE. DISPLAY 'PROGRAM RUN DATE : ' SYS-MONTH '/' SYS-DAY '/' SYS-YEAR. DISPLAY '--'. DISPLAY ' TOTAL GROSS PAY : $' TOTAL-GROSS-PAY. DISPLAY ' TOTAL TAXES : $' TOTAL-TAXES. DISPLAY ' TOTAL NET PAY : $' TOTAL-NET-PAY. DISPLAY '--'. DISPLAY ' AVERAGE GROSS PAY : $' AVERAGE-GROSS-PAY. DISPLAY ' AVERAGE TAXES : $' AVERAGE-TAXES. DISPLAY ' AVERAGE NET PAY : $' AVERAGE-NET-PAY. DISPLAY '--'. DISPLAY ' NUMBER OF RECORDS : ' LOOP-COUNTER. DISPLAY ' TOTAL HOURLY HOURS : ' TOTAL-HOURS-H. DISPLAY ' TOTAL SALARY HOURS : ' TOTAL-HOURS-S. DISPLAY ' OVERALL HOURS : ' TOTAL-HOURS. DISPLAY ' TOTAL HOURLY OT : ' OVERTIME-HOURLY. DISPLAY ' TOTAL SALARY OT : ' OVERTIME-SALARY. DISPLAY ' OVERALL OT : ' TOTAL-OVERTIME. DISPLAY '--'. DISPLAY 'END OF PROGRAM FOR Brian Hamil'. STOP RUN.
We use cookies to provide and improve our services. By using our site, you consent to our Cookies Policy. Accept Learn more