Está en la página 1de 55
STAD |_Desarrollo de aplicaciones con Visual C# 4.7 Casos desarrollados erent (1) 1 if simple - pago de empleados La empresa de consultoria de proyectos Project-Perii ha decidido ampliar su linea de negocio, por lo cual ha contratado mas personal para asi poder lograr los objetivos tra- zados por la gerencia, Por lo tanto, se necesita una aplicacién que permita controlar el pago de sus empleados segin su categoria; mostrando el sueldo asignado, descuento y el importe neto a recibir. Se tiene en cuenta: + Al iniciar la aplicacion, se debe mostrar la fecha actual de registro; ademas de mos- trar las categorias de los empleados en un cuadro combinado. + Usar la siguiente tabla de asignacién de sueldos segiin la categoria del empleado: Categoria Sueldo Jefe $ 3500.00 Administrative $ 2500.00 Técnico $ 1700.00 Operario $ 1000.00 + El descuento aplicado representa el 12.5 % del sueldo solo si dicho sueldo es mayor $ 2000.00; caso contrario, no se le aplica descuento + El importe neto resulta de la diferencia entre el sueldo y el descuento aplicado. + Todos los resultados deben ser mostrados en un cuadro de lista. Solucién: 1. Crear un nuevo proyecto en Visual Studio 2015: * Seleccione Archivo > Nuevo > Proyecto. * Seleccione la plantilla Visual C#. * Seleccione Aplicacién de Windows Form. Capitulo 4: Estructuras de decision ) ian + Asigne el nombre pjCaso41, tal como se muestra en la siguiente imagen: sy) De Fameet 453 =i = BE] sree sinnienome vcr ene Vt Bi rcsinsecomt vcs BEF cnn n nner voce ° BF rman omeetie vice » ees ncaa bch SL. Sotcte oe : Nog diesen eva Race x Pr rn) © P= rr ‘retard Wino ame 2. Cambiar el nombre del formulario: * Seleccione el formulario Form1.cs desde el Explorador de soluciones. + Desde la propiedad Nombre de archivo, asigne el nombre fimPago. 3. Diseiiar la GUI (Interfaz Grifica de Usuario) del caso: 1 Contre de page de emplendor CONTROL DE PAGO DE EMPLEADOS ‘txtEmpleado FECHA DE REGISTRO YIFeehe —< ££ @$ J birecha oe —— ————— ———L_enssai_] Desarrollo de aplicaciones con Visual C# Estadisticas de los controles usados en el frmPago: Clase Controtes Form o1 | Formt Label 07 | Labett, Label2, Label, Labeld, LabelS, Label6, Label? TextBox o1 | TextBoxt ComboBox 01 | ComboBoxt Button 03 | Butont, Buton2, Button’ ListView or [Listviewt TOTAL 4 Configurando el cuadro combinado (ComboBox): + Seleccione el cuadro combinado (ComboBox!). + Seleccione la pestaiia superior derecha del objeto > Editar elementos... *+ Coloque las categortas de los empleados uno debajo del otro ‘ecb ae cadena en coecib ana pr nea Tele Adminitrative Teened Opeae tulo 4: de deci 143 Configurando el ListView: * Seleccione el objeto ListView! + Seleccione la pestaiia superior derecha, + Seleccione Details, desde el cuadro Vista. + Luego, presione Editar columnas... para definir las columnas del cuadro de lista, Editar elementos. Editar columnar. aa eee a oe Imagelist grande [(ringuno) [i] ‘Acoplaren contenedor primario + Ahora, asigne los titulos de la lista, para lo cual debe agregar 5 columnas con el botén Agregar. T] colunnHeader2 2] colmntieader3 3 colunnteadert [> Gppteatonseting | Tag | | Sm | Oommen | | Croutons Tae Modis Pate | 4 Varios | Imogender [J (ningun) Imogtey EC Lisingne). | ——— a eee + Para modificar el titulo, seleccione cada columnHeader y modifique su propiedad Text; no es necesario asignar un nombre (Name). + Cuando finalice de asignar los titulos, presione el botén Aceptar. Desarrollo de aplicaciones con Visual C# 4, Modificar las propiedades de los controles: Control Propiedad Valor aul (Name) Text Control de pago de empleados Label! Text ‘CONTROL DE PAGO DE EMPLEADOS Label? Text FECHA DE REGISTRO = (Name) IbiFecha Tabals Text Dejar vacio Labeld Text NOMBRE DEL EMPLEADO Labels ‘Text CATEGORIA Label6 Text SUELDO (Name) IbiSueldo Eateld Text Dejar vacio Textbox (Name) ‘txtkimpleado 5 (Name) ‘eboCategoria ComboBox! | Text (Seleccione) (Name) ‘bntRegistrar Betton Text REGISTRAR Baan (Name) ‘binCancelar 2 Text CANCELAR (Name) binSalir Buttons Text SALIR . (Name) IwPagos Leview! GridLines True Finalmente, el formulario debe tener el aspecto siguiente: CONTROL DE PAGO DE EMPLEADOS FECHA DE REGISTRO 18/10/2015, ‘CATEGORIA ‘SUELDO __DESCUENTO NETO Fernanda Torres L. Adwinistrativo $2,500.00 $312.50 $2,187.50 Luz Lazaro M. efe $3,500.00 $437.50 $3,062.50 Capitulo 4: Estructura de decis 5. El cédigo completo de la aplicacién es: using System; using System.Collections.Generic; using System.ComponentModel ; using System.Data; using System.Orawings using System. Ling; using System. Text; using System. Threading. Tasks; using System.Windows. Forms; namespace pjCasoa1 { public partial class frmPago : Form { double sueldo = public frmPago() { InitializeComponent(); } private void frmPago_Load(object sender, EventArgs e) { Lb1Fecha.Text = DateTime.Today.Date.ToString("d"); } private void btnRegistrar_Click(object sender, EventArgs e) { //Capturando los valores string empleado = txtEmpleado.Text; string categoria = cboCategoria. Text; //Realizando calculos double descuento-05 if (sueldo > 2000) descuento = sueldo * (12.5/100); double neto = sueldo - descuento; //Imprimiendo los resultados en la lista ListViewrtem fila = new ListViewItem(empleado) ; fila. SubItems.Add(categoria); fila. SubItems .Add(sueldo.ToString("C")); fila.SubItems.Add(descuento. Tostring("C")); fila. SubItems.Add(neto.ToString("C")); LvPagos.Ttems .Add (fila); //Limpiando los controles btncancelar_Click(sender, e); SHE |_Desarrolio de aplicaciones con Visual C# private void cboCategoria_SelectedIndexChanged(object sender, Even- tArgs e) £ //Capturando 1a categoria seleccionada string categoriascboCategoria. Text; //Ksignando el sueldo segun la categoria if (categoria == "Jefe") sueldo = 3500; if (categoria = “Adninistrativo") sueldo = 2500; if (categoria == "Tecnico") sueldo = 1700; if (categoria == “Operario") sueldo = 1000; //Enviando el sueldo obtenido a la impresion Lblsueldo.Text = sueldo. Tostring! + private void btnCancelar_Click(object sender, EventArgs e) { cbocategoria.Text ‘txteEmpleado.Clear(); txtEmpleado.Focus()3 (Seleccione } private void btnSalir Click(object sender, EventArgs e) { DialogResult r = MessageBox. Show("Esta seguro de salir?’ MessageBoxButtons.YesNo, MessageBoxIcon.€xclamation) 5 DialogResult.Yes) this.Close(); "Page if (r Consideraciones al agregar el cédigo de la aplicacién: > Mostrar la hora actual en el formulario Se debe tener en cuenta que al ejecutar la aplicacién, la fecha ya debe mostrarse en el formulario; por lo tanto, la programacién debe hacerla en el evento del load del formulario, Esto indica que al cargar el formulario, se muestra le fecha, Para legar al evento load, solo basta hacer doble clic en un lugar vacio del fondo del formulario. Inicialmente, se muestra de la siguiente manera: private void frmPago_Load(object sender, EventArgs e) { } /Codigo del evento load del formulario Capitulo 4: Estructuras de decision | ia Dentro del evento load se hace referencia a DateTime. Today. Date. ToString(“d”). DateTime contiene una propiedad llamada “Date”, que captura la fecha y la hora actual del sistema; para mostrar solo la fecha se asigna la letra “d” dentro del metodo ToString; si se necesita visualizar la fecha y la hora, se debe dejar vacio el metodo ToString. > Asignar el sueldo como variable GLOBAL La idea principal es mantener la informacién que resulta del sueldo del empleado, la cual puede ser usada tanto al seleccionar una categoria del empleado como en los céleulos de sus montos. Esta debe ser declarada después de la linea: public partial class frmPago : Form { double sueldo = > Mostrar el sueldo del empleado al seleccionar una categorsa Al seleccionar una categoria automaticamente, debe mostrarse el sueldo asignado segiin el criterio de la aplicacién. Para colocar el cédigo dentro del cuadro combinado, solo se debe hacer doble clic sobre dicho control, de forma que muestre el siguiente cédigo: private void cboCategoria_SelectedIndexchanged(object sender, EventArgs e) { //Cédigo del evento selectedIndexchanged del cuadro conbinado > Enviar los valores al ListView La informacién resultante de la aplicacién debe ser mostrada en el objeto ListView, por lo tanto, a continuacién se analiza su cédigo: ListViewttem fila = new ListViewltem(empleado) ; fila. SubTtems.Add(categoria) ; fila. Subrtems .Add(sueldo.ToString("C")) 5 fila. Subrtems .Add(descuento. ToString("C fila.Subitens .Add(neto.Tostring("C")); AvPagos. Items Add (fila) 5 Para agregar informacién al cuadro de lista, se necesita la clase “ListViewItem” la cual representa un elemento del ListView. Los valores a enviar deben ser estricta- mente ordenados, es decir, deben estar en el mismo orden definido en la cabecera. El objeto fila representa a los valores que se muestran en el ListView. Por lo tanto, toda la 148 err Desarrollo de aplicaciones con Visual C informacién a mostrar debe ser enviada a dicho objeto mediante el método “Subltems. Add”. Una vez Ilena de todos los valores, es momento de enviar el objeto ListView mediante la sentencia IvPagos.Items.Add({fila). > Invocar el e6digo del objeto btnCancelar Después de registrar el pago de un empleado, la aplicacion debe permitir limpiar los controles para volver a enfocar en el cuadro de ingreso de nombre del empleado, para lo cual, se cuenta con el botén Cancelar, que casualmente realiza las mismas activi- dades. Entonces, se debe invocar su cédigo. Por lo tanto, al finalizar el registro del pago de empleado, se debe colocar el siguiente eédigo binCancelar_Click(sender, ©); el cual invoca a todo el cédigo implementado en el botén Cancelar. 6. Finalmente, presione F5 para probar la aplicacién. TOLLE 2.) : if simple - control de registro de documentos La notaria Garcia-DosFuentes cuenta con el proceso de control de documentos manual, para lo cual, un empleado registra todo tipo de documentos recibidos. Se necesita una aplicacién que permita controlar dichos documentos de forma automitica. Se deben mostrar los documentos en una lista con el nimero de documento, fecha de emisién, empresa emisora, afios de registro y la condicién del documento, Se tiene en cuenta lo siguiente: * Para la seleccién de la fecha, usar el control DateTimePicker. + Para calcular los aiios de registro, considerar la fecha de emisién del documento con respecto al aio actual. + Usar la siguiente tabla para determinar la condicién del documento: Afios de emision Condicion Menor o igual a 5 aiios Habilitado Mayor a 5 aios Inhabititado Solucion: 1. Crear un nuevo proyecto en Visual Studio 2015: * Seleccione Archivo > Nuevo > Proyecto. * Seleccione la plantilla Visual C#. Capitulo 4 * Seleccione Aplicacién de Windows Form. + Asigne el nombre pjCaso42, tal como se muestra en la siguiente imagen: Bi ciate Ej sen Bi orci secne BET teense EET rorcmpent 2. Cambiar el nombre del formulario: + Seleccione el formulario Form!.cs, desde el Explorador de soluciones. + Desde la propiedad “Nombre de archivo” asigne el nombre fmRegistro. 3. Disefiar la GUI (Interfaz Grifica de Usuario) del caso: "2 Contd regio de documentos teres) CONTROL DE REGISTRO DE DOCUMENTOS wat ve 0c. txiNumero OW De enIston 38/10/2018 ‘Fein CvPRESA eATSORA t >| canceLaR ReGrsTRAR_|~< binRegistrar EERO IN? DE 00C. FECHA DE EMISION EMPRESA Alilos — CONDICION Tasca } Tiago sat ]<——f{binSalir Desarrollo de aplicaciones con Visual C# Estadisticas de los controles usados en el frmRegistro: ‘Clase 'N.* elementos ‘Controles: Form OL Form Label 04 Label, Label2,Label3, Labeld TextBox 02 TextBox, TextBox? DateTimePicker ol DateTimePickerl Button o Button, Button2, Button’ ListView 01 ListView! TOTAL 2 4, Modificar las propiedades de los controles Control Propiedad Valor (Name) fimRegistro Ronal Text Control de registro de documentos Label Text CONTROL DE REGISTRO DE DOCUMENTOS Label2 Text NUMERO DE DOC Label3 Text FECHA DE EMISION Labeld Text EMPRESA EMISORA Textbox! (Name) txtNumero Textbox? (Name) txtEmpresa . «| Name) ‘tFecha DateTimePicker | (Name) - (Name) bniRegistrar iio ‘Text REGISTRAR 2 (Name) bnCancelar Button? Text CANCELAR (Name) bmnsalir Buttons ‘Text SALIR, fied (Name) Registro eka GridLines Truc Capitulo 4: Estructuras de decisi6 Finalmente, el formulario debe tener el aspecto siguiente: CONTROL DE REGISTRO DE DOCUMENTOS ‘MMERO DE Doc. 12585 FECHA DE EMISION 23/12/2010 EMPRESA EMTSORA Sunarp (ccs lente) N° DE DOC. FECHA DE EMISION EMPRESA ‘0S —_cOWOICTON sera 22/11/2006 Edelnor S.A. 9 INMaBILTTADO 13585 23/12/2010 Sunarp 5 MaBTLITADO 5. El cédigo completo de la aplicacién es: using System; using System.Collections.Generi using System.ComponentModel ; using System.Data using System.Drawing; using System.Ling using System. Texts using System. Threading. Tasks; using System.Windows.Forms; namespace pjCasoa2 public partial class frmRegistro : Form { public frnRegistro() { Initializecomponent(); + private void btnRegistrar_Click(object sender, EventArgs e) { /[Capturando los valores int numero = int.Parse(txtNumero. Text); DateTime fecha = dtFecha.Value; 151 152 Desarrollo de aplicaciones con Visual C# + string empresa = txtEmpresa.Text; J[Calculando los aos de emision int afios = DateTime. Today.Date. Year-fecha. Year; //Determinando 1a condicion string condicion=" Af (aflos <= 5) condicior if (alos > 5) condicion = “INHABILITADO"; ‘//Impriniendo los resultados ListViewlten fila = new ListViewItem(numero. ToString()); fila. Subltems .Add( fecha. ToString("d"))3 fila. Sub tems Add (empresa) ; fila. Subltems .Add(afios .ToString()); fila. SubTtems Add (condicion) ; IvRegistro. Ttems.Add (fila); //Limpiando 10s controles btnCancelar_Click(sender,e); private void btnCancelar_Click(abject sender, EventArgs e) { + ‘txtNumero.Clear() 3 dtFecha.Value = DateTime. Today.Date; ‘txtEmpresa.Clear() ; ‘txtNumero. Focus() private void btnSalir_Click(object sender, EventArgs e) { Consideraciones al agregar el cédigo de la aplicaci Dialogresult r = MessageBox.Show("Esta seguro de salir?", "Documentos", MessageBoxButtons.YesNo, MessageBoxIcon. Exclamation) ; Dialogresult.Yes) this.Close(); » Capturando la fecha desde el control DateTimePicker El control DateTimePicker permite seleccionar una fecha determinada, por tanto, la varia- ble de captura debe ser del tipo DateTime y, para obtener la fecha seleccionada se usa la propiedad Value del objeto DateTimePicker; tal como se muestra en la siguiente sentencia: DateTime fecha = dtFecha. Value; Estructuras de decisi | sae > Calculando los aiios Primero, se debe capturar el afio actual, para lo cual se usa la sentencia DateTime. Today.Date. Year; mientras que para obtener el afio seleccionado, se usa la propiedad directamente desde la variable fecha, tal como se muestra en el siguiente cédigo: int afios = DateTime. Today.Date.Year-fecha.Year >» Determinando la condicién del documento La variable condicién almacena el resultado de la evaluacién de los aiios. Ast, esta variable se declara fuera de la sentencia If y se inicializa con el valor doble comillas vactas; pues, de otra manera, el compilador emite un error, ya que no es preciso el valor asignado en la condicién if, tal como se muestra en el siguiente cédigi string condicion=""; if (afios <= 5) condicion if (afios > 5) condicion HABILITADO" ; 'INHABTLTTADO" ; > Enviar los valores al ListView La informacién resultante de la aplicacién debe ser mostrada en el objeto ListView, por lo tanto, se analiza el siguiente eédigo: ListViewrtem fila = new ListViewItem(nunero. Tostring()); fila. SubTtens.Add(fecha.Tostring(“d")); fila.Subitems .Add(empresa) ; fila. SubTtems..Add(afios. ToString()); fila. Subrtems..Add(condicion) ; IvRegistro. Items .Add( fila); Los datos que son enviados a la lista deben ser de tipo string, por lo cual, el nimero de documentos debe ser parseado, de la misma manera los afios calculados y finalmente la fecha de registro, No se debe olvidar que el parimetro “d” emite solo la fecha. 6, Finalmente, presione F5 para probar la aplicacién. 154 doble - promedio de notas El docente del curso de programacién en la universidad necesita tener un control del registro de notas de sus alumnos. El docente registra cuatro evaluaciones y los promedia eliminando la nota baja que el alumno haya obtenido; es decir, se promedian las tres notas mas altas. Implemente, una aplicacién que permita mostrar la nota menor, el pro- medio y la condicién de los alumnos. La condicién considera aprobados a los alumnos cuyo promedio sea mayor o igual a 12.5, caso contrario, se considera desaprobado, Se tiene en cuenta lo siguiente: + Validar el ingreso de los valores en los controles, de forma que se use el control Error Provider para mostrar mensajes referentes al error, especialmente, en los con- troles de ingreso de datos como el TextBox. + Mostrar el registro de los alumnos en un control ListView. Solucién: 1. Crear un nuevo proyecto en Visual Studio 2015: + Seleccione Archivo > Nuevo > Proyecto. + Seleccione la plantilla Visual C#. + Seleccién Aplicacién de Windows Form. + Asigne el nombre pjCaso43, tal como se muestra en la siguiente imagen: Nine wor ~ — SE sre some Vice 2 To vnc “aie EE] scone vance “— Bi setcin sect venice cnt BE] risen venice ss © EAT rcecanete mice = ene a Wee (cameron : Sette cme 5 Aeshna and Zomsnceropnt Capitulo 4: Estructuras de decisié 155 2. Cambiar el nombre del formulario: * Seleccione el formulario Form1.cs desde el Explorador de soluciones. + Desde la propiedad Nombre de archivo, asigne el nombre frmEvaluacion, 3. Diseftar la GUI (Interfaz Grifica de Usuario) del caso: 1 Comte de regio de eahnciones ‘Alumno CONTROL DE REGISTRO DE EVALUACIONES aun Evaluactones > Eval. 1 Eval. 2 Eval. 3 Eval. 4 cmc) 3 [aus 1&2 634 _|MEWOR | PROMEDIO CONDICION binCancelar biaRegistar [ies Estadisticas de los controles usados en el frmEvaluacion: Clase elementos Controles Form o1 Form! Label 06 Labell, Label2, Label3, Label4, Label5, Label6 TextBox 05 TextBox! TextBox2, TextBox3, TextBox4, TextBoxS GroupBox a GroupBox! Button 03 Button! Button2, Button’ ListView o1 ListView! EnrorProvider o1 ErrorProvider! TOTAL 18 [Desarrollo de aplicaciones con Visual C# 4, Modificar las propiedades de los controles: a a vuiont [am [RRS wee (ee [ee voros [gem [SS ee Finalmente, el formulario debe tener el aspecto siguiente: CONTROL DE REGISTRO DE EVALUACIONES cancerar | {_ necrstaan Lum a2 68 @ Fernanda Torres L. “ou 7 Manuel Torres Re. me uw Luz Lazaro M. 33 20 16 PROMEDIO v 2 v aun Evaluaciones Luz Lazaro M. Eval. 1 Eval. 2 Eval. 3 Eval. 4 15 2 16 ‘ConoxcroH ‘apR08200 DesapRosano ‘apr0n400 Capitulo 4: Estructuras de 5. El cédigo completo de la aplicacién es: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System. Lings using System.Text; using System. Threading. Tasks; using System.Windows. Forms; namespace pjCasoa3 { public partial class frmEvaluacion : Form { public frmevaluacion() { } InitializeComponent(); private void btnRegistrar_Click(object sender, EventArgs e) { //Capturando los valores string alunno = txtAlumno.Text; int e1 = int.Parse(txt€1.Text); int e2 = int.Parse(txte2.Text); int €3 = int.Parse(txte3.Text); int e4 = int.Parse(txte4. Text); //Oeterminar 1a menor nota int menor; if (e1 < €2) menor = e1; else menor = €25 if (e3cmenor) menor = e3; if (e3 private void txt€1_Validated(object sender, EventArgs e) { if (txtE1.Text.Trim() == "") { epError.SetError(txtE1, “Ingrese evaluacion 1 .. ‘txtE1.Focus() 5 , else < epError.Clear(); , + private void txt€2_validated(object sender, EventArgs e) { if (txte2.Text.Trim() == "") ¥ epError.Setérror(txté2, “Ingrese evaluacion 2 .. ‘txtE2.Focus() 5 + else { epError.Clear(); } + private void txt€3_Validated(object sender, EventArgs e) { if (txte3.Text.Trim() == "") £ eperror.Setérror(txte3, “Ingrese evaluacion 3 .. pitulo 4: Estructuras de decisié 159 txte3.Focus()5 } else { eptrror.Clear(); } } private void txte4 Validated(object sender, EventArgs e) { Af (tated, Text.Trim() ==" { eptrror.SetError(txt€4, "Ingrese evaluacion 4 ...!"); txtE4.Focus(); + else { epError.Clear(); } } private void btncancelar_Click(object sender, Eventargs e) { ‘txtAlunno.Clear(); txt€1.Clear(); txte2.Clear(); ‘txte3.Clear(); txted.Clear(); ‘txtAlunno.Focus()5 } private void btnSalir_Click(object sender, Eventargs e) { DialogResult r = MessageBox.Show("Esta seguro de salir?" “Promedio", MessageBoxButtons.YesNo, NessageBoxIcon.Exclanation); if (r == Dialogkesult.Yes) this.Close(); } Consideraciones al agregar el c6digo de la aplicacién: > Determinar la menor nota de cuatro registradas De las cuatro notas registradas, exclusivamente una de ellas es la menor. Para deter- minar esto, se deben realizar evaluaciones sucesivas entre los valores, ademas, contar con una variable adicional llamada menor, que sera la encargada de recibir el menor 160 | Desarrollo de aplicaciones con Visual valor de las notas. Se empieza comparando las dos primeras notas, si el es menor que €2 entonces la variable menor almacena el, caso contrario la almacena e2. El resul- tado de esta evaluacién se compara con la tercera evaluacién, de aqui se obtiene un nuevo valor para la variable menor solo si la e3 es inferior. Finalmente, se compara con la cuarta evaluacién, es decir, si e4 es inferior al valor contenido en la variable menor, esta actualizara su valor con dicha variable. Asiimanse las siguientes evaluaciones: E1=17E2=20E3=15E4=18 CODIGO DE COMPARACION PRUEBA DE VALOR: int menor; e if (e1 < e2) menor = e1; else menor = e2; | (17<20) (V) + menor = 17 if (e3 menor = 15 if (e4cmenor) menor = e4; (ageis) (F) Observar que la variable menor almacena el valor 15 el cual representa al menor valor registrado. Véase un segundo bloque de evaluaciones: El =20E2=10E3=18E4=16 CODIGO DE COMPARACION PRUEBA DE VALOR int menor; @ if (e1 < e2) menor = e1; else menor = e2; | (2010) (F) + menor = 10 if (e3 Mostrar un mensaje de error al dejar vacio un control de texto Cuando el usuario selecciona un cuadro de texto (TextBox) y no Ilena valor alguno, la aplicacién debe mostrarle un mensaje justamente en dicho control. Para esto, se debe agregar al formulario un control llamado Error Provider, el cual permite definir un mensaje de error. Para esto, se usara el evento Validated de los controles textuales. Para seleccionar el evento Validated, primero seleccione el control desde el formula- rio, En propiedades, cambie a la vista de eventos [F]_, seleccione Validated y haga doble clie para yenerar el e6digo. private void txtAlumno_Validated(object sender, EventArgs e) { /1Cédigo de validacion } Enel cddigo de validacién, verificar que la caja de texto no se encuentre vacia, median- te la condicién txtAlumno.Text.Trim()=="". La funcién Trim tiene la misién de quitar los espacios en blanco de la cadena ingresada. Una vez verificado que se encuentra vacio, se usa el método SetError del control Error Provider de la siguiente manera: epError.SetError(txtAlumno, “Ingrese nombre del alumno...1!!"); El primer parimetro del método SetError es definir a qué control se desea validar, el segundo define el mensaje que se muestra al usuario cuando el control de encuentre vacio. Si no se encuentra vacio el control, se aplica la sentencia epError.Clear(), que evita mostrar mensajes de error al usuario cuando este iiltimo registra un contenido en el control. 6, Finalmente, presione FS para probar la aplicacién Una feria de libros instalada en el centro de 1a ciudad requiere controlar las ventas de sus tres mejores libros para lo cual necesita implementar una aplicacién que dado el nombre de un articulo, cantidad comprada y su forma de pago (Contado, Tarjeta) permi- ta registrar la venta si se sabe que se paga al contado. Si se paga al contado, se le aplica un descuento del 5 % respecto al subtotal; si se paga con tarjeta, se le aplica un recargo del 10 % también respecto al subtotal, En cualquiera de los casos, se debe mostrar el descuento, recargo y el precio final. Se tiene en cuenta lo siguiente: + Validar el ingreso de los valores en los controles para mostrar mensajes personali- zados segiin el error, por ejemplo, en caso de los cuadros combinados, validar que el usuario haya seleccionado algiin elemento; mientras que en el cuadro de texto, valide que el valor registrado sea numérico, 162 Desarrollo de aplicaciones con Visual C + Los precios de los tres productos se muestran en la siguiente tabla: DESCRIPCION DEL PRODUCTO. PRECIO UNITARIO. Coleecidn Escolar $240.00 Coleccién PreUniversitaria $150.00 Coleccién Profesional $350.00 + Mostrar el registro de la venta en un control ListView. Solucién: 1. Crear un nuevo proyecto en Visual Studio 2015: * Seleccione Archivo > Nuevo > Proyecto. + Seleccione la plantilla Visual C#. + Seleccione Aplicacién de Windows Form. + Asigne el nombre pjCaso44, tal como se muestra en la siguiente imagen: rae GP Be] sqscsindendoteme Reo eo EF sncnanae wo) SI. Bil Arcsin dome mice Bil srccinna ase vcs Bil ronecnyeie venice onshcand onc sets oe eon (ie vento 5 Ngee de tac pt (7 Ger dress po asén Fedele Cee) ve 2. Cambiar el nombre del formulario: + Seleccione el formulario Form1.cs, desde el Explorador de soluciones. + Desde la propiedad Nombre de archivo, asigne el nombre frmVenta. Capitulo 4: Estructuras de decisié 3. Disefiar la GUI (Interfaz Grafica de Usuario) del caso: t0 eboProd [Tamaanaea I] CONTROL DE REGISTRO DE VENTAS Seleccione producto oneided > (Seleccione tarjeta) 7 Precio del producto Selecetone tipo de page IblPrecio eboTipo | (selecetone tipo) 5 ‘txtCantidad ‘ence [necisttan—) binCancelar binRegistrar am <——_{_ bu Estadisticas de los controles usados en el frmVenta: Clase [Ns elementos Controles Form ol Forml Label 08 Labell, Label2, Label3, Label4, Label5, Label6, Label7, Label TextBox ol ‘TextBox! GroupBox: ol GroupBox! Button 03 Button, Button?, Button3 ListView ol ListView! ‘ComboBox 02 ‘ComboBox!, ComboBox? TOTAL 17 4, Modificar las propiedades de los controles: Control [Propiedad Valor Fomt [fer Conta ergs de ventas Label [Text ‘CONTROL DE REGISTRO DE VENTAS Label [Text Fecha Actual Label | evame) Tech Labelt [Text Selection producto Labels [Text Cantided Label6 [Text Seleccione ipo de pago 163 Desarrollo de aplicaciones cor Label? Text Precio del producto Label® (Name) IbiPrecio Textbox! | (Name) ‘xtCantidad ComboBox! | (Name) eboProducto ComboBox? | (Name) eboTipo. GroupBoxt | Text Area de venta (Name) bniReyistrar Beek Text REGISTRAR 2 (Name) binCancelar Bufo Text CANCELAR (Name) binSalir Buttons Text SALIR Vie (Name) WwVenta ListView! | GridLines True Finalmente, el formulario debe tener el aspecto siguiente: CONTROL DE REGISTRO DE VENTAS Fecha Actus Seleccione producto (Seleccione producto) Seleccione tipe de page (Seleccione €3p0) (oxsisian 5. El c6digo completo de la aplicacién es: using using using using using using using using using using system; ‘System.Collections.Generics ‘System. ComponentModel ; System.Data; ‘System.Orawing; system. Ling; system. Text ‘System. Threading. Tasks; System.Windows Forms; Microsoft.VisualBasic; 2onepas Precio del producto $0.00 $50.00 $058.09 Capitulo 4: Estructuras di namespace pjCaso44 t public partial class frnventa : Form Hf double precio = 0; Public frmventa() { } InitializeComponent(); private void frnVenta_Load(object sender, EventArgs e) { AblFecha.Text = DateTime. Today Date. ToString( IblPrecio.Text = (8).ToString("C" % , private void choProducto_SelectedIndexChanged(object sender, EventArgs e) { string producto = cboProducto. Text: Af (producto. Equals("Coleccién Escolar")) precio = 250 if (producto. Equals("Coleccién PreUniversitaria")) precio = 150; Af (producto.Equals("Coleccién Profesional")) precio = 350: AblPrecio.Text = precio. Tostring("C"); + private void btnRegistrar_Click(object sender, EventArgs e| t /Nalidando if (cboProducto.SelectedIndex == -1) NessageBox.Show("Debe seleccionar un producto..!!!"); else if (Information IsNumeric(txtCantidad.Text)) NessageBox.Show("Debe ingresar una cantidad..!!!"); else if (cboTipo.SelectediIndex == -1 NessageBox.Show("Debe seleccionar un tipo..!!!") else { //Capturando datos string producto = cboProducto.Text; int cantidad = Convert .ToInt32(txtCantidad. Text). string tipo = cboTipo.Text; //Procesar calculos double subtotal = cantidad * precio: double descuento = @, recargo = if (tipo. Equals("Contado")) 165 166 } descuento = 0.05 * subtotal; else recargo = @.1 * subtotal; double precioFinal = subtotal - descuento + recargo; //Impresion de resultados ListViewrtem fila = new ListViewltem(producto); fila.SubItens Add (cantidad. ToString()); fila. SubItems.Add(precio.Tostring("C")); fila.Subrtens.Add(tipo); fila. SubItems.Add(descuento. Tostring( fila.SubItems .Add(recargo. ToString("C")) fila. SubItems.Add(precioF inal. ToString(" wWenta. Items .Add (fila) ; btnCancelar_Click(sender,e); private void btnCancelar_Click(object sender, EventArgs e) { } cboProducto. Text = “(Seleccione producto)"; cboTipo.Text = "(Seleccione tipo)"; txtCantidad.Clear(); IblPrecio.Text = (8).ToString("C"); cboProducto.Focus(); private void btnSalir_Click(object sender, EventArgs e) { DialogResult r = MessageBox.Show("Esta seguro de salir?", "venta", MessageBoxButtons.YesNo, MessageBoxIcon. Exclamation); DialogResult.Yes) this.Close(); Consideraciones al agregar el cédigo de la aplicacion: > Mantener el valor del precio de los productos El precio obtenido de la seleccién del producto debe mantenerse, ya que otros proce- sos lo utilizan. Por ejemplo, al seleccionar un producto, el valor del precio es asignado al control IbIPrecio; mientras que al presionar el boton Registrar, se necesi a el preci del producto para calcular el subtotal, Para lograr todo lo mencionado, se debe decla- rar la variable precio de forma global. de decision | IBM double precio = 0; > Mostrar la fecha actual y el precio inicial del producto ar el formulario, se debe mostrar la informacién de la fecha actual y el valor $0.00. Para ta fech , se usa la sentencia DateTime. Today. Date. ToString(“d”), Today representa la fecha y la hora al dia actual, mientras que Date obtiene solo la fecha y el parametro “d” muestra la fecha corta del sistema. EI precio del producto seleccionado inicialmente tiene el valor cero, con el formato $.0.00 porque ain no selecciona un producto, por tanto, se debe formatear al nimme- ro cero con la funcién ToString(“C”) donde el parémetro “C” representa el valor monetario. > Llenar el cuadro combinado de productos El control ComboBox cuenta con una propiedad llamada Items, la cual muestra una ventana de ingreso de datos donde se registran los valores que se muestran en el cua- dro combinado, tal como se muestra en la siguiente imagen: Editor de coleccién de cadenas, Escriba las cadenas en la coleccién (una por linea): Coleccién Escolar a Coleccién PreUniverstaria Coleccién Profesional La otra posibilidad de agregar valores al control ComboBox colocando cédigo fuente en el load del formulario, tal como sigue: cboProducto.Items.Add("Coleccién Escolar"); cboProducto.Items.Add("Coleccién PreUniversitaria"); cboProducto.Items.Add("Coleccién Profesional"); > Validar el ingreso de valores vacios y no numéricos Cuando el usuario registra algin valor dentro de los controles, se debe tener seguridad de que estos sean los correctos, ya que dicha informacién se almacena en variables que declaran un tipo de datos que debe ser respetado. Por tanto, se empezar validan- do los cuadros combinados de la siguiente manera: if (cboProducto.SelectedIndex == -1) MessageBox.Show("Debe seleccionar un producto..!!! La propiedad “SelectedIndex” determina la posicién del elemento seleccionado en el cuadro combinado, cuando no se selecciona ningin elemento del cuadro, el valor es menos uno. Ahora, para validar un valor no numérico, se procede de la siguiente manera: if (Information. IsNumeric (txtCantidad.Text)) MessageBox.Show("Debe ingresar una cantidad..1!!"); Se debe usar una funcién que determine si el valor ingresado es 0 no numérico, para Jo cual se usa la sentencia Information..sNumeric. Dicha funcién no es reconocida directamente por el compilador. Para esto, se necesita agregar una referencia al pro- yecto llamada “Microsoft. VisualBasic” y, ademas, colocar en las librerias del formu- lario “Using Microsoft. isualBasic”. La funcin IsNumeric determina si el niimero es numérico, pero en este caso se necesita saber si es NO numérico. Por lo tanto, se niega la expresién con el operador signo de admiracién final (!). Para agregar una referencia al proyecto, haga clic derecho en el proyecto > seleccione Agregar > Referencia ... , y active el check Microsoft VisualBasic. 6. Finalmente, presione FS para probar la aplicacién. Capitulo 4: Estructuras de decision | : if doblemente enlazado - control de registro de multas de transito La policia de transito del Perit es una institucién conocida como policia de transporte © policia de trafico, considerada la encargada de regular el orden y hacer cumplir las normas de trinsito o transitales establecidas para los distintos medios de transporte, ya sean trenes, buses 0 automéviles particulares. Se necesita implementar una aplicacion que permita controlar las multas aplicadas a los vehiculos que exceden el limite de velocidad permitido. Se tiene en cuenta; + Laaplicacién debe mostrar automaticamente la fecha y hora del registro de la multa, + La tasa de multas por velocidad asignada se muestra en la siguiente tabla: Velocidad (km/h) Multa Hasta 70 $0.00 Hasta 90 $120.00 Hasta 100) $240.00 Mayor a 100 $350.00 + Implementar el botén Eliminar que permite eliminar el registro de una multa regis- trada y mostrada en el control ListView; para eliminar, primero se debe seleccionar la multa desde el control ListView luego presionar el botén Eliminar. + Mostrar los datos del registro de las multas como el nimero de placa, fecha, hora, velocidad y multa asignada en un control ListView. Solucién: 1. Crear nuevo proyecto en Visual Studio 2015: * Seleccione Archivo > Nuevo > Proyecto * Seleccione la plantilla Visual C# * Seleccione Aplicacién de Windows Form 169 BME |_Desarrollo do aplicaciones con Visual C# + Asigne el nombre pjCaso45, tal como se muestra en la siguiente imagen: Soe Bj toate deem vice 9 Te omic ees met LE voccen er ve CRC. Bil socin dco vane BEF cna vente EE] rove conpaie Vict 2. Cambiar el nombre del formulario: * Seleccione el formulario Form1.cs desde el Explorador de soluciones. + Desde la propiedad Nombre de archivo, asigne el nombre frmMultas. 3. Disefiar la GUI (Interfaz Grifica de Usuario) del caso: [ 22 Conta de regio de mu de ronato (sys) CONTROL DE REGISTRO DE MULTAS DE TRANSITO. EOWA ACTUAL abiFecha Hot ACTUAL Hore wivcRo OE PLACA binRegisirar nanaod a aa ene ne _—__ copa) baBlininar_] (ens —] Capitulo 4: Estructuras de decis! Estadisticas de los controles usados en el frmMultas: Clase N.* elementos Controles Form ol Form Label o7 Labell, Label2, Label3, Labeld, LabelS, Label6, Label? TextBox a Textbox! Textbox? Button G Button! Button2, Button} ListView ol ListView! TOTAL i 4, Modificar las propiedades de los controles: ‘Control Propiedad ‘Valor Fon! (Name) fimMulas Text Control de registro de multas de transito Labelt Text CONTROL DE REGISTRO DE MULTAS DE TRANSITO Label? | Text FECHA ACTUAL Label3 (Name) IbIFecha. Labelé Text HORAACTUAL Labels| came) IbtHora Labels Text NUMERO DE PLACA Label? | Text INGRESE VELOCIDAD (km/h) TTextboxt | (Name) cxtPlaca Textbox? | (Name) txtVelocidad (Name) bntRegistrar Bationl. ‘Text REGISTRAR > | eName) ben timinar Batioa ‘Text ELIMINAR (ame) binSalir Buttons ‘Text SALIR| evr | Name) IvMaitas Tarviewl GridLines ‘True TIE |_ Desarrollo de aplicaciones con Visual C# Finalmente, el formulario debe tener el aspecto siguiente: 1 Control de regio de muta: de wansito CONTROL DE REGISTRO DE MULTAS DE TRANSITO FECHA ACTUAL 20/10/2015 HORA ACTUAL 10:25 p.m. NOMERO DE PLACA FR-8686 INGRESE VELOCIOND Cba/h) 140 FECHA VELOCIDAD KM/H MULTA ER-9798 20/10/2015 50.00 $0.00 ER-9898 20/10/2015 90.00 $120.00 FR-8686 20/10/2015 140.00 $350.00 5. El c6digo completo de la aplicacién es: using using using using using using using using using system; System.Collections.Generics ‘system. ComponentModel ; System.Data; system.Drawing; system. Ling; System. Text; ‘System. Threading. Tasks; System.Windows. Forms namespace pjCaso4s, { public partial class frmMultas : Form { ListViewItem item; public fraMultas() { } private void frmMultas_Load(object sender, EventArgs e) { InitializeComponent(); AblFecha.Text = DateTime. Today .Date.ToShortDateString(); LblHora.Text = DateTime.Now.ToShortTimeString() 5 Estructuras de decision | } private void btnRegistrar_Click(object sender, EventArgs e| { /[Capturando los datos string placa = txtPlaca. Text: double velocidad = double.Parse(txtVelocidad. Text) DateTime fecha = DateTime. Parse(1blFecha.Text) ; DateTime hora = DateTime.Parse(IblHora.Text); //Procesando double mult if (velocidad multa = 8; else if (velocidad > 70 8& velocidad <= 99) multa = 120; else if (velocidad > 90 && velocidad <= 109) multa = 240; else if (velocidad > 100) multa = 350; 72) //Inprimiendo los resultados ListViewrtem fila = new Listviewrtem(placa) fila. SubItems. Add(1b1Fecha. Text) fila. SubItems .Add(1blHora.. Text) fila. SubItems.Add(velocidad. ToString("@.00")); fila. SubItems.Add(multa.ToString("C")); Iviultas.Ttems Add (fila) ; } private void btnEliminar_Click(object sender, EventArgs e: { if (item { null) AvMultas. Items Remove(item); MessageBox.Show("Multa eliminada correctamente. . yelse { t ")3 MessageBox.Show("Debe seleccionar una multa de la lista"); } private void lvMultas MouseClick(object sender, MouseEventargs e) { + item = lvMultas.GetItemat(e.x, e.Y); 173 Consideraciones al agregar el cédigo de la aplicacién: > Mostrar la fecha y Ia hora al iniciar el formulario La fecha y la hora del registro deben mostrarse al iniciar el formulario, es asf que para mostrar la fecha se usa una sentencia de la clase DateTime “DateTime. Today.Date. ToShortDateStringQ);” la cual muestra la fecha actual con el formato corto, mientras que “DateTime.Now.ToShortTimeString();” muestra la hora actual con formato corto. IblFecha.text = DateTime. Today .Date.ToShortDateString()5 IblHora.text = DateTime.Now.ToShortTimeString(); > Eliminar una fila de un ListView El botén eliminar se encarga de eliminar un registro de multa, de forma que primero se debe seleccionar una fila y capturar la posicién del elemento seleccionado, para ograrlo se deben realizar los siguientes pasos: * Seleccione el control ListView + En la ventana de propiedades cambie a vista Eventos y seleccione MouseClick. WMultas System Windows Forms ListView mn la ss Marginchenges MouseCaptureChanged MouseCtick MouseDoubleClick + Alhacer doble clic en dicho evento, se muestra el siguiente codigo: private void 1vMultas_MouseClick(object sender, MouseEventArgs e) { //Codigo procesado cuando se presione clic en el ListView + Luego, se debe agregar el cédigo: item = lvMultas.GetltemAt(e.X, e.Y); donde eX representa la posicién en X del elemento seleccionado, eY representa la posicién en Y del elemento seleccionado. El método GetltemAt captura las posiciones obteni- das en e.X y e.Y. Como la variable Item guarda la posicién del elemento selecciona- do, es desde aqui que se debe eliminar el elemento, usando el botén Eliminar; para esto, se debe declarar dicha variable como global ListViewItem item;. Capitulo 4: Estructuras de decis! | 7s: + Finalmente, se aplica el método de eliminacién de fila con el siguiente cédigo: if (item != null) { AvMultas.Ttems.Remove( item) ; MessageBox.Show("Multa eliminada correctamente...!1!"); } else{ MessageBox.Show("Debe seleccionar una multa de la lista"); } Se verifica que la variable item contiene la informacién del elemento seleccionado. Si contiene la posicién, es decir, si es diferente de nulo (item != null); entonces, climina el elemento mediante el método Remove del control ListView. Si, en caso contrario, el item contiene un valor nulo (item = null), entonces, se muestra un men- saje que indica al usuario que “debe seleccionar una multa de la lista”. 6, Finalmente, presione FS para probar la aplicacién Caso desarrollado (J doblemente enlazado -registro de postulantes Una universidad particular realiza 02 eximenes de admision para sus diferentes carreras profesionales, por tal motivo, al drea de sistemas de la universidad se le ha encomendado la tarea de implementar una aplicacién que permita registrar el nombre de! postulante, carrera profesional a la cual postula y el puntaje que obtuvo en el examen de admision. A partir de este punto, se debe registrar la condicién del postulante con el texto “Ingresa” © “No ingresa” dependiendo del puntaje obtenido y la carrera profesional seleccionada; ademas, debe registrar una observacién en Ia cual muestre cudntos puntos le faltan al estudiante solo sino ingresa a la carrera solicitada; y muestra cero si alcanza el puntaje. Se tiene en cuenta: + La aplicacién debe mostrar automaticamente la hora del registro del postulante como si fuera un reloj digital. Carrera profesional | Puntaje minimo oe ingenieria de Sistemas | 100 + Los puntajes minimos para el ingreso [1° fesia 100 a la carrera profesional se presentan a | Insenleria de Som za continuacién: Ingenieria mecinica [140 Ingenieria Industrial | 160 + Implementar los botones registrar postulante, cancelar registro y salir mediante la herramienta ToolStrip. BIB [_ Desarrollo de aplicaciones con Visual C# + Mostrar los datos del registro de los postulantes como el nombre del postulante, ca rrera profesional seleccionada, puntaje obtenido, condicién y observacién obtenido a partir del puntaje en un control ListView. Solucién: 1. Crear un nuevo proyecto en Visual Studio 2015: * Seleccione Archivo > Nuevo > Proyecto. * Seleccione la plantilla Visual C#. + Seleccione Aplic: + Asigne el nombre pjCaso46, tal como se muestra en la siguiente imagen: ién de Windows Form. Fo reine EE rene Sn cen 2. Cambiar el nombre del formulario: * Seleccione el formulario Form1.cs desde el Explorador de soluciones. + Desde la propiedad Nombre de archivo, asigne el nombre frmPostulantes. 3. Disefiar la GUI (Interfaz Grafica de Usuario) del caso: Carreras =TsTs SS sPesulante }———— eee ras oreo L_ctoceren (sSalir txtPuntaje oa <—{ nPostulantes Estadisticas de los controles usados en el frmPostulantes: Capitulo 4: Estructuras de decisié Clase elementos Controtes Form ol Form Label a Labell, Label2, Label3, Labeld TextBox a Textboxl, Textbox? ComboBox o ‘ComboBox! ToolStrip ol ToolStrip! ListView o ListView! TOTAL 10 Modificar las propiedades de los controles: Control Propiedad Valor Finalmente, el formulario debe tener el aspecto siguiente: (GI FEGSTRAR POSTULANTE (gl CANCELAR REGSTRO | SAL CONTROL DE REGISTRO DE POSTULANTES. POSTULANTE MANUEL TORRES RE. ‘CARRERA PROFESIONAL PsTULANTE FEROA TORRES LA. Luz LazaRo HE. MAWWEL TORRES RE. ‘CARRERA PROFESIONAL Ingentersa Mecinica Ingenieria de Sistenas Ingentersa Industetal PUNTADE OBTENTOO 7 120.40 {CommrCTON mo IncResA NGRESA No INGRESA ‘OBSERVACTON Falta 4.02 Falta 0.00 Falta 39.60 BE [_Des2olo de aplicaciones con Visual C# 5. El c6digo completo de la aplicacién es: using System.Data; using System.Drawings using System. Ling; using System.Text; using System. Threading. Tasks; using System.Windows Forms; namespace pjCaso4s ‘ public partial class frmPostulantes : Form ‘ public frmPostulantes() ‘ InitializeComponent(); tHora.Enabled = true; + private void tsRegistrar_Click(object sender, EventArgs e) { /[Capturar datos del formulario string postulante = txtPostulante. Text; string carrera = cboCarrera.Text; double puntaje = Double.Parse(txtPuntaje.Text) ; //Determinar string condicion double puntos=0; if (carrera NINGRESA" ; ngenieria de Sistemas") { if (puntaje < 100) condicion = "NO INGRESA"; puntos = 100-puntaje; } Jelse if (carreras= "Ingenieria de Software") { if (puntaje < 128) { condicion = "NO INGRESA"; puntos = 120 - puntaje; r } else if (carrera == "Ingenieria Mecdnica") { if (puntaje < 140) { condicion = "NO INGRESA" ; puntos = 148 - puntaje; } } else if (carrera == “Ingenieria Industrial") { if (puntaje < 160) { condicion = "NO INGRESA"; puntos = 160 - puntaje; } //Mostrando resultados ListViewItem fila = new ListViewItem(postulante) ; fila.SubItems.Add(carrera) ; fila. SubItems.Add(puntaje. ToString("@.08")); fila-SubItems.Add(condicion); fila.SubItems.Add("Falta "+puntos.ToString("@.00")); AvPostulantes. Items. Add (fila) ; //Lampiando los controles tsCancelar_Click(sender, e); private void tHora Tick(object sender, EventArgs e) { this.Text = "Control de registro de postulantes - this.Text += DateTime.Now.ToString("hh:mm:ss"); + private void tsCancelar_Click(object sender, EventArgs e) { txtPostulante.Clear(); cboCarrera.Selectedindex ‘txtPuntaje.Clear(); txtPostulante.Focus(); + private void tsSalir_Click(object sender, EventArgs e) { DialogResult r = MessageBox.Show("Esta seguro de salir?", “Postulantes", MessageBoxButtons..YesNo, MessageBoxIcon.£xclamation) ; if (p == DialogResult.Yes) this.Close(); 180 [be > Mostrar la hora activa en el titulo del formulario La idea principal es hacer que en la barra de titulo del formulario aparezca un texto y Ia hora actual como si fuera un reloj digital. Para esto, se deben realizar los siguientes pasos: + En el cuadro de herramientas, busque Timer. + Arrastre un control timer al formulario, en la parte inferior del formulario, aparece el nombre Timer1. + Seleccione desde esta barra el control Timer! y cambie de nombre en las propieda- des por tHora. + Al hacer doble clic sobre el control tHora, aparece el siguiente codigo: private void tHora_Tick(object sender, EventArgs e) //C6digo a implementar + Coloque el siguiente cédigo dentro del metodo Tick del timer: } this.Text = "Control de registro de postulantes - "; this.Text += DateTime.Now.ToString( hh:mm:ss"); + La primera sentencia define el primer texto a mostrar en el titulo de! formulario, el segundo es la hora digital que acompaiia al texto del titulo. Para esto, se debe con- catenar el texto con el digital del tiempo, por tanto, se usa el operador += como si fuera un acumulador. Luego, para mostrar la hora actual, se usa DateTime.Now y se adicionan los parimetros de impresién para mostrar estrictamente la hora, minuto y segundo de la hora actual, + Y finalmente, para que el reloj se muestre digitalizado, coloque el siguiente cédigo “tHora.Enabled=true;” debajo de la llamada al “InitializeComponent”, ubicado en el método constructor de la clase frmPostulantes. > Agregar un barra ToolStrip al formulario La barra ToolStrip permite ejecutar varios procesos de la aplicacién desde un mismo control. Véase cémo implementar dicho control: * Seleccione el control ToolStrip del cuadro de herramientas. + Alagregar un control al formulario, automaticamente este se posiciona en la parte superior del formulario y tiene el siguiente aspecto: Capitulo 4: Estructuras de d + Se necesita agregar tres botones, eso se realiza haciendo clic sobre el mismo botén que se presenta en el ToolStrip + Desde la ventana de propiedades, seleccione Text y agregue un texto, como aiin no se muestra dicho texto, modifique la propiedad Display Style y asigne ImageAndText, finalmente también asigne un nombre (Name), por ejemplo tsRegistrar, tsCancelar y tsSalir. + Para colocar el cédigo dentro de dichos botones, haga doble clic sobre cada uno, como si se tratase de un Button. 6. Finalmente, presione FS para probar la aplicacién. etre OO 7) : switch - control de registro de Hamadas Uncall center ubicado en el centro de la ciudad de Lima registra diariamente las llamadas que realizan los terminalistas a los clientes. Para esto, se necesita una aplicacién que per- mita controlar el registro de llamadas haciendo que ingrese el nimero de teléfono al cual se realizado la llamada, el tipo de llamada y la cantidad total de minutos utilizados por el terminalista. La aplicacién debe mostrar un reporte de importe, descuento y neto a pagar por cada registro de llamada, Se tiene en cuenta lo siguiente: + La aplicacién debe solicitar el registro del ntimero teléfono con un maximo de 15 caracteres, asi mismo debe bloquear el ingreso de texto tanto en el néimero de telé- fono como en la cantidad de minutos. + La asignacién de tarifa por minuto y descuentos se realizan mediante la siguiente tabla: Tipo dellamada | Tarifa por minuto Descuento Fijo nacional $0.25 5.0% Fijo internacional $1.75 7.0% Movil nacional $1.25 9.0% Movil intemacional | $2.50 12.0 ToolStrip oO ToolStrip! ListView a1 ListView! TOTAL 10 + Se deben implementar los botones registrar llamada, cancelar registro y salir me- diante la herramienta ToolStrip y ubicarlo en la parte inferior de formulario. + Se deben mostrar los datos del registro de llamadas como el nimero de teléfono, tipo de llamada, minutos, importe, descuento y neto a pagar en un control ListView. BE |_Desarollo de aplicaciones con Visual C# Solucién: 1. Crear un nuevo proyecto en Visual Studio 2015: + Seleccione Archivo > Nuevo > Proyecto. + Seleccione la plantilla Visual C#. + Seleccion Aplicacién de Windows Form, + Asigne el nombre pjCaso47, tal como se muestra en la siguiente imagen: — ae "Tm Ci ee —s “ Bi oricconsecomne mee Spl anne as e a vue = ‘Nomtee ee = Neots * cman Biectenaatcaeioe Cee Tico) 2. Cambiar el nombre del formulario: + Seleccione el formulario Form1.es desde el Explorador de soluciones. + Desde la propiedad Nombre de archivo, asigne el nombre frmLlamadas. 3. Diseftar la GUI (Interfaz Grifica de Usuario) del caso: Woe apan toa wiser > CONTROL DE REGISTRO DE LLAMADAS © Figo nacional © Fijo Internacional © Movil Nactonal_ © Movil Internacional fNacional rbfinternacional txtTelefono txtMinutos. mNacional internacional WLlamadas Capitulo 4: Estructura de decision | Estadisticas de los controles usados en el frmLlamadas: Clase [Ns elementos Controles Form ol Forml Label 0 Labell, Label2, Label3 TextBox 2 Textbox1, Textbox2 GroupBox ol GroupBoxt RadioButton’ 04 RadioButton1, RadioButton?2, RadioButton3, RadioButtond ToolStrip OL ToolStip! ListView ol ListView! TOTAL 1B 4, Modificar las propiedades de los controles: Control Propiedad ‘Valor vem (Name) frmLlamadas om Text Control de registro de llamadas Labell Text CONTROL DE REGISTRO DE LLAMADAS Label2 Text NUMERO DE TELEFONO Label3 Text CANTIDAD DE MINUTOS GroupBox! | Text TIPO DE LLAMADA ont | ¢Name) rbfNacional RadioButton! | Taxy Fijo Nacional 2 | (Name) rbflnternacional RadioButton? | Text Fijo Internacional (Name) rbmNacional RadioButon3 | exp Movil Nacional i (Name) rbminternacional cee eet Movil Internacional : (Name) txtTelefono Textbox! | MaxLenght 15 Textbox2 | (Name) txtMinutos (Name) ToolStrip! ToolStrip Dock Bottom , (Name) WwLlamadas ListView! | GridLines True 184, Desarrollo de aplicaciones con Visual C# Finalmente, el formulario debe tener el aspecto siguiente: Conte eet de lade MuMERO OE TELEFONO CANTIDAD DE MINUTOS CONTROL DE REGISTRO DE LLAMADAS ‘T1PO DE LANDA @ Fijo Nacional © Fijo Internacional © Movil Nacional © Movil Internacional. san Figo Internaci » $2.00 94 on224s6s evil Internacional 17 $22.50 ss.0 opees2ass Fo Internacional » $52.50 5.68 GMREGISTRAR LLANADA {dl CANCELAR REGISTRO idl SALIR 5, El cédigo completo de la aplicacién es: using using using using using using using using using system; ‘System.Collections.Generic; ‘System. ComponentModel; System.Data; ‘System.Drawing; system. Ling; System. Text; ‘System. Threading. Tasks; System.Windows. Forms; namespace pjCaso47 { public partial class frmLlamadas : Form { public frmLlamadas() { } InitializeComponent(); NETO A Pace 1209.06 S740 8.83 private void tsRegistrar_Click(object sender, EventArgs e) { //Capturando los datos string telefono = txtNumero.Text; int minutos = int.Parse(txtMinutos. Text); //Oeterminando el tipo de llamada string tipo=""5 if (rbfNacional.Checked == true) tipo = “Fijo Nacional"; if (rbfInternacional .checked == true) tipo = "Fijo Internacional"; if (rbmNacional.Checked == true) tipo = "Movil Nacional”; if (romInternacional .checked == true) tipo = "Movil Internacional”; /\Nalidando si NO selecciona un tipo if (tipo { MessageBox.Show("Debe seleccionar el tipo de llamada. .!!", Llamadas"); return; //Expulsa del metodo //Asignando una tarifa segun el tipo de llamada double tarifa-0; switch (tipo) { case "Fijo Nacional": tarifa = 0.253 break; case “Fijo Internacional": tarifa = 1.75; break; case "Movil Nacional": tarifa = 1.25; break; case "Movil Internacional": tarifa = 2.50; break; } //Realizando los calculos de los importes double inporte = tarifa * minutos //Determinando el descuento segun los minutos double descuento; switch (tipo) { case "Fijo Nacional” descuento = 5.0/100 * importe; break; case "Fijo Internaciona! descuento = 7.0 / 100 * importe; break; case "Movil Nacional”: descuento = 9.0 / 100 * importe; break; case "Movil Internacional”: descuento = 12.0 / 100 * importe; break; default: descuento = 0; break; } //Calculando el neto double neto = importe - descuento; //Realizando impresiones ListViewItem fila = new ListViewIten(telefono) ; fila.SubItems.Add(tipo); fila-SubItems..Add (minutos .ToString()) fila.SubTtens.Add(importe.ToString("C")); fila.SubItems..Add (descuento. ToString("C")) 185 fila. Subrtems .Add(neto. ToString("C*)); IWLlamadas. Items .add( fila); //Limpiando los controles tsCancelar_Click(sender,e); + private void tsCancelar_Click(object sender, EventArgs e) { ‘txtNumero.Clear(); ‘txtMinutos.Clear(); rbfNacional.checked = true; ‘txtNumero.Focus(); + private void tsSalir_Click(object sender, EventArgs e) { DialogResult r = MessageBox.Show("Esta seguro de salir?", “Llamadas MessageBoxButtons.YesNo, MessageBoxIcon. Exclamation); if (r == DialogResult.Yes) this.Close(); + private void txtMinutos_KeyPress(object sender, KeyPressEventArgs e) if (I(char. IsNunber(e.KeyChar)) && (e.KeyChar != (char)keys.Back)) { NessageBox.Show("Debe ingresar solo numeros”,"*Llamadas"); e.Handled = true; return; } + private void txtNumero_KeyPress(object sender, KeyPressEventargs e) { if (1(char. IsNumber(e.KeyChar)) && (e.KeyChar != (char)Keys.Back)) { MessageBox.Show("Debe ingresar solo numeros", “Llamadas"); e.Handled = true; return; + + ructuras de decision | IB Consideraciones al agregar el cédigo de la aplicacién: > Determinar si un control RadioButton se encuentra seleccionado Se debe tener en cuenta que los controles RadioButton trabajan siempre en grupo, por eso, siempre que se agreguen dichos controles al formulario, debe hacerse con un contenedor como el Groupbox. Si es asf, se debe determinar qué botén ha sido seleccionado, para lograrlo se_usa la propiedad “Checked”, la cual evalia si el con- trol se encuentra marcado por el usuario y gracias a la sentencia If puede evaluarse. Considérese que true determina el activo y false el inactivo, tal como se muestra en el siguiente eédigo: if (rbfNacional.Checked == true) tipo = "Fijo Nacional"; La condicién evaliia si el control rbfNacional se encuentra activo, si es asi, asigna a la variable tipo el valor “Fijo Nacional”. > Bloquear el ingreso de caracteres no numéricos en el cuadro de texto Los controles de texto permiten agregar informacién de todo tipo, pero se pueden controlar mediante una serie de sentencias y asi bloquear el texto ingresado y solo permitir el acceso de ntameros como se muestra en el siguiente cédig. if (1(char.TsNumber(e.KeyChar)) && (e.KeyChar != (char)keys.Back)) { MessageBox.Show("Debe ingresar solo numeros","Llamadas"); e.Handled = true; return; Esto se encarga de bloquear todo tipo de caracteres de tipo cadena, pero se debe agregar dicho cédigo en un evento llamado “KeyPress” (presién de tecla) del control cuadro de texto para visualizar que dicho evento realice los siguientes pasos + Seleccionar el control cuadro de texto + En la ventana de propiedades, seleccione Eventos. + Busque y seleccione el evento KeyPress y haga doble clic para visualizar su e6- digo, tal como se muestra en el siguiente cédigo: private void txtNumero KeyPress(object sender, KeyPressEventArgs e) { //asignar codigo para el evento keypress 6, Finalmente, presione FS para probar la aplicacién. switch - control de registro de estacionamiento Una empresa de estacionamiento necesita una aplicacién que permita controlar el regis- tro de los vehiculos que diariamente ingresan al estacionamiento. Los datos que necesita registrar el personal de control son el nimero de placa del auto, la hora de inicio y la hora de salida del vehrculo. mam | Desa Se tiene en cuenta lo siguiente: + La tarifa por hora que aplica la empresa se da segiin el dia de la semana, En la si- guiente tabla se presentan las tasas que rigen: Dias Costo por hora Domingo $2.00 Lunes a jueves $4.00 Viernes y sibado $7.00 + Al iniciar la aplicacién, se debe mostrar la fecha actual, asi como el costo por hora segiin el dra, + La cantidad de horas que el vehiculo se encuentra en el estacionamiento resulta de la diferencia entre la hora de salida y la de inicio. + Elimporte resulta del producto de la cantidad de hora de estacionamiento y el costo por dia, + El bot6n registrar muestra el niimero de placa, fecha, hora de inicio, hora final, can- tidad de horas de estacionamiento, la tarifa segin el criterio anterior y el importe a pagar por el cliente en un control ListView. Soluci6n: 1. Crear un nuevo proyecto en Visual Studio 2015: + Seleccione Archivo > Nuevo > Proyecto. + Seleccione la plantilla Visual C#. * Seleccione Aplicacién de Windows Form. Capitulo 4: Estructuras de decisié + Asigne el nombre pjCaso48, tal como se muestra en la siguiente imagen: SE) sein more veton BG etre ce SEE sone de ces sonable one (ecoat ese le vale Souci Nene: ts 2. Cambiar el nombre del formulario: + Seleccione el formulario Form1.cs desde el Explorador de soluciones. + Desde la propiedad Nombre de archivo, asigne el nombre frmEstacionamiento, 3. Diseiiar la GUI (Interfaz Griifica de Usuario) del caso: See mie txtPlaca CONTROL DE REGISTRO DE ESTACIONAMIENTO TKR costo oeLoms FEOHAY HORA ‘xtHforalnicio } ie FEO cha HORA INICIO. _:__ _ onasatp, RANGOON OUST ttorafin_} ——{irexisro binSalir 189

También podría gustarte