Está en la página 1de 40

Datos de Identificacin

Asignatura Programacin I
Cdigo 3154
Semestre Tercero
rea Programacin
Programa Ingeniera en Informtica
Departamento Sistemas
Fecha de Elaboracin 08/03/2012
Fecha ltima actualizacin 30/09/2014
La Universidad Manuela Saenz,
requiere de un programa que le
permita obtener informacin sobre los
profesores que laboran en esa casa de
estudios, de los cuales existen dos
categoras:
1. Profesores Contratados (no son personal fijo)
2. Profesores Ordinarios (se encuentran incluidos
en la nmina como personal fijo).
El programa debe indicar por cada profesor, el
sueldo neto mensual que le deber cancelar la
universidad, por supuesto identificando el profesor
con los datos de Cdula, Nombre y Categora
(Contratado, Ordinario).
Cuando el profesor comienza a laborar en
la universidad, se le llena una ficha con ciertos
datos que son vitales para su expediente, el
cual ser registrado por la oficina de personal.
Estos datos son: cdula, nombre, nmero de
hijos, categora (1. Contratado, 2. Ordinario) y
nivel acadmico (1. Postgrado Maestra,
2. Doctorado).
Dentro de las polticas por las cuales se rige
la universidad, se establece que se le debe
cancelar adicional al sueldo mensual un bono
por hijos que corresponde a 250 BsF. por cada
hijo.
Si el profesor es contratado, se registra
tambin la duracin del contrato en meses y el
monto total en BsF. del contrato. Para calcular
el sueldo mensual se divide el monto total del
contrato entre la duracin.
En cambio, para los profesores ordinarios,
adems se registra su sueldo mensual y se les
descuenta el 1% por concepto de
mantenimiento de la sede social (club),
tambin se conoce el horario en el que trabaja
(1. Diurno, 2. Nocturno, 3. Mixto).
Adicional al sueldo mensual y al bono por
hijos, se establece que solo para los profesores
ordinarios se pagar mensualmente un bono por
horario definido de la siguiente manera: 200 BsF.
a los que trabajan horario nocturno, para horario
mixto el bono es la mitad del bono nocturno y
los que trabajan horario diurno no les
corresponde bono por horario.
Todos los descuentos son realizados en base
al sueldo mensual.
Es importante acotar, que para el calculo del
sueldo neto mensual de cada profesor, se debe
tomar en cuenta las asignaciones (bonos) y las
deducciones (descuentos).
En estos momentos, la oficina de personal
de la universidad requiere presentar un
informe ante las autoridades universitarias, el
mismo deber presentar los siguientes datos:
Total de profesores que tienen doctorado, total
de profesores contratados cuyo salario neto
mensual sea superior a 5500BsF y cul es el
monto total pagado en bono por horario.
Qu datos se necesitan para resolver
el problema? (ENTRADAS)
Generales para cualquier profesor:
Cdula, nombre, nmero de hijos (nrohijos),
categora (1. contratado, 2. ordinario) y nivel
acadmico (nivelac) (1. postgrado maestra, 2.
doctorado)
Especfico para profesores contratados:
Duracin del contrato (duracioncontrato)
y monto del Contrato (montocontrato)

Especfico para profesores


ordinarios:
Sueldo mensual (sueldomensual) y el
horario de trabajo (horario)
Qu informacin debe proporcionar
la resolucin del problema? (SALIDAS)
Por cada profesor:
Cdula, nombre, categora
(contratado, ordinario) y el sueldo
neto mensual
Por la universidad:
Total de profesores que tienen doctorado
Total de profesores contratados cuyo salario
neto mensual sea superior a 5500BsF
Monto total pagado por concepto del bono
por horario
Cmo obtener la informacin que proporcionar la
resolucin del problema? (PROCESO CLCULOS)
Clculos
Generales para todos los profesores:
BonoHijos() nrohijos * 250
NombreCategoria()
if (categoria == 1)
return Contratado
else return Ordinario

Especifico para profesores contratados:


