Chapter 8 – Data Validation Incoming data must be check to avoid errors Numeric test Alphabetic test Reasonableness check Limit/Range checks – number is within limits Consistency check Comparing two fields against eachother
Existing code check Sequence check Completeness check Date check Omission errors – full statements in your IFs Sequence check Incoming records are in the correct order Completeness check Makes sure that all the fields in any record contain data Date check Checks that incoming date is logical
The IF statement Relational condition Class test Sign test NUMERIC clause ALPHABETIC clause Sign test POSITIVE clause NEGATIVE clause ZERO clause
Figure 8.1 The Relational Condition IS [NOT] GREATER THAN IS [NOT] > IS [NOT] LESS THAN identifier-1 IS [NOT] < identifier-2 IF literal-1 IS [NOT] EQUAL TO literal-2 expression-1 IS [NOT] = expression-2 IS [NOT] GREATER THAN OR EQUAL TO IS [NOT] >= IS [NOT] LESS THAN OR EQUAL TO IS [NOT] <= (a) Syntax 05 NUMERIC-FIELD PIC 9(5). 05 ALPHANUMERIC-FIELD PIC X(5). . . . IF NUMERIC-FIELD = 10 . . . (valid entry) IF NUMERIC-FIELD = ‘10’ . . . (invalid entry) IF ALPHANUMERIC-FIELD = 10 (invalid entry) IF ALPHANUMERIC-FIELD = ‘10’ (valid entry) (b) Examples
Figure 8.2 The Class Test (a) Syntax (b) Examples NUMERIC ALPHABETIC IF identifier IS [NOT] ALPHABETIC-UPPER ALPHABETIC-LOWER (a) Syntax 05 NUMERIC-FIELD PIC 9(5). 05 ALPHABETIC-FIELD PIC X(5). . . . IF NUMERIC-FIELD IS NUMERIC PERFORM D0-ARITHMETIC-CALCULATIONS END-IF. IF NUMERIC-FIELD IS NOT NUMERIC DISPLAY ‘ERROR - NUMERIC FIELD CONTAINS INVALID DATA’ END-IF. IF ALPHABETIC-FIELD IS ALPHABETIC DISPLAY ‘ALPHABETIC FIELD CONTAINS UPPER AND/OR LOWER CASE LETTERS’ END-IF. IF ALPHABETIC-FIELD IS NOTALPHABETIC DISPLAY ‘ERROR - ALPHABETIC FIELD CONTAINS NON-ALPHABETIC DATA’ END-IF. (b) Examples
Figure 8.3 The SignTest (a) Syntax (b) Examples identifier POSITIVE IF arithmetic expression IS [NOT] NEGATIVE ZERO (a) Syntax IF NET-PAY IS NOT POSITIVE PERFORM TOO-MUCH-TAXES END-IF. IF CHECK-BALANCE IS NEGATIVE PERFORM OVERDRAWN END-IF. (b) Examples
Compound test Operators Precedence of operators Implied conditions AND expression OR expression NOT expression Precedence of operators Arithmetic, Relational, NOT, AND, OR Effect of parenthesis Implied conditions IF TERM > 6 and TERM < 12 THEN IF TERM > 6 AND < 12 THEN
Figure 8.5 Compound Conditions C>D? FALSE TRUE A>B? NO YES FALSE C>D? TRUE A>B? NO YES (a) A > B AND C > D (b) A > B OR C > D
Comparing a Date to Today’s date Nested IF statements ELSE clause Comparing a Date to Today’s date
Figure 8.6 Nested IF Statements A>C? MOVE C TO BIG MOVE A TO BIG A>B? NO YES C>B? MOVE B TO BIG (a) Flowchart
Figure 8.6 Nested IF Statements IF A > B IF A > C MOVE A TO BIG ELSE MOVE C TO BIG END-IF ELSE IF C > B MOVE C TO BIG ELSE MOVE B TO BIG END-IF END-IF. (b) COBOL Statements
Figure 8.8 The ACCEPT Statement WORKING-STORAGE SECTION. 01 EMPLOYEE-RECORD. . . 05 EMP-DATE-OF-BIRTH. 10 EMP-BIRTH-MONTH PIC 99. 10 EMP-BIRTH-YEAR PIC 99. 01 EMPLOYEE-AGE PIC 99V99. 01 DATE-WORK-AREA. 05 TODAYS-YEAR PIC 99. 05 TODAYS-MONTH PIC 99. 05 TODAYS-DAY PIC 99. . . PROCEDURE DIVISION. . . ACCEPT DATE-WORK-AREA FROM DATE. . . COMPUTE EMPLOYEE-AGE = TODAYS-YEAR - EMP-BIRTH-YEAR + (TODAYS-MONTH - EMP-BIRTH-MONTH) / 12.
Figure 8.10 (continued) (b) Error Report ERROR REPORT AS OF 07/03/98 CONTRACT # LAST NAME ERROR MESSAGE & FIELD CONTENTS 123459 BAKER INVALID DAY 04/31 123459 BAKER INSURANCE CODE MUST BE Y OR N X 987651 BROWN MILES DRIVEN UNREASONABLY LOW DAYS: 10 MILES: 000010 999999 JONES MONTH MUST BE BETWEEN 1 AND 12 13 999999 JONES MILEAGE IN LESS THAN MILEAGE OUT IN: 004500 OUT: 004600 999999 JONES NON-NUMERIC MILEAGE RATE O5 987655 BROWNING CAR TYPE MUST BE: E, C, M, F, OR L 0 987655 BROWNING DATE HAS NOT YET OCCURRED 10/24/98 987655 BROWNING NON-NUMERIC MILES IN OO2400 655443 FITZPATRICK INVALID DAY 05/32 655443 FITZPATRICK INSURANCE CODE MUST BE Y OR N C PINNOCK NON-NUMERIC CONTRACT NUMBER PINNOCK MISSING FIRST NAME PINNOCK NON ALPHABETIC INITIAL 1 PINNOCK DATE YAS NOT YET OCCURRED 10/12/98 PINNOCK NON-NUMERIC MILES OUT OO3310 X93477 BUTLER NON-NUMERIC CONTRACT NUMBER X93477 X93477 BUTLER INVALID DAY 06/31 X93477 BUTLER DAYS RENTED MUST BE > ZERO 00 X93477 BUTLER MILEAGE RATE OUT OF RANGE 75 84644O NON-NUMERIC CONTRACT NUMBER 84644O 84644O MISSING LAST NAME 84644O CAR TYPE MUST BE: E, C, M, F, OR L X 84644O DAYS RENTED MUST BE NUMERIC I5 84644O MILES DRIVEN UNREASONABLY LOW DAYS: I5 MILES: 000125 (b) Error Report
A data validation program Specifications Program design Program listing Exception report