0% encontró este documento útil (0 votos)
5 vistas42 páginas

Control de Llamadas en C# para Call Center

programación

Cargado por

karen.briceno
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
5 vistas42 páginas

Control de Llamadas en C# para Call Center

programación

Cargado por

karen.briceno
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS

FACULTAD DE INGENIERÍA INDUSTRIAL

GUIA DE LABORATORIO:

PROGRAMACION MODULAR

CURSO: PROGRAMACIÓN VISUAL - C#


INGENIERIA DE SOFTWARE
PROFESOR: PONCE BENITES Wiler Arturo
Correo: [Link]@[Link]
Página Web: [Link]

Este material de apoyo académico a sido elaborado por el


profesor para uso exclusivo de los alumnos de la Facultad
de Ingeniería Industrial de la Universidad Nacional Mayor de
San Marcos y en concordancia con lo dispuesto por la
legislación sobre derechos de autor: Decreto Legislativo
822.

JULIO - 2021

Página 1 de 42
Control de registro de llamadas

Caso 1: Control de registro de llamadas: Método sin valor de retorno de parámetros

La empresa Business-Vent, que presta servicios de call center en la ciudad de Lima, realiza el seguimiento
de una cartera de clientes a las cuales se realizó la venta de tarjetas de crédito solicitado por una
determinada empresa. El call center necesita una aplicación que permita tener el control de las llamadas
que realizan sus terminalistas (operador de llamadas), de forma que registre el tipo de llamada realizada, el
horario y la cantidad de minutos. La aplicación deberá registrar las llamadas mostrando el costo por
minuto y el costo por llamada.

Se debe tener en cuenta:

 Usar el método sin valor de retorno y sin parámetros


 Al iniciar la aplicación se debe mostrar la fecha de manera automática.
 Asimismo, la aplicación debe mostrar la hora digitalizada de manera automática.
 El tipo de llamada y el horario deben ser seleccionados desde un cuadro combinado
 Al seleccionar un tipo de llamada automáticamente se debe mostrar el costo según la tabla de
costo ´por minuto.
 La asignación de los costos y descuentos por tipo se muestran en la siguiente tabla:

Tipo de llamada Costo por minuto Descuento


Local Nacional S/.0.20 30%
Local Internacional S/.0.50 20%
Móvil Nacional S/.1.20 10%
Móvil Internacional S/.2.20 30%

El descuento se aplica al importe calculado (costo por minuto por la cantidad de minutos llamados) según
el tipo de llamada.

 El costo por llamada resulta de la diferencia del importe de pago y el descuento aplicado.
 El botón REGISTRAR envía los datos de las llamadas a un control ListView que muestre el tipo de
llamada, horario de llamada, minutos y el costo por llamada.
 Finalmente, mediante el botón mostrar las estadística como el número de llamadas registradas
entre 10 y 30 minutos, el costo acumulado por tipo local nacional e internacional, móvil nacional e
internacional, monto mayor según el costo de llamada, tipo de llamada con costo de llamada
mayor, horario con costo de llamada mayor en un control ListView.

Página 2 de 42
Formulario:

Propiedades de los controles:

Control Propiedad Valor


Form1 (Name) frmLlamadasCaso1
Label1 Text CONTROL DE REGISTRO DE LLAMADA-CALL CENTER
Label2 Text NOMBR COMPLETO
Label3 Text FECHA
Label4 (Name) lblFecha
Text lblFecha
Label5 Text HORA
Label6 (Name) lblHora
Text lblHora
Label7 Text TIPO DE LLAMADA
Label8 Text HORARIO DE LLAMADA
Label9 Text MINUTOS

Página 3 de 42
Control Propiedad Valor
Label10 Text COSTO
Label11 (Name) lblCosto
Text lblCosto
Label12 Text REGISTRO DE LLAMADAS
TextBox1 (Name) txtNombre
TextBox2 (Name) txtMinutos
ComboBox1 (Name) cboTipo
Items Local Nacional, Local Internacional, Móvil Nacional, Móvil
Internacional
ComboBox2 (Name) cboHorario
Items Diurno (07:00-13:00), Tarde(13:00-19:00), Noche(19:00-23:00),
Madrugada(23:00-07:00)
Button1 (Name) btnRegistrar
Text REGISTRAR
Button2 (Name) btnEstadisticas
Text MOSTRAR ESTADISTICAS
Button3 (Name) btnNuevo
Text NUEVO
Button4 (Name) btnSalir
Text SALIR
GroupBox1 Text DATOS DEL TERMINALISTA
GroupBox2 Text DATOS DEL REGISTRO
GroupBox3 Text DATOS DE LAS LLAMADAS
ListView1 (Name) lvRegistro
GridLines True
ListView2 (Name) lvEstadisticas
GridLines True
Timer1 (Name) tHora

Página 4 de 42
Programa
using System;
using [Link];
using [Link];
using [Link];
using [Link];
using [Link];
using [Link];
using [Link];

