En aquest estudi de cas, desenvoluparem un sistema bancari senzill utilitzant COBOL. Aquest projecte ens permetrà aplicar molts dels conceptes apresos al llarg del curs, des de la gestió d'arxius fins a la programació modular i la gestió d'errors.

Objectius del Projecte

  1. Crear un sistema per gestionar comptes bancaris.
  2. Permetre operacions bàsiques com dipòsits, retirades i consultes de saldo.
  3. Emmagatzemar les dades dels comptes en un arxiu seqüencial.
  4. Implementar tècniques de gestió d'errors per assegurar la robustesa del sistema.

Estructura del Sistema

El sistema bancari constarà de les següents funcionalitats:

  1. Creació de comptes nous.
  2. Dipòsit de diners en un compte.
  3. Retirada de diners d'un compte.
  4. Consulta de saldo d'un compte.
  5. Llistat de tots els comptes.

Estructura de Dades

Utilitzarem un arxiu seqüencial per emmagatzemar les dades dels comptes. Cada registre de l'arxiu contindrà la següent informació:

  • Número de compte (10 caràcters)
  • Nom del titular (30 caràcters)
  • Saldo (9 dígits, 2 decimals)

Definició del Registre en COBOL

01  ACCOUNT-RECORD.
    05  ACCOUNT-NUMBER      PIC X(10).
    05  ACCOUNT-HOLDER      PIC X(30).
    05  ACCOUNT-BALANCE     PIC 9(7)V99.

Programa Principal

El programa principal gestionarà el menú d'opcions i cridarà els subprogrames corresponents per a cada funcionalitat.

Estructura del Programa Principal

IDENTIFICATION DIVISION.
PROGRAM-ID. BankingSystem.

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
    SELECT ACCOUNT-FILE ASSIGN TO "accounts.dat"
    ORGANIZATION IS SEQUENTIAL
    ACCESS MODE IS SEQUENTIAL
    FILE STATUS IS WS-FILE-STATUS.

DATA DIVISION.
FILE SECTION.
FD  ACCOUNT-FILE.
01  ACCOUNT-RECORD.
    05  ACCOUNT-NUMBER      PIC X(10).
    05  ACCOUNT-HOLDER      PIC X(30).
    05  ACCOUNT-BALANCE     PIC 9(7)V99.

WORKING-STORAGE SECTION.
01  WS-FILE-STATUS          PIC XX.
01  WS-OPTION               PIC 9.
01  WS-ACCOUNT-NUMBER       PIC X(10).
01  WS-ACCOUNT-HOLDER       PIC X(30).
01  WS-AMOUNT               PIC 9(7)V99.

PROCEDURE DIVISION.
MAIN-PROCEDURE.
    PERFORM INITIALIZE
    PERFORM DISPLAY-MENU
    PERFORM UNTIL WS-OPTION = 5
        EVALUATE WS-OPTION
            WHEN 1
                PERFORM CREATE-ACCOUNT
            WHEN 2
                PERFORM DEPOSIT-MONEY
            WHEN 3
                PERFORM WITHDRAW-MONEY
            WHEN 4
                PERFORM CHECK-BALANCE
            WHEN 5
                PERFORM LIST-ACCOUNTS
            WHEN OTHER
                DISPLAY "Opció Invàlida. Si us plau, intenta-ho de nou."
        END-EVALUATE
        PERFORM DISPLAY-MENU
    END-PERFORM
    PERFORM TERMINATE
    STOP RUN.

INITIALIZE.
    OPEN I-O ACCOUNT-FILE
    IF WS-FILE-STATUS NOT = "00"
        DISPLAY "Error obrint l'arxiu de comptes."
        STOP RUN
    END-IF.

DISPLAY-MENU.
    DISPLAY "1. Crear Compte"
    DISPLAY "2. Dipositar Diners"
    DISPLAY "3. Retirar Diners"
    DISPLAY "4. Consultar Saldo"
    DISPLAY "5. Llistar Comptes"
    DISPLAY "6. Sortir"
    ACCEPT WS-OPTION.

CREATE-ACCOUNT.
    DISPLAY "Introdueix el número de compte:"
    ACCEPT WS-ACCOUNT-NUMBER
    DISPLAY "Introdueix el nom del titular:"
    ACCEPT WS-ACCOUNT-HOLDER
    MOVE 0 TO ACCOUNT-BALANCE
    WRITE ACCOUNT-RECORD
    IF WS-FILE-STATUS = "00"
        DISPLAY "Compte creat amb èxit."
    ELSE
        DISPLAY "Error creant el compte."
    END-IF.

