Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad

Programación en C# para Lenguaje de Programación Orientada a Objeto II, Apuntes de Informática

Una práctica de programación en C# para la asignatura Lenguaje de programación Orientada a Objeto II de la Universidad Autónoma Latinoamericana. La práctica consiste en la creación de una clase llamada clsOPEDFacturador, que contiene atributos, propiedades y métodos para el cálculo del valor a pagar por un producto, teniendo en cuenta el valor unitario, la cantidad, el descuento y el subtotal.

Qué aprenderás

  • ¿Cómo se calcula el valor a pagar por un producto en C#?
  • ¿Cuáles son los atributos, propiedades y métodos de la clase clsOPEDFacturador?
  • ¿Cómo se implementan los descuentos en el cálculo del valor a pagar por un producto en C#?
  • ¿Cómo se crea la clase clsOPEDFacturador en C#?

Tipo: Apuntes

2019/2020

Subido el 20/11/2021

andres-ospina-11
andres-ospina-11 🇨🇴

1 documento

1 / 18

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
Universidad Autónoma
Latinoamericana
Programación C#
Asignatura Lenguaje de programación
Orientada a Objeto II
Práctica 3
Docente David Múnera Alvarez
Revisión Abril 2020
1. PROCEDIMIENTO
1.1 Consultar
1. ¿Qué es una programación por capas? Beneficios y Desventajas.
2. ¿En qué consiste la capa de reglas de negocio?
3. Porque separar las condiciones del negocio del proceso habitual u operativo de una aplicación.
1.2 Problema a solucionar
Verduras del Campo Ltda ., desea un programa que calcule y muestre el valor del descuento y el valor
total a pagar, donde se captura la fecha, el código del producto y la cantidad a comprar. Cabe anotar
que acorde al código es el valor unitario y el porcentaje del descuento no es para todos los productos,
pero, puede cambiar en cualquier momento a cualquiera de los productos (Por defecto todos tienen 0%
de descuento). El programa debe manejar la programación a tres capas, donde en la capa de reglas de
negocio se manejará el porcentaje del descuento acorde al código del producto ingresado; en el archivo
plano (ListaDescuentos.txt) se encuentran en cada línea del mismo el código y el porcentaje del
descuento de los productos con descuentos (se encuentran separados por dos punto verticales “ :”); el
archivo debe ser leído línea a línea y en cada lectura, se compara si el código del producto ingresado se
encuentra en dicha lista, si se encuentra, el porcentaje es capturado para luego ser retornado. Debe
haber una clase operativa que realice el cálculo del valor a pagar y hallar el valor del porcentaje a
otorgar acorde porcentaje del descuento obtenido en la capa de reglas de negocio. Los productos con
sus códigos y valores (por kilo) se encuentran en la siguiente tabla:
Código Producto Valor Código Producto Valor
1 Aguacate 4.200 4 Cebolla Huevo 2.800
2 Zanahoria 2.300 5 Tomate de Aliño 2.700
3 Papa Nevada 2.100 6 Pera 5.500
Actividad 1. Crear un algoritmo para solucionar el problema planteado, donde se
determinen las entradas, el proceso a emplear y las salidas requeridas. Realizar
la respectiva prueba de escritorio. (Traerlo realizado)
Actividad 2. Establecer el diseño tipo UML para la clase de reglas de negocio a
construir con sus correspondientes componentes de entrada, salida y
comportamientos, acorde al algoritmo planteado.
Sugerencia
clsRNFacturador
-intCodigo: (int)
-dblPorcDscto: (double)
-strError: (string)
+ Codigo: (int)
+ PorcDsto: (double)
+Error: (string)
+ConsultarDto(): (bool)
+Constructor: clsRNFacturador()
Página 1 de 18
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12

Vista previa parcial del texto

¡Descarga Programación en C# para Lenguaje de Programación Orientada a Objeto II y más Apuntes en PDF de Informática solo en Docsity!

Universidad Autónoma

Latinoamericana

Programación C#

Orientada a Objeto II

Práctica 3

Docente David Múnera Alvarez

Revisión Abril 2020

1. PROCEDIMIENTO

1.1 Consultar

1. ¿Qué es una programación por capas? Beneficios y Desventajas.

2. ¿En qué consiste la capa de reglas de negocio?

