En aquest estudi de cas, desenvoluparem un sistema de gestió d'inventari utilitzant RPG. Aquest projecte ens permetrà aplicar els conceptes apresos en els mòduls anteriors i veure com es poden utilitzar en una aplicació del món real.

Objectius del Sistema de Gestió d'Inventari

  1. Registrar Productes: Permetre l'entrada de nous productes a l'inventari.
  2. Actualitzar Quantitats: Modificar les quantitats dels productes existents.
  3. Consultar Inventari: Visualitzar l'estat actual de l'inventari.
  4. Eliminar Productes: Treure productes de l'inventari.

Estructura del Sistema

El sistema es compondrà de diversos mòduls:

  1. Mòdul de Dades: Gestió de la base de dades.
  2. Mòdul de Lògica de Negoci: Processament de les operacions d'inventari.
  3. Mòdul d'Interfície d'Usuari: Interacció amb l'usuari.

  1. Mòdul de Dades

Estructura de la Base de Dades

Crearem una taula per emmagatzemar la informació dels productes. La taula tindrà les següents columnes:

Columna Tipus de Dada Descripció
product_id CHAR(10) Identificador únic del producte
name CHAR(50) Nom del producte
quantity INT Quantitat en estoc
price DEC(10, 2) Preu del producte

Creació de la Taula

CREATE TABLE products (
    product_id CHAR(10) PRIMARY KEY,
    name CHAR(50),
    quantity INT,
    price DEC(10, 2)
);

  1. Mòdul de Lògica de Negoci

Funcions Principals

  1. Afegir Producte
  2. Actualitzar Quantitat
  3. Consultar Inventari
  4. Eliminar Producte

Afegir Producte

Dcl-Proc AddProduct;
    Dcl-Pi AddProduct;
        productId CHAR(10);
        name CHAR(50);
        quantity INT(10);
        price DEC(10, 2);
    End-Pi;

    Exec SQL
        INSERT INTO products (product_id, name, quantity, price)
        VALUES (:productId, :name, :quantity, :price);

End-Proc;

Actualitzar Quantitat

Dcl-Proc UpdateQuantity;
    Dcl-Pi UpdateQuantity;
        productId CHAR(10);
        newQuantity INT(10);
    End-Pi;

    Exec SQL
        UPDATE products
        SET quantity = :newQuantity
        WHERE product_id = :productId;

End-Proc;

Consultar Inventari

Dcl-Proc GetInventory;
    Dcl-Pi GetInventory;
        productList DS LIKE(ProductsDS) DIM(100);
    End-Pi;

    Exec SQL
        SELECT * INTO :productList
        FROM products;

End-Proc;

Eliminar Producte

Dcl-Proc DeleteProduct;
    Dcl-Pi DeleteProduct;
        productId CHAR(10);
    End-Pi;

    Exec SQL
        DELETE FROM products
        WHERE product_id = :productId;

End-Proc;

  1. Mòdul d'Interfície d'Usuari

Menú Principal

Dcl-Proc MainMenu;
    Dcl-S option CHAR(1);

    DoU option = '5';
        Dsply '1. Afegir Producte';
        Dsply '2. Actualitzar Quantitat';
        Dsply '3. Consultar Inventari';
        Dsply '4. Eliminar Producte';
        Dsply '5. Sortir';
        Dsply 'Selecciona una opció: ' option;

        Select;
            When option = '1';
                CallP AddProductUI;
            When option = '2';
                CallP UpdateQuantityUI;
            When option = '3';
                CallP GetInventoryUI;
            When option = '4';
                CallP DeleteProductUI;
        EndSl;
    EndDo;

End-Proc;

Funcions d'Interfície

Afegir Producte UI

Dcl-Proc AddProductUI;
    Dcl-S productId CHAR(10);
    Dcl-S name CHAR(50);
    Dcl-S quantity INT(10);
    Dcl-S price DEC(10, 2);

    Dsply 'Introdueix ID del producte: ' productId;
    Dsply 'Introdueix nom del producte: ' name;
    Dsply 'Introdueix quantitat: ' quantity;
    Dsply 'Introdueix preu: ' price;

    CallP AddProduct(productId: name: quantity: price);

End-Proc;

Actualitzar Quantitat UI

Dcl-Proc UpdateQuantityUI;
    Dcl-S productId CHAR(10);
    Dcl-S newQuantity INT(10);

    Dsply 'Introdueix ID del producte: ' productId;
    Dsply 'Introdueix nova quantitat: ' newQuantity;

    CallP UpdateQuantity(productId: newQuantity);

End-Proc;

Consultar Inventari UI

Dcl-Proc GetInventoryUI;
    Dcl-S productList DS LIKE(ProductsDS) DIM(100);

    CallP GetInventory(productList);

    For i = 1 to %Elem(productList);
        If productList(i).product_id <> *Blanks;
            Dsply 'ID: ' + productList(i).product_id + ' Nom: ' + productList(i).name + ' Quantitat: ' + %Char(productList(i).quantity) + ' Preu: ' + %Char(productList(i).price);
        EndIf;
    EndFor;

End-Proc;

Eliminar Producte UI

Dcl-Proc DeleteProductUI;
    Dcl-S productId CHAR(10);

    Dsply 'Introdueix ID del producte: ' productId;

    CallP DeleteProduct(productId);

End-Proc;

Exercicis Pràctics

  1. Afegir Validacions: Modifica les funcions per afegir validacions, com ara assegurar que la quantitat i el preu siguin positius.
  2. Millorar la Interfície: Crea una interfície més amigable per a l'usuari, utilitzant pantalles més detallades.
  3. Afegir Funcionalitats: Implementa funcionalitats addicionals, com ara la cerca de productes per nom.

Conclusió

Aquest estudi de cas ens ha permès veure com es poden aplicar els conceptes de RPG en una aplicació pràctica. Hem creat un sistema de gestió d'inventari que inclou la gestió de dades, la lògica de negoci i la interfície d'usuari. Aquests coneixements són fonamentals per desenvolupar aplicacions més complexes en el futur.

© Copyright 2024. Tots els drets reservats