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