namespace pjRegistroDeLlamadas
{
public partial class frmLlamadasCaso1 : Form
{
// Declaración de variables GLOBALES
string tipo;
string horario;
int minutos;
double costoMinuto;
double costoLlamada;

double mayorMonto;
string horarioMayor;
string tipoMayor;

// Contadores y acumuladores
int cLlamadas;
double aLocNac, aLocInt, aMovNac, aMovInt;

public frmLlamadas()
{
InitializeComponent();
[Link] = true;
}

private void frmLlamadas_Load(object sender, EventArgs e)


{
// Mostrar la fecha actual
[Link] = [Link]();
}

private void btnRegistrar_Click(object sender, EventArgs e)


{
// Capturando los datos
horario = [Link];
minutos = [Link]([Link]);

// Determinar el costo por minuto


asignaCostoxMinuto();

// Determinar el costo por llamada


asignaCostoxLlamada();

// Imprimir el registro de llamadas


imprimirRegistro();
}

Página 5 de 42
private void btnSalir_Click(object sender, EventArgs e)
{
DialogResult r = [Link]("¿Desea terminar la aplicación?",
"Control de llamadas",
[Link],[Link]);
if (r == [Link]) [Link]();
}

private void cboTipo_SelectedIndexChanged(object sender, EventArgs e)


{
// Asignar el costo por minuto
asignaCostoxMinuto();
[Link] = [Link]("C");
}

private void tHora_Tick(object sender, EventArgs e)


{
// Mostrar la hora
[Link] = [Link]("hh:mm:ss");
}

// Método que permite asignar el costo por minuto según el tipo de llamada
void asignaCostoxMinuto()
{
// Capturando el tipo de llamada desde el cuadro combinado
tipo = [Link];

// Asignando el costo por minuto según el tipo de llamada


switch (tipo)
{
case "Local Nacional": costoMinuto = 0.20; break;
case "Local Internacional": costoMinuto = 0.50; break;
case "Movil Nacional": costoMinuto = 1.20; break;
case "Movil Internacional": costoMinuto = 2.20; break;
}
}

// Método que permite asignar el costo por llamada según el horario


void asignaCostoxLlamada()
{
// Variables locales
double importe = costoMinuto * minutos;
double descuento = 0;

// Asignando el descuento según el horario


switch (horario)
{
case "Diurno (07:00-13:00)": descuento = importe * 0.3; break;
case "Tarde(13:00-19:00)": descuento = importe * 0.2; break;
case "Noche(19:00-23:00)": descuento = importe * 0.1; break;
case "Madrugada(23:00-07:00)": descuento = importe * 0.3; break;
}
costoLlamada = importe - descuento;
}

// Método que permite imprimir los valores en la lista de registro


void imprimirRegistro()
{
ListViewItem fila = new ListViewItem(tipo);
[Link](horario);
[Link]([Link]("0.00"));
[Link]([Link]("0.00"));
[Link]([Link]("0.00"));
[Link](fila);
Página 6 de 42
}

// Método que permite mostrar los valores GLOBALES para las estadísticas
void imprimirEstadisticas()
{
// Contar el número de llamadas
numeroLlamadas();

// Monto acumulado del costo por llamada por tipo


costoAcumuladoxtipo();

// Mayor costo por llamada, que tipo y horario


mayorMontoLlamada();

// Enviando los resultados a la lista de estadísticas:


[Link]();
string[] elementosFila = new string[2];
ListViewItem row;

elementosFila[0] = "Número de llamadas entre 10 y 30 minutos";


elementosFila[1] = [Link]();
row = new ListViewItem(elementosFila);
[Link](row);

elementosFila[0] = "Costo acumulado por Local Nacional";


elementosFila[1] = [Link]();
row = new ListViewItem(elementosFila);
[Link](row);

elementosFila[0] = "Costo acumulado por Local Internacional";


elementosFila[1] = [Link]();
row = new ListViewItem(elementosFila);
[Link](row);

elementosFila[0] = "Costo acumulado por Movil Nacional";


elementosFila[1] = [Link]();
row = new ListViewItem(elementosFila);
[Link](row);

elementosFila[0] = "Costo acumulado por Movil Internacional";


elementosFila[1] = [Link]();
row = new ListViewItem(elementosFila);
[Link](row);

elementosFila[0] = "Moyor monto de llamada";


elementosFila[1] = [Link]();
row = new ListViewItem(elementosFila);
[Link](row);

elementosFila[0] = "Tipo de llamada con mayor monto";


elementosFila[1] = [Link]();
row = new ListViewItem(elementosFila);
[Link](row);

elementosFila[0] = "Horario con mayor monto";


elementosFila[1] = [Link]();
row = new ListViewItem(elementosFila);
[Link](row);
}

Página 7 de 42
// Determinar el número de llamadas entre 10 y 30 minutos
void numeroLlamadas()
{
// Iniciar variable <-- WPB
int nReg = 0;
double minutos;

// Iniciar el contador de llamadas


cLlamadas = 0;

//Recorremos por todos los registros de la lista


nReg = [Link];
for (int i = 1; i < [Link]; i++)
{
// Capturamos los minutos
minutos = [Link]([Link][i].SubItems[2].Text);

// Comparamos si los minutos se encuentran en el rango de 10 y 30


if (minutos >= 10 && minutos <= 30) cLlamadas++;
}
}

// Metodo que determina el total acumulado del costo por llamada


void costoAcumuladoxtipo()
{
// Inicializar las variables acumuladoras en cero
aLocNac = 0; aLocInt = 0; aMovNac = 0; aMovInt = 0;

// Recorriendo por todos los registros


for (int i = 0; i < [Link]; i++)
{
// Capturando el tipo de llamada
string t = [Link][i].SubItems[0].Text;

// Condicionar el tipo de llamadas para realizar la acumulacion


if (t == "Local Nacional")
aLocNac += [Link]([Link][i].SubItems[4].Text);
else if (t == "Local Internacional")
aLocInt += [Link]([Link][i].SubItems[4].Text);
else if (t == "Movil Nacional")
aMovNac += [Link]([Link][i].SubItems[4].Text);
else if (t == "Movil Internacional")
aMovInt += [Link]([Link][i].SubItems[4].Text);
}
}

// Metodo que determina el mayor monto de llamada


void mayorMontoLlamada()
{
// Inicializar la variable local posicion
int posicion = 0;

// Inicializar la variable mayor con el primer costo de los registros


mayorMonto = [Link]([Link][0].SubItems[4].Text);

// Recorrer por todos los registros


for (int i = 0; i < [Link]; i++)
{
// Si uno de los costos es mayor que el valor asignado a la
// variable mayor entonces hemos encontrado el mayor de los
// elementos
if ([Link]([Link][i].SubItems[4].Text) > mayorMonto)
Página 8 de 42
{
mayorMonto = [Link]([Link][i].SubItems[4].Text);
posicion = i;
}
}
tipoMayor = [Link][posicion].SubItems[0].Text;
horarioMayor = [Link][posicion].SubItems[1].Text;
}

private void btnEstadisticas_Click(object sender, EventArgs e)


{
// Enviar los datos a la lista de estadisticas
imprimirEstadisticas();
}

private void btnNuevo_Click(object sender, EventArgs e)


{
[Link]();
[Link] = -1;
[Link] = -1;
[Link]();
[Link] = "";
[Link]();
[Link]();
[Link]();
}
}
}

Página 9 de 42
Caso 2: Control de registro de llamadas: Método sin valor de retorno con parámetros

La empresa Bussiness-Vent, que presta servicios de call center en la ciudad de Lima, realiza el seguimiento
de una cartera de clientes a las cuales se realizó la venta de tarjetas de crédito solicitado por una
determinada empresa. El call center necesita una aplicación que permita tener el control de las llamadas
que realizan sus terminalistas (operador de llamadas), de forma que registre el tipo de llamada realizada, el
horario y la cantidad de minutos. La aplicación deberá registrar las llamadas mostrando el costo por
minuto y el costo por llamada.

Se debe tener en cuenta:

 Usar el método sin valor de retorno y con especificación de parámetros.


 Al iniciar la aplicación se debe mostrar la fecha de manera automática.
 Asimismo, la aplicación debe mostrar la hora digitalizada de manera automática.
 El tipo de llamada y el horario deben ser seleccionados desde un cuadro combinado.
 Al seleccionar un tipo de llamada automáticamente se debe mostrar el costo según la tabla de
costo por minuto.
 La asignación de los costos y descuentos por tipo se muestran en la siguiente tabla:

Tipo de llamada Costo por minuto Descuento