SueldoMensual() montocontrato/duracioncontrato
SueldoNeto() SueldoMensual() + BonoHijos()
Cmo obtener la informacin que proporcionar la
resolucin del problema? (PROCESO CLCULOS)
Especifico para profesores ordinarios:
DescuentoClub() = sueldomensual * 0.01
BonoHorario()
if (horario == 2) // nocturno
return 200;
else Clculos
if (horario == 3) // mixto
return 100;
else
return 0; // diurno
SueldoNeto() = sueldomensual + BonoHijos() +
BonoHorario() DescuentoClub()
Cmo obtener la informacin que proporcionar la
resolucin del problema? (PROCESO CLCULOS)

Para la Universidad: Proceso


Total de profesores que tienen doctorado
Se debe actualizar un contador de acuerdo a una
condicin, esta actualizacin debe hacerse para ambos
casos, los profesores contratados y los profesores
ordinarios.
Debido a que los clculos son
de la universidad es necesario if (mcont.GetNivelAc() == 2)
utilizar los objetos que permitan ctdoctores++;
activar los mtodos necesarios y
para el proceso de actualizacin,
es por esa razn que mcont es if (mord.GetNivelAc() == 2)
un objeto del profesor ctdoctores++;
contratado y mord es un objeto
del profesor ordinario
Cmo obtener la informacin que proporcionar la
resolucin del problema? (PROCESO CLCULOS)

Para la Universidad: Proceso


Total de profesores contratados cuyo salario neto
mensual sea superior a 5500BsF

Solo para profesores contratados, se debe actualizar


un contador de acuerdo a una condicin:

if (mcont.SueldoNeto() > 5500)


ctcont++;
Cmo obtener la informacin que proporcionar la
resolucin del problema? (PROCESO CLCULOS)

Para la Universidad: Proceso


Monto total pagado por concepto del bono
por horario
Cmo los profesores que reciben bono
por horario son los profesores
ordinarios, entonces solo para profesores
ordinarios, se debe actualizar un
acumulador
acbonohorario += mord.BonoHorario();
Profesor:
MProfesor

Profesor Profesor
Ordinario: Contratado:
MOrdinario MContratado

Universidad
MUniversidad
MPersona

MProfesor VGeneral

MContratado MOrdinario VProfesor VUniversidad

MUniversidad Controlador
#ifndef MPROFESOR_H_
#define MPROFESOR_H_
#include "MPersona.h " // clase genrica
class MProfesor : public MPersona
{ protected:
int nrohijos, nivelac, categoria; Relacin
public: herencia
MProfesor();
void SetNroHijos(int);
MProfesor hereda
void SetNivelAc(int); de MPersona los
void SetCategoria(int); atributos cedula
int GetNroHijos(); y nombre, con
int GetNivelAc(); estos se
int GetCategoria(); completan los
float BonoHijos(); atributos
string NombreCategoria(); requeridos por
}; MProfesor
#endif
/* Calcula el bono por hijos de acuerdo al
nmero de hijos */
float MProfesor :: BonoHijos()
{
return nrohijos * 250;
}

string MProfesor :: NombreCategoria()