3. Porque separar las condiciones del negocio del proceso habitual u operativo de una aplicación.

1.2 Problema a solucionar

Verduras del Campo Ltda ., desea un programa que calcule y muestre el valor del descuento y el valor

total a pagar , donde se captura la fecha , el código del producto y la cantidad a comprar. Cabe anotar

que acorde al código es el valor unitario y el porcentaje del descuento no es para todos los productos,

pero, puede cambiar en cualquier momento a cualquiera de los productos (Por defecto todos tienen 0%

de descuento). El programa debe manejar la programación a tres capas, donde en la capa de reglas de

negocio se manejará el porcentaje del descuento acorde al código del producto ingresado; en el archivo

plano (ListaDescuentos.txt) se encuentran en cada línea del mismo el código y el porcentaje del

descuento de los productos con descuentos (se encuentran separados por dos punto verticales “ : ”); el

archivo debe ser leído línea a línea y en cada lectura, se compara si el código del producto ingresado se

encuentra en dicha lista, si se encuentra, el porcentaje es capturado para luego ser retornado. Debe

haber una clase operativa que realice el cálculo del valor a pagar y hallar el valor del porcentaje a

otorgar acorde porcentaje del descuento obtenido en la capa de reglas de negocio. Los productos con

sus códigos y valores (por kilo) se encuentran en la siguiente tabla:

Código Producto Valor Código Producto Valor

1 Aguacate 4.200 4 Cebolla Huevo 2.

2 Zanahoria 2.300 5 Tomate de Aliño 2.

3 Papa Nevada 2.100 6 Pera 5.

Actividad 1. Crear un algoritmo para solucionar el problema planteado, donde se

determinen las entradas, el proceso a emplear y las salidas requeridas. Realizar

la respectiva prueba de escritorio. (Traerlo realizado)

Actividad 2. Establecer el diseño tipo UML para la clase de reglas de negocio a

construir con sus correspondientes componentes de entrada, salida y

comportamientos, acorde al algoritmo planteado.

Sugerencia

clsRNFacturador

**- intCodigo: (int)

  • dblPorcDscto: (double)
  • strError: (string)**

+ Codigo: (int) ↓

+ PorcDsto: (double) ↑

+ Error: (string)^ ↑

+ ConsultarDto(): (bool)

+ Constructor:^ clsRNFacturador ()

Universidad Autónoma

Latinoamericana

Programación C#

Orientada a Objeto II

Práctica 3

Docente David Múnera Alvarez

Revisión Abril 2020

Actividad 3. Crear la biblioteca de reglas de negocio

a. En la carpeta con su 1er. apellido y 1er. nombre creada en la práctica anterior,

crear una subcarpeta con Nombre: Practica.

b. En Microsoft Visual Studio, utilizar la opción: Nuevo Proyecto, utilizar la plantilla,

Visual C#, opción: Biblioteca de clases, con nombre: libFacturadorRN , en la

Localización: subcarpeta creada anteriormente; Aceptar

c. Crear la clase: clsRNFacturador , acorde a la representación UML planteada en

la actividad 2.

1. Crear los atributos: intCodigo (para el código del producto), dblPorcDscto

(para el vr. del porcentaje del descuento a otorgar) y strError (para el

mensaje de error ocurrido en la clase). Tener en cuenta el tipo de dato y el

modificador de acceso.

2. Crear el constructor de la clase donde se inicialicen los atributos de tipo

numéricos en cero y los de tipo cadena en vacío.

3. Crear la propiedad de entrada: Codigo y las propiedades de salida:

PorcDsto y Error. Tener en cuenta el tipo de dato, el modificador de acceso

y los descriptores de acceso para cada propiedad.

4. Crear el Método privado: LeerArchivo() que retorne un valor booleano;

verdadero si fue ejecutado correctamente o falso en caso contrario. Este

método se encargará de leer el archivo plano que contiene en cada línea los

datos de las reglas de negocio (Código y Porcentaje del descuento

separados por dos punto verticales “ : ”) y asignarlos a los atributos de la

clase, siempre y cuando se encuentre el código del producto dentro de la

lista de los productos que se les va a otorgar descuento, y así; poder

capturar el porcentaje del descuento, sino se encuentra el código del

producto capturado, el porcentaje será igual a cero.

5. Crear el Método público: Consultar() que retorne un valor booleano;

