The Business of COBOL
The late Grace Hopper, the naval admiral who is credited with discovering the first computer bug (refer back to Chapter 2 for a refresher if you need it), is also known as the author of COBOL. In 1960, Admiral Hopper and her team of programmers decided they needed a language for the business side of computing (even the Navy has to meet a payroll and pay its bills). FORTRAN was taking care of the scientific side of things, but the FORTRAN language was never designed to handle business transactions. Programmers were also discovering that FORTRAN's cryptic nature slowed down programming maintenance chores as well.
Admiral Hopper's team developed COBOL, an acronym for COmmon Business Oriented Language. The COBOL design team's primary goal was to develop a self-documenting language that could process a large amount of business data such as inventory and personnel records. A sample of their achievement is shown in Listing 3.2. This is a program that performs the very same processing as its FORTRAN counterpart in Listing 3.1, but the COBOL listing is almost twice as long. Take a few minutes to peruse the listing and become familiar with the nature of COBOL.
All COBOL programs are separated into four divisions. The identification division describes the program. The environment division describes the computer system running the program. The data division describes the format of all data in the program. The procedure division contains the code that processes the data. See if you can find these four divisions in Listing 3.2.
Listing 3.2 A Sample COBOL Program That Calculates Payroll
IDENTIFICATION DIVISION. PROGRAM-ID. 'PAYROLL' ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT GET-DATA, ASSIGN TO KEYIN. SELECT OUT-DATA, ASSIGN TO DISPLAY. DATA DIVISION. FILE SECTION. FD GET-DATA LABEL RECORDS ARE OMITTED. 01 GET-REC. 02 AMOUNT PICTURE 9(5)V2. FD OUT-DATA LABEL RECORDS ARE OMITTED. 01 OUT-REC. 02 FILLER PICTURE X(80). WORKING-STORAGE SECTION. 01 ARITHMETIC-DATA. 02 TOT-OVR PICTURE 9(5)V2 VALUE ZERO. 02 HOURS PICTURE 9(3)V1 VALUE ZERO. 02 RATE PICTURE 9(5)V2 VALUE ZERO. 02 TAX-RATE PICTURE 9(5)V2 VALUE ZERO. 02 GROSS-PAY PICTURE 9(5)V2 VALUE ZERO. 02 NET-PAY PICTURE 9(5)V2 VALUE ZERO. 01 OUT-LINE-1. 02 FILLER PICTURE X(28) VALUE 'What were the hours worked? '. 02 FILLER PICTURE X(52) VALUE SPACES. 01 OUT-LINE-2. 02 FILLER PICTURE X(25) VALUE 'What is the hourly rate? '. 02 FILLER PICTURE X(55) VALUE SPACES. 01 OUT-LINE-3. 02 FILLER PICTURE X(22) VALUE 'What is the tax rate? '. 02 FILLER PICTURE X(58) VALUE SPACES. 01 OUT-LINE-4. 02 FILLER PICTURE X(17) VALUE 'The gross pay is ' 02 OUT-GROSS PICTURE $ZZ,ZZZ.99. 02 FILLER PICTURE X(53) VALUE SPACES. 01 OUT-LINE-5. 02 FILLER PICTURE X(15) VALUE 'The net pay is ' 02 OUT-NET PICTURE $ZZ,ZZZ.99. 02 FILLER PICTURE X(55) VALUE SPACES. PROCEDURE DIVISION. BEGIN. OPEN INPUT GET-DATA. OPEN OUTPUT OUT-DATA. MOVE OUT-LINE-1 TO OUT-REC. WRITE OUT-REC. READ GET-DATA. MOVE AMOUNT TO HOURS. MOVE OUT-LINE-2 TO OUT-REC. WRITE OUT-REC. READ GET-DATA. MOVE AMOUNT TO RATE. MOVE OUT-LINE-3 TO OUT-REC. WRITE OUT-REC. READ GET-DATA. MOVE AMOUNT TO TAX-RATE. IF HOURS > 40.0 THEN COMPUTE TOT-OVR = (40.0 - HOURS) * RATE * 2 COMPUTE GROSS-PAY = 40.0 * RATE + TOT-OVR ELSE COMPUTE GROSS-PAY = HOURS * RATE. COMPUTE NET-PAY = GROSS-PAY * (1.0 - TAX-RATE). MOVE GROSS-PAY TO OUT-GROSS. MOVE OUT-LINE-4 TO OUT-REC. WRITE OUT-REC. MOVE NET-PAY TO OUT-NET. MOVE OUT-LINE-5 TO OUT-REC. WRITE OUT-REC. CLOSE GET-DATA, OUT-DATA. STOP RUN.
Admiral Hopper's crew wanted COBOL to be self-documenting so that nonprogrammers could understand what the program was attempting to do by looking at a program listing. Can you figure out what Listing 3.2 is doing just by reading the code? Don't feel bad if you can't; if you get lost in the program's silver-dollar words, don't be dismayed. Instead of being self-documenting, COBOL ended up being very wordy. There is so much that gets in the way of the working code that most people would probably agree (even COBOL fans, of whom there are many thousands) that COBOL does not achieve a self-documenting effect. Nevertheless, it shines as the world's premiere business language of choice, and it did for almost 40 years before the newer languages such as C++ and the Internet took over.