{
if (categoria == 1)
return Contratado;
else return Ordinario;
}
#ifndef MCONTRATADO_H_
#define MCONTRATADO_H_
#include "MProfesor.h " // clase base padre para
class MContratado : public MProfesor // MContratado
{
private: Relacin
float montocontrato; herencia
int duracioncontrato;
public:
MContratado();
void SetDuracionContrato(int);
void SetMontoContrato(float);
int GetDuracionContrato (); MContratado
float GetMontoContrato(); hereda de
MProfesor que a
float SueldoMensual();
su vez hereda
float SueldoNeto(); de MPersona
};
#endif
/* Calcula el sueldo mensual que cobrar el
profesor de acuerdo a su contrato */
float MContratado :: SueldoMensual()
{
return montocontrato / duracioncontrato;
}
/* Calcula el sueldo neto que cobrar el
profesor de acuerdo al sueldo mensual y
al bono por hijos que le corresponde */
float MContratado :: SueldoNeto()
{
return SueldoMensual() + BonoHijos();
}
#ifndef MORDINARIO_H_
#define MORDINARIO_H_
#include "MProfesor.h " // clase base padre para
class MOrdinario : public MProfesor // MOrdinario
{
private:
Relacin
float sueldomensual; herencia
int horario;
public:
MOrdinario();
void SetSueldoMensual(float);
void SetHorario(int);
float GetSueldoMensual();
int GetHorario(); MOrdinario hereda
float DescuentoClub(); de MProfesor que
float BonoHorario(); a su vez hereda
float SueldoNeto(); de MPersona
};
#endif
// Calcula el descuento del 1% por club
float MOrdinario :: DescuentoClub()
{
return sueldomensual * 0.01;
}
// Calcula el bono por horario
float MOrdinario :: BonoHorario()
{
if (horario == 2 ) // nocturno
return 200;
else
if (horario == 3) // mixto
return 100;
return 0; // diurno
}
/* Calcula el sueldo neto de acuerdo a las
asignaciones y deducciones que le
corresponden al profesor */
float MOrdinario :: SueldoNeto()
{
return sueldomensual + BonoHijos() +
BonoHorario() - DescuentoClub();
}
#ifndef MUNIVERSIDAD_H_
#define MUNIVERSIDAD_H_
#include "MContratado.h "
#include "MOrdinario.h "
class MUniversidad // No tiene herencia con nadie
{ private:
float acbonohorario;
int ctdoctores, ctcont;
public:
MUniversidad();
void SetAcBonoHorario(int);
void SetCtDoctores(int);
void SetCtCont(int);
float GetAcBonoHorario();
int GetCtDoctores();
int GetCtCont();
void ProcesarContratado(MContratado mcont);
void ProcesarOrdinario(MOrdinario mord);
};#endif
/* Constructor que inicializa los atributos
contadores y acumulador */
MUniversidad :: MUniversidad()
{
acbonohorario = 0;
ctdoctores = 0;
ctcont = 0;
}
/* Actualiza el contador de doctorado y el
contador de sueldo neto mayor 1500*/
void MUniversidad :: ProcesarContratado
(MContratado mcont)
{
// Tiene doctorado
if (mcont.GetNivelAc() == 2)
++ctdoctores;
if (mcont.SueldoNeto() > 5500)
++ ctcont;
}
/* Actualiza el contador de doctorado y el
acumulador de los BsF. del bono por
horario*/
void MUniversidad :: ProcesarOrdinario
(MOrdinario mord)
{
// Tiene doctorado
if (mord.GetNivelAc() == 2)
++ctdoctores;
acbonohorario += mord. BonoHorario();
}
#ifndef VPROFESOR_H
#define VPROFESOR_H Relacin
#include "VGeneral.h herencia

class VProfesor : public VGeneral


