En aquest estudi de cas, desenvoluparem un sistema de nòmines utilitzant RPG. Aquest projecte ens permetrà aplicar els conceptes apresos en els mòduls anteriors i veure com es poden integrar en una aplicació del món real.
Objectius del Sistema de Nòmines
- Gestió d'Empleats: Crear, llegir, actualitzar i eliminar registres d'empleats.
- Càlcul de Nòmines: Calcular el salari net dels empleats tenint en compte deduccions i bonificacions.
- Generació d'Informes: Generar informes mensuals de nòmines.
Estructura del Sistema
El sistema de nòmines es compon de les següents parts:
- Base de Dades d'Empleats: Emmagatzema la informació dels empleats.
- Mòdul de Càlcul de Nòmines: Realitza els càlculs necessaris per determinar el salari net.
- Mòdul de Generació d'Informes: Crea informes detallats de les nòmines.
- Base de Dades d'Empleats
Estructura de la Taula d'Empleats
CREATE TABLE EMPLEATS (
ID INT PRIMARY KEY,
NOM VARCHAR(100),
COGNOM VARCHAR(100),
SALARI_BASE DECIMAL(10, 2),
DEDUCCIONS DECIMAL(10, 2),
BONIFICACIONS DECIMAL(10, 2)
);Exemple de Codi RPG per Gestionar Empleats
H dftactgrp(*no) actgrp(*new)
Dcl-F EMPLEATS Usage(*Update) Keyed;
Dcl-DS Empleat Qualified;
ID Int(10);
Nom Char(100);
Cognom Char(100);
SalariBase Packed(10:2);
Deduccions Packed(10:2);
Bonificacions Packed(10:2);
End-DS;
Dcl-Proc AfegirEmpleat;
Dcl-Pi *N;
pID Int(10);
pNom Char(100);
pCognom Char(100);
pSalariBase Packed(10:2);
pDeduccions Packed(10:2);
pBonificacions Packed(10:2);
End-Pi;
Empleat.ID = pID;
Empleat.Nom = pNom;
Empleat.Cognom = pCognom;
Empleat.SalariBase = pSalariBase;
Empleat.Deduccions = pDeduccions;
Empleat.Bonificacions = pBonificacions;
Write EMPLEATS Empleat;
End-Proc;
- Mòdul de Càlcul de Nòmines
Lògica de Càlcul
El salari net es calcula com: \[ \text{Salari Net} = \text{Salari Base} - \text{Deduccions} + \text{Bonificacions} \]
Exemple de Codi RPG per al Càlcul de Nòmines
Dcl-Proc CalcularSalariNet;
Dcl-Pi Packed(10:2);
pID Int(10);
End-Pi;
Dcl-DS Empleat Qualified;
ID Int(10);
Nom Char(100);
Cognom Char(100);
SalariBase Packed(10:2);
Deduccions Packed(10:2);
Bonificacions Packed(10:2);
End-DS;
Chain (pID) EMPLEATS Empleat;
If %Found(EMPLEATS);
Return Empleat.SalariBase - Empleat.Deduccions + Empleat.Bonificacions;
Else;
Return 0;
EndIf;
End-Proc;
- Mòdul de Generació d'Informes
Exemple de Codi RPG per Generar Informes
Dcl-Proc GenerarInformeMensual;
Dcl-Pi *N;
End-Pi;
Dcl-DS Empleat Qualified;
ID Int(10);
Nom Char(100);
Cognom Char(100);
SalariBase Packed(10:2);
Deduccions Packed(10:2);
Bonificacions Packed(10:2);
End-DS;
Dcl-S SalariNet Packed(10:2);
Setll *Start EMPLEATS;
Reade EMPLEATS Empleat;
Dow Not %Eof(EMPLEATS);
SalariNet = CalcularSalariNet(Empleat.ID);
Dsply ('ID: ' + %Char(Empleat.ID) + ' Nom: ' + Empleat.Nom + ' Cognom: ' + Empleat.Cognom + ' Salari Net: ' + %Char(SalariNet));
Reade EMPLEATS Empleat;
EndDo;
End-Proc;Exercicis Pràctics
Exercici 1: Afegir un Nou Empleat
Escriu una funció que permeti afegir un nou empleat a la base de dades. Utilitza la funció AfegirEmpleat proporcionada anteriorment.
Exercici 2: Calcular el Salari Net d'un Empleat
Utilitza la funció CalcularSalariNet per calcular el salari net d'un empleat amb un ID específic.
Exercici 3: Generar un Informe Mensual
Modifica la funció GenerarInformeMensual per guardar l'informe en un fitxer en lloc de mostrar-lo a la pantalla.
Solucions
Solució a l'Exercici 1
Dcl-Proc AfegirNouEmpleat;
Dcl-Pi *N;
End-Pi;
AfegirEmpleat(1: 'Joan': 'Garcia': 3000.00: 200.00: 150.00);
End-Proc;Solució a l'Exercici 2
Dcl-Proc CalcularSalariEmpleat;
Dcl-Pi *N;
End-Pi;
Dcl-S SalariNet Packed(10:2);
SalariNet = CalcularSalariNet(1);
Dsply ('Salari Net: ' + %Char(SalariNet));
End-Proc;Solució a l'Exercici 3
Dcl-Proc GenerarInformeMensualFitxer;
Dcl-Pi *N;
End-Pi;
Dcl-DS Empleat Qualified;
ID Int(10);
Nom Char(100);
Cognom Char(100);
SalariBase Packed(10:2);
Deduccions Packed(10:2);
Bonificacions Packed(10:2);
End-DS;
Dcl-S SalariNet Packed(10:2);
Dcl-F Informe Usage(*Output) Disk;
Setll *Start EMPLEATS;
Reade EMPLEATS Empleat;
Dow Not %Eof(EMPLEATS);
SalariNet = CalcularSalariNet(Empleat.ID);
Write Informe ('ID: ' + %Char(Empleat.ID) + ' Nom: ' + Empleat.Nom + ' Cognom: ' + Empleat.Cognom + ' Salari Net: ' + %Char(SalariNet));
Reade EMPLEATS Empleat;
EndDo;
End-Proc;Conclusió
En aquest estudi de cas, hem creat un sistema de nòmines bàsic utilitzant RPG. Hem après a gestionar una base de dades d'empleats, calcular salaris nets i generar informes. Aquest projecte ens ha permès aplicar els conceptes apresos en els mòduls anteriors i veure com es poden integrar en una aplicació del món real.
Curs de Programació RPG
Mòdul 1: Introducció a la Programació RPG
- Què és RPG?
- Configuració del Teu Entorn de Desenvolupament
- Sintaxi i Estructura Bàsiques
- Programa Hello World
Mòdul 2: Conceptes Bàsics
Mòdul 3: Treballant amb Dades
Mòdul 4: Tècniques Avançades de Programació
Mòdul 5: RPG IV i Més Enllà
Mòdul 6: Integrant RPG amb Tecnologies Modernes
Mòdul 7: Aplicacions del Món Real
- Construint una Aplicació Simple
- Estudi de Cas: Sistema de Gestió d'Inventari
- Estudi de Cas: Sistema de Nòmines
- Millors Pràctiques i Revisió de Codi