Local Nacional S/.0.20 30%
Local Internacional S/.0.50 20%
Móvil Nacional S/.1.20 10%
Móvil Internacional S/.2.20 30%

El descuento se aplica al importe calculado (costo por minuto por la cantidad de minutos llamados) según
el tipo de llamada.

 El costo por llamada resulta de la diferencia del importe de pago y el descuento aplicado.
 El botón REGISTRAR envía los datos de las llamadas a un control ListView que muestre el tipo de
llamada, horario de llamada, minutos y el costo por llamada.
 Finalmente, mediante el botón mostrar las estadística como el número de llamadas registradas
entre 10 y 30 minutos, el costo acumulado por tipo local nacional e internacional, móvil nacional e
internacional, monto mayor según el costo de llamada, tipo de llamada con costo de llamada
mayor, horario con costo de llamada mayor en un control ListView.

Página 10 de 42
Formulario:

Propiedades de los controles:

Control Propiedad Valor


Form1 (Name) frmLlamadasCaso2
Label1 Text CONTROL DE REGISTRO DE LLAMADA-CALL CENTER
Label2 Text NOMBRE COMPLETO
Label3 Text FECHA
Label4 (Name) lblFecha
Text lblFecha
Label5 Text HORA
Label6 (Name) lblHora
Text lblHora
Label7 Text TIPO DE LLAMADA
Label8 Text HORARIO DE LLAMADA
Label9 Text MINUTOS

Página 11 de 42
Control Propiedad Valor
Label10 Text COSTO
Label11 (Name) lblCosto
Text lblCosto
Label12 Text REGISTRO DE LLAMADAS
TextBox1 (Name) txtNombre
TextBox2 (Name) txtMinutos
ComboBox1 (Name) cboTipo
Items Local Nacional, Local Internacional, Móvil Nacional, Móvil
Internacional
ComboBox2 (Name) cboHorario
Items Diurno (07:00-13:00), Tarde(13:00-19:00), Noche(19:00-23:00),
Madrugada(23:00-07:00)
Button1 (Name) btnRegistrar
Text REGISTRAR
Button2 (Name) btnEstadisticas
Text MOSTRAR ESTADISTICAS
Button3 (Name) btnNuevo
Text NUEVO
Button4 (Name) btnSalir
Text SALIR
GroupBox1 Text DATOS DEL TERMINALISTA
GroupBox2 Text DATOS DEL REGISTRO
GroupBox3 Text DATOS DE LAS LLAMADAS
ListView1 (Name) lvRegistro
GridLines True
ListView2 (Name) lvEstadisticas
GridLines True
Timer1 (Name) tHora

Página 12 de 42
Programa
using System;
using [Link];
using [Link];
using [Link];
using [Link];
using [Link];
using [Link];
using [Link];

namespace pjRegistroDeLlamadas
{
public partial class frmLlamadasCaso2 : Form
{
// Declaracion de variables GLOBALES
double costoMinuto;
double costoLlamada;

public frmLlamadasCaso2()
{
InitializeComponent();
[Link] = true;
}

private void frmLlamadasCaso2_Load(object sender, EventArgs e)


{
// Mostrando la fecha actual
[Link] = [Link]();
}

private void btnRegistrar_Click(object sender, EventArgs e)


{
// Capturando los datos
string tipo = [Link];
string horario = [Link];
int minutos = [Link]([Link]);

// Determinar el costo por minuto


asignarCostoxMinuto(tipo);

// Determinar el costo por llamada


asignarCostoxLlamada(horario, minutos);

// Imprimir el registro de llamadas


imprimirRegistro(tipo, horario, minutos);

[Link]();
}

Página 13 de 42
private void btnEstadisticas_Click(object sender, EventArgs e)
{
// Determinar el numero de llamadas entre 10 y 30 minutos
int cLlamadas = 0;
for (int i = 0; i < [Link]; i++)
{
int minutos = [Link]([Link][i].SubItems[2].Text);
if (minutos >= 10 && minutos <= 30)
{
cLlamadas++;
}
}

// Determinar los valores acumulador por tipo de llamada


double aLocNac = 0, aLocInt = 0, aMovNac = 0, aMovInt = 0;
for (int i = 0; i < [Link]; i++)
{
// Capturando el tipo de llamada
string t = [Link][i].SubItems[0].Text;
if (t == "Local Nacional")
aLocNac += [Link]([Link][i].SubItems[4].Text);
else if (t == "Local Internacional")
aLocInt += [Link]([Link][i].SubItems[4].Text);
else if (t == "Movil Nacional")
aMovNac += [Link]([Link][i].SubItems[4].Text);
if (t == "Movil Internacional")
aMovInt += [Link]([Link][i].SubItems[4].Text);
}

// Determinar el mayor monto de llamada


double mayorMonto = [Link]([Link][0].SubItems[4].Text);
int posicion = 0;
for (int i = 0; i < [Link]; i++)
{
if ([Link]([Link][i].SubItems[4].Text) > mayorMonto)
{
mayorMonto = [Link]([Link][i].SubItems[4].Text);
posicion = i;
}
}

string tipoMayor = [Link][posicion].SubItems[0].Text;


string horarioMayor = [Link][posicion].SubItems[1].Text;

// Mostrar el resultado en la lista de estadísticas


imprimirEstadisticas(cLlamadas, aLocNac, aLocInt, aMovNac,
aMovInt, mayorMonto, tipoMayor, horarioMayor);
}

// Asignación de costo por minutos segun el tipo


void asignarCostoxMinuto(string tipo)
{
switch (tipo)
{
case "Local Nacional": costoMinuto = 0.20; break;
case "Local Internacional": costoMinuto = 0.50; break;
case "Movil Nacional": costoMinuto = 1.20; break;
case "Movil Internacional": costoMinuto = 2.20; break;
}
}

Página 14 de 42
// Asignar el costo por llamada según el horario
void asignarCostoxLlamada(string horario, int minutos)
{
// Calculando el importe
double importe = costoMinuto * minutos;

// Determinando el descuento segun el horario


double descuento = 0;
switch (horario)
{
case "Diurno (07:00-13:00)": descuento = importe * 0.3; break;
case "Tarde(13:00-19:00)": descuento = importe * 0.2; break;
case "Noche(19:00-23:00)": descuento = importe * 0.1; break;
case "Madrugada(23:00-07:00)": descuento = importe * 0.3; break;
}
costoLlamada = importe - descuento;
}

// Enviando información a la lista lvRegistro


void imprimirRegistro(string tipo, string horario, int minutos)
{
ListViewItem fila = new ListViewItem(tipo);
[Link](horario);
[Link]([Link]());
[Link]([Link]("0.00"));
[Link]([Link]("0.00"));
[Link](fila);
}

// Enviando la información a la lista lvEstadistica


void imprimirEstadisticas(int cLlamadas, double aLocNac, double aLocInt,
double aMovNac, double aMovInt, double mayorMonto, string tipoMayor,
string horarioMayor)
{
// Enviando los resultados
[Link](); // limpiando ListView
string[] elementosFila = new string[2];
ListViewItem row;

elementosFila[0] = "Número de llamadas entre 10 y 30 minutos";


elementosFila[1] = [Link]();
row = new ListViewItem(elementosFila);
[Link](row);

elementosFila[0] = "Costo acumulado por llamada local Nacional";


elementosFila[1] = [Link]("C");
row = new ListViewItem(elementosFila);
[Link](row);

elementosFila[0] = "Costo acumulado por llamada local Internacional";


elementosFila[1] = [Link]();
row = new ListViewItem(elementosFila);
[Link](row);

elementosFila[0] = "Costo acumulado por llamada movil Nacional";


elementosFila[1] = [Link]();
row = new ListViewItem(elementosFila);
[Link](row);

elementosFila[0] = "Costo acumulado por llamada movil Internacional";


elementosFila[1] = [Link]();
row = new ListViewItem(elementosFila);
[Link](row);
Página 15 de 42
elementosFila[0] = "Mayor monto de llamada";
elementosFila[1] = [Link]("C");
row = new ListViewItem(elementosFila);
[Link](row);

elementosFila[0] = "Tipo de llamada con mayor monto";


elementosFila[1] = tipoMayor;
row = new ListViewItem(elementosFila);
[Link](row);

elementosFila[0] = "Horario con mayor monto";


elementosFila[1] = [Link]();
row = new ListViewItem(elementosFila);
[Link](row);
}

private void btnNuevo_Click(object sender, EventArgs e)


{
[Link]();
[Link] = -1;
[Link] = -1;
[Link]();
[Link] = "";
[Link]();
[Link]();
[Link]();
}

private void btnSalir_Click(object sender, EventArgs e)


{
DialogResult r = [Link]("¿Desea terminar la aplicación?",
"Control de llamadas", [Link],
[Link]);
if (r == [Link]) [Link]();
}

private void cboTipo_SelectedIndexChanged(object sender, EventArgs e)


{
// Asignar el costo por minuto
asignarCostoxMinuto([Link]);
[Link] = [Link]("C");
}

private void tHora_Tick(object sender, EventArgs e)


{
[Link] = [Link]("hh:mm:ss");
}
}
}

