In this case study, we will develop a simplified banking system using COBOL. This project will help you understand how to apply the concepts learned throughout the course in a real-world scenario. The banking system will include functionalities such as creating accounts, depositing money, withdrawing money, and checking account balances.
Objectives
- Understand the application of COBOL in a real-world banking system.
- Implement file handling for storing account information.
- Use control structures to manage banking operations.
- Apply modular programming techniques to organize the code.
System Requirements
- Create Account: Allow users to create a new bank account.
- Deposit Money: Allow users to deposit money into their account.
- Withdraw Money: Allow users to withdraw money from their account.
- Check Balance: Allow users to check their account balance.
System Design
Data Structure
We will use a sequential file to store account information. Each record in the file will represent an account with the following fields:
- Account Number (Numeric, 10 digits)
- Account Holder Name (Alphanumeric, 30 characters)
- Account Balance (Numeric, 9 digits with 2 decimal places)
File Layout
| Field Name | Data Type | Length |
|---|---|---|
| Account Number | Numeric | 10 |
| Account Holder Name | Alphanumeric | 30 |
| Account Balance | Numeric | 9.2 |
COBOL Program Structure
The program will be divided into multiple sections:
- Identification Division: Program metadata.
- Environment Division: File definitions.
- Data Division: Variable and file record definitions.
- Procedure Division: Main logic and subroutines.
Implementation
Identification Division
Environment Division
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT AccountFile ASSIGN TO "accounts.dat"
ORGANIZATION IS SEQUENTIAL.Data Division
DATA DIVISION.
FILE SECTION.
FD AccountFile.
01 AccountRecord.
05 AccountNumber PIC 9(10).
05 AccountHolderName PIC X(30).
05 AccountBalance PIC 9(7)V99.
WORKING-STORAGE SECTION.
01 WS-Choice PIC 9.
01 WS-AccountNumber PIC 9(10).
01 WS-AccountHolderName PIC X(30).
01 WS-AccountBalance PIC 9(7)V99.
01 WS-Amount PIC 9(7)V99.Procedure Division
PROCEDURE DIVISION.
MAIN-PARA.
PERFORM DisplayMenu
ACCEPT WS-Choice
EVALUATE WS-Choice
WHEN 1
PERFORM CreateAccount
WHEN 2
PERFORM DepositMoney
WHEN 3
PERFORM WithdrawMoney
WHEN 4
PERFORM CheckBalance
WHEN OTHER
DISPLAY "Invalid choice. Please try again."
END-EVALUATE
STOP RUN.
DisplayMenu.
DISPLAY "1. Create Account"
DISPLAY "2. Deposit Money"
DISPLAY "3. Withdraw Money"
DISPLAY "4. Check Balance"
DISPLAY "Enter your choice: ".
CreateAccount.
DISPLAY "Enter Account Number: "
ACCEPT WS-AccountNumber
DISPLAY "Enter Account Holder Name: "
ACCEPT WS-AccountHolderName
MOVE 0 TO WS-AccountBalance
OPEN OUTPUT AccountFile
MOVE WS-AccountNumber TO AccountNumber
MOVE WS-AccountHolderName TO AccountHolderName
MOVE WS-AccountBalance TO AccountBalance
WRITE AccountRecord
CLOSE AccountFile
DISPLAY "Account created successfully.".
DepositMoney.
DISPLAY "Enter Account Number: "
ACCEPT WS-AccountNumber
DISPLAY "Enter Amount to Deposit: "
ACCEPT WS-Amount
OPEN I-O AccountFile
PERFORM ReadAccount
IF AccountNumber = WS-AccountNumber
ADD WS-Amount TO AccountBalance
REWRITE AccountRecord
DISPLAY "Deposit successful."
ELSE
DISPLAY "Account not found."
END-IF
CLOSE AccountFile.
WithdrawMoney.
DISPLAY "Enter Account Number: "
ACCEPT WS-AccountNumber
DISPLAY "Enter Amount to Withdraw: "
ACCEPT WS-Amount
OPEN I-O AccountFile
PERFORM ReadAccount
IF AccountNumber = WS-AccountNumber
IF AccountBalance >= WS-Amount
SUBTRACT WS-Amount FROM AccountBalance
REWRITE AccountRecord
DISPLAY "Withdrawal successful."
ELSE
DISPLAY "Insufficient balance."
END-IF
ELSE
DISPLAY "Account not found."
END-IF
CLOSE AccountFile.
CheckBalance.
DISPLAY "Enter Account Number: "
ACCEPT WS-AccountNumber
OPEN INPUT AccountFile
PERFORM ReadAccount
IF AccountNumber = WS-AccountNumber
DISPLAY "Account Balance: " AccountBalance
ELSE
DISPLAY "Account not found."
END-IF
CLOSE AccountFile.
ReadAccount.
READ AccountFile INTO AccountRecord
AT END
DISPLAY "End of file reached."
NOT AT END
IF AccountNumber = WS-AccountNumber
EXIT PERFORM
END-IF
END-READ.Summary
In this case study, we developed a simplified banking system using COBOL. We covered:
- Creating a sequential file to store account information.
- Implementing basic banking operations such as creating accounts, depositing money, withdrawing money, and checking balances.
- Using control structures and modular programming techniques to organize the code.
This case study provides a practical application of COBOL programming concepts and prepares you for more complex real-world projects.