{
public:
VProfesor();
void ImprimirProfesor(string ced,
string nombre,
string categoria,
float sneto);
};
#endif
// Imprime la informacin requerida por profesor
void VProfesor::ImprimirProfesor(string ced,
string nombre,
string categoria,
float sneto)
{
Limpiar();
ImprimirEncabezado(" INFORMACION DEL
PROFESOR", " ========================");
ImprimirString("\n Cedula: ",ced);
ImprimirString("\n Nombre: ", nombre);
ImprimirString("\n Categoria: ",categoria);
ImprimirNroDecimal("\n Sueldo Neto: ",sneto);
ImprimirLineasBlanco(2);
Pausa();
}
#ifndef VUNIVERSIDAD_H Relacin
#define VUNIVERSIDAD_H herencia
#include "VGeneral.h"

class VUniversidad: public VGeneral


{
public:
VUniversidad();
void ImprimirUniv(int ctdoct,
int ctcontra,
float totbonoh);
};
#endif
/* Imprime la informacin requerida por la oficina de
personal de la universidad*/
void VUniversidad::ImprimirUniv(int ctdoct,
int ctcontra,
float totbonoh)
{ Limpiar();
ImprimirEncabezado(" INFORMACION DE TOTALES",
" ======================");
ImprimirNro("\n\n Total de profesores con
doctorado: ",ctdoct);
ImprimirNro("\n\n Total de profesores CONTRATADOS
con salario > 5500: ",ctcontra);
ImprimirNroDecimal("\n\n Monto total pagado en Bono
por horario : ",totbonoh);
ImprimirLineasBlanco(2);
Pausa();
}
#ifndef CONTROLADOR_H_
#define CONTROLADOR_H_
#include "MUniversidad.h"
#include "VUniversidad.h"
#include "VProfesor.h"
using namespace std;
class Controlador
{
private:
MUniversidad muniv;
VUniversidad vuniv;
public:
Controlador();
void ProcesarProfesores();
void ReporteUniversidad();
};
#endif
// Permite procesar los profesores
void Controlador::ProcesarProfesores()
{
MContratado mcont;
MOrdinario mord;
VProfesor vprof;
string ci, nom;
int nrohijos,resp,categ, dura, turno,nivelac;
float smensual, montoc;
// ..ciclo para procesar varios profesores
do
{
vuniv.Limpiar();
vuniv.ImprimirLineasBlanco(1);
vuniv.ImprimirEncabezado( Universidad Manuela
Saenz", ==================");
/* Se solicita al objeto de la clase VProfesor que lea
cedula, nombre, nro. hijos, categora y nivel acadmico*/
ci = vprof.LeerString("\n Cedula: ");
nom = vprof.LeerString("\n Nombre: ");
nrohijos = vprof.LeerNro("\n Nro. hijos: ");
categ = vprof.LeerValidarNro("\n Categoria (1. Contratado,
2. Ordinario): ",1,2);
nivelac = vprof.LeerValidarNro("\n Nivel Academico
(1. Posgrado, 2. Doctorado): ",1,2);
/* Dependiendo de la categora se leen los datos que faltan
y se le da estado al objeto que corresponde bien sea a
MContratado a MOrdinario*/
switch (categ)
{ //Profesor Contratado, lee duracin y monto
case 1: dura = vprof.LeerValidarNroValorInicial("\n Duracion
Contrato en meses: ",1);
montoc = vprof.LeerNroDecimal("\n Monto del
Contrato: ");
/*case 1. Setear datos al objeto mcont de
la clase MContratado */
mcont.SetCedula(ci);
mcont.SetNombre(nom);
mcont.SetNroHijos(nrohijos);
mcont.SetCategoria(categ);
mcont.SetNivelAc(nivelac);
mcont.SetDuracionContrato(dura);
mcont.SetMontoContrato(montoc);
muniv.ProcesarContratado(mcont);
vprof.ImprimirProfesor(mcont.GetCedula(),
mcont.GetNombre(),
mcont.NombreCategoria(),
mcont.SueldoNeto());
break;
// Profesor Ordinario, lee sueldo mensual y horario de trabajo
case 2: smensual = vprof.LeerNroDecimal("\n Sueldo Mensual: ");
turno = vprof.LeerValidarNro("\n Horario Trabajo(1.Diurno,
2.Nocturno, 3.Mixto): ",1,3);
// Setear datos al objeto mord de la clase MOrdinario
mord.SetCedula(ci);
mord.SetNombre(nom);
mord.SetNroHijos(nrohijos);
mord.SetCategoria(categ);
mord.SetNivelAc(nivelac);
mord.SetSueldoMensual(smensual);
mord.SetHorario(turno);
muniv.ProcesarOrdinario(mord);
vprof.ImprimirProfesor(mord.GetCedula(),
mord.GetNombre(),
mord.NombreCategoria(),
mord.SueldoNeto());
break;
} // switch
resp = vuniv.LeerValidarNro("\n\n Desea procesar otro
profesor 1->SI 2->NO: ",1,2);
}
while (resp==1) ; // fin del while

} // fin del mtodo


// Imprime la informacin de la universidad
void Controlador::ReporteUniversidad()
{
/* Se solicita al objeto de la clase MUniversidad la
informacin solicitada y esta se enva por
parmetros al mtodo del objeto de la clase
VUniversidad para que la imprima */
vuniv.ImprimirUniv(muniv.GetCtDoctores(),
muniv.GetCtCont(),
muniv.GetAcBonoHorario());

}
#include "Controlador.h"

int main()
{
Controlador c;
c.ProcesarProfesores();
c.ReporteUniversidad();
return 0;
}
Realiza los ajustes necesarios para cumplir
con los siguientes requerimientos:
Ahora la Universidad necesita guardar el ao
en el que ingreso cada profesor para poder
saber:
El porcentaje de profesores contratados
que ingresaron antes del ao 2005.
El promedio de sueldos netos de los
profesores ordinarios que ingresaron en el
ao 2010.

También podría gustarte