Página 16 de 42
Caso3: Control de registro de llamadas: Método con valor de retorno sin parámetros

La empresa Bussiness-Vent, que presta servicios de call center en la ciudad de Lima, realiza el seguimiento
de una cartera de clientes a las cuales se realizó la venta de tarjetas de crédito solicitado por una
determinada empresa. El call center necesita una aplicación que permita tener el control de las llamadas
que realizan sus terminalistas (operador de llamadas), de forma que registre el tipo de llamada realizada, el
horario y la cantidad de minutos. La aplicación deberá registrar las llamadas mostrando el costo por
minuto y el costo por llamada.

Se debe tener en cuenta:

 Usar el método con valor de retorno y sin especificación de parámetros.


 Al iniciar la aplicación se debe mostrar la fecha de manera automática.
 Asimismo, la aplicación debe mostrar la hora digitalizada de manera automática.
 El tipo de llamada y el horario deben ser seleccionados desde un cuadro combinado.
 Al seleccionar un tipo de llamada automáticamente se debe mostrar el costo según la tabla de
costo por minuto.
 La asignación de los costos y descuentos por tipo se muestran en la siguiente tabla:

Tipo de llamada Costo por minuto Descuento


Local Nacional S/.0.20 30%
Local Internacional S/.0.50 20%
Móvil Nacional S/.1.20 10%
Móvil Internacional S/.2.20 30%

El descuento se aplica al importe calculado (costo por minuto por la cantidad de minutos llamados) según
el tipo de llamada.

 El costo por llamada resulta de la diferencia del importe de pago y el descuento aplicado.
 El botón REGISTRAR envía los datos de las llamadas a un control ListView que muestre el tipo de
llamada, horario de llamada, minutos y el costo por llamada.
 Finalmente, mediante el botón mostrar las estadística como el número de llamadas registradas
entre 10 y 30 minutos, el costo acumulado por tipo local nacional e internacional, móvil nacional e
internacional, monto mayor según el costo de llamada, tipo de llamada con costo de llamada
mayor, horario con costo de llamada mayor en un control ListView.

Página 17 de 42
Formulario:

Propiedades de los controles:

Control Propiedad Valor


Form1 (Name) frmLlamadasCaso3
Label1 Text CONTROL DE REGISTRO DE LLAMADA-CALL CENTER
Label2 Text NOMBRE COMPLETO
Label3 Text FECHA
Label4 (Name) lblFecha
Text lblFecha
Label5 Text HORA
Label6 (Name) lblHora
Text lblHora
Label7 Text TIPO DE LLAMADA
Label8 Text HORARIO DE LLAMADA
Label9 Text MINUTOS

Página 18 de 42
Control Propiedad Valor
Label10 Text COSTO
Label11 (Name) lblCosto
Text lblCosto
Label12 Text REGISTRO DE LLAMADAS
TextBox1 (Name) txtNombre
TextBox2 (Name) txtMinutos
ComboBox1 (Name) cboTipo
Items Local Nacional, Local Internacional, Móvil Nacional, Móvil
Internacional
ComboBox2 (Name) cboHorario
Items Diurno (07:00-13:00), Tarde(13:00-19:00), Noche(19:00-23:00),
Madrugada(23:00-07:00)
Button1 (Name) btnRegistrar
Text REGISTRAR
Button2 (Name) btnEstadisticas
Text MOSTRAR ESTADISTICAS
Button3 (Name) btnNuevo
Text NUEVO
Button4 (Name) btnSalir
Text SALIR
GroupBox1 Text DATOS DEL TERMINALISTA
GroupBox2 Text DATOS DEL REGISTRO
GroupBox3 Text DATOS DE LAS LLAMADAS
ListView1 (Name) lvRegistro
GridLines True
ListView2 (Name) lvEstadisticas
GridLines True
Timer1 (Name) tHora

Página 19 de 42
Programa
using System;
using [Link];
using [Link];
using [Link];
using [Link];
using [Link];
using [Link];
using [Link];

namespace pjRegistroDeLlamadas
{
public partial class frmLlamadasCaso3 : Form
{
public frmLlamadasCaso3()
{
InitializeComponent();
}

private void frmLlamadasCaso3_Load(object sender, EventArgs e)


{
// Mostrando la fecha actual
[Link] = [Link]();
}

private void btnRegistrar_Click(object sender, EventArgs e)


{
// Imprimir el registro de llamadas
ListViewItem fila = new ListViewItem(getTipo());
[Link](getHorario());
[Link](getMinutos().ToString());
[Link](asignarCostoxMinuto().ToString("0.00"));
[Link](asignarCostoxLlamada().ToString("0.00"));
[Link](fila);
}

private void btnEstadisticas_Click(object sender, EventArgs e)


{
// Determinar el total acumulado del costo por llamada por tipo
double aLocNac = 0, aLocInt = 0, aMovNac = 0, aMovInt = 0;
for (int i = 0; i < [Link]; i++)
{
// Capturando el tipo de llamada
string t = [Link][i].SubItems[0].Text;
if (t == "Local Nacional")
aLocNac += [Link]([Link][i].SubItems[4].Text);
else if (t == "Local Internacional")
aLocInt += [Link]([Link][i].SubItems[4].Text);
else if (t == "Movil Nacional")
aMovNac += [Link]([Link][i].SubItems[4].Text);
else if (t == "Movil Internacional")
aMovInt += [Link]([Link][i].SubItems[4].Text);
}

// Enviando los resultados


[Link](); // limpiando ListView
string[] elementosFila = new string[2];
ListViewItem row;

Página 20 de 42
elementosFila[0] = "Número de llamadas entre 10 y 30 minutos";
elementosFila[1] = numeroLlamadas().ToString();
row = new ListViewItem(elementosFila);
[Link](row);

elementosFila[0] = "Costo acumulado por llamada local Nacional";


elementosFila[1] = [Link]("C");
row = new ListViewItem(elementosFila);
[Link](row);

elementosFila[0] = "Costo acumulado por llamada local Internacional";


elementosFila[1] = [Link]();
row = new ListViewItem(elementosFila);
[Link](row);

elementosFila[0] = "Costo acumulado por llamada movil Nacional";


elementosFila[1] = [Link]();
row = new ListViewItem(elementosFila);
[Link](row);

elementosFila[0] = "Costo acumulado por llamada movil Internacional";


elementosFila[1] = [Link]();
row = new ListViewItem(elementosFila);
[Link](row);

// Determinar el mayor monto de llamada


double mayorMonto = [Link]([Link][0].SubItems[4].Text);
int posicion = 0;
for (int i = 0; i < [Link]; i++)
{
if ([Link]([Link][i].SubItems[4].Text) > mayorMonto)
{
mayorMonto = [Link]([Link][i].SubItems[4].Text);
posicion = i;
}
}

elementosFila[0] = "Mayor monto de llamada";


elementosFila[1] = [Link]("C");
row = new ListViewItem(elementosFila);
[Link](row);

elementosFila[0] = "Tipo de llamada con mayor monto";


elementosFila[1] = [Link][posicion].SubItems[0].Text;
row = new ListViewItem(elementosFila);
[Link](row);

elementosFila[0] = "Horario con mayor monto";


elementosFila[1] = [Link][posicion].SubItems[1].Text;
row = new ListViewItem(elementosFila);
[Link](row);
}

private void btnNuevo_Click(object sender, EventArgs e)


{
[Link]();
[Link] = -1;
[Link] = -1;
[Link]();
[Link] = "";
[Link]();
[Link]();
[Link]();
}
Página 21 de 42
private void btnSalir_Click(object sender, EventArgs e)
{
DialogResult r = [Link]("¿Desea terminar la aplicación?",
"Control de llamadas", [Link],
[Link]);
if (r == [Link]) [Link]();
}

private void tHora_Tick(object sender, EventArgs e)


{
[Link] = [Link]("hh:mm:ss");
}

// Capturando los valores del formulario


string getTipo()
{
return [Link];
}

string getHorario()
{
return [Link];
}

int getMinutos()
{
return [Link]([Link]);
}

// Asignación de costo por minuto según el tipo


double asignarCostoxMinuto()
{
double costoMinuto = 0;
switch ([Link])
{
case "Local Nacional": costoMinuto = 0.20; break;
case "Local Internacional": costoMinuto = 0.20; break;
case "Movil Nacional": costoMinuto = 0.20; break;
case "Movil Internacional": costoMinuto = 0.20; break;
}
return costoMinuto;
}

// Asignar el costo por llamada según el horario


double asignarCostoxLlamada()
{
// Calculando el importe
double importe = asignarCostoxMinuto() * getMinutos();

// Determinando el descuento según el horario


double descuento = 0;
switch (getHorario())
{
case "Diurno (07:00-13:00)": descuento = importe * 0.3; break;
case "Tarde(13:00-19:00)": descuento = importe * 0.3; break;
case "Noche(19:00-23:00)": descuento = importe * 0.3; break;
case "Madrugada(23:00-07:00)": descuento = importe * 0.3; break;
}
return importe - descuento;
}

Página 22 de 42
// Determinar el número de llamadas entre 10 y 30 minutos
int numeroLlamadas()
{
int cLlamadas = 0;
for (int i = 0; i < [Link]; i++)
{
int minutos = [Link]([Link][i].SubItems[2].Text);
if(minutos >= 10 && minutos<= 30) cLlamadas++;
}
return cLlamadas;
}

private void cboTipo_SelectedIndexChanged(object sender, EventArgs e)


{
// Asignar el costo por minuto
[Link] = asignarCostoxMinuto().ToString("C");
}
}
}

Página 23 de 42
Caso4: Control de registro de llamadas: Método con valor de retorno con parámetros

La empresa Bussiness-Vent, que presta servicios de call center en la ciudad de Lima, realiza el seguimiento
de una cartera de clientes a las cuales se realizó la venta de tarjetas de crédito solicitado por una
determinada empresa. El call center necesita una aplicación que permita tener el control de las llamadas
que realizan sus terminalistas (operador de llamadas), de forma que registre el tipo de llamada realizada, el
horario y la cantidad de minutos. La aplicación deberá registrar las llamadas mostrando el costo por
minuto y el costo por llamada.

Se debe tener en cuenta:

 Usar el método con valor de retorno y con especificación de parámetros.


 Al iniciar la aplicación se debe mostrar la fecha de manera automática.
 Asimismo, la aplicación debe mostrar la hora digitalizada de manera automática.
 El tipo de llamada y el horario deben ser seleccionados desde un cuadro combinado.
 Al seleccionar un tipo de llamada automáticamente se debe mostrar el costo según la tabla de
costo por minuto.
 La asignación de los costos y descuentos por tipo se muestran en la siguiente tabla:

Tipo de llamada Costo por minuto Descuento


Local Nacional S/.0.20 30%
Local Internacional S/.0.50 20%
Móvil Nacional S/.1.20 10%
Móvil Internacional S/.2.20 30%

