Advertisement
Guest User

Untitled

a guest
Aug 29th, 2018
186
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
COBOL 5.82 KB | None | 0 0
  1.        IDENTIFICATION DIVISION.
  2.        PROGRAM-ID. ovning2.
  3.       ***********************************************************
  4.       *   Bertil - ovning2
  5.       ***********************************************************
  6.        ENVIRONMENT DIVISION.
  7.  
  8.        DATA DIVISION.
  9.        WORKING-STORAGE SECTION.
  10.  
  11.        01  switches.
  12.            05  is-over-aged-switch PIC X(1) VALUE 'N'.
  13.                88  is-over-aged             VALUE 'Y'.
  14.            05  is-not-born-switch PIC X(1)  VALUE 'N'.
  15.                88  is-not-born              VALUE 'Y'.              
  16.            
  17.        01  date-now.
  18.            05  char-year           PIC X(4) VALUE SPACE.
  19.            05  char-mmdd           PIC X(4) VALUE SPACE.
  20.  
  21.        01  numeric-year            PIC 9(4) VALUE ZERO.
  22.  
  23.        01  p-number.
  24.            05  p-year              PIC 9(4) VALUE ZERO.
  25.            05  p-month-day         PIC 9(4) VALUE ZERO.
  26.            05  p-last-digits.
  27.                10   p-1st-ldigit   PIC 9 VALUE ZERO.
  28.                10   p-2nd-ldigit   PIC 9 VALUE ZERO.
  29.                10   p-3rd-ldigit   PIC 9 VALUE ZERO.
  30.                10   p-4th-ldigit   PIC 9 VALUE ZERO.
  31.  
  32.        01  user-age                PIC 99 VALUE ZERO.
  33.  
  34.       *   Calculate age exact, on the day
  35.        01  numeric-date-mmdd       PIC 9(4)   VALUE ZERO.
  36.        01  user-age-correction     PIC S9     VALUE ZERO.
  37.  
  38.       *   Boy or girl variables
  39.        01  numeric-result              PIC 9       VALUE ZERO.
  40.        01  numeric-remainder           PIC 9       VALUE ZERO.
  41.        01  user-age-group              PIC X(10)   VALUE SPACE.
  42.        01  user-gender                 PIC X(6)    VALUE SPACE.      
  43.        
  44.        01  headline                    PIC X(70)   VALUE ALL '-'.
  45.        01  accept-choice               PIC X(1)    VALUE SPACE.
  46.  
  47.       *********************************************************
  48.        PROCEDURE DIVISION.
  49.        ovning2.
  50.            
  51.            DISPLAY 'Enter your 12-Digits Security Number: '
  52.                    '(YYYYMMDDXXXX): ' WITH NO ADVANCING
  53.            ACCEPT p-number
  54.            
  55.            IF ( p-number(1:2) = 19 OR p-number(1:2) = 20 )
  56.            
  57.                PERFORM B100-calculate-user-age-data
  58.            
  59.                EVALUATE TRUE
  60.            
  61.                    WHEN is-over-aged
  62.                        DISPLAY headline
  63.                        DISPLAY 'You are > 99 Years Old. Wow!'
  64.                        DISPLAY headline
  65.            
  66.                    WHEN is-not-born
  67.                        DISPLAY headline
  68.                        DISPLAY 'You Misstyped The Number. '
  69.                                'You Are Not Born Yet!'
  70.                        DISPLAY headline        
  71.                            
  72.                    WHEN ( NOT is-over-aged ) OR ( NOT is-not-born )
  73.                        DISPLAY headline
  74.                        DISPLAY 'You are a ' user-gender
  75.                        DISPLAY 'Age: ' user-age ' years.'              
  76.                        DISPLAY 'Your group are: ' user-age-group                  
  77.                        DISPLAY headline
  78.      
  79.                END-EVALUATE
  80.  
  81.            ELSE
  82.                DISPLAY headline
  83.                DISPLAY 'Did You Typed A Correct Security Number'
  84.                        ' In the Form YYYYMMDDXXXX ?'
  85.                DISPLAY headline
  86.            END-IF
  87.  
  88.            DISPLAY 'Press Enter to quit...'
  89.            
  90.            ACCEPT accept-choice
  91.            GOBACK
  92.            .  
  93.       *********************************************************    
  94.        B100-calculate-user-age-data.
  95.  
  96.            MOVE ZERO TO user-age-correction
  97.            MOVE FUNCTION CURRENT-DATE to date-now  *> "20130822"
  98.            
  99.       *   Change year character string to numeric number    
  100.            MOVE char-year TO numeric-year  
  101.       *   Change mmdd character string to mmdd numeric number
  102.            MOVE char-mmdd TO numeric-date-mmdd  *>  "0822" --> 0822          
  103.  
  104.       *   Calculate user age
  105.            COMPUTE user-age = numeric-year - p-year
  106.                ON SIZE ERROR
  107.                    SET is-over-aged TO TRUE      
  108.            END-COMPUTE
  109.            
  110.            IF p-year > numeric-year
  111.                SET is-not-born TO TRUE
  112.            ELSE
  113.                IF  numeric-year = p-year AND
  114.                numeric-date-mmdd < p-month-day
  115.                    SET is-not-born TO TRUE
  116.                END-IF    
  117.            END-IF
  118.  
  119.            IF ( NOT is-over-aged ) OR ( NOT is-not-born )
  120.            
  121.       *       Apply possible age correction based on actual date    
  122.                IF numeric-date-mmdd < p-month-day
  123.                    MOVE -1 TO user-age-correction
  124.                END-IF
  125.  
  126.                PERFORM B101-set-user-age-group
  127.                PERFORM B102-set-gender-for-user
  128.            
  129.            END-IF
  130.            .
  131.       *********************************************************      
  132.        B101-set-user-age-group.
  133.       *   Set the age-group which this user belongs to
  134.            IF user-age < 18 THEN
  135.                MOVE 'Child' TO user-age-group
  136.            ELSE
  137.                IF user-age >= 65 THEN
  138.                    MOVE 'Retired' TO user-age-group
  139.                ELSE
  140.                    MOVE 'Adult' TO user-age-group
  141.                END-IF
  142.            END-IF
  143.            .
  144.       *********************************************************
  145.        B102-set-gender-for-user.
  146.        
  147.            DIVIDE p-3rd-ldigit BY 2 GIVING numeric-result ROUNDED
  148.                REMAINDER numeric-remainder
  149.  
  150.            IF numeric-remainder = 0 THEN
  151.                *> 3rd digit is even --> female
  152.                MOVE 'Female' TO user-gender
  153.            ELSE
  154.                 *> 3rd digit is odd --> male
  155.                MOVE 'Male' TO user-gender
  156.            END-IF
  157.            .  
  158.       *********************************************************
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement