The AND logical operator represents one of COBOL's most fundamental and essential boolean logic mechanisms, serving as the primary tool for combining multiple conditional expressions into complex decision-making structures that enable sophisticated program flow control. Far more than a simple logical connector, the AND operator embodies COBOL's comprehensive approach to conditional processing by providing precise boolean evaluation, short-circuit logic optimization, complex condition chaining, and advanced decision tree construction that enable applications to implement sophisticated business rules, multi-criteria validation, and comprehensive data verification processes while maintaining logical clarity, performance efficiency, and robust error handling capabilities that are essential for enterprise applications requiring complex conditional logic and advanced decision-making capabilities.
In enterprise computing environments, the AND operator serves as a critical foundation for advanced business logic implementation, enabling developers to create sophisticated conditional processing applications that handle complex validation requirements, implement multi-step verification processes, provide comprehensive data integrity checks, and maintain high-performance decision-making capabilities. Its capabilities extend far beyond simple boolean operations to encompass sophisticated logical evaluation strategies, conditional optimization techniques, complex expression parsing, and integration with modern programming paradigms that are essential for applications requiring comprehensive conditional logic and enterprise-grade decision-making capabilities that support complex business rule implementation and advanced logical processing requirements.
12345678910111213141516171819202122232425262728293031323334*> Basic AND operator usage in IF statements IF CUSTOMER-STATUS = "ACTIVE" AND CREDIT-RATING = "GOOD" PERFORM APPROVE-TRANSACTION END-IF. *> Multiple AND conditions IF ACCOUNT-BALANCE > 1000 AND CUSTOMER-TYPE = "PREMIUM" AND TRANSACTION-AMOUNT < 5000 PERFORM PROCESS-PREMIUM-TRANSACTION END-IF. *> AND with different data types IF EMPLOYEE-AGE >= 18 AND EMPLOYEE-STATUS = "FULL-TIME" AND DEPARTMENT-CODE NOT = "TEMP" PERFORM CALCULATE-BENEFITS END-IF. *> AND with level 88 condition names 01 CUSTOMER-RECORD. 05 CUSTOMER-TYPE PIC X(10). 88 PREMIUM-CUSTOMER VALUE "PREMIUM". 88 STANDARD-CUSTOMER VALUE "STANDARD". 88 BASIC-CUSTOMER VALUE "BASIC". 05 ACCOUNT-STATUS PIC X(10). 88 ACTIVE-ACCOUNT VALUE "ACTIVE". 88 SUSPENDED-ACCOUNT VALUE "SUSPENDED". 88 CLOSED-ACCOUNT VALUE "CLOSED". *> Using condition names with AND IF PREMIUM-CUSTOMER AND ACTIVE-ACCOUNT PERFORM PREMIUM-PROCESSING END-IF.
Basic AND operator syntax combines multiple conditions that must all be true.
123456789101112131415161718192021222324252627282930313233343536373839*> Complex AND expressions with parentheses IF (CUSTOMER-AGE >= 21 AND CUSTOMER-AGE <= 65) AND (INCOME-LEVEL > 50000 OR CREDIT-SCORE > 700) AND EMPLOYMENT-STATUS = "EMPLOYED" PERFORM APPROVE-LOAN-APPLICATION END-IF. *> AND with range checking IF TRANSACTION-DATE >= START-DATE AND TRANSACTION-DATE <= END-DATE AND TRANSACTION-AMOUNT >= MIN-AMOUNT AND TRANSACTION-AMOUNT <= MAX-AMOUNT PERFORM PROCESS-VALID-TRANSACTION END-IF. *> AND with string operations IF CUSTOMER-NAME NOT = SPACES AND CUSTOMER-ADDRESS NOT = SPACES AND CUSTOMER-PHONE NOT = SPACES AND CUSTOMER-EMAIL NOT = SPACES PERFORM VALIDATE-CUSTOMER-DATA END-IF. *> AND with numeric comparisons IF QUANTITY-ORDERED > 0 AND UNIT-PRICE > 0 AND (QUANTITY-ORDERED * UNIT-PRICE) <= CREDIT-LIMIT AND INVENTORY-AVAILABLE >= QUANTITY-ORDERED PERFORM PROCESS-ORDER END-IF. *> AND with file status checking IF FILE-STATUS-CODE = "00" AND RECORD-FOUND-FLAG = "Y" AND DATA-VALID-FLAG = "Y" PERFORM PROCESS-RECORD ELSE PERFORM HANDLE-ERROR-CONDITION END-IF.
Complex AND expressions can combine multiple types of conditions with proper precedence.
123456789101112131415161718192021222324252627282930313233343536373839404142434445*> AND in EVALUATE statements EVALUATE TRUE WHEN CUSTOMER-TYPE = "PREMIUM" AND ACCOUNT-BALANCE > 10000 PERFORM PREMIUM-VIP-PROCESSING WHEN CUSTOMER-TYPE = "PREMIUM" AND ACCOUNT-BALANCE > 1000 PERFORM PREMIUM-STANDARD-PROCESSING WHEN CUSTOMER-TYPE = "STANDARD" AND CREDIT-RATING = "EXCELLENT" PERFORM STANDARD-EXCELLENT-PROCESSING WHEN OTHER PERFORM DEFAULT-PROCESSING END-EVALUATE. *> AND in PERFORM UNTIL statements PERFORM UNTIL END-OF-FILE = "Y" AND RECORDS-PROCESSED > 0 READ INPUT-FILE IF NOT END-OF-FILE PERFORM PROCESS-RECORD ADD 1 TO RECORDS-PROCESSED END-IF END-PERFORM. *> AND in SEARCH statements SEARCH CUSTOMER-TABLE AT END PERFORM CUSTOMER-NOT-FOUND WHEN CUSTOMER-ID(INDEX-VAR) = SEARCH-ID AND CUSTOMER-STATUS(INDEX-VAR) = "ACTIVE" PERFORM CUSTOMER-FOUND END-SEARCH. *> AND in COMPUTE statements with conditions IF SALES-AMOUNT > 0 AND TAX-RATE > 0 COMPUTE TOTAL-AMOUNT = SALES-AMOUNT + (SALES-AMOUNT * TAX-RATE) ELSE MOVE SALES-AMOUNT TO TOTAL-AMOUNT END-IF. *> AND in STRING statements IF SOURCE-STRING NOT = SPACES AND DELIMITER-CHAR NOT = SPACES AND TARGET-STRING = SPACES STRING SOURCE-STRING DELIMITED BY DELIMITER-CHAR INTO TARGET-STRING END-STRING END-IF.
AND operator can be used in various COBOL statements for conditional processing.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474IDENTIFICATION DIVISION. PROGRAM-ID. AND-OPERATOR-DEMO. DATA DIVISION. WORKING-STORAGE SECTION. *> Customer data structure 01 CUSTOMER-DATA. 05 CUSTOMER-ID PIC X(10). 05 CUSTOMER-NAME PIC X(30). 05 CUSTOMER-AGE PIC 9(3). 05 CUSTOMER-TYPE PIC X(10). 88 PREMIUM-CUSTOMER VALUE "PREMIUM". 88 STANDARD-CUSTOMER VALUE "STANDARD". 88 BASIC-CUSTOMER VALUE "BASIC". 05 ACCOUNT-STATUS PIC X(10). 88 ACTIVE-ACCOUNT VALUE "ACTIVE". 88 SUSPENDED-ACCOUNT VALUE "SUSPENDED". 88 CLOSED-ACCOUNT VALUE "CLOSED". 05 CREDIT-RATING PIC X(10). 88 EXCELLENT-CREDIT VALUE "EXCELLENT". 88 GOOD-CREDIT VALUE "GOOD". 88 FAIR-CREDIT VALUE "FAIR". 88 POOR-CREDIT VALUE "POOR". 05 ACCOUNT-BALANCE PIC S9(8)V99. 05 CREDIT-LIMIT PIC 9(8)V99. 05 LAST-PAYMENT-DATE PIC X(8). 05 EMPLOYMENT-STATUS PIC X(15). 88 EMPLOYED VALUE "EMPLOYED". 88 UNEMPLOYED VALUE "UNEMPLOYED". 88 RETIRED VALUE "RETIRED". 88 STUDENT VALUE "STUDENT". *> Transaction data structure 01 TRANSACTION-DATA. 05 TRANSACTION-ID PIC X(15). 05 TRANSACTION-TYPE PIC X(10). 88 PURCHASE VALUE "PURCHASE". 88 PAYMENT VALUE "PAYMENT". 88 TRANSFER VALUE "TRANSFER". 88 WITHDRAWAL VALUE "WITHDRAWAL". 05 TRANSACTION-AMOUNT PIC S9(8)V99. 05 TRANSACTION-DATE PIC X(8). 05 MERCHANT-CODE PIC X(10). 05 AUTHORIZATION-CODE PIC X(8). *> Business rules and limits 01 BUSINESS-RULES. 05 MIN-AGE-FOR-CREDIT PIC 9(2) VALUE 18. 05 MAX-AGE-FOR-CREDIT PIC 9(2) VALUE 75. 05 MIN-INCOME-PREMIUM PIC 9(8) VALUE 75000. 05 MIN-BALANCE-PREMIUM PIC 9(8) VALUE 10000. 05 MAX-DAILY-WITHDRAWAL PIC 9(6) VALUE 2000. 05 MAX-SINGLE-PURCHASE PIC 9(8) VALUE 50000. 05 FRAUD-THRESHOLD PIC 9(6) VALUE 5000. *> Processing flags and counters 01 PROCESSING-FLAGS. 05 VALIDATION-RESULT PIC X(1). 88 VALIDATION-PASSED VALUE "Y". 88 VALIDATION-FAILED VALUE "N". 05 APPROVAL-STATUS PIC X(10). 88 APPROVED VALUE "APPROVED". 88 DECLINED VALUE "DECLINED". 88 PENDING VALUE "PENDING". 05 RISK-LEVEL PIC X(10). 88 LOW-RISK VALUE "LOW". 88 MEDIUM-RISK VALUE "MEDIUM". 88 HIGH-RISK VALUE "HIGH". *> Date and time variables 01 DATE-TIME-VARS. 05 CURRENT-DATE-TIME PIC X(14). 05 CURRENT-DATE PIC X(8). 05 CURRENT-TIME PIC X(6). 05 BUSINESS-HOURS-START PIC X(4) VALUE "0800". 05 BUSINESS-HOURS-END PIC X(4) VALUE "1800". *> Counters and statistics 01 PROCESSING-COUNTERS. 05 TRANSACTIONS-PROCESSED PIC 9(7) VALUE 0. 05 APPROVALS-COUNT PIC 9(7) VALUE 0. 05 DECLINES-COUNT PIC 9(7) VALUE 0. 05 FRAUD-ALERTS-COUNT PIC 9(5) VALUE 0. 05 VALIDATION-ERRORS PIC 9(5) VALUE 0. *> Sample data for demonstration 01 SAMPLE-CUSTOMERS OCCURS 5 TIMES. 05 SAMPLE-CUSTOMER-ID PIC X(10). 05 SAMPLE-CUSTOMER-NAME PIC X(30). 05 SAMPLE-AGE PIC 9(3). 05 SAMPLE-TYPE PIC X(10). 05 SAMPLE-STATUS PIC X(10). 05 SAMPLE-RATING PIC X(10). 05 SAMPLE-BALANCE PIC S9(8)V99. 05 SAMPLE-LIMIT PIC 9(8)V99. 05 SAMPLE-EMPLOYMENT PIC X(15). *> Sample transactions for testing 01 SAMPLE-TRANSACTIONS OCCURS 10 TIMES. 05 SAMPLE-TRANS-ID PIC X(15). 05 SAMPLE-TRANS-TYPE PIC X(10). 05 SAMPLE-TRANS-AMOUNT PIC S9(8)V99. 05 SAMPLE-TRANS-DATE PIC X(8). 05 SAMPLE-MERCHANT PIC X(10). PROCEDURE DIVISION. MAIN-PROCESSING. DISPLAY "=== AND Logical Operator Demonstration ===". DISPLAY " ". PERFORM INITIALIZE-SAMPLE-DATA PERFORM DEMONSTRATE-BASIC-AND-OPERATIONS PERFORM DEMONSTRATE-COMPLEX-AND-CONDITIONS PERFORM DEMONSTRATE-BUSINESS-RULE-VALIDATION PERFORM DEMONSTRATE-TRANSACTION-PROCESSING PERFORM DEMONSTRATE-RISK-ASSESSMENT PERFORM DEMONSTRATE-AND-OPTIMIZATION PERFORM DISPLAY-PROCESSING-STATISTICS DISPLAY " ". DISPLAY "AND operator demonstration completed successfully". STOP RUN. INITIALIZE-SAMPLE-DATA. DISPLAY "1. Initializing Sample Data:". DISPLAY " ==========================". *> Initialize sample customers MOVE "CUST001" TO SAMPLE-CUSTOMER-ID(1). MOVE "JOHN SMITH" TO SAMPLE-CUSTOMER-NAME(1). MOVE 35 TO SAMPLE-AGE(1). MOVE "PREMIUM" TO SAMPLE-TYPE(1). MOVE "ACTIVE" TO SAMPLE-STATUS(1). MOVE "EXCELLENT" TO SAMPLE-RATING(1). MOVE 25000.00 TO SAMPLE-BALANCE(1). MOVE 50000.00 TO SAMPLE-LIMIT(1). MOVE "EMPLOYED" TO SAMPLE-EMPLOYMENT(1). MOVE "CUST002" TO SAMPLE-CUSTOMER-ID(2). MOVE "JANE DOE" TO SAMPLE-CUSTOMER-NAME(2). MOVE 28 TO SAMPLE-AGE(2). MOVE "STANDARD" TO SAMPLE-TYPE(2). MOVE "ACTIVE" TO SAMPLE-STATUS(2). MOVE "GOOD" TO SAMPLE-RATING(2). MOVE 5000.00 TO SAMPLE-BALANCE(2). MOVE 15000.00 TO SAMPLE-LIMIT(2). MOVE "EMPLOYED" TO SAMPLE-EMPLOYMENT(2). MOVE "CUST003" TO SAMPLE-CUSTOMER-ID(3). MOVE "BOB JOHNSON" TO SAMPLE-CUSTOMER-NAME(3). MOVE 17 TO SAMPLE-AGE(3). MOVE "BASIC" TO SAMPLE-TYPE(3). MOVE "ACTIVE" TO SAMPLE-STATUS(3). MOVE "FAIR" TO SAMPLE-RATING(3). MOVE 500.00 TO SAMPLE-BALANCE(3). MOVE 1000.00 TO SAMPLE-LIMIT(3). MOVE "STUDENT" TO SAMPLE-EMPLOYMENT(3). MOVE "CUST004" TO SAMPLE-CUSTOMER-ID(4). MOVE "ALICE BROWN" TO SAMPLE-CUSTOMER-NAME(4). MOVE 45 TO SAMPLE-AGE(4). MOVE "PREMIUM" TO SAMPLE-TYPE(4). MOVE "SUSPENDED" TO SAMPLE-STATUS(4). MOVE "POOR" TO SAMPLE-RATING(4). MOVE -1000.00 TO SAMPLE-BALANCE(4). MOVE 25000.00 TO SAMPLE-LIMIT(4). MOVE "UNEMPLOYED" TO SAMPLE-EMPLOYMENT(4). MOVE "CUST005" TO SAMPLE-CUSTOMER-ID(5). MOVE "CHARLIE WILSON" TO SAMPLE-CUSTOMER-NAME(5). MOVE 68 TO SAMPLE-AGE(5). MOVE "STANDARD" TO SAMPLE-TYPE(5). MOVE "ACTIVE" TO SAMPLE-STATUS(5). MOVE "EXCELLENT" TO SAMPLE-RATING(5). MOVE 75000.00 TO SAMPLE-BALANCE(5). MOVE 30000.00 TO SAMPLE-LIMIT(5). MOVE "RETIRED" TO SAMPLE-EMPLOYMENT(5). *> Initialize sample transactions MOVE "TXN001" TO SAMPLE-TRANS-ID(1). MOVE "PURCHASE" TO SAMPLE-TRANS-TYPE(1). MOVE 1500.00 TO SAMPLE-TRANS-AMOUNT(1). MOVE "20231215" TO SAMPLE-TRANS-DATE(1). MOVE "AMAZON" TO SAMPLE-MERCHANT(1). MOVE "TXN002" TO SAMPLE-TRANS-ID(2). MOVE "WITHDRAWAL" TO SAMPLE-TRANS-TYPE(2). MOVE 3000.00 TO SAMPLE-TRANS-AMOUNT(2). MOVE "20231215" TO SAMPLE-TRANS-DATE(2). MOVE "ATM001" TO SAMPLE-MERCHANT(2). MOVE "TXN003" TO SAMPLE-TRANS-ID(3). MOVE "PURCHASE" TO SAMPLE-TRANS-TYPE(3). MOVE 75000.00 TO SAMPLE-TRANS-AMOUNT(3). MOVE "20231215" TO SAMPLE-TRANS-DATE(3). MOVE "LUXURY" TO SAMPLE-MERCHANT(3). DISPLAY " Sample data initialized successfully". DISPLAY " ". DEMONSTRATE-BASIC-AND-OPERATIONS. DISPLAY "2. Basic AND Operations:". DISPLAY " =====================". *> Test basic AND conditions with first customer MOVE SAMPLE-CUSTOMER-ID(1) TO CUSTOMER-ID. MOVE SAMPLE-CUSTOMER-NAME(1) TO CUSTOMER-NAME. MOVE SAMPLE-AGE(1) TO CUSTOMER-AGE. MOVE SAMPLE-TYPE(1) TO CUSTOMER-TYPE. MOVE SAMPLE-STATUS(1) TO ACCOUNT-STATUS. MOVE SAMPLE-RATING(1) TO CREDIT-RATING. MOVE SAMPLE-BALANCE(1) TO ACCOUNT-BALANCE. MOVE SAMPLE-EMPLOYMENT(1) TO EMPLOYMENT-STATUS. DISPLAY " Testing customer: " CUSTOMER-NAME. *> Simple AND condition IF CUSTOMER-AGE >= MIN-AGE-FOR-CREDIT AND EMPLOYED DISPLAY " ✓ Age and employment check: PASSED" ELSE DISPLAY " ✗ Age and employment check: FAILED" END-IF. *> Multiple AND conditions IF PREMIUM-CUSTOMER AND ACTIVE-ACCOUNT AND EXCELLENT-CREDIT DISPLAY " ✓ Premium active excellent check: PASSED" ELSE DISPLAY " ✗ Premium active excellent check: FAILED" END-IF. *> Numeric AND conditions IF ACCOUNT-BALANCE > 0 AND ACCOUNT-BALANCE >= MIN-BALANCE-PREMIUM DISPLAY " ✓ Balance requirements: PASSED" ELSE DISPLAY " ✗ Balance requirements: FAILED" END-IF. DISPLAY " ". DEMONSTRATE-COMPLEX-AND-CONDITIONS. DISPLAY "3. Complex AND Conditions:". DISPLAY " ========================". PERFORM VARYING WS-INDEX FROM 1 BY 1 UNTIL WS-INDEX > 5 MOVE SAMPLE-CUSTOMER-ID(WS-INDEX) TO CUSTOMER-ID MOVE SAMPLE-CUSTOMER-NAME(WS-INDEX) TO CUSTOMER-NAME MOVE SAMPLE-AGE(WS-INDEX) TO CUSTOMER-AGE MOVE SAMPLE-TYPE(WS-INDEX) TO CUSTOMER-TYPE MOVE SAMPLE-STATUS(WS-INDEX) TO ACCOUNT-STATUS MOVE SAMPLE-RATING(WS-INDEX) TO CREDIT-RATING MOVE SAMPLE-BALANCE(WS-INDEX) TO ACCOUNT-BALANCE MOVE SAMPLE-EMPLOYMENT(WS-INDEX) TO EMPLOYMENT-STATUS DISPLAY " Customer: " CUSTOMER-NAME *> Complex eligibility check IF (CUSTOMER-AGE >= MIN-AGE-FOR-CREDIT AND CUSTOMER-AGE <= MAX-AGE-FOR-CREDIT) AND (EMPLOYED OR RETIRED) AND (ACTIVE-ACCOUNT OR SUSPENDED-ACCOUNT) AND (EXCELLENT-CREDIT OR GOOD-CREDIT) DISPLAY " ✓ Complex eligibility: QUALIFIED" ELSE DISPLAY " ✗ Complex eligibility: NOT QUALIFIED" END-IF *> Premium service eligibility IF PREMIUM-CUSTOMER AND ACTIVE-ACCOUNT AND ACCOUNT-BALANCE >= MIN-BALANCE-PREMIUM AND (EXCELLENT-CREDIT OR GOOD-CREDIT) AND EMPLOYED DISPLAY " ✓ Premium service: ELIGIBLE" ELSE DISPLAY " ✗ Premium service: NOT ELIGIBLE" END-IF DISPLAY " " END-PERFORM. DEMONSTRATE-BUSINESS-RULE-VALIDATION. DISPLAY "4. Business Rule Validation:". DISPLAY " ==========================". *> Test various business rules using AND PERFORM VARYING WS-INDEX FROM 1 BY 1 UNTIL WS-INDEX > 3 MOVE SAMPLE-CUSTOMER-ID(WS-INDEX) TO CUSTOMER-ID MOVE SAMPLE-CUSTOMER-NAME(WS-INDEX) TO CUSTOMER-NAME MOVE SAMPLE-AGE(WS-INDEX) TO CUSTOMER-AGE MOVE SAMPLE-TYPE(WS-INDEX) TO CUSTOMER-TYPE MOVE SAMPLE-STATUS(WS-INDEX) TO ACCOUNT-STATUS MOVE SAMPLE-RATING(WS-INDEX) TO CREDIT-RATING MOVE SAMPLE-BALANCE(WS-INDEX) TO ACCOUNT-BALANCE MOVE SAMPLE-LIMIT(WS-INDEX) TO CREDIT-LIMIT DISPLAY " Validating: " CUSTOMER-NAME *> Credit increase eligibility IF CUSTOMER-AGE >= 21 AND ACTIVE-ACCOUNT AND (EXCELLENT-CREDIT OR GOOD-CREDIT) AND ACCOUNT-BALANCE > 0 AND EMPLOYED DISPLAY " ✓ Credit increase: ELIGIBLE" ELSE DISPLAY " ✗ Credit increase: NOT ELIGIBLE" END-IF *> Loan approval pre-qualification IF CUSTOMER-AGE >= 25 AND CUSTOMER-AGE <= 65 AND EMPLOYED AND EXCELLENT-CREDIT AND ACCOUNT-BALANCE >= 5000 DISPLAY " ✓ Loan pre-qualification: PASSED" ELSE DISPLAY " ✗ Loan pre-qualification: FAILED" END-IF DISPLAY " " END-PERFORM. DEMONSTRATE-TRANSACTION-PROCESSING. DISPLAY "5. Transaction Processing with AND:". DISPLAY " =================================". *> Process sample transactions PERFORM VARYING WS-INDEX FROM 1 BY 1 UNTIL WS-INDEX > 3 MOVE SAMPLE-TRANS-ID(WS-INDEX) TO TRANSACTION-ID MOVE SAMPLE-TRANS-TYPE(WS-INDEX) TO TRANSACTION-TYPE MOVE SAMPLE-TRANS-AMOUNT(WS-INDEX) TO TRANSACTION-AMOUNT MOVE SAMPLE-TRANS-DATE(WS-INDEX) TO TRANSACTION-DATE MOVE SAMPLE-MERCHANT(WS-INDEX) TO MERCHANT-CODE *> Use first customer for transaction processing MOVE SAMPLE-CUSTOMER-ID(1) TO CUSTOMER-ID MOVE SAMPLE-TYPE(1) TO CUSTOMER-TYPE MOVE SAMPLE-STATUS(1) TO ACCOUNT-STATUS MOVE SAMPLE-BALANCE(1) TO ACCOUNT-BALANCE MOVE SAMPLE-LIMIT(1) TO CREDIT-LIMIT DISPLAY " Processing transaction: " TRANSACTION-ID DISPLAY " Type: " TRANSACTION-TYPE DISPLAY " Amount: $" TRANSACTION-AMOUNT *> Transaction approval logic IF ACTIVE-ACCOUNT AND TRANSACTION-AMOUNT > 0 AND TRANSACTION-AMOUNT <= CREDIT-LIMIT AND (ACCOUNT-BALANCE + TRANSACTION-AMOUNT) <= CREDIT-LIMIT DISPLAY " ✓ Transaction: APPROVED" SET APPROVED TO TRUE ADD 1 TO APPROVALS-COUNT ELSE DISPLAY " ✗ Transaction: DECLINED" SET DECLINED TO TRUE ADD 1 TO DECLINES-COUNT END-IF *> Fraud detection IF TRANSACTION-AMOUNT >= FRAUD-THRESHOLD AND TRANSACTION-TYPE = "PURCHASE" AND MERCHANT-CODE = "LUXURY" DISPLAY " ⚠ Fraud alert: HIGH RISK TRANSACTION" ADD 1 TO FRAUD-ALERTS-COUNT END-IF ADD 1 TO TRANSACTIONS-PROCESSED DISPLAY " " END-PERFORM. DEMONSTRATE-RISK-ASSESSMENT. DISPLAY "6. Risk Assessment with AND:". DISPLAY " ==========================". PERFORM VARYING WS-INDEX FROM 1 BY 1 UNTIL WS-INDEX > 5 MOVE SAMPLE-CUSTOMER-ID(WS-INDEX) TO CUSTOMER-ID MOVE SAMPLE-CUSTOMER-NAME(WS-INDEX) TO CUSTOMER-NAME MOVE SAMPLE-AGE(WS-INDEX) TO CUSTOMER-AGE MOVE SAMPLE-TYPE(WS-INDEX) TO CUSTOMER-TYPE MOVE SAMPLE-STATUS(WS-INDEX) TO ACCOUNT-STATUS MOVE SAMPLE-RATING(WS-INDEX) TO CREDIT-RATING MOVE SAMPLE-BALANCE(WS-INDEX) TO ACCOUNT-BALANCE MOVE SAMPLE-EMPLOYMENT(WS-INDEX) TO EMPLOYMENT-STATUS DISPLAY " Assessing risk for: " CUSTOMER-NAME *> Low risk criteria IF EXCELLENT-CREDIT AND EMPLOYED AND ACTIVE-ACCOUNT AND ACCOUNT-BALANCE > 10000 AND CUSTOMER-AGE >= 25 AND CUSTOMER-AGE <= 55 SET LOW-RISK TO TRUE DISPLAY " Risk Level: LOW" *> High risk criteria ELSE IF (POOR-CREDIT OR FAIR-CREDIT) AND (UNEMPLOYED OR STUDENT) AND (SUSPENDED-ACCOUNT OR ACCOUNT-BALANCE < 0) AND (CUSTOMER-AGE < 21 OR CUSTOMER-AGE > 70) SET HIGH-RISK TO TRUE DISPLAY " Risk Level: HIGH" *> Medium risk (everything else) ELSE SET MEDIUM-RISK TO TRUE DISPLAY " Risk Level: MEDIUM" END-IF DISPLAY " " END-PERFORM. DEMONSTRATE-AND-OPTIMIZATION. DISPLAY "7. AND Operator Optimization:". DISPLAY " ===========================". DISPLAY " Short-circuit evaluation examples:". DISPLAY " ". *> Demonstrate short-circuit evaluation MOVE "INACTIVE" TO ACCOUNT-STATUS. MOVE 0 TO ACCOUNT-BALANCE. DISPLAY " Testing with inactive account and zero balance:". *> This will short-circuit at first condition IF ACTIVE-ACCOUNT AND ACCOUNT-BALANCE > 1000 DISPLAY " This should not execute" ELSE DISPLAY " ✓ Short-circuit: First condition false, second not evaluated" END-IF. *> Optimized condition ordering (most likely to fail first) IF ACCOUNT-BALANCE > 100000 AND EXCELLENT-CREDIT AND PREMIUM-CUSTOMER AND ACTIVE-ACCOUNT DISPLAY " High-value customer processing" ELSE DISPLAY " ✓ Optimized ordering: Expensive check first" END-IF. DISPLAY " ". DISPLAY " Performance considerations:". DISPLAY " - Place most restrictive conditions first". DISPLAY " - Use short-circuit evaluation effectively". DISPLAY " - Group related conditions logically". DISPLAY " - Avoid redundant condition checking". DISPLAY " ". DISPLAY-PROCESSING-STATISTICS. DISPLAY "8. Processing Statistics:". DISPLAY " ======================". DISPLAY " Transactions processed: " TRANSACTIONS-PROCESSED. DISPLAY " Approvals: " APPROVALS-COUNT. DISPLAY " Declines: " DECLINES-COUNT. DISPLAY " Fraud alerts: " FRAUD-ALERTS-COUNT. DISPLAY " Validation errors: " VALIDATION-ERRORS. DISPLAY " ". DISPLAY " AND Operator Benefits:". DISPLAY " - Enables complex conditional logic". DISPLAY " - Supports multiple criteria validation". DISPLAY " - Provides short-circuit optimization". DISPLAY " - Enhances code readability and maintainability". DISPLAY " - Facilitates business rule implementation". DISPLAY " ". *> Working storage for loop control 01 WS-INDEX PIC 9(2).