verdadero si fue ejecutado correctamente o falso en caso contrario. Este

método invoca el método: LeerArchivo() que recupera los valores de las

reglas de negocio desde el archivo plano acorde al Código del producto.

Actividad 4. Establecer el diseño tipo UML para la clase operativa que tendrá una

dependencia de la clase de reglas de negocio; construirla con sus

correspondientes componentes de entrada, salida y comportamientos, acorde al

algoritmo planteado.

Universidad Autónoma

Latinoamericana

Programación C#

Orientada a Objeto II

Práctica 3

Docente David Múnera Alvarez

Revisión Abril 2020

6. Crear el Método público: Procesar() que retorne un valor booleano;

verdadero si fue ejecutado correctamente o falso en caso contrario. Este

método invoca el método: Validar() y se encarga de enviar, invocar el

método necesario de proceso y recuperar la información a la clase de reglas

de negocio, para luego realizar su debido proceso.

Actividad 6. Aplicación para entorno Desktop / Windows tipo aplicación para

implementar la captura y muestra de datos, utilizando la librería de clases

implementada anteriormente

a. En Microsoft Visual Studio, utilizar la opción: Nuevo Proyecto , utilizar la plantilla,

Visual C# , opción: Aplicación de Windows Forms , con nombre: prjPractica3 , en

la Localización: subcarpeta creada en la actividad 3(a). Aceptar

b. Crear la GUI sugerida con nombre: frmPractica3 , ubicando los objetos de

entrada y salida propuestos en la siguiente imagen.

Form: frmPractica (Text): Práctica # 2 – Reglas de negocio (Sin botones de control) DateTimePicker: dtpFecha ComboBox: cboProductos TextBox: txtVr (ReadOnly: True ) TextBox: txtCant Button: btnRegistrar Label: lblVrDscto : Label: lblVrPagar : Button: btnLimpiar Button: btnTerminar

Actividad 7. Integración GUI y Clase, funcionamiento de la aplicación.

a. Referencie y use la librería: libFacturadorOPE , creada en la actividad 5.

b. Codificar los botones: Terminar, Limpiar y Registrar de la GUI.

 El botón: btnTerminar , debe terminar la ejecución de la aplicación.

Universidad Autónoma

Latinoamericana

Programación C#

Orientada a Objeto II

Práctica 3

Docente David Múnera Alvarez

Revisión Abril 2020

 El botón: btnLimpiar , debe limpiar los TextBox de captura y de respuesta,

además debe colocar por default el ComboBox: cboProductos , en la 1ra.

Opción.

 El botón: btnRegistrar , debe capturar los valores ingresados del Producto:

Código, Valor unitario y el Cantidad, crear instancia a partir de la clase

Operativa, enviarle los datos, invocar el método del objeto ( Procesar() ),

realizar el tratamiento de error en caso de haberlo y mostrar los datos

obtenidos ( Dscto y Vr. a pagar ).

c. Realizar pruebas y correcciones necesarias hasta el correcto funcionamiento de

la aplicación.

Actividad 8. (Reto)

1. Una empresa desea pagar la nómina a sus empleados y posee la siguiente

información: Código, nombres, total número de hijos vivos y cantidad de hijos

vivos menores de 18 años (hacen parte del total de hijos vivos), valor hora y el

número de horas trabajadas al mes del trabajador. La retención de salud y

pensión es del 4% por cada concepto La retención en la fuente por cada

empleado se determina así: Para salarios menores al mínimo vigente; si el

número total de hijos es mayor de 3 no hay retención; si el número total de hijos

es menor o igual a 3, se le retiene un porcentaje igual a 6 menos el número total

de hijos dividido por 2. Para salarios iguales o mayores al mínimo vigente; si el

número de hijos totales es menor de 3, se le retiene un 3%; si el número total

de hijos es mayor o igual a 3 se le retiene un porcentaje igual a 10 dividido por

el número de hijos. El subsidio de transporte, al que tienen derecho los

trabajadores que devenguen hasta dos salarios mínimos, será de $ 72.

pesos (para el año 2014). (El salario mínimo para 2014 es de $ 616.000 pesos

mensuales). La empresa entrega un subsidio por cada hijo menor de edad

(menor de 18 años) por valor de $ 50.500 en el 2014. Elaborar un programa con