DEPOSIT-MONEY.
    DISPLAY "Introdueix el número de compte:"
    ACCEPT WS-ACCOUNT-NUMBER
    PERFORM FIND-ACCOUNT
    IF WS-FILE-STATUS = "00"
        DISPLAY "Introdueix l'import a dipositar:"
        ACCEPT WS-AMOUNT
        ADD WS-AMOUNT TO ACCOUNT-BALANCE
        REWRITE ACCOUNT-RECORD
        DISPLAY "Dipòsit realitzat amb èxit."
    ELSE
        DISPLAY "Compte no trobat."
    END-IF.

WITHDRAW-MONEY.
    DISPLAY "Introdueix el número de compte:"
    ACCEPT WS-ACCOUNT-NUMBER
    PERFORM FIND-ACCOUNT
    IF WS-FILE-STATUS = "00"
        DISPLAY "Introdueix l'import a retirar:"
        ACCEPT WS-AMOUNT
        IF WS-AMOUNT > ACCOUNT-BALANCE
            DISPLAY "Saldo insuficient."
        ELSE
            SUBTRACT WS-AMOUNT FROM ACCOUNT-BALANCE
            REWRITE ACCOUNT-RECORD
            DISPLAY "Retirada realitzada amb èxit."
        END-IF
    ELSE
        DISPLAY "Compte no trobat."
    END-IF.

CHECK-BALANCE.
    DISPLAY "Introdueix el número de compte:"
    ACCEPT WS-ACCOUNT-NUMBER
    PERFORM FIND-ACCOUNT
    IF WS-FILE-STATUS = "00"
        DISPLAY "Saldo actual: " ACCOUNT-BALANCE
    ELSE
        DISPLAY "Compte no trobat."
    END-IF.

LIST-ACCOUNTS.
    DISPLAY "Llistat de tots els comptes:"
    PERFORM UNTIL WS-FILE-STATUS = "10"
        READ ACCOUNT-FILE NEXT
        AT END
            MOVE "10" TO WS-FILE-STATUS
        NOT AT END
            DISPLAY ACCOUNT-NUMBER, ACCOUNT-HOLDER, ACCOUNT-BALANCE
    END-PERFORM.

FIND-ACCOUNT.
    MOVE "00" TO WS-FILE-STATUS
    READ ACCOUNT-FILE
    AT END
        MOVE "10" TO WS-FILE-STATUS
    NOT AT END
        IF ACCOUNT-NUMBER NOT = WS-ACCOUNT-NUMBER
            PERFORM FIND-ACCOUNT
        END-IF
    END-READ.

TERMINATE.
    CLOSE ACCOUNT-FILE.

Exercicis Pràctics

  1. Afegir una funcionalitat per eliminar un compte.
  2. Implementar la gestió d'errors per a cada operació.
  3. Crear un informe que mostri el total de diners en tots els comptes.

Solucions als Exercicis

  1. Afegir una funcionalitat per eliminar un compte

DELETE-ACCOUNT.
    DISPLAY "Introdueix el número de compte a eliminar:"
    ACCEPT WS-ACCOUNT-NUMBER
    PERFORM FIND-ACCOUNT
    IF WS-FILE-STATUS = "00"
        DELETE ACCOUNT-RECORD
        DISPLAY "Compte eliminat amb èxit."
    ELSE
        DISPLAY "Compte no trobat."
    END-IF.

  1. Implementar la gestió d'errors per a cada operació

CREATE-ACCOUNT.
    DISPLAY "Introdueix el número de compte:"
    ACCEPT WS-ACCOUNT-NUMBER
    DISPLAY "Introdueix el nom del titular:"
    ACCEPT WS-ACCOUNT-HOLDER
    MOVE 0 TO ACCOUNT-BALANCE
    WRITE ACCOUNT-RECORD
    IF WS-FILE-STATUS = "00"
        DISPLAY "Compte creat amb èxit."
    ELSE
        DISPLAY "Error creant el compte. Codi d'error: " WS-FILE-STATUS
    END-IF.

  1. Crear un informe que mostri el total de diners en tots els comptes

GENERATE-REPORT.
    MOVE 0 TO WS-TOTAL-BALANCE
    PERFORM UNTIL WS-FILE-STATUS = "10"
        READ ACCOUNT-FILE NEXT
        AT END
            MOVE "10" TO WS-FILE-STATUS
        NOT AT END
            ADD ACCOUNT-BALANCE TO WS-TOTAL-BALANCE
    END-PERFORM
    DISPLAY "Total de diners en tots els comptes: " WS-TOTAL-BALANCE.

Conclusió

Aquest estudi de cas ens ha permès aplicar molts dels conceptes apresos al llarg del curs de COBOL. Hem creat un sistema bancari senzill que gestiona comptes, permet dipòsits, retirades i consultes de saldo, i emmagatzema les dades en un arxiu seqüencial. A més, hem implementat tècniques de gestió d'errors per assegurar la robustesa del sistema. Amb aquests coneixements, estem preparats per abordar projectes més complexos i avançats en COBOL.

© Copyright 2024. Tots els drets reservats