IDENTIFICATION DIVISION. * PROGRAM-ID. DEMO1. AUTHOR. RUSSELL C. BJORK MODIFIED BY IRVIN J. LEVY. INSTALLATION. GORDON CS DEPT. DATE-WRITTEN. 3-DEC-1985 AND MODIFIED ON 14-FEB-1991. DATE-COMPILED. SECURITY. CLASS DEMO. * * THIS PROGRAM READS A FILE CONTAINING STUDENT NAME AND GRADE INFORMATION, * AND PRODUCES A FILE CONTAINING STUDENT NAMES AND GPA'S. INPUT GRADES ARE * EXPRESSED AS NUMERIC VALUES - E.G. A- IS REPRESENTED AS 3V7. * ENVIRONMENT DIVISION. * CONFIGURATION SECTION. SOURCE-COMPUTER. VAX-11. OBJECT-COMPUTER. VAX-11. * INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT INFILE ASSIGN TO "DEMO1.IN". SELECT OUTFILE ASSIGN TO "DEMO1.OUT". * DATA DIVISION. * FILE SECTION. * FD INFILE LABEL RECORDS ARE STANDARD DATA RECORD IS INREC. 01 INREC. 05 NAME PIC X(30). 05 STUDENT-ID PIC X(7). 05 G1 PIC 9V9. 05 G2 PIC 9V9. 05 G3 PIC 9V9. 05 G4 PIC 9V9. * FD OUTFILE LABEL RECORDS ARE STANDARD DATA RECORD IS OUTREC. 01 OUTREC. 05 STUDENT-ID PIC X(10). 05 NAME PIC X(30). 05 GPA PIC 9.99. * WORKING-STORAGE SECTION. * 77 EOF-SW PIC X VALUE "N". 88 EOF VALUE "Y". 77 GRADE-SUM PIC 99V9. * PROCEDURE DIVISION. * 0000-MAIN. OPEN INPUT INFILE. OPEN OUTPUT OUTFILE. PERFORM 1000-COMPUTE-ONE-STUDENTS-GPA UNTIL EOF. CLOSE INFILE. CLOSE OUTFILE. STOP RUN. * 1000-COMPUTE-ONE-STUDENTS-GPA. READ INFILE AT END MOVE "Y" TO EOF-SW. IF NOT EOF MOVE STUDENT-ID OF INREC TO STUDENT-ID OF OUTREC MOVE NAME OF INREC TO NAME OF OUTREC ADD G1, G2, G3, G4 GIVING GRADE-SUM DIVIDE GRADE-SUM BY 4 GIVING GPA WRITE OUTREC. * * * * ----------------------------------------------------------------- * * * IDENTIFICATION DIVISION. * PROGRAM-ID. DEMO2. AUTHOR. RUSSELL C. BJORK. INSTALLATION. GORDON CS DEPT. DATE-WRITTEN. 12/9/85. DATE-COMPILED. SECURITY. CLASS DEMO. * * THIS PROGRAM PRINTS REAL-ESTATE TAX BILLS FOR A SMALL TOWN. THE TAX * RATE (IN %) AND DUE DATE APPEAR AS ITEMS IN THE DATA DIVISION AND CAN * BE CHANGED AS NECESSARY. * ENVIRONMENT DIVISION. * CONFIGURATION SECTION. * SOURCE-COMPUTER. VAX-11. OBJECT-COMPUTER. VAX-11. * INPUT-OUTPUT SECTION. FILE-CONTROL. * SELECT ASSESSMENT-FILE ASSIGN TO "DEMO2.IN". SELECT BILL-FILE ASSIGN TO "DEMO2.OUT". * DATA DIVISION. * FILE SECTION. * FD ASSESSMENT-FILE LABEL RECORDS ARE STANDARD DATA RECORD IS ASSESSMENT-LINE. * 01 ASSESSMENT-LINE. 05 TAXPAYER-NAME. 10 LAST-NAME PIC X(15). 10 FIRST-NAME PIC X(15). 10 MI PIC X. 05 STREET-ADDRESS PIC X(30). 05 ASSESSED-VALUE PIC 999999. * FD BILL-FILE LABEL RECORDS ARE STANDARD DATA RECORD IS PRINT-LINE. * 01 PRINT-LINE PIC X(80). * WORKING-STORAGE SECTION. * 77 TAX-RATE PIC V9999 VALUE 0.02. 77 DATE-DUE PIC 999999 VALUE 121085. 77 EOF-SW PIC X VALUE "N". 88 EOF VALUE "Y". * 01 FIRST-LINE. 05 TAXPAYER-NAME. 10 FIRST-NAME PIC X(15). 10 MI PIC X. 10 FILLER PIC X VALUE SPACE. 10 LAST-NAME PIC X(15). 05 FILLER PIC X(18) VALUE SPACES. 05 FILLER PIC X(19) VALUE "ASSESSED VALUE: ". 05 ASSESSED-VALUE PIC $$$$,$$$.99. * 01 SECOND-LINE. 05 STREET-ADDRESS PIC X(30). 05 FILLER PIC X(20) VALUE SPACES. 05 FILLER PIC X(19) VALUE "TAX DUE: ". 05 TAX-DUE PIC $$$$,$$$.99. * 01 THIRD-LINE. 05 FILLER PIC X(30) VALUE "SKUNK HOLLOW, MA 01999 ". 05 FILLER PIC X(20) VALUE SPACES. 05 FILLER PIC X(19) VALUE "DUE BY: ". 05 DATE-DUE-OUT PIC BBBZ9/99/99. * PROCEDURE DIVISION. * 0000-PRODUCE-BILLS. OPEN INPUT ASSESSMENT-FILE. OPEN OUTPUT BILL-FILE. PERFORM 1100-READ-ASSESSMENT. PERFORM 1000-PRODUCE-ONE-BILL UNTIL EOF. CLOSE ASSESSMENT-FILE, BILL-FILE. STOP RUN. * 1000-PRODUCE-ONE-BILL. MOVE CORRESPONDING ASSESSMENT-LINE TO FIRST-LINE. MOVE FIRST-LINE TO PRINT-LINE. WRITE PRINT-LINE BEFORE ADVANCING 1 LINE. MOVE CORRESPONDING ASSESSMENT-LINE TO SECOND-LINE. MULTIPLY ASSESSED-VALUE OF ASSESSMENT-LINE BY TAX-RATE GIVING TAX-DUE. MOVE SECOND-LINE TO PRINT-LINE. WRITE PRINT-LINE BEFORE ADVANCING 1 LINE. MOVE DATE-DUE TO DATE-DUE-OUT. MOVE THIRD-LINE TO PRINT-LINE. WRITE PRINT-LINE BEFORE ADVANCING PAGE. PERFORM 1100-READ-ASSESSMENT. * 1100-READ-ASSESSMENT. READ ASSESSMENT-FILE AT END MOVE "Y" TO EOF-SW. * * * * ----------------------------------------------------------------- * * * IDENTIFICATION DIVISION. * PROGRAM-ID. DEMO3. AUTHOR. RUSSELL C. BJORK. INSTALLATION. GORDON CS DEPT. DATE-WRITTEN. 6-JAN-1985. DATE-COMPILED. SECURITY. CLASS DEMO. * * THIS PROGRAM READS A FILE CONTAINING STUDENT NAME AND GRADE INFORMATION, * AND PRODUCES A FILE CONTAINING STUDENT NAMES AND GPA'S. INPUT GRADES ARE * EXPRESSED AS LETTER GRADES. UP TO 4 GRADES PER STUDENT MAY BE REPORTED; * THE PROGRAM IGNORES ANY BLANK GRADE FIELDS AND CALCULATES GPA BY DIVIDING * BY THE NUMBER OF NON-BLANK GRADES. * ENVIRONMENT DIVISION. * CONFIGURATION SECTION. SOURCE-COMPUTER. VAX-11. OBJECT-COMPUTER. VAX-11. * INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT INFILE ASSIGN TO "DEMO3.IN". SELECT OUTFILE ASSIGN TO "DEMO3.OUT". * DATA DIVISION. * FILE SECTION. * FD INFILE LABEL RECORDS ARE STANDARD DATA RECORD IS INREC. 01 INREC. 05 NAME PIC X(30). 05 G1 PIC XX. 05 G2 PIC XX. 05 G3 PIC XX. 05 G4 PIC XX. * FD OUTFILE LABEL RECORDS ARE STANDARD DATA RECORD IS OUTREC. 01 OUTREC. 05 NAME PIC X(30). 05 GPA PIC 9.99. * WORKING-STORAGE SECTION. * 77 EOF-SW PIC X VALUE "N". 88 EOF VALUE "Y". 77 GRADE-COUNT PIC 99. 77 GP PIC 9V9. 77 GP-SUM PIC 99V9. * PROCEDURE DIVISION. * 0000-MAIN. OPEN INPUT INFILE. OPEN OUTPUT OUTFILE. PERFORM 1100-READ-INFILE. PERFORM 1000-COMPUTE-ONE-STUDENTS-GPA UNTIL EOF. CLOSE INFILE. CLOSE OUTFILE. STOP RUN. * 1000-COMPUTE-ONE-STUDENTS-GPA. MOVE NAME OF INREC TO NAME OF OUTREC MOVE ZEROES TO GRADE-COUNT, GP-SUM. IF G1 NOT = SPACES CALL "LETTER-TO-GRADE-POINT" USING G1, GP ADD 1 TO GRADE-COUNT ADD GP TO GP-SUM. IF G2 NOT = SPACES CALL "LETTER-TO-GRADE-POINT" USING G2, GP ADD 1 TO GRADE-COUNT ADD GP TO GP-SUM. IF G3 NOT = SPACES CALL "LETTER-TO-GRADE-POINT" USING G3, GP ADD 1 TO GRADE-COUNT ADD GP TO GP-SUM. IF G4 NOT = SPACES CALL "LETTER-TO-GRADE-POINT" USING G4, GP ADD 1 TO GRADE-COUNT ADD GP TO GP-SUM. DIVIDE GP-SUM BY GRADE-COUNT GIVING GPA WRITE OUTREC. PERFORM 1100-READ-INFILE. * 1100-READ-INFILE. READ INFILE AT END MOVE "Y" TO EOF-SW. * * * * ----------------------------------------------------------------- * * * IDENTIFICATION DIVISION. * PROGRAM-ID. DEMO4. AUTHOR. RUSSELL C. BJORK. INSTALLATION. GORDON COLLEGE CS DEPT. DATE-WRITTEN. 31-JAN-1986. DATE-COMPILED. SECURITY. CLASS DEMONSTRATION. * * THIS PROGRAM PRINTS MAILING LABELS "4 UP" * ENVIRONMENT DIVISION. * CONFIGURATION SECTION. SOURCE-COMPUTER. VAX-11. OBJECT-COMPUTER. VAX-11. * INPUT-OUTPUT SECTION. FILE-CONTROL. * SELECT MAILING-LIST ASSIGN TO "DEMO4.IN". SELECT LABELS-FILE ASSIGN TO "DEMO4.OUT". * DATA DIVISION. * FILE SECTION. * FD MAILING-LIST LABEL RECORDS STANDARD DATA RECORD IS RECIPIENT. * 01 RECIPIENT. 05 NAME PIC X(30). 05 STREET-ADDRESS PIC X(30). 05 CITY PIC X(20). 05 STATE PIC X(2). 05 ZIP PIC 9(5). 05 REMOVE-DATE PIC 9(6). * FD LABELS-FILE LABEL RECORDS STANDARD DATA RECORD IS LABEL-LINE. * 01 LABEL-LINE PIC X(132). * WORKING-STORAGE SECTION. * 01 NAME-LINE. 02 NAME-ENTRY OCCURS 4 TIMES. 05 FILLER PIC X(2). 05 NAME PIC X(30). 05 FILLER PIC X. 01 ADDRESS-LINE. 02 ADDRESS-ENTRY OCCURS 4 TIMES. 05 FILLER PIC X(2). 05 STREET-ADDRESS PIC X(30). 05 FILLER PIC X. 01 CITY-LINE. 02 CITY-STATE-ZIP-ENTRY OCCURS 4 TIMES. 05 FILLER PIC X(2). 05 CITY PIC X(20). 05 FILLER PIC X. 05 STATE PIC X(2). 05 FILLER PIC X. 05 ZIP PIC 9(5). 05 FILLER PIC X(2). * 77 EOF-SW PIC X VALUE "N". 88 EOF VALUE "Y". 77 TODAY PIC 9(6). 77 I PIC 9. * PROCEDURE DIVISION. * 0000-PRODUCE-LABELS. OPEN INPUT MAILING-LIST, OUTPUT LABELS-FILE. PERFORM 1110-READ-VALID-RECIPIENT. ACCEPT TODAY FROM DATE. PERFORM 1000-PRODUCE-4-LABELS UNTIL EOF. CLOSE MAILING-LIST, LABELS-FILE. STOP RUN. * 1000-PRODUCE-4-LABELS. MOVE SPACES TO NAME-LINE, ADDRESS-LINE, CITY-LINE. PERFORM 1100-GET-ONE-RECIPIENT VARYING I FROM 1 BY 1 UNTIL (I > 4) OR EOF. MOVE SPACES TO LABEL-LINE. WRITE LABEL-LINE BEFORE ADVANCING 1 LINE. WRITE LABEL-LINE FROM NAME-LINE BEFORE ADVANCING 1 LINE. WRITE LABEL-LINE FROM ADDRESS-LINE BEFORE ADVANCING 1 LINE. WRITE LABEL-LINE FROM CITY-LINE BEFORE ADVANCING 3 LINES. * 1100-GET-ONE-RECIPIENT. MOVE CORRESPONDING RECIPIENT TO NAME-ENTRY(I). MOVE CORRESPONDING RECIPIENT TO ADDRESS-ENTRY(I). MOVE CORRESPONDING RECIPIENT TO CITY-STATE-ZIP-ENTRY(I). PERFORM 1110-READ-VALID-RECIPIENT. * 1110-READ-VALID-RECIPIENT. PERFORM 1111-READ-MAILING-LIST. IF REMOVE-DATE < TODAY PERFORM 1111-READ-MAILING-LIST UNTIL EOF OR (REMOVE-DATE NOT < TODAY). 1111-READ-MAILING-LIST. READ MAILING-LIST AT END MOVE "Y" TO EOF-SW. * * * * ----------------------------------------------------------------- * * * IDENTIFICATION DIVISION. * PROGRAM-ID. DEMO5. AUTHOR. RUSSELL C. BJORK. INSTALLATION. GORDON CS DEPT. DATE-WRITTEN. 24-JAN-1985. DATE-COMPILED. SECURITY. INSTRUCTOR PROGRAM. * * THIS PROGRAM UPDATES A COURSE MASTER FILE ACCORDING TO A TRANSACTION FILE * CONTAINING TRANSACTIONS TO ADD AND DELETE COURSES, CHANGE THEIR LIMITS, * AND ENROLL OR DROP STUDENTS. IT ALSO PERFORMS DATA VALIDATION ON THE * TRANSACTIONS. * ENVIRONMENT DIVISION. * CONFIGURATION SECTION. SOURCE-COMPUTER. VAX-11. OBJECT-COMPUTER. VAX-11. * INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT OLD-MASTER ASSIGN TO "DEMO5.MAS". SELECT NEW-MASTER ASSIGN TO "DEMO5.OUT". SELECT TRANSACTIONS ASSIGN TO "DEMO5.TRA". * DATA DIVISION. * FILE SECTION. * FD OLD-MASTER LABEL RECORDS ARE STANDARD, DATA RECORD IS OLD-MASTER-REC. * 01 OLD-MASTER-REC. 05 QUARTER PIC 9. 05 COURSE-ID. 10 DEPARTMENT PIC XX. 10 COURSE-NUMBER PIC 999. 10 SECTION-LETTER PIC X. 05 TITLE PIC X(24). 05 CREDITS PIC 9V9. 05 DAYS PIC X(5). 05 START-TIME PIC 9(4). 05 END-TIME PIC 9(4). 05 INSTRUCTOR PIC X(12). 05 ROOM PIC X(4). 05 ENROLLMENT-LIMIT PIC 9(3). 05 CURRENT-ENROLLMENT PIC 9(3). * FD NEW-MASTER LABEL RECORDS ARE STANDARD, DATA RECORD IS NEW-MASTER-REC. * 01 NEW-MASTER-REC. 05 QUARTER PIC 9. 05 COURSE-ID. 10 DEPARTMENT PIC XX. 10 COURSE-NUMBER PIC 999. 10 SECTION-LETTER PIC X. 05 TITLE PIC X(24). 05 CREDITS PIC 9V9. 05 DAYS PIC X(5). 05 START-TIME PIC 9(4). 05 END-TIME PIC 9(4). 05 INSTRUCTOR PIC X(12). 05 ROOM PIC X(4). 05 ENROLLMENT-LIMIT PIC 9(3). 05 CURRENT-ENROLLMENT PIC 9(3). * FD TRANSACTIONS LABEL RECORDS ARE STANDARD DATA RECORD IS TRANSACTION-REC. 01 TRANSACTION-REC. 05 QUARTER PIC 9. 05 COURSE-ID. 10 DEPARTMENT PIC XX. 10 COURSE-NUMBER PIC 999. 10 SECTION-LETTER PIC X. 05 TRANSACTION-TYPE PIC X(6). 88 ENROLL-TRA VALUE "ENROLL". 88 DROP-TRA VALUE "DROP ". 88 LIMIT-TRA VALUE "LIMIT ". 88 ADD-TRA VALUE "ADD ". 88 DELETE-TRA VALUE "DELETE". 05 LIMIT-DATA. 10 ENROLLMENT-LIMIT PIC 999. 10 FILLER PIC X(55). 05 ADD-DATA REDEFINES LIMIT-DATA. 10 TITLE PIC X(24). 10 CREDITS PIC 9V9. 10 DAYS PIC X(5). 10 START-TIME PIC 9(4). 10 END-TIME PIC 9(4). 10 INSTRUCTOR PIC X(12). 10 ROOM PIC X(4). 10 ENROLLMENT-LIMIT PIC 9(3). * WORKING-STORAGE SECTION. * 01 SAVED-REC PIC X(68) VALUE SPACES. 88 NO-RECORD-SAVED VALUE SPACES. 01 ERROR-MESSAGE PIC X(26). 77 EOF-M-SW PIC X VALUE "N". 88 EOF-M VALUE "Y". 77 EOF-T-SW PIC X VALUE "N". 88 EOF-T VALUE "Y". * PROCEDURE DIVISION. * 0000-MAINTAIN-COURSE-FILE. OPEN INPUT OLD-MASTER, TRANSACTIONS, OUTPUT NEW-MASTER. PERFORM 1100-READ-OLD-MASTER. PERFORM 1200-READ-TRANSACTION. PERFORM 1000-PROCESS-ONE-RECORD UNTIL EOF-M AND EOF-T AND NO-RECORD-SAVED. CLOSE OLD-MASTER, TRANSACTIONS, NEW-MASTER. STOP RUN. * 1000-PROCESS-ONE-RECORD. IF COURSE-ID OF OLD-MASTER-REC < COURSE-ID OF TRANSACTION-REC WRITE NEW-MASTER-REC FROM OLD-MASTER-REC PERFORM 1100-READ-OLD-MASTER ELSE IF COURSE-ID OF OLD-MASTER-REC > COURSE-ID OF TRANSACTION-REC IF NOT ADD-TRA MOVE "No master record for: " TO ERROR-MESSAGE PERFORM 1900-DISPLAY-ERROR-MESSAGE PERFORM 1200-READ-TRANSACTION ELSE PERFORM 1300-ADD-NEW-RECORD PERFORM 1200-READ-TRANSACTION ELSE IF ENROLL-TRA PERFORM 1400-ENROLL-STUDENT PERFORM 1200-READ-TRANSACTION ELSE IF DROP-TRA PERFORM 1500-DROP-STUDENT PERFORM 1200-READ-TRANSACTION ELSE IF LIMIT-TRA PERFORM 1600-CHANGE-LIMIT PERFORM 1200-READ-TRANSACTION ELSE IF DELETE-TRA PERFORM 1100-READ-OLD-MASTER PERFORM 1200-READ-TRANSACTION ELSE IF ADD-TRA MOVE "Duplicate ADD: " TO ERROR-MESSAGE PERFORM 1900-DISPLAY-ERROR-MESSAGE PERFORM 1200-READ-TRANSACTION ELSE MOVE "Invalid transaction type: " TO ERROR-MESSAGE PERFORM 1900-DISPLAY-ERROR-MESSAGE PERFORM 1200-READ-TRANSACTION. * 1100-READ-OLD-MASTER. IF NO-RECORD-SAVED READ OLD-MASTER AT END MOVE "Y" TO EOF-M-SW MOVE HIGH-VALUES TO OLD-MASTER-REC ELSE MOVE SAVED-REC TO OLD-MASTER-REC MOVE SPACES TO SAVED-REC. * 1200-READ-TRANSACTION. READ TRANSACTIONS AT END MOVE "Y" TO EOF-T-SW MOVE HIGH-VALUES TO TRANSACTION-REC. * 1300-ADD-NEW-RECORD. MOVE OLD-MASTER-REC TO SAVED-REC. MOVE CORRESPONDING TRANSACTION-REC TO OLD-MASTER-REC. MOVE CORRESPONDING ADD-DATA OF TRANSACTION-REC TO OLD-MASTER-REC. MOVE ZERO TO CURRENT-ENROLLMENT OF OLD-MASTER-REC. * 1400-ENROLL-STUDENT. IF CURRENT-ENROLLMENT OF OLD-MASTER-REC NOT < ENROLLMENT-LIMIT OF OLD-MASTER-REC MOVE "Course is closed: " TO ERROR-MESSAGE PERFORM 1900-DISPLAY-ERROR-MESSAGE ELSE ADD 1 TO CURRENT-ENROLLMENT OF OLD-MASTER-REC. * 1500-DROP-STUDENT. IF CURRENT-ENROLLMENT OF OLD-MASTER-REC NOT > 0 MOVE "Course is empty: " TO ERROR-MESSAGE PERFORM 1900-DISPLAY-ERROR-MESSAGE ELSE SUBTRACT 1 FROM CURRENT-ENROLLMENT OF OLD-MASTER-REC. * 1600-CHANGE-LIMIT. IF ENROLLMENT-LIMIT OF LIMIT-DATA IS NOT NUMERIC MOVE "Non numeric data: " TO ERROR-MESSAGE PERFORM 1900-DISPLAY-ERROR-MESSAGE ELSE MOVE CORRESPONDING LIMIT-DATA TO OLD-MASTER-REC. * 1900-DISPLAY-ERROR-MESSAGE. DISPLAY ERROR-MESSAGE, TRANSACTION-REC. * * * * ----------------------------------------------------------------- * * * IDENTIFICATION DIVISION. * PROGRAM-ID. DEMO6. AUTHOR. RUSSELL C. BJORK. INSTALLATION. GORDON COLLEGE CS DEPT. DATE-WRITTEN. 10-FEB-1986. DATE-COMPILED. SECURITY. CLASS DEMO. * * This program processes interactive queries about courses in an indexed * version of the Gordon College course file. The user will input the name * a faculty member's name, and the program will print information on all * courses (s)he teaches. * ENVIRONMENT DIVISION. * CONFIGURATION SECTION. SOURCE-COMPUTER. VAX-11. OBJECT-COMPUTER. VAX-11. * INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT COURSE-FILE ASSIGN TO "DEMO6.IN" ORGANIZATION INDEXED ACCESS DYNAMIC RECORD KEY IS COURSE-ID ALTERNATE RECORD KEY IS INSTRUCTOR WITH DUPLICATES. * DATA DIVISION. * FILE SECTION. * FD COURSE-FILE LABEL RECORDS ARE STANDARD DATA RECORD IS COURSE-REC. 01 COURSE-REC. 05 COURSE-ID. 10 QUARTER PIC 9. 10 DEPARTMENT PIC XX. 10 COURSE-NUMBER PIC 999. 10 SECTION-LETTER PIC X. 05 TITLE PIC X(24). 05 CREDITS PIC 9V9. 05 DAYS PIC X(5). 05 START-TIME PIC 9(4). 05 END-TIME PIC 9(4). 05 INSTRUCTOR PIC X(12). 05 ROOM PIC X(4). 05 ENROLLMENT-LIMIT PIC 9(3). 05 CURRENT-ENROLLMENT PIC 9(3). * WORKING-STORAGE SECTION. * 01 INSTRUCTOR-IN PIC X(12). 77 PROF-EXISTS-SW PIC X. 88 PROF-EXISTS VALUE "Y". * PROCEDURE DIVISION. * 0000-PROCESS-QUERIES. OPEN INPUT COURSE-FILE. PERFORM 1200-ACCEPT-QUERY. PERFORM 1000-RESPOND-TO-QUERY UNTIL INSTRUCTOR-IN = SPACES. CLOSE COURSE-FILE. STOP RUN. * 1000-RESPOND-TO-QUERY. MOVE "Y" TO PROF-EXISTS-SW. MOVE INSTRUCTOR-IN TO INSTRUCTOR. START COURSE-FILE KEY = INSTRUCTOR INVALID KEY MOVE "N" TO PROF-EXISTS-SW. IF PROF-EXISTS PERFORM 1110-READ-NEXT-PROF PERFORM 1100-DISPLAY-COURSE-INFO UNTIL INSTRUCTOR NOT = INSTRUCTOR-IN. PERFORM 1200-ACCEPT-QUERY. * 1100-DISPLAY-COURSE-INFO. DISPLAY QUARTER, " ", DEPARTMENT, COURSE-NUMBER, SECTION-LETTER, " ", TITLE. PERFORM 1110-READ-NEXT-PROF. * 1110-READ-NEXT-PROF. READ COURSE-FILE NEXT RECORD AT END MOVE SPACES TO INSTRUCTOR. * 1200-ACCEPT-QUERY. DISPLAY "". DISPLAY "Instructor? " WITH NO ADVANCING. MOVE SPACES TO INSTRUCTOR-IN. ACCEPT INSTRUCTOR-IN. DISPLAY "". * * * * ----------------------------------------------------------------- * * * IDENTIFICATION DIVISION. PROGRAM-ID. DEMO7. AUTHOR. RUSSELL C. BJORK. INSTALLATION. GORDON COLLEGE. DATE-WRITTEN. MARCH 12, 1981. * REVISED 7-FEB-1986. DATE-COMPILED. SECURITY. CLASS DEMO. * * THIS PROGRAM HANDLES MONTHLY UPDATE OF A CHECKING ACCOUNT * INPUT IS FREE-FORM FROM USER TERMINAL. FIRST THE STARTING BALANCE * IS REQUESTED, THEN A SERIES OF TRANSACTIONS OF THE FORM: * * DEP amount * OR check-no amount * * EXECUTION TERMINATES WHEN THE USER TYPES END AT A TRANSACTION REQUEST. * AT THIS POINT, HIS FINAL BALANCE IS PRINTED. * * ALL NUMERIC AMOUNTS ARE CHECKED TO BE SURE THEY CONSIST OF A DOLLAR * AMOUNT, A ".", AND TWO DIGITS FOR CENTS. A LEADING "$" IS OPTIONAL. * ENVIRONMENT DIVISION. * CONFIGURATION SECTION. SOURCE-COMPUTER. VAX-11. OBJECT-COMPUTER. VAX-11. * INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT TTY-IN ASSIGN TO "TT:". SELECT TTY-OUT ASSIGN TO "TT:". * DATA DIVISION. * FILE SECTION. * FD TTY-IN LABEL RECORDS ARE STANDARD RECORD CONTAINS 80 CHARACTERS DATA RECORD IS FREE-FORM-LINE. 01 FREE-FORM-LINE PIC X(80). * FD TTY-OUT LABEL RECORDS ARE STANDARD RECORD CONTAINS 80 CHARACTERS DATA RECORD IS TTY-OUT-REC. 01 TTY-OUT-REC PIC X(80). * WORKING-STORAGE SECTION. * 01 PARSE-FIELDS. 05 COMMAND PIC XXX JUSTIFIED RIGHT. 88 DEPOSIT VALUE "DEP". 88 FINISHED VALUE "END". 05 CHECK-NO REDEFINES COMMAND PIC 999. 05 AMOUNT PIC 99999V99. 05 SPLIT-AMOUNT REDEFINES AMOUNT. 10 DOLLARS PIC XXXXX JUSTIFIED RIGHT. 10 CENTS PIC XX. 05 NUMBER-OF-FIELDS PIC 99. 05 CENTS-COUNT PIC 99. 05 EXCESS PIC X(80). * 01 BALANCE-FIELDS. 05 BALANCE PIC S99999V99 VALUE ZERO. 05 SPLIT-BAL REDEFINES BALANCE. 10 BAL-DOLLARS PIC S99999. 10 BAL-CENTS PIC 99. * 01 WARNING-MESSAGE-FIELDS. 05 FORMATTED-AMOUNT PIC $(5)9.99. 05 FORMATTED-AMOUNT-ALPHA REDEFINES FORMATTED-AMOUNT PIC X(9). 05 COMPRESSED-AMOUNT PIC X(9). 05 FORMATTED-BALANCE PIC $(5)9.99. 05 FORMATTED-BALANCE-ALPHA REDEFINES FORMATTED-BALANCE PIC X(9). 05 COMPRESSED-BALANCE PIC X(9). * 01 WARNING-MESSAGE PIC X(80). * 01 FINAL-REPORT. 05 FILLER PIC X(18) VALUE "Final balance is: ". 05 FINAL-BALANCE PIC $(5)9.99DB. * 77 AMOUNT-ERROR-SW PIC X. 88 AMOUNT-ERROR VALUE "Y". * PROCEDURE DIVISION. * 0000-BALANCE-CHECKBOOK. OPEN INPUT TTY-IN OUTPUT TTY-OUT. DISPLAY " ". DISPLAY "Checking Account balancer". DISPLAY " ". PERFORM 1000-INITIALIZE-BALANCE. PERFORM 2000-PROCESS-ONE-TRANSACTION UNTIL FINISHED. PERFORM 3000-DISPLAY-FINAL-BALANCE. STOP RUN. * 1000-INITIALIZE-BALANCE. MOVE "Y" TO AMOUNT-ERROR-SW. PERFORM 1100-ACCEPT-STARTING-BALANCE UNTIL NOT AMOUNT-ERROR. MOVE AMOUNT TO BALANCE. * 1100-ACCEPT-STARTING-BALANCE. DISPLAY "Previous balance? " WITH NO ADVANCING. PERFORM 2110-ACCEPT-FREE-FORM-LINE. PERFORM 2120-EXTRACT-AMOUNT. IF AMOUNT-ERROR PERFORM 2900-ERROR-MESSAGE. * 2000-PROCESS-ONE-TRANSACTION. DISPLAY "Next transaction? " WITH NO ADVANCING. PERFORM 2110-ACCEPT-FREE-FORM-LINE. MOVE ZERO TO NUMBER-OF-FIELDS. UNSTRING FREE-FORM-LINE DELIMITED BY ALL SPACES INTO COMMAND EXCESS TALLYING IN NUMBER-OF-FIELDS. MOVE EXCESS TO FREE-FORM-LINE. INSPECT CHECK-NO REPLACING LEADING SPACES BY "0". IF FINISHED NEXT SENTENCE ELSE IF NUMBER-OF-FIELDS < 2 PERFORM 2900-ERROR-MESSAGE ELSE IF DEPOSIT OR CHECK-NO IS NUMERIC PERFORM 2120-EXTRACT-AMOUNT IF AMOUNT-ERROR PERFORM 2900-ERROR-MESSAGE ELSE IF DEPOSIT ADD AMOUNT TO BALANCE ELSE SUBTRACT AMOUNT FROM BALANCE PERFORM 2200-CHECK-NEG-BALANCE ELSE PERFORM 2900-ERROR-MESSAGE. * 2110-ACCEPT-FREE-FORM-LINE. MOVE SPACES TO FREE-FORM-LINE. READ TTY-IN AT END MOVE "END" TO COMMAND, FREE-FORM-LINE. * 2120-EXTRACT-AMOUNT. MOVE "N" TO AMOUNT-ERROR-SW. INSPECT FREE-FORM-LINE REPLACING ALL "$" BY "0", LEADING SPACES BY "0". MOVE ZERO TO NUMBER-OF-FIELDS, CENTS-COUNT. UNSTRING FREE-FORM-LINE DELIMITED BY "." OR SPACE INTO DOLLARS CENTS COUNT IN CENTS-COUNT TALLYING IN NUMBER-OF-FIELDS. INSPECT DOLLARS REPLACING LEADING SPACES BY "0". IF NUMBER-OF-FIELDS < 2 OR CENTS-COUNT NOT = 2 OR DOLLARS NOT NUMERIC OR CENTS NOT NUMERIC MOVE "Y" TO AMOUNT-ERROR-SW. * 2200-CHECK-NEG-BALANCE. IF BALANCE NEGATIVE MOVE SPACES TO WARNING-MESSAGE MULTIPLY BALANCE BY -1 GIVING FORMATTED-BALANCE MOVE SPACES TO COMPRESSED-BALANCE UNSTRING FORMATTED-BALANCE-ALPHA DELIMITED BY ALL SPACES INTO EXCESS COMPRESSED-BALANCE MOVE AMOUNT TO FORMATTED-AMOUNT MOVE SPACES TO COMPRESSED-AMOUNT UNSTRING FORMATTED-AMOUNT-ALPHA DELIMITED BY ALL SPACES INTO EXCESS COMPRESSED-AMOUNT STRING "WARNING! Check amount of " DELIMITED BY SIZE COMPRESSED-AMOUNT DELIMITED BY SPACES " yields negative balance of " DELIMITED BY SIZE COMPRESSED-BALANCE DELIMITED BY SPACES INTO WARNING-MESSAGE DISPLAY WARNING-MESSAGE. * 2900-ERROR-MESSAGE. DISPLAY "?Syntax error - transaction ignored". * 3000-DISPLAY-FINAL-BALANCE. MOVE BALANCE TO FINAL-BALANCE. WRITE TTY-OUT-REC FROM FINAL-REPORT AFTER ADVANCING 1 LINE.