El descuento se aplica al importe calculado (costo por minuto por la cantidad de minutos llamados) según
el tipo de llamada.

 El costo por llamada resulta de la diferencia del importe de pago y el descuento aplicado.
 El botón REGISTRAR envía los datos de las llamadas a un control ListView que muestre el tipo de
llamada, horario de llamada, minutos y el costo por llamada.
 Finalmente, mediante el botón mostrar las estadística como el número de llamadas registradas
entre 10 y 30 minutos, el costo acumulado por tipo local nacional e internacional, móvil nacional e
internacional, monto mayor según el costo de llamada, tipo de llamada con costo de llamada
mayor, horario con costo de llamada mayor en un control ListView.

Página 24 de 42
Formulario:

Propiedades de los controles:

Control Propiedad Valor


Form1 (Name) frmLlamadasCaso4
Label1 Text CONTROL DE REGISTRO DE LLAMADA-CALL CENTER
Label2 Text NOMBRE COMPLETO
Label3 Text FECHA
Label4 (Name) lblFecha
Text lblFecha
Label5 Text HORA
Label6 (Name) lblHora
Text lblHora
Label7 Text TIPO DE LLAMADA
Label8 Text HORARIO DE LLAMADA
Label9 Text MINUTOS

Página 25 de 42
Control Propiedad Valor
Label10 Text COSTO
Label11 (Name) lblCosto
Text lblCosto
Label12 Text REGISTRO DE LLAMADAS
TextBox1 (Name) txtNombre
TextBox2 (Name) txtMinutos
ComboBox1 (Name) cboTipo
Items Local Nacional, Local Internacional, Móvil Nacional, Móvil
Internacional
ComboBox2 (Name) cboHorario
Items Diurno (07:00-13:00), Tarde(13:00-19:00), Noche(19:00-23:00),
Madrugada(23:00-07:00)
Button1 (Name) btnRegistrar
Text REGISTRAR
Button2 (Name) btnEstadisticas
Text MOSTRAR ESTADISTICAS
Button3 (Name) btnNuevo
Text NUEVO
Button4 (Name) btnSalir
Text SALIR
GroupBox1 Text DATOS DEL TERMINALISTA
GroupBox2 Text DATOS DEL REGISTRO
GroupBox3 Text DATOS DE LAS LLAMADAS
ListView1 (Name) lvRegistro
GridLines True
ListView2 (Name) lvEstadisticas
GridLines True
Timer1 (Name) tHora

Página 26 de 42
Programa
using System;
using [Link];
using [Link];
using [Link];
using [Link];
using [Link];
using [Link];
using [Link];

namespace pjRegistroDeLlamadas
{
public partial class frmLlamadasCaso4 : Form
{
public frmLlamadasCaso4()
{
InitializeComponent();
}

private void frmLlamadasCaso4_Load(object sender, EventArgs e)


{
[Link] = [Link]();
}

private void btnRegistrar_Click(object sender, EventArgs e)


{
string tipo = [Link];
string horario = [Link];
int minutos = [Link]([Link]);

ListViewItem fila = new ListViewItem(tipo);


[Link](horario);
[Link]([Link]());
[Link](asignarCostoxMinuto(tipo).ToString("0.00"));
[Link](asignarCostoxLlamada(horario).ToString("0.00"));
[Link](fila);
[Link]();
}

private void btnEstadisticas_Click(object sender, EventArgs e)


{
int cLlamadas = 0;

for (int i = 0; i < [Link]; i++)


{
int minutos = [Link]([Link][i].SubItems[2].Text);
if (minutos >= 10 && minutos <= 30)
{
cLlamadas++;
}
}

// Determinar el total acumulado del costo por llamada por tipo


double aLocNac = 0, aLocInt = 0, aMovNac = 0, aMovInt = 0;
for (int i = 0; i < [Link]; i++)
{
// Capturando el tipo de llamada
string t = [Link][i].SubItems[0].Text;
if (t == "Local Nacional")
aLocNac += [Link]([Link][i].SubItems[4].Text);

Página 27 de 42
else if (t == "Local Internacional")
aLocInt += [Link]([Link][i].SubItems[4].Text);
else if (t == "Movil Nacional")
aMovNac += [Link]([Link][i].SubItems[4].Text);
else if (t == "Movil Internacional")
aMovInt += [Link]([Link][i].SubItems[4].Text);
}

// Enviando los resultados


[Link](); // limpiando ListView
string[] elementosFila = new string[2];
ListViewItem row;

elementosFila[0] = "Número de llamadas entre 10 y 30 minutos";


elementosFila[1] = [Link]();
row = new ListViewItem(elementosFila);
[Link](row);

elementosFila[0] = "Costo acumulado por llamada local Nacional";


elementosFila[1] = [Link]("C");
row = new ListViewItem(elementosFila);
[Link](row);

elementosFila[0] = "Costo acumulado por llamada local Internacional";


elementosFila[1] = [Link]();
row = new ListViewItem(elementosFila);
[Link](row);

elementosFila[0] = "Costo acumulado por llamada movil Nacional";


elementosFila[1] = [Link]();
row = new ListViewItem(elementosFila);
[Link](row);

elementosFila[0] = "Costo acumulado por llamada movil Internacional";


elementosFila[1] = [Link]();
row = new ListViewItem(elementosFila);
[Link](row);

// Determinar el mayor monto de llamada


double mayorMonto = [Link]([Link][0].SubItems[4].Text);
int posicion = 0;
for (int i = 0; i < [Link]; i++)
{
if ([Link]([Link][i].SubItems[4].Text) > mayorMonto)
{
mayorMonto = [Link]([Link][i].SubItems[4].Text);
posicion = i;
}
}

elementosFila[0] = "Mayor monto de llamada";


elementosFila[1] = [Link]("C");
row = new ListViewItem(elementosFila);
[Link](row);

elementosFila[0] = "Tipo de llamada con mayor monto";


elementosFila[1] = [Link][posicion].SubItems[0].Text;
row = new ListViewItem(elementosFila);
[Link](row);

Página 28 de 42
elementosFila[0] = "Horario con mayor monto";
elementosFila[1] = [Link][posicion].SubItems[1].Text;
row = new ListViewItem(elementosFila);
[Link](row);

private void btnNuevo_Click(object sender, EventArgs e)


{
[Link]();
[Link] = -1;
[Link] = -1;
[Link]();
[Link] = "";
[Link]();
[Link]();
[Link]();
}

private void btnSalir_Click(object sender, EventArgs e)


{
DialogResult r = [Link]("¿Desea terminar la aplicación?",
"Control de llamadas", [Link], [Link]);
if (r == [Link]) [Link]();
}

private void tHora_Tick(object sender, EventArgs e)


{
[Link] = [Link]("hh:mm:ss");
}

private void cboTipo_SelectedIndexChanged(object sender, EventArgs e)


{
[Link] = asignarCostoxMinuto([Link]).ToString("C");
}

// Implementación de métodos
// Asignación de costo por minuto según el tipo
double asignarCostoxMinuto(string tipo)
{
double costoMinuto = 0;
switch (tipo)
{
case "Local Nacional": costoMinuto = 0.20; break;
case "Local Internacional": costoMinuto = 0.20; break;
case "Movil Nacional": costoMinuto = 0.20; break;
case "Movil Internacional": costoMinuto = 0.20; break;
}
return costoMinuto;
}

Página 29 de 42
// Asignar el costo por llamada segun el horario
double asignarCostoxLlamada(string horario)
{
double importe = asignarCostoxMinuto([Link]) * [Link]([Link]);
double descuento = 0;
switch (horario)
{
case "Diurno (07:00-13:00)": descuento = importe* 0.3; break;
case "Tarde(13:00-19:00)": descuento = importe* 0.2; break;
case "Noche(19:00-23:00)": descuento = importe* 0.1; break;
case "Madrugada(23:00-07:00)": descuento = importe * 0.3; break;
}
return importe - descuento;
}
}
}

Página 30 de 42
Caso5: Integración de Métodos – Control de pagos de empleados

Marketing SAC, es una empresa cooperativa de ahorro y crédito dedicada a brindar productos financieros y
contribuir con el crecimiento de sus clientes, en consecuencia, necesita una aplicación que permita
controlar el pago que realiza a sus empleados así como el monto por movilidad, asignación a favor por el
número de hijos, el descuento de ley y el neto que la empresa necesita pagar a sus empleados.

Se debe tener en cuenta:

 Usar 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.

Área/Condición Personal Comisión


Ventas S/.2,500.00 S/.500.00
Marketing S/.1,800.00 S/.1,100.00
Logística S/.3,500.00 S/.2,500.00
Préstamo S/.1,500.00 S/.900.00

 La asignación por concepto de movilidad se procesa de acuerdo al área y se aplica sobre el sueldo
base, como se muestra en la siguiente tabla:

Área/Condición Personal Comisión


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 forma que
por cada hijo se le aumente S/. 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 número de hijos y descuento, usando la siguiente formula:

Neto = sueldo base + movilidad + asignación - descuento

 Validar el nombre del empleado de forma que no permita registrar el mismo empleado en la lista
de empleados.
 Implementar el botón Consulta 1 que permita determinar el total de empleados por área.
 Implementar el botón Consulta 2 que permita determinar el monto acumulado de los netos según
la condición del empleado.

Página 31 de 42
 Implementar el botón Consulta 3 que permita determinar el el monto acumulado de los netos
según el área.
 Finalmente validar los valores del formulario de forma que al registrar a un empleado no permita
registrar espacios vacíos en el nombre del empleado, determinar que el número de hijos,
determinar que el área y la condición sean seleccionados par aun determinado empleado.

Formulario:

Propiedades de los controles:

Control Propiedad Valor


Form1 (Name) frmIntMetodosCaso5
Text Caso5: Integración de Metodos
Label1 Text CONTROL DE PAGO DE EMPLEADOS
Label2 Text EMPLEADO
Label3 Text [Link]
Label4 Text AREA
Label5 Text HORA
Label6 Text CONDICION
DateTimePicker (Name) dtpFecIng
Format Short
TextBox1 (Name) txtEmpleado
TextBox2 (Name) txtHijos

Página 32 de 42
Control Propiedad Valor
ComboBox1 (Name) cboArea
Items Ventas, Marketing, Logística, Préstamo
ComboBox2 (Name) cboCondicion
Items Personal, Comisión
Button1 (Name) btnRegistrar
Text REGISTRAR
Button2 (Name) btnConsulta1
Text CONSULTA 1
Button3 (Name) btnConsulta2
Text CONSULTA 2
Button4 (Name) btnConsulta3
Text CONSULTA 3
Button5 (Name) btnSalir
Text SALIR
GroupBox1 Text DATOS DEL EMPLEADO
GroupBox2 Text DATOS PLANILLA
ListView1 (Name) lvEmpleado
GridLines True
ListView2 (Name) lvEstadisticas
GridLines True

Programa
using System;
using [Link];
using [Link];
using [Link];
using [Link];
using [Link];
using [Link];
using [Link];

// Adicionamos esta referencia


using [Link];

namespace pjRegistroDeLlamadas
{
public partial class frmIntMetodosCaso5 : Form
{

// Declaración de variables GLOBALES


double tVentas, tMarketing, tLogistica, tPrestamo;
double aVentas, aMarketing, aLogistica, aPrestamo;
double aPersonal, aComision;

public frmIntMetodosCaso5()
{
InitializeComponent();
}

Página 33 de 42
private void frmIntMetdosCaso5_Load(object sender, EventArgs e)
{

private void btnRegistrar_Click(object sender, EventArgs e)


{
if (valida() == "")
{
// Captura de datos
string empleado = getEmpleado();
if (validarEmpleado() == false)
{
int hijos = getHijos();
string area = getArea();
string condicion = getCondicion();

// Realizando cálculos
int años = calcularTiempoDeServicio();
double sueldoBase = asignarSueldoBase(area, condicion);
double movilidad = calcularMovilidad(sueldoBase);
double asignacion = calcularAsignacion(hijos);
double descuento = calcularDescuento(sueldoBase);
double neto = calcularNeto(sueldoBase, movilidad, asignacion,
descuento);

// Imprimir en la lista
imprimir(años, sueldoBase, movilidad, asignacion, descuento, neto);
}
else
{
[Link]("El empleado ya se encuentra registrado", "Alerta:");
return;
}
}
else
{
[Link]("El error se encuentra en " + valida(),"Alerta: ",
[Link], [Link]);
}
}

private void btnConsulta1_Click(object sender, EventArgs e)


{
totalEmpleadosxArea();

[Link]();
string[] elementosFila = new string[2];
ListViewItem row;

elementosFila[0] = "Total de Personal del area de Ventas";


elementosFila[1] = [Link]("0.00");
row = new ListViewItem(elementosFila);
[Link](row);

elementosFila[0] = "Total de Personal del area de Marketing";


elementosFila[1] = [Link]("0.00");
row = new ListViewItem(elementosFila);
[Link](row);

Página 34 de 42
elementosFila[0] = "Total de Personal del area de Logística";
elementosFila[1] = [Link]("0.00");
row = new ListViewItem(elementosFila);
[Link](row);

elementosFila[0] = "Total de Personal del area de Préstamos";


elementosFila[1] = [Link]("0.00");
row = new ListViewItem(elementosFila);
[Link](row);
}

private void btnConsulta2_Click(object sender, EventArgs e)


{
montoAcumuladorxCondicion();

[Link]();
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 Comisión";


elementosFila[1] = [Link]("C");
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 area de Ventas";


elementosFila[1] = [Link]("0.00");
row = new ListViewItem(elementosFila);
[Link](row);

elementosFila[0] = "Monto neto acumulado del area de Marketing";


elementosFila[1] = [Link]("0.00");
row = new ListViewItem(elementosFila);
[Link](row);

elementosFila[0] = "Monto neto acumulado del area de Logística";


elementosFila[1] = [Link]("0.00");
row = new ListViewItem(elementosFila);
[Link](row);

elementosFila[0] = "Monto neto acumulado del area de Préstamos";


elementosFila[1] = [Link]("0.00");
row = new ListViewItem(elementosFila);
[Link](row);
}

Página 35 de 42
private void btnSalir_Click(object sender, EventArgs e)
{
DialogResult r = [Link]("¿Está seguro de salir de la
aplicación?","Planila", [Link],[Link]);
if (r == [Link]) [Link]();
}

// Métodos 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];
}

// Métodos para calcular


// 1.- Método que determina el sueldo
double asignarSueldoBase(string area, string condicion)
{
switch (area)
{
case "Ventas":
if (condicion == "Personal")
return 2500;
else
return 500;
case "Marketing":
if (condicion == "Personal")
return 1800;
else
return 1100;
case "Logística":
if (condicion == "Personal")
return 3500;
else
return 2500;
case "Préstamo":
if (condicion == "Personal")
return 1500;
else
return 900;
}
return 0;
}

Página 36 de 42
// 2.- Calcular Años de servicio

int calcularTiempoDeServicio()
{
return [Link] - getFecha().Year;
}

// 3.- Calcular la asignacion de movilidad


double calcularMovilidad(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 "Logística":
if (getCondicion() == "Personal")
return 30.0/100*sueldoBase;
else
return 15.0/100*sueldoBase;
case "Préstamo":
if (getCondicion() == "Personal")
return 25.0/100*sueldoBase;
else
return 12.5/100*sueldoBase;
}
return 0;
}

// 4.- Calcular la asignación por número de hijos


double calcularAsignacion(int hijos)
{
return hijos * 20;
}

// 5.- Calcular descuento


double calcularDescuento(double sueldoBase)
{
return 17.0 / 100 * sueldoBase;
}

// 6.- Calcular sueldo neto


double calcularNeto(double sueldoBase, double movilidad,
double asignacion, double descuento)
{
return sueldoBase + movilidad + asignacion - descuento;
}

Página 37 de 42
// 7.- Método 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]("0.00"));
[Link]([Link]("0.00"));
[Link](fila);
}

// Métodos para las estadísticas


// CONSULTA 1: Total de Empleados por Area
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 "Logística": tLogistica++; break;
case "Préstamo": tPrestamo++; break;
}
}
}

// CONSULTA 2: Monto acumulado de netos por condicion


public void montoAcumuladorxCondicion()
{
aPersonal = 0;
aComision = 0;

for (int i = 0; i < [Link]; i++)


{
string condicion = [Link][i].SubItems[3].Text;
switch (condicion)
{
case "Personal":
aPersonal += [Link]([Link][i].SubItems[9].Text);
break;
case "Comisión":
aComision += [Link]([Link][i].SubItems[9].Text);
break;
}
}
}

Página 38 de 42
// 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 "Logística":
aLogistica+=[Link]([Link][i].SubItems[9].Text);
break;
case "Préstamo":
aPrestamo+=[Link]([Link][i].SubItems[9].Text);
break;
}
}
}

// Método que valida el registro duplicado del empleado


bool validarEmpleado()
{
bool estado = false;
for (int i = 0; i < [Link]; i++)
{
string empleado = [Link][i].SubItems[0].Text;
if (getEmpleado() == empleado) estado = true;
}
return estado;
}

// Método de validacion de datos


string valida()
{
if ([Link]().Length == 0)
{
[Link]();
return "nombre del empleado";
}
else if (![Link]([Link]))
{
[Link] = "";
[Link]();
return "número de hijos; es un valor número...!!!";
}
else if ([Link]==-1)
{
[Link]();
return "Area del empleado";
}

Página 39 de 42
else if ([Link]==-1)
{
[Link]();
return "Condición del empleado";
}
return "";
}
}
}

Formulario: Menú principal


Abrir un nuevo formulario

Control Propiedad Valor


Form1 (Name) frmMenuPrincipal
Text .:Programación Modular:.
IsMdiContainer True
WindowState Maximized
menuStrip1 (Name) menuStrip1

Revisar literatura como configurar un objeto menuStrip que sirve para crear una barra de menú contenido
en un formulario.

Página 40 de 42
Programa
using System;
using [Link];
using [Link];
using [Link];
using [Link];
using [Link];
using [Link];
using [Link];

namespace pjRegistroDeLlamadas
{
public partial class frmMenuPrincipalProgModular : Form
{
public frmMenuPrincipalProgModular()
{
InitializeComponent();
}

private void mnuCaso1_Click(object sender, EventArgs e)


{
frmLlamadasCaso1 frmCaso = new frmLlamadasCaso1();
[Link] = this;
[Link]();
}

private void mnuCaso2_Click(object sender, EventArgs e)


{
frmLlamadasCaso2 frmCaso = new frmLlamadasCaso2();
[Link] = this;
[Link]();

private void mnuCaso3_Click(object sender, EventArgs e)


{
frmLlamadasCaso3 frmCaso = new frmLlamadasCaso3();
[Link] = this;
[Link]();

private void mnuCaso4_Click(object sender, EventArgs e)


{
frmLlamadasCaso4 frmCaso = new frmLlamadasCaso4();
[Link] = this;
[Link]();

private void mnuIntegracionMetodos_Click(object sender, EventArgs e)


{
frmIntMetodosCaso5 frmCaso = new frmIntMetodosCaso5();
[Link] = this;
[Link]();

Página 41 de 42
private void mnuAcerdaDe_Click(object sender, EventArgs e)
{
frmAcercaDe frmCaso = new frmAcercaDe();
[Link] = this;
[Link]();

private void mnuAyuda_Click(object sender, EventArgs e)


{
[Link]("En desarrollo....., paciencia ","Aviso",
[Link],[Link]);
}

private void mnuAccesorios_Click(object sender, EventArgs e)


{
[Link]("En desarrollo....., paciencia ", "Aviso",
[Link], [Link]);
}

private void mnuSalir_Click(object sender, EventArgs e)


{
DialogResult r = [Link]("¿Desea terminar la aplicación?",
"Control de llamadas", [Link],
[Link]);
if (r == [Link]) [Link]();

}
}
}

Página 42 de 42

También podría gustarte