reglas de negocio que muestre: Total devengado (Salario bruto), total retención

realizada, Total subsidios recibido (valor subsidio por Nro. de hijos y valor

subsidio de transporte) y total a pagar (Salario neto).

2. Realizar un programa que modifique el mismo ejercicio de esta práctica para

calcular el valor total de pago a una factura por los productos comprados, donde

no se sabe la cantidad de productos a procesar, pero si se sabe que para

terminar, se ingresa el valor de cero a la cantidad, en cuyo caso se mostrará el

valor del cálculo solicitado. Ojo : Puede caer en un parcial un ejercicio de este

tipo.

Universidad Autónoma

Latinoamericana

Programación C#

Orientada a Objeto II

Práctica 3

Docente David Múnera Alvarez

Revisión Abril 2020

public string Error { get { return strError; } } #endregion #region "Métodos Públicos" public bool ConsultarDto() { try { string _strPath = AppDomain.CurrentDomain.BaseDirectory + @"ListaDescuentos.txt"; //Variable para almacenar la cantidad de líneas que tiene el archivo int _intCantLineas = 0; string[] _strVecLineas; string _strLinea; string _strCdigo; //Capturamos la cantidad de líneas que tiene el archivo _intCantLineas = File.ReadAllLines(_strPath).Length; //Verificamos si el archivo tiene líneas if (_intCantLineas == 0) { strError = "El archivo de descuentos no tiene registros.\r\n Verifique la información"; return false; } //Creamos el objeto para leer el archivo StreamReader _objReader = new StreamReader(_strPath); _strLinea = _objReader.ReadLine(); while (_strLinea != null) { _strVecLineas = _strLinea.Split(':'); //Código del Producto

Universidad Autónoma

Latinoamericana

Programación C#

Orientada a Objeto II

Práctica 3

Docente David Múnera Alvarez

Revisión Abril 2020

_strCdigo = _strVecLineas[0]; //Verificamos si el producto leido es el producto que estamos procesando. En tal caso terminamos el ciclo if (_strCdigo == intCodigo.ToString()) { //Extraemos valor del descuento dblPorcDscto = Convert.ToDouble(_strVecLineas[1]); break; } _strLinea = _objReader.ReadLine(); } _objReader.Close(); _objReader = null; return true; } catch (Exception ex) { throw ex; } } #endregion } }

Universidad Autónoma

Latinoamericana

Programación C#

Orientada a Objeto II

Práctica 3

Docente David Múnera Alvarez

Revisión Abril 2020

public double Vr_Unitario { set { dblVrUnit = value; } } public double Cantidad { set { dblCant = value; } } public double VrDscto { get { return dblVrDscto; } } public double VrAPagar { get { return dblVrAPagar; } } public string Error { get { return strError; } } public double SubTotal

Universidad Autónoma

Latinoamericana

Programación C#

Orientada a Objeto II

Práctica 3

Docente David Múnera Alvarez

Revisión Abril 2020

get { return dblSubTotal; } } #endregion #region "Métodos Privados" private bool Validar() { if (intCodigo <= 0) { strError = "Código del producto no válido"; return false; } if (dblVrUnit <= 0) { strError = "Valor unitario no válido. Este dato debe ser un número mayor que cero"; return false; } if (dblCant <= 0) { strError = "Cantidad no válida. Este dato debe ser un número mayor que cero"; return false; } return true; } #endregion #region "Métodos Públicos" public bool Procesar() { try { if (!Validar()) { return false; } //Instanciamos la clase de relgas de negocio clsRNFacturador _objFacRN = new clsRNFacturador();

Universidad Autónoma

Latinoamericana

Programación C#

Orientada a Objeto II

Práctica 3

Docente David Múnera Alvarez

Revisión Abril 2020

Formulario

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using libOpeFacturador; namespace prjPractica { public partial class frmPractica3 : Form { #region "Constructor" public frmPractica3() { InitializeComponent(); } #endregion #region "Variables Globales" string strError; double dblNumAux; #endregion #region "Métodos Privados" private bool ValidarCampos() { if (this.dtpFecha.Value < Convert.ToDateTime(DateTime.Now.ToShortDateString())) { strError = "La fecha elegida no puede ser menor que el día actual"; return false; } if (this.cboProductos.SelectedIndex <= 0) { strError = "Debe seleccionar un producto"; return false;

Universidad Autónoma

Latinoamericana

Programación C#

Orientada a Objeto II

Práctica 3

Docente David Múnera Alvarez

Revisión Abril 2020

if (this.txtCant.Text == string.Empty) { strError = "Debe ingresar una cantidad de producto"; return false; } if (this.txtVr.Text == string.Empty) { strError = "No se puede realizar el proceso sin el valor unitario del producto"; return false; } return true; } private void LimpiarCampos() { this.dtpFecha.Value = DateTime.Now; this.cboProductos.SelectedIndex = -1; this.txtCant.Text = string.Empty; this.txtVr.Text = string.Empty; this.lblVrDscto.Text = string.Empty; this.lblVrPagar.Text = string.Empty; } private void LlenarCombo() { try { this.cboProductos.Items.Add("Seleccione un Producto"); //Index = 0 this.cboProductos.Items.Add("Aguacate"); //Index = 1 this.cboProductos.Items.Add("Zanahoria"); //Index = 2 this.cboProductos.Items.Add("Papa Nevada"); //Index = 3 this.cboProductos.Items.Add("Cebolla Huevo"); //Index = 4 this.cboProductos.Items.Add("Tomate de Aliño"); //Index = 5 this.cboProductos.Items.Add("Pera"); //Index = 6 this.cboProductos.SelectedIndex = 0; } catch (Exception ex) { MessageBox.Show(ex.Message, "Verduras del Campo",MessageBoxButtons.OK, MessageBoxIcon.Error);

Universidad Autónoma

Latinoamericana

Programación C#

Orientada a Objeto II

Práctica 3

Docente David Múnera Alvarez

Revisión Abril 2020

private void CalcularTotal() { try { //Verificamos que los campos tengan datos if (!ValidarCampos()) { MessageBox.Show(strError, "Verduras del Campo",MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } //Instanciamos la librería operativa clsOpeFacturador _objFacturar = new clsOpeFacturador(); //Asignamos los valores para que la librería haga los cálculos _objFacturar.Codigo = this.cboProductos.SelectedIndex; _objFacturar.Cantidad = Convert.ToDouble(this.txtCant.Text.Trim().Replace(".", "").Replace(",","").Replace("$", "")); _objFacturar.Vr_Unitario = Convert.ToDouble(this.txtVr.Text.Trim().Replace(".", "").Replace(",", "").Replace("$", "")); //Solicitamos realizar el cáclulo if (!_objFacturar.Procesar()) { //Si los cálculos fallaron recuperamos el error que se produjo en la clsOpeFacturador MessageBox.Show(_objFacturar.Error, "Verduras del Campo",MessageBoxButtons.OK, MessageBoxIcon.Information); return; } this.lblVrDscto.Text = _objFacturar.VrDscto.ToString("C0"); this.lblVrPagar.Text = _objFacturar.VrAPagar.ToString("C0"); } catch (Exception ex) {

Universidad Autónoma

Latinoamericana

Programación C#

Orientada a Objeto II

Práctica 3

Docente David Múnera Alvarez

Revisión Abril 2020

MessageBox.Show(ex.Message, "Verduras del Campo",MessageBoxButtons.OK, MessageBoxIcon.Error); } } #endregion #region "Eventos" private void btnLimpiar_Click(object sender, EventArgs e) { LimpiarCampos(); } private void frmPractica3_Load(object sender, EventArgs e) { LlenarCombo(); } private void cboProductos_SelectedIndexChanged(object sender, EventArgs e) { HallarVrUnitario(); } private void txtVr_TextChanged(object sender, EventArgs e) { //Damos formato al TextBox solo si esté no está vacío if (this.txtVr.Text != string.Empty) { //Convertimos en double el textbox quitando: ',' '.' y '$' dblNumAux = Convert.ToDouble(this.txtVr.Text.Replace(".", "").Replace(",", "").Replace("$", "")); this.txtVr.Text = dblNumAux.ToString("C0"); } } private void txtCant_Leave(object sender, EventArgs e) { //Damos formato al TextBox //Convertimos en double el textbox quitando: ',' '.' y '$' dblNumAux = Convert.ToDouble(this.txtCant.Text.Replace(".", "").Replace(",", "").Replace("$",""));