Desarrollo de Aplicaciones Orientada a Objetos
ESCUELA SUPERIOR DE TECNOLOGÍA
PROFESIONAL TECNÓLOGO
Guía de Laboratorio Nº 02
Programacion Modular
Logros:
- Implementa aplicaciones con método sin valor de retorno sin parámetros
- Implementa aplicaciones con método sin valor de retorno con parámetros
- Implementa aplicaciones con método con valor de retorno sin parámetros
- Implementa aplicaciones con método con valor de retorno con parámetros
Caso Desarrollado 01: Control de Pago de Empleados
“Marketing S.A.C.” es una empresa de cooperativa de ahorro y crédito dedicada a brindar productos
financieros contribuyendo con el crecimiento de sus clientes. En consecuencia, necesitan una
aplicación que permita controlar el pago que realizan a sus empleados así como el monto por
movilidad, asignación a favor por el numero de hijos, el descuento de ley y el neto que la empresa
necesita pagar a sus empleados.
Debemos tener en cuenta:
- Use los métodos necesarios para la implementación de la aplicación.
- La asignación del sueldo base se procesa de acuerdo a la siguiente tabla:
AREA / CONDICION PERSONAL COMISION
Ventas $ 2500.00 $ 500.00
Marketing $ 1800.00 $ 1100.00
Logística $ 3500.00 $ 2500.00
Préstamo $ 1500.00 $ 900.00
- La asignación por concepto de movilidad se procesar de acuerdo al área y se aplica sobre el
sueldo base, como se muestra en la siguiente tabla:
AREA / CONDICION PERSONAL COMISION
Ventas 10 % 5%
Marketing 20 % 10 %
Logística 30 % 15 %
Préstamo 25 % 12.5 %
- Calcular el tiempo de servicio según la fecha de ingreso que se registra para un determinado
empleado.
- Calcular una asignación adicional por la cantidad de hijos que registra el empleado, de tal
forma que por cada hijo se le aumenta $ 20.00.
- Calcular un descuento del 17% sobre el sueldo base del empleado.
- Calcular el monto neto que recibe el empleado, de acuerdo al sueldo base, asignación de
movilidad, asignación por numero de hijos y descuento, usando la siguiente formula:
Elaborado por: Lic. Manuel Torres Re.
Desarrollo de Aplicaciones Orientada a Objetos
Neto = sueldo Base + movilidad + asignación - descuento
- Validar el nombre del empleado de tal forma que no permita registrar al mismo empleado en
la lista de empleados.
- Implemente el botón “Consulta 1”que permita determinar el total de empleados por área.
- Implemente el botón “Consulta 2” que permita determinar el monto acumulado de los netos
según la condición del empleado.
- Implemente el botón “Consulta 3” que permita determinar el monto acumulado de los netos
según el área.
- Finalmente validar los valores del formulario, de tal forma que al registrar a un empleado no
permita registrar espacios vacíos en el nombre del empleado, determinar que el numero de
hijos sea numérico, determinar que el área y la condición sean seleccionados para un
determinado empleado.
Solución:
1. Creamos un nuevo proyecto en Visual Studio 2017
- Archivo > Nuevo > Proyecto
- Seleccione la plantilla “Visual C#”
- Selección “Aplicación de Windows Form”
- Asigne el nombre al proyecto
2. Cambiamos el nombre del formulario
- Seleccione el formulario “[Link]” desde el “Explorador de soluciones”
- Desde la propiedad “Nombre de archivo” asigne el nombre “frmPlanilla”
3. Diseñamos la GUI (Interfaz Gráfica de Usuario) del caso
txtEmpleado
txtHijos
cboArea
cboCondicion
dtFechaIng
btnConsulta1
btnConsulta2
btnConsulta3
lvEmpleados
btnSalir
lvEstadisticas
4. Código completo de la aplicación
using System;
using [Link];
using [Link];
using [Link];
Elaborado por: Lic. Manuel Torres Re.
Desarrollo de Aplicaciones Orientada a Objetos
using [Link];
using [Link];
using [Link];
using [Link];
using [Link];
using [Link];
namespace pjCaso62
{
public partial class frmPlanilla : Form
{
//Declaracion de variables GLOBALES
double tVentas, tMarketing, tLogistica, tPrestamo;
double aVentas, aMarketing, aLogistica, aPrestamo;
double aPersonal, aComision;
public frmPlanilla()
{
InitializeComponent();
}
private void btnRegistrar_Click(object sender, EventArgs e)
{
if (valida() == "")
{
//Captura de datos
string empleado = getEmpleado();
if (validaEmpleado() == false)
{
int hijos = getHijos();
string area = getArea();
string condición = getCondicion();
//Realizando calculos
int años = calculaTiempoServicio();
double sueldoBase = asignaSueldoBase(área, condición);
double movilidad = calculaMovilidad(sueldoBase);
double asignación = calculaAsignacion(hijos);
double descuento = calculaDescuento(sueldoBase);
double neto = calculaNeto(sueldoBase,movilidad,asignacion,descuento);
//Imprimir en la lista
imprimir(años, sueldoBase, movilidad, asignación, descuento, neto);
}
else
{
[Link]("El empleado ya se encuentra registra","Planilla");
return;
}
}
else
{
[Link]("El error se encuentra en "+valida(),"Planilla",
[Link],[Link]);
}
}
private void btnConsulta1_Click(object sender, EventArgs e)
{
totalEmpleadosxArea();
Elaborado por: Lic. Manuel Torres Re.
Desarrollo de Aplicaciones Orientada a Objetos
[Link]();
string[] elementosFila = new string[2];
ListViewItem row;
elementosFila[0] = "Total de Personal del área de Ventas";
elementosFila[1] = [Link]("0.00");
row = new ListViewItem(elementosFila);
[Link](row);
elementosFila[0] = "Total de Personal del área de Marketing";
elementosFila[1] = [Link]("0.00");
row = new ListViewItem(elementosFila);
[Link](row);
elementosFila[0] = "Total de Personal del área de Logística";
elementosFila[1] = [Link]("0.00");
row = new ListViewItem(elementosFila);
[Link](row);
elementosFila[0] = "Total de Personal del área de Prestamos";
elementosFila[1] = [Link]("0.00");
row = new ListViewItem(elementosFila);
[Link](row);
}
private void btnConsulta3_Click(object sender, EventArgs e)
{
montoAcumuladoxArea();
[Link]();
string[] elementosFila = new string[2];
ListViewItem row;
elementosFila[0] = "Monto neto acumulado del área de Ventas";
elementosFila[1] = [Link]("C");
row = new ListViewItem(elementosFila);
[Link](row);
elementosFila[0] = "Monto neto acumulado del área de Marketing";
elementosFila[1] = [Link]("C");
row = new ListViewItem(elementosFila);
[Link](row);
elementosFila[0] = "Monto neto acumulado del área de Logística";
elementosFila[1] = [Link]("C");
row = new ListViewItem(elementosFila);
[Link](row);
elementosFila[0] = "Monto neto acumulado del área de Prestamos";
elementosFila[1] = [Link]("C");
row = new ListViewItem(elementosFila);
[Link](row);
}
private void btnConsulta2_Click(object sender, EventArgs e)
{
montoAcumuladorxCondicion();
[Link]();
Elaborado por: Lic. Manuel Torres Re.
Desarrollo de Aplicaciones Orientada a Objetos
string[] elementosFila = new string[2];
ListViewItem row;
elementosFila[0] = "Monto neto acumulado por empleados tipo Personal";
elementosFila[1] = [Link]("C");
row = new ListViewItem(elementosFila);
[Link](row);
elementosFila[0] = "Monto neto acumulado por empleados tipo Comision";
elementosFila[1] = [Link]("C");
row = new ListViewItem(elementosFila);
[Link](row);
}
private void btnSalir_Click(object sender, EventArgs e)
{
DialogResult r = [Link]("Esta seguro de salir?",
"Planilla",
[Link],
[Link]);
if (r == [Link]) [Link]();
}
//Metodos de captura de valor
string getEmpleado()
{
return [Link];
}
int getHijos()
{
return [Link]([Link]);
}
string getArea()
{
return [Link];
}
string getCondicion()
{
return [Link];
}
DateTime getFecha()
{
return [Link];
}
//Metodos para calcular
//Metodo que determina el sueldo
double asignaSueldoBase(string area, string condicion)
{
switch (area)
{
case "Ventas":
if (condicion == "Personal")
return 2500;
else
return 500;
Elaborado por: Lic. Manuel Torres Re.
Desarrollo de Aplicaciones Orientada a Objetos
case "Marketing":
if (condicion == "Personal")
return 1800;
else
return 1100;
case "Logistica":
if (condicion == "Personal")
return 3500;
else
return 2500;
case "Prestamo":
if (condicion == "Personal")
return 1500;
else
return 900;
}
return 0;
}
//Calcular Años de servicio
int calculaTiempoServicio()
{
return [Link] - getFecha().Year;
}
//Calcular la asignación de movilidad
double calculaMovilidad(double sueldoBase)
{
switch (getArea())
{
case "Ventas":
if (getCondicion() == "Personal")
return 10.0/100 * sueldoBase;
else
return 5.0 / 100 * sueldoBase;
case "Marketing":
if (getCondicion() == "Personal")
return 20.0 / 100 * sueldoBase;
else
return 10.0 / 100 * sueldoBase;
case "Logistica":
if (getCondicion() == "Personal")
return 30.0 / 100 * sueldoBase;
else
return 15.0 / 100 * sueldoBase;
case "Prestamo":
if (getCondicion() == "Personal")
return 25.0 / 100 * sueldoBase;
else
return 12.5 / 100 * sueldoBase;
}
return 0;
}
//Metodo para calcular la asignación por numero de hijos
double calculaAsignacion(int hijos)
{
return hijos * 20;
}
Elaborado por: Lic. Manuel Torres Re.
Desarrollo de Aplicaciones Orientada a Objetos
double calculaDescuento(double sueldoBase)
{
return 17.0 / 100 * sueldoBase;
}
double calculaNeto(double sueldoBase, double movilidad,
double asignación, double descuento)
{
return sueldoBase+movilidad+asignacion-descuento;
}
//Metodo para imprimir
void imprimir(int tiempo, double sueldoBase, double movilidad,
double asignacion, double descuento, double neto)
{
ListViewItem fila = new ListViewItem(getEmpleado());
[Link](getHijos().ToString());
[Link](getArea());
[Link](getCondicion());
[Link]([Link]());
[Link]([Link]("0.00"));
[Link]([Link]("0.00"));
[Link]([Link]("0.00"));
[Link]([Link]());
[Link]([Link]("0.00"));
[Link](fila);
}
//Metodos para las estadisticas
//CONSULTA 1: Total de Empleados por Areas
public void totalEmpleadosxArea()
{
tVentas = 0;
tMarketing = 0;
tLogistica = 0;
tPrestamo = 0;
for (int i=0; i < [Link]; i++)
{
string area = [Link][i].SubItems[2].Text;
switch (area)
{
case "Ventas": tVentas++; break;
case "Marketing": tMarketing++; break;
case "Logistica": tLogistica++; break;
case "Préstamo": tPrestamo++; break;
}
}
}
//CONSULTA 2: Monto acumulado de netos por condición
public void montoAcumuladorxCondicion()
{
aPersonal = 0;
aComision = 0;
for (int i = 0; i < [Link]; i++)
{
string condicion= [Link][i].SubItems[3].Text;
switch (condicion)
{
Elaborado por: Lic. Manuel Torres Re.
Desarrollo de Aplicaciones Orientada a Objetos
case "Personal":
aPersonal+=[Link]([Link][i].SubItems[9].Text);
break;
case "Comision":
aComision += [Link]([Link][i].SubItems[9].Text);
break;
}
}
}
//CONSULTA 3: Monto acumulado de netos por área
public void montoAcumuladoxArea()
{
aVentas = 0;
aMarketing= 0;
aLogistica = 0;
aPrestamo = 0;
for (int i = 0; i < [Link]; i++)
{
string area = [Link][i].SubItems[2].Text;
switch (area)
{
case "Ventas":
aVentas+=[Link]([Link][i].SubItems[9].Text);
break;
case "Marketing":
aMarketing+=[Link]([Link][i].SubItems[9].Text);
break;
case "Logistica":
aLogistica+=[Link]([Link][i].SubItems[9].Text);
break;
case "Prestamo":
aPrestamo+=[Link]([Link][i].SubItems[9].Text);
break;
}
}
}
//Metodo que valida el registro duplicado del empleado
bool validaEmpleado()
{
bool estado=false;
for (int i = 0; i < [Link]; i++)
{
string empleado = [Link][i].SubItems[0].Text;
if (getEmpleado() == empleado) estado = true;
}
return estado;
}
//Metodo de validacion de datos
string valida()
{
if ([Link]().Length == 0)
{
[Link]();
return "nombre del empleado";
}
else if ()
Elaborado por: Lic. Manuel Torres Re.
Desarrollo de Aplicaciones Orientada a Objetos
{
[Link] = "";
[Link]();
return "numero de hijos; es un valor numero..!!";
}
else if ([Link] == -1)
{
[Link]();
return "area del empleado";
}
else if ([Link] == -1)
{
[Link]();
return "condición del empleado";
}
return "";
}
}
}
Elaborado por: Lic. Manuel Torres Re.
Desarrollo de Aplicaciones Orientada a Objetos
1. Caso propuesto 01: Venta de Productos
Una tienda ha puesto en oferta la venta de camisas ofreciendo un descuento, por
temporada de verano, denominado 7% + 7%. Los cálculos se efectúan de la siguiente
manera:
El importe de la compra es igual al producto del precio de la camisa por la cantidad de
unidades adquiridas.
El importe del primer descuento es igual al 7% del importe de la compra.
El importe del segundo descuento es igual al 7% del lo que queda de restar el importe
de la compra menos el importe del primer descuento.
El importe del descuento total es igual a la suma de los dos descuentos anteriores.
El importe a pagar es igual al importe de la compra menos el importe del descuento total.
Dado el precio del producto y la cantidad de unidades adquiridas, implemente una aplicación
en Visual C# que determine el importe de la compra, el importe del primer descuento, el
importe del segundo descuento, el importe del descuento total y el importe a pagar.
2. Caso Propuesto 02: Ventas de Licencia
La empresa SYSTEM SAC ha desarrollado un software de ventas el cual se viene ofreciendo a
todo el Perú en diferentes tipos de licencia. La venta del software es gestionada por
vendedores capacitados los cuales necesitan registrar las ventas realizadas mediante una
aplicación de control de registro de facturas, el cual solicita el nombre completo del vendedor,
numero de factura, tipo de licencia y unidades de software vendido.
Debemos tener en cuenta:
Al iniciar la aplicación se debe mostrar la fecha de manera automática.
El registro de la factura debe mostrarse en un cuadro de lista, con los datos propios de
la venta además del monto subtotal por cada factura.
Así mismo, deberá mostrarse el monto total registrado de las facturas (esto representa
al monto acumulado de subtotales)
Finalmente, mostrar las estadísticas del registro como el total de unidades y el monto
total acumulado por cada tipo de licencia.
El costo de venta de las licencias se muestra en la siguiente tabla:
TIPO DE LICENCIA MONTO DE VENTA POR UNIDAD
Cobre $700.00
Bronce $900.00
Silver $1400.00
Gold $2500.00
El botón registrar item envía los datos a un control ListView.
Interfaz grafica del usuario propuesta:
Elaborado por: Lic. Manuel Torres Re.
Desarrollo de Aplicaciones Orientada a Objetos
3. Caso Propuesto 03: Registro de Habitaciones
Una de las empresas hoteleras que opera en el centro de la ciudad de Lima, necesita una
aplicación que permita controlar el registro de los alquileres de sus habitaciones que se realiza
diariamente; esto es debido a la gran demanda de turistas en el mes actual. La aplicación
deberá mostrar un formulario de registro de alquileres con la fecha actual y la hora en forma
digital. Además de poder seleccionar el tipo de habitación y los días que el usuario solicito en
alquiler; la aplicación deberá registrar todos los alquileres mostrándolo en una lista con los
datos del tipo, costo por día de la habitación, días alquilados, subtotal, descuento y pago neto
que realizan sus clientes. Al final se debe mostrar una estadística de la cantidad de días y neto
acumulados por cada tipo de habitación. Debemos tener en cuenta:
Al iniciar la aplicación se debe mostrar la fecha y la hora digitalizada de manera
automática.
El precio de las habitaciones varia según el tipo, tal como se muestra en la siguiente
tabla:
TIPO DE HABITACION COSTO POR DIA
Simple $30.00
Doble $50.00
Matrimonial $120.00
Presidencial $300.00
El botón registrar envía los datos de la habitación y la cantidad de días alquilados a
un control ListView.
Finalmente, mostrar las estadísticas de forma automática al registrar una habitación,
como el total de habitaciones simples, dobles, matrimoniales y presidenciales además
de los montos recaudados por cada tipo de habitación en un control ListView.
Elaborado por: Lic. Manuel Torres Re.
Desarrollo de Aplicaciones Orientada a Objetos
Interfaz grafica del usuario propuesta:
4. Caso Propuesto 04: Control de Entradas
La empresa “CINE-WORD” es una cadena global de multicines líder en el mercado de
exhibición cinematográfica el cual ha decidido instalarse en la ciudad de Lima. Ha empezado
por ofrecer la venta de sus boletos de cine de forma corporativa. Para lo cual necesita una
aplicación que según la edad de cliente se le asigne una categoría y a partir de allí se apliquen
los precios y descuentos. Debemos tener en cuenta:
Al iniciar la aplicación el cuadro combinado de las edades deben encontrarse
precargados.
El precio de las habitaciones varia según el tipo, tal como se muestra en la siguiente
tabla:
EDAD CATEGORÍA DESCUENTO PRECIO UNITARIO
03 - 12 Niño 20% $10.00
13 - 17 Joven I 10% $15.00
18 - 50 Joven II 5% $25.00
51 - 65 Adulto I 10% $15.00
>65 Adulto II 20% $10.00
Al seleccionar una edad desde el cuadro combinado debe mostrar automáticamente el
precio y la categoría asignada.
El botón registrar envía los datos de la venta como la categoría, precio unitario,
cantidad de boletos, subtotal(precio por la cantidad seleccionada), descuento e importe
a pagar en un control ListView.
Elaborado por: Lic. Manuel Torres Re.
Desarrollo de Aplicaciones Orientada a Objetos
Finalmente, mediante un botón mostrar las estadísticas el monto total acumulado de
los subtotales, monto total que la empresa deja de percibir por aplicar descuento, los
montos acumulados por cada tipo de categoría en un control ListView.
Interfaz grafica del usuario propuesta:
Elaborado por: Lic. Manuel Torres Re.