Sei sulla pagina 1di 50

IMPLEMENTACIN DE

ESTRUCTURAS DE DATOS LINEALES


CON VISUAL C#

Hermes Mosquera Angulo

Noviembre de 2016

Licencia Creative Commons


Contenido

IMPLEMENTACIN DE ESTRUCTURAS DE DATOS LINEALES ............................................................... 3


La Colecciones ..................................................................................................................................... 3
La Clase System.Collections Stack (Pilas) ............................................................................................ 4
Aplicacin de La coleccin Stack (Pila) ............................................................................................ 5
Implementacin de la Pila a travs de la aplicacin de consola. .................................................... 5
Implementacin de la Pila a travs de la Interfaz Grfica de Usuario (GUI) con Windows Forms. 7
La Clase System.Collections Queue (Colas) ....................................................................................... 12
Aplicacin de las estructuras de datos tipo colas ......................................................................... 12
Operaciones que se pueden realizar con las Colecciones Queue (Colas) ..................................... 13
Aplicacin de La coleccin Queue (Cola) ...................................................................................... 14
Implementacin de la Cola a travs de la Interfaz Grfica de Usuario (GUI) con Windows Forms.
....................................................................................................................................................... 17
La Clase System.collections List<T> (Lista) ....................................................................................... 21
La Clase genrica List <T> .............................................................................................................. 21
Aplicacin de las listas genricas List<T> en modo consola.......................................................... 21
Aadir objetos a la lista ................................................................................................................. 22
Acceder a los objetos de la lista .................................................................................................... 22
Insercin de animales a la lista ..................................................................................................... 24
Mtodos para Buscar elementos en una lista............................................................................... 25
Obtener informacin de una lista ................................................................................................. 26
Mtodo para remover elementos de la lista ................................................................................ 26
Mtodo para vaciar la lista ............................................................................................................ 27
Implementacin de una lista genrica List<T> utilizado clases construidas, con Interfaz Grfica
de Usuario como aplicacin Windows Forms. .............................................................................. 27
Implementacin de la lista genrica List <T> para la administracin de productos con Windows
Forms............................................................................................................................................. 33
Planteamiento del problema ........................................................................................................ 33
Alternativa de solucin ................................................................................................................. 33
Cdigo fuente de la clase Program.cs. .......................................................................................... 34
Fuentes Bibliogrficas ....................................................................................................................... 50

2
IMPLEMENTACIN DE ESTRUCTURAS DE DATOS
LINEALES

La Colecciones
Hablar de las estructuras de datos lineales, necesariamente tendremos
que abordar la temtica de las colecciones, entendiendo que las
colecciones de clases de C# son un conjunto de clases diseadas
especficamente para agrupar objetos ya sea de un solo tipo o clases de
objetos de diferentes tipos y llevar a cabo tareas con ellos relacionadas
con el tratamiento de datos.
Si halamos de colecciones tendramos que referirnos al Namespace
System.Collections.Generic, en este espacio de nombre estn contenidas
todas las clases Generic, teniendo en cuenta que hay dos tipos principales
de colecciones: las colecciones genricas y las colecciones no genricas.
Las colecciones genricas normalmente ofrecen un mejor rendimiento.
Las colecciones genricas aceptan un parmetro de tipo cuando se
construyen y no requieren conversiones con el tipo Object al agregar o
quitar elementos de la coleccin. Las colecciones no genricas almacenan
elementos como Object, requieren conversin y la mayora no son
compatibles con el desarrollo de aplicaciones de la Tienda Windows.
El espacio de nombres System.Collections contiene interfaces y clases que
definen varias colecciones de objetos, como listas, colas, matrices de bits,
tablas hash y diccionarios.
En la tabla 1. Se identifican los diferentes tipos de colecciones con su
correspondiente equivalencia con respecto a las estructuras lineales.
Tabla 1. Tipos de colecciones y su equivalente terico

Colecciones Estructuras de datos


Queue Colas
Stack Pilas
List, ArrayList Lista
Dictionary Diccionarios
Hashtable Tablas de Hash

Las colecciones listT los ArrayList, las Stack, las Queue y Hashtable,
tienen propiedades muy similares a los arrays de C#. Una ventaja
fundamental de estas clases sobre los arrays es que puedan crecer y

3
reducir el nmero de objetos almacenados, es decir adicionarse o
eliminarse objetos de forma dinmica.

La Clase System.Collections Stack (Pilas)


La clase Stack, representa una coleccin de objetos no genrica con
comportamiento de una Pila. A nivel lgico las pilas son definidas como
un tipo de estructuras de datos lineal condicionadas, compuestas de
elementos del mismo tipo donde las inserciones y eliminaciones se
realizan por un mismo extremo, el extremo superior de la pila, que
tambin se le conoce como Cima o Tope.
Se considera como un grupo ordenado de elementos clasificados de
acuerdo al tiempo en que han sido insertados o almacenados en la pila,
el elemento que se elimina de la cabeza es siempre el que lleve menos
tiempo en ella. En resumen, una pila es una lista en la cual los elementos
solo pueden ser insertados y eliminados por un nico extremo. De tal
manera que el ltimo elemento en entrar es el primero en salir, las pilas
son conocidas como listas LIFO por el acrnimo en ingls (Last Input, First
Out). Mientras que, a nivel fsico, las pilas pueden ser representadas
grficamente con numerosas analogas en la vida real, por ejemplo: pila
de platos, una pila de libros, etc. Como se muestra en la figura 1.

Fuente: https://goo.gl/cpK0CZ

Figura 1. Representacin grfica de una coleccin Stack (Pila)

Se identifican a continuacin en la tabla 2, algunos mtodos y propiedades


ms comunes que se pueden implementar con las pilas.

4
Tabla 2. Mtodos o propiedades comunes de la clase Stack (Pilas)

Aplicacin de La coleccin Stack (Pila)

Se requiere implementar un programa codificado en C# , haciendo uso


de modo consola, que muestre la frase predefinida compuesta por
palabras Escuchar es virtud de sabios como aplicabilidad a las
estructuras de datos tipo pila, el programa mostrar las palabras
ingresadas a travs el mtodo Push() y al invocar el mtodo Pop(), se
ir eliminando cada palabra de acuerdo al orden inverso de ingreso,
cumpliendo as con el comportamiento de la Pila; tambin mostrar la
ltima palabra ingresada en la pila a travs del mtodo Peek().
Como la ltima palabra ingresada fue sabios, esta ser la primera palabra
en eliminarse al invocar el mtodo Pop().

Implementacin de la Pila a travs de la aplicacin de consola.

Lo primero es crear un nuevo proyecto en Visual C# en modo consola,


que tendr por nombre MyPila y se guarda en la ruta que prefiera y le da
aceptar. Luego edita el siguiente cdigo que se muestra en la figura 2 y
lo ejecuta para ver la salida en pantalla.

5
6
Figura 2. Cdigo fuente como aplicacin a la coleccin Stack (Pila)

Una vez haya editado el cdigo, procede a compilarlo, as puede ver la


salida en pantalla tal como se muestra en la figura 3, como aplicacin a
las estructuras tipo pila como coleccin Stack.

Figura 3. Salida en pantalla de la aplicacin de la Stack (Pila)

Al igual que en ejemplo anterior de la cola, para la pila tambin es


posible implementar el programa con una interfaz grfica de usuario,
con Windows Forms.

Implementacin de la Pila a travs de la Interfaz Grfica de


Usuario (GUI) con Windows Forms.

Se crea un nuevo proyecto, pero esta vez como Aplicacin de Windows


Forms y se le da por nombre PilaPalabra, y elige la ruta donde desee

7
guardarlo, proceda a crear la interfaz del formulario para que tenga una
apariencia similar a la figura 4.

Figura 4. Interfaz de una Stack (pila) como aplicacin de Windows forms.

En este caso a diferencia de la implementacin de consola del programa


anterior, se tendr una caja de texto y su respectivo botn para agregar
nuevas palabras a la pila, ya que tambin se tiene un botn Listar los
elementos de la Pila, cuya funcin es de listar las palabras previamente
inicializadas que conforman la frase:
El hombre sabio brilla por su silencio, estas palabras se muestran
en el cuadro de lista de la columna del lado derecho. La interfaz tambin
se cuanta con el botn Elimina ltima palabra, como su nombre lo indica
es utilizado para remover el ltimo elemento ingresado a la pila, en este
caso sera la palabra, silencio, por ser la primera vez que se invoca el
mtodo Pop(), tambin muestra el ltimo elemento ingresado a la pila.

El cdigo completo del formulario se muestra en la figura 5.

8
9
Figura 5. Cdigo fuente de la aplicacin de la Stack (pila) implementado
con Windows forms.

Anlisis del cdigo


Al analizar la implementacin de la pila, es importante tener en cuenta
que el nombre del formulario se dej por defecto el nombre que trae al
crear el nuevo proyecto, que en este caso es form1.
En la lnea 10 se crea el objeto pila con el nombre palabra.
Entre las lneas 16 y 25 que corresponde al evento Load que carga el
formulario se asignan las palabras que se mostrarn una vez se inicie la
ejecucin del programa.
Posteriormente entre las lneas 28 y 35 se crea un mtodo para imprimir
o mostrar en pantalla las palabras que se ingresaron en la pila, se hace
el recorrido de la pila a travs del ciclo foreach().
En la lnea 37 a la 40 se incluye el cdigo del evento del botn listar
palabras, para lo cual lo que hace este evento es invocar al mtodo de
imprimir la pila.
Entre las lneas 42 y 53 se crea el evento del botn eliminar palabra, en
este caso se invoca al mtodo Pop() a travs de la pila llamada palabra,
palabra.pop();

10
Esta instruccin va dentro de una excepcin, para que indique cuando la
pila est vaca. Y finaliza invocando al mtodo imprimirPila().
Entre las lneas 55 y 66 se presenta el evento del botn que muestra la
ltima palabra, al igual que el evento anterior tambin se incluye una
excepcin que indica si la pila est vaca.
Finalmente, de la lnea 68 a 73, se muestra el cdigo del evento Agregar
nueva palabra, de tal manera que en la lnea 70 se adiciona la palabra
que est en la caja de texto a la pila, y en la lnea 71 se invoca el mtodo
imprimir la pila para mostrar en cuadro de lista, la pila completa con la
nueva palabra ingresada. Y se limpia la caja de texto.

11
La Clase System.Collections Queue (Colas)

La clase Queue, representa una coleccin de objetos no genrica con


comportamiento de una COLA. Una cola se puede definir como una
estructura de datos lineal tipo lista condicionada, en la que las
eliminaciones se realizan al principio de la lista, es decir, al frente, y las
inserciones se realizan en el extremo opuesto de la lista, es decir, al
final. En las colas el elemento que entr de primero sale tambin de
primero; por ello se conocen como listas FIFO, en ingls (first-in, first-
out), primero en entrar, primero en salir.

En la Figura 6, se muestra la representacin grfica de una cola como la


coleccin Queue.

Fuente: https://goo.gl/cfdHKo

Figura 6. Representacin grfica de una coleccin Queue (Cola)

Aplicacin de las estructuras de datos tipo colas

En la vida real se tiene ejemplos numerosos de colas: la cola para tomar


el autobs, cola para ingresar al cine, caravana de coches en una calle,
etc. En todas ellas el primer elemento (pasajero, coche, etc.) que llega
es el primero que sale.

Las colas se usan para almacenar datos que necesitan ser procesados
segn el orden de llegada. Una aplicabilidad de las colas puede realizarse
en un sistema de informtico manejado a travs de una red de
computadoras donde se comparte una sola impresora para todos los

12
equipos conectados a la red; de tal manera que se imprimirn los
documentos en el orden en que se hace la peticin de impresin de cada
usuario. Formando as una cola de impresin.

Una muy buena implementacin de las colas como solucin a una


situacin del entorno podra realizarse un programa para manejar un
planificador de citas en un consultorio mdico, de tal manera que cada
solicitud de una cita se va almacenando en la cola, los datos requeridos
podran ser: el nombre del paciente y la fecha y hora de la cita, la atencin
por parte del mdico ser en el mismo orden de fecha y hora en que se
registr la cita.

En general, en una cola es una situacin que vivimos a diario, el primero


que llega ser atendido de primero, pasando a continuacin el segundo
de la cola al frente, y cada que llega un nuevo usuario este se colocar al
final de la cola. De aqu que el extremo por donde se insertan los
elementos se llamar final y por donde se retiran se llama frente,
como se vive a diario con los vehculos en las calles, tal como se muestra
en la figura 7.

Fuente: https://goo.gl/rXW9bm

Figura 7. Interaccin grfica de una cola

En colecciones, las colas se representan con la clase Queue. al igual que


el List<T> estas heredan del System.Object.

Operaciones que se pueden realizar con las Colecciones Queue


(Colas)

En la tabla 3, se identifican algunos mtodos y propiedades ms comunes


que se pueden implementar con las colas.

13
Tabla 3. Mtodos o propiedades comunes de la clase Queue (Colas)

Aplicacin de La coleccin Queue (Cola)

Se requiere implementar un programa codificado en C#, haciendo uso de


modo consola, que muestre una frase compuesta por palabras como
aplicabilidad a las estructuras de datos tipo cola, el programa mostrar
las palabras ingresadas y al invocar el mtodo Dequeue(), se ir
eliminando cada palabra de acuerdo al orden de ingreso, tambin
mostrar la primera palabra en la cola a travs del mtodo Peek().
Implementacin de la Cola a travs de la aplicacin de consola.
Lo primero es crear un nuevo proyecto en Visual C# en modo consola,
que tendr por nombre ColaPalabras y se guarda en la ruta que prefiera
y le da aceptar. Edita el siguiente cdigo de la figura 9, lo ejecuta para
ver la salida en pantalla.

14
Figura 8 vista de la creacin de un nuevo proyecto en modo consola

15
Figura 9. Cdigo fuente de la implementacin de una coleccin Queue
(cola)
Una vez haya editado el cdigo, procede a compilarlo, as puede ver en la
figura 10 la salida en pantalla como aplicacin a las estructuras tipo cola
como coleccin Queue.

16
Figura 10: Salida en pantalla de la aplicacin de la coleccin Queue (cola)

Anlisis del cdigo


En el ejercicio anterior es importante resaltar tres mtodos que cumplen
una labor especfica para potenciar el comportamiento de la cola.
El mtodo Queue utilizado para inicializar la cola tal como se evidencia en
la lnea 11, que adems se hace la instanciacin a travs de palabra para
crear los objetos.
En las lneas 19 y 21 se dan las instrucciones para desplegar todas las
palabras de la cola, El futbol pasin del pueblo, cada palabra es un
objeto de la clase MyCola
En la lnea 24 se invoca el mtodo Dequeue(), su funcin es eliminar el
primer elemento ingresado, en este caso la palabra El.
En las lneas 27 y 28 se dan las instrucciones para desplegar las palabras
que quedan en la cola, tras la eliminacin de la primera palabra anterior,
en este caso solo mostrara en pantalla la frase: futbol pasin del
pueblo.
Lo mismo ocurre en las lneas 31 y 35, se decola y se muestran los
elementos de la cola respectivamente.
En la lnea 38 se invoca el mtodo Peek(); para que muestre el primer
elemento que hay en la cola.
Final mente en la lnea 48 se define un nuevo mtodo llamado
imprimirCola(), que a travs del ciclo foreach()recorre la cola para ir
mostrando todos sus elementos, en este caso todas las palabras que aun
queden en la cola.

Implementacin de la Cola a travs de la Interfaz Grfica de


Usuario (GUI) con Windows Forms.

Se crea un nuevo proyecto, pero esta vez como Aplicacin de Windows


Forms y se le da por nombre Cola y elige la ruta donde desee guardarlo
proceda a crear la interfaz del formulario para que tenga una apariencia
similar a la figura 11.

17
Figura 11. Interfaz grfica de la implementacin de la coleccin Queue.

En este caso a diferencia de la implementacin de consola del programa


anterior, se tendr una caja de texto y su respectivo botn para agregar
palabras a la cola, ya que tambin se tiene un botn Listar Cola, cuya
funcin es de listar las palabras previamente inicializadas que conforman
la frase. El Futbol pasin del pueblo, estas palabras se muestran en
el cuadro de lista de la columna del lado derecho. Tambin cuanta con el
botn Remueve Primer Elemento, como su nombre lo indica es utilizado
para remover el primer elemento ingresado, en este caso la primera
palabra, tambin muestra el primer elemento de la cola. En la figura 12,
se visualiza el cdigo de la coleccin Queue (Cola) implementada haciendo
uso de Windows forms.

18
19
Figura 12. Cdigo fuente de la interfaz grfica de la implementacin de una
coleccin Queue (cola)

20
La Clase System.collections List<T> (Lista)

La clase List es el equivalente genrico de la clase ArrayList.


Implementa la interfaz genrica IList mediante una matriz cuyo tamao
aumenta dinmicamente segn se requiera.
La Clase genrica List <T>
Es una de las clases ms utilizadas en lo que a colecciones genricas se
refiere en .NET. Esta lista representa una lista de objetos tipificada que
puede ser accedida por ndices, cuenta con mtodos y propiedades que
permiten entre otros, adicionar, remover, insertar, buscar, ordenar y
manipular la lista, he aqu los ms comunes.

En la tabla 4, se identifican algunos mtodos y propiedades ms comunes


que se pueden implementar con las colecciones genricas List <T>.

Tabla 4. Mtodos o propiedades comunes de la clase List <T>

Aplicacin de las listas genricas List<T> en modo consola.


En el siguiente apartado se explica paso a paso la sintaxis para crear una
coleccin de tipo listT para gestionar nombres de animales a travs de
una clase llamada ListaAnimales.
Lo primero es abrir su entorno de desarrollo visual C#, se procede a crear
un nuevo proyecto en modo consola, se le da el nombre para mi caso la
aplicacin se llamar ListaAnimales y elije la ruta donde la desee guardar.

21
Una vez creado el proyecto se crea la lista, dentro del mtodo static
void Main(), la instruccin es la siguiente.
ListT nombre = new ListT();
Donde List es la clase de la lista, <T> es el tipo de dato que se va
manejar, puede ser de cualquiera de los tipos de datos primitivos de C#
o puede ser un objeto de una clase. El nombre es el nombre que se le va
dar a la lista new utilizado para instanciar un objeto de la clase List. Con
esta sintaxis ahora podemos crear una listT denominada animales:
como se muestra en la figura 13.

Figura 13. Creacin de la Lista Animales


Una vez creada la lista es posible implementar una serie de mtodos
que pueden ser llamados a realizar tareas en la lista.

Aadir objetos a la lista


En este caso para agregar elementos a la lista de objetos se utiliza el
mtodo Add(). Tal como se evidencia en la figura 14.

Figura 14. Creacin de objetos de la clase Animales


Acceder a los objetos de la lista
A los elementos individuales en una lista se puede acceder mediante el
ndice del valor de la partida (teniendo en cuenta que el primer punto del
ndice es 0, el segundo ndice 1 y as sucesivamente). El valor del ndice

22
[3] se encuentra entre corchetes tras el nombre de la lista, hace
referencia al cuarto elemento de la lista, recordar que tiene el mismo
comportamiento de los arreglos, donde el primer elemento conserva el
subndice [0]. Por ejemplo, para acceder al segundo elemento del objeto
Animales:

Un elemento de la lista puede cambiar su valor de manera similar usando


el ndice combinado con el operador de asignacin. Por ejemplo, para
cambiar el nombre del animal de Colibr a Guacamaya sera:

Para verificar el cambio de nombre del animal solo basta con repetir la
instruccin

Lo que se mostrar en pantalla ser en primera instancia el nombre


Colibr y en la siguiente lnea el nombre Guacamaya.

Ahora, si se requiere obtener todos los elementos de una coleccin se


pueden acceder mediante el iterador foreach(), que se comporta como un
bucle. El cual tiene dos parmetros, una variable que se declara con el
nombre animal y el otro parmetro indica que la interaccin se lleva a
cabo en la lista Animales. Tal como se muestra en la figura 15

Figura 15. Ciclo foreach() para visualizar los animales de la lista.

Quedando el cdigo completo de la siguiente manera como se visualiza


en la figura 16.

23
Figura 16. Cdigo completo de la clase ListaAnimales
Al proceder a compilar y ejecutar el programa, se evidencia la salida en
pantalla segn la figura 17, de la lista de animales previamente
ingresados a travs del mtodo Add(), incluyendo el cambio del nombre
del animal de la posicin 3.

Figura 17. Salida en pantalla de la Clase ListaAnimales


Insercin de animales a la lista

En el apartado anterior se utiliz el mtodo Add() para aadir elementos


a una lista. El mtodo Add(), sin embargo, slo aade elementos al final
de una lista. Sin embargo, si se quisiera aadir o insertar un nuevo
elemento en una ubicacin especfica en una lista, se har uso del mtodo
Insert(). Insert() recibe dos argumentos, un entero que indica el ndice
de localizacin de la insercin y el valor o informacin que se incluir en
ese lugar. Por ejemplo, para insertar un nuevo animal en la posicin 2 de
la lista sera:
24
Mtodo para ordenar Listas

Si se requiere ordenar los elementos de una lista despus de haberlos


ingresado, o una vez se aaden nuevos elementos solo hay que invocar
al mtodo Sort(), ya que no hay manera de decirle a C# que los vaya
ordenando automticamente en la medida que se van ingresando.

En la figura 18 se puede evidenciar la salida en pantalla de los elementos


ordenados de la lista

Figura 18. Salida en pantalla de los elementos ordenados de la lista

Mtodos para Buscar elementos en una lista


La clase List <T> de C# dispone de algunos mtodos que pueden ser
implementados para recuperar u obtener elementos de la lista. El mtodo
Contains(), es utilizado para determinar si la lista contiene un objeto en
particular, cuando se pide a un objeto List devuelve true si el elemento
se encuentra en la lista, o devuelve false si no se encuentra. El mtodo
IndexOf() devuelve el valor de un ndice de un elemento de la lista. Por
ejemplo, el cdigo siguiente muestra el valor de salida de 3, que es el
ndice de la posicin de "Colibr" en la cadena:

25
En este caso de la figura 19, el programa devuelve la posicin 3 que
corresponde la posicin del animal Colibr en la lista.

Figura 19. Salida en pantalla de la posicin 3

Si el elemento a buscar no se encuentra en la lista devuelve -1.

Esta tcnica podra utilizarse para reemplazar un valor con otro. Por
ejemplo, sin conocer de antemano el valor del ndice de la posicin del
"Colibr" se puede cambiar a el animal "Guacamaya", en ese caso la
instruccin podra ser:

El mtodo LastIndexOf() devuelve el valor del ndice del ltimo


elemento de la lista para que coincida con el punto especificado. Esto es
particularmente til cuando la lista contiene elementos duplicados.

Obtener informacin de una lista


Hay dos miembros de la clase que son tiles para obtener informacin
acerca de una lista de C # o coleccin de objetos ArrayList. La propiedad
Capacity puede ser utilizada para identificar el nmero de artculos que
puede almacenar una coleccin sin tener que cambiar el tamao.
La propiedad Count, por otra parte, identifica cuantos artculos se
encuentran actualmente almacenados en la lista.

Mtodo para remover elementos de la lista


Si se requiere eliminar o remover un elemento especfico de la lista, la
Clase List de C# dispone del mtodo Remove(), su sintaxis es la siguiente:

26
El mtodo Remove() requiere un parmetro que en este caso es una
cadena, que contiene el nombre del animal a eliminar o remover de la
lista, se puede evidenciar en la figura 20, la salida en pantalla despus de
listar los elementos.

Figura 20. Salida en pantalla despus de eliminar un elemento

Mtodo para vaciar la lista

Todos los elementos de una lista podrn ser borrados mediante el


mtodo Clear():

Clear() elimina los elementos de la lista y establece la propiedad Count


a cero. La propiedad

Implementacin de una lista genrica List<T> utilizado clases


construidas, utilizando una Aplicacin de consola.
Se requiere implementar una lista genrica en modo consola para
gestionar productos, de los cuales se requiere obtener el cdigo, el
nombre y el precio. De tal manera que a travs de un men de opciones
permita adicionar productos a lista, consultar productos a travs del
cdigo, listar los productos y eliminar productos. Es importante que se
definan tres clases as: La clase Men, la clase Producto y la clase
Program.cs, tal como se visualiza en la figura 21 del explorador de
soluciones.

27
Figura 21. Vista del explorador de soluciones
Lo primero es crear un nuevo proyecto en modo consola, el cual llevar
por nombre ListaProductosConsola, y se elige la ruta donde se quiera
guardar. Por defecto se crea la Clase Program.cs, luego se ubica el
explorador de soluciones y se crea una nueva clase a la que llamaremos
Producto. Se procede a crear las propiedades de la clase, que para este
caso sern el cdigo, el nombre y el precio. Luego se realiza el
encapsulamiento con los mtodos get y set. Tal como se evidencia en el
cdigo de la figura 22.

28
Propiedades de la
clase Producto

Figura 22. Cdigo fuente de la clase Producto.cs

29
Posterior mente en la figura 23 se crea la clase Men, la cual va
contener el cdigo del men y de cada una de las opciones.

30
figura 23 Cdigo fuente de la clase Men

Finalmente en la figura 24 se muestra la clase Program.cs, y en el mtodo


Main() se lleva a cabo la instanciacin del objeto men.

31
Figura 24. Cdigo fuente de la clase Program.cs
En la figura 25 se muestra el resultado al ejecutar el programa se tiene
como resultado la salida en pantalla del men con sus respectivas
opciones.

Figura 25. Salida en pantalla del men de opciones

Al navegar por cada opcin del men se tiene la posibilidad de registrar


producto, buscar un producto por cdigo, listar los productos ingresados,
eliminar productos, y la opcin de salir de la aplicacin.

En el siguiente apartado se hace la implementacin del mismo


planteamiento del problema, como aplicacin a las Listas, pero esta vez
implementado como aplicacin de Windows forms, lo que permite una
interfaz de usuario para el manejo de la aplicacin.

32
Implementacin de la lista genrica List <T> para la
administracin de productos como aplicacin de Windows Forms
Para el desarrollo de esta aplicacin se tiene el siguiente planteamiento
del problema:
Planteamiento del problema
El Hipermercado Supermax, requiere de una aplicacin para la
administracin del inventario de sus productos, de tal manera que cuente
con una interfaz grfica que a travs de un formulario permita el ingreso
de productos a la lista, es decir, guardarlos, tener a posibilidad de
consultar los productos del inventario, modificar datos de los productos,
eliminar productos, es decir sacarlos del inventario y la opcin de salir de
la aplicacin. Adicional mente se requiere validar que en los campos que
son de tipo numrico no permita ingresar texto o caracteres especiales.
Alternativa de solucin
Analizando el requerimiento del Hipermercado Supermax, se plantea
implementar la aplicacin haciendo uso del lenguaje de programacin
Visual C#, a travs del entorno de desarrollo Visual Studio 2015. Para lo
cual se sugiere como alternativa de solucin, implementar una estructura
de datos tipo Lista, como coleccin List<T>, a travs de una interfaz
grfica de usuario con Windows Forms.
Se inicia con la creacin de un nuevo proyecto, se elige aplicacin de
Windows Forms, se le asigna el nombre ListaGrafica, se elige la ubicacin
donde se quiere guardar y presiona el botn aceptar.

Figura 26. Interfaz de un nuevo proyecto como aplicacin Windows Forms

33
Por defecto se crean dos clases, la clase Program.cs y la clase Fom1.cs,
que es el formulario. La clase Program.cs, que se crea por defecto, tiene
como propsito cargar o llama al formulario una vez se ejecute o inicie la
aplicacin, es decir, invoca a la clase Form1, que es la interfaz que el
usuario visualiza una vez iniciada la aplicacin.
Por su parte la clase Fom1.cs, es en la que se realizar la programacin
de eventos y los mtodos requeridos para los controles y la interaccin
con el usuario.
De acuerdo al anlisis realizado previamente, se requiere definir una Clase
personalizada de tipo objeto a la que se le asignar el nombre de
Producto.cs, la cual contiene los atributos y las propiedades de los
productos como son: el cdigo, el nombre y el precio, en esta misma clase
se realiza el empaquetado o encapsulacin de los atributos de la clase
Producto, a travs de los mtodos Get y Se, lo que permite invocar esta
clase desde otras clases.
Veamos el cdigo de la clase Program.cs que ya viene pre construida.
Cdigo fuente de la clase Program.cs.
Este cdigo se crea por defecto cuando se crea el proyecto con Windows
Forms, lo importante de esta clase es el llamado que hace al formulario
que tiene como nombre por defecto Fom1.

Figura 27. Cdigo fuente de la clase Program.cs


Se requiere crear una nueva clase que se va agregar a la solucin, a la
que llamaremos Producto, nos ubicamos en el explorador de soluciones

34
se da clic derecho en el nombre de la solucin ListaGrafica, y en el men
contextual se elige la opcin Agregar y se elige Clase, se le da el nombre
Producto y se guarda, el cdigo se visualiza en la figura 28.

Figura 28. Cdigo fuente de clase Producto.cs

Ya tenemos las clases necesarias, las cuales se pueden visualizar en la


figura 29 del explorador de soluciones.

35
Figura 29. Vista del explorador de soluciones

Pasamos a la clase Form.cs, esta trae dos vistas, la vista Form.cs


[Diseo], y la vista Form.cs que es donde se tiene todo el cdigo que se
genera del diseo y la programacin de los controles.
Nos ubicamos en la vista de diseo del formulario Form.cs [Diseo] para
disear la interfaz grfica de acuerdo con los requerimientos. En este caso
se utilizan tres etiquetas, cuya propiedad text son con Cdigo, Nombre y
Precio, respectivamente y tambin tres controles de tipo TextBox para el
cdigo, el nombre y el precio, que en su propiedad nombre se
renombraron como txtCodigo, txtNombre, txtPrecio, respectivamente.
As mismo se crean cinco Botones que son utilizados para programar los
eventos de los controles, estos botones de forma individual en su
propiedad (Text) se le asigna a cada uno segn corresponda los nombres
de Guardar Nuevo, Modificar y Guardar, Buscar, Eliminar, Salir,
respectivamente as:

A estos mismos botones en la propiedad (Name) de cada uno se le asigna


por nombre: btnGuardar, btnModificar, btnBuscar, btnEliminar, btnSalir,
segn corresponda, es el nombre que tendr el botn como identificacin,
necesario para la programacin de los eventos. Adicionalmente a los
botones btnModificar y btnEliminar se les cambia la propiedad de Enabled
= false, esto con el fin de controlar que estn habilitados solo cuando
existan datos en la lista cargados en las cajas de texto. En caso contrario
permanecern deshabilitados.

36
Tambin se crea el objeto llamado DataGridView que es utilizado para que
muestre los registros de los productos ingresados en la lista, este control
se dej el mismo nombre que trae por defecto que es DataGridView1.
El formulario tiene una apariencia similar a la figura 30 en la que tambin
se muestra el explorador de soluciones.

Figura 30 Interfaz grfica del formulario.


Lo que sigue es crear la lista y programar los eventos de cada uno de los
controles, esto se realiza en la vista Form.cs, para acceder al cdigo
fuente del formulario, solo es cuestin de ubicarse en el explorador de
soluciones, dar clic derecho en el Form1.cs y seleccionar la opcin Ver
cdigo fuente.
Se crea la lista y se instancia la clase producto como se visualiza en la
figura 31.

Figura 31. Creacin de la lista y la instanciacin la clase producto

37
Lo siguiente es asignar un par de registros a la lista, estos registros se
crean en un evento del formulario,

Estando en la vista de diseo del formulario se da doble clic en cualquier


parte del formulario donde est limpio y se crea el cdigo para incluir las
instrucciones para crear los dos registros. de tal manera que cuando
cargue el formulario muestre esos registros por defecto, esto se hace para
probar que se estn cargando bien los datos, claro est, de forma
provisional ya que una vez se programa el botn Guardar nuevo, se quitan
estos registros para que los datos sean ingresados por el formulario. Lo
que se hace es crear los dos objetos llamado miProducto1 y
miProducto2 de la clase Producto y se le asignan los valores a cada
propiedad, se le adicionan los registros a la lista y al final se le pasan los
datos a la DataGridView, con la instruccin :
quedando de la siguiente manera como se muestra en la figura 32.

Figura 32. Creacin de los objetos miProducto1 y miProducto2

38
Figura 33. Objetos cargados en el DataGredView

Antes de continuar con la programacin del control Guardar nuevo, es


necesario crear un control que se llama ErrorProvider que se encuentra
en el cuadro de herramientas este se arrastra y se ubica en cualquier
parte del formulario, y se le cambia la propiedad (Name) en este caso se
llamar ErrPErores, este se ubicar en la parte inferior del formulario.

Figura 34. Vista del control errorProvider

De igual manera es necesario crear algunos mtodos dentro de la clase


Form1.cs, para programar algunas validaciones, por ejemplo, cuando se
d clic en el botn Guardar nuevo, se valide que los campos no estn

39
vacos, para el caso del cdigo y del precio que son de tipo numrico que
valide que solo permita ingresar nmeros y no letras. Una vez creados los
mtodos se procede a invocarlos desde el control Guardar nuevo.
El primer mtodo se llama validarCodigo() es privado de tipo booleano,
es decir que retorna un valor true o False.

Figura 35. Mtodo ValidarCodigo()

El segundo mtodo se llama validarNombre() es privado de tipo booleano,


es decir que retorna un valor true o False.

Figura 36. Mtodo ValidarNombre()

El tercer mtodo se llama ValidarPrecio() es privado de tipo booleano, es


decir que retorna un valor true o False.

40
Figura 37. Mtodo ValidarPrecio()

El cuarto mtodo se llama LimpiarControles() es utilizado para limpiar los


controles y dejarlos listos para ingresar nuevos datos.

Figura 38. Mtodo LimpiarControles()


Creados los mtodos para las validaciones de los campos, procedemos a
programar el botn Guardar Nuevo, para que sean ingresados los
registros a travs del formulario. Estando en el formulario en vista diseo
Form.cs [Diseo] damos doble clic en el botn Guardar Nuevo y nos
lleva al cdigo para programar el evento de este botn.
Estando en la vista de [diseo] del formulario, damos doble clic en el
botn Guardar Nuevo para que se cree el cdigo inicial para hacer las
validaciones y crear la lista a travs de este control.

41
dentro de las llaves, se invocan los mtodos que se construyeron y
tambin se incluye la validacin para el campo Cdigo y el campo Precio
que no permita ingresar texto en estos campos ya que son numricos.

Figura 39. Cdigo del control del botn Guardar

42
Finalmente se crea un nuevo objeto llamado miProducto que es de la clase
Producto, as como tambin las instrucciones para adicionarlo a la lista y
se le asignan a la Data GridView1 para que se muestren en la cuadrcula
y finalmente se limpian los controles invocando el mtodo diseado para
tal fin.

Figura 40. Creacin del objeto miProducto de la clase Producto

Solo resta probar que se haya ingresado un nuevo registro y esta vez por
el formulario, guardamos y ejecutamos, ingresamos un registro y le
damos clic en el botn Guardar Nuevo, si todo va bien se visualizar en
la cuadrcula el registro ingresado, si esto es correcto se procede a quitar
el cdigo de los dos registros que se crearon de forma provisional por
fuera del formulario.
En este caso el evento del formulario Form1_Load queda vaco.

Figura 41. Evento del formulario Form1

Antes de continuar programando los controles, se requiere crear un


mtodo dentro de la clase Form1.cs al que llamar GetProducto() utilizado
para cargar desde la DataGridView1 los registros a las cajas de texto del
formulario, este mtodo se utiliza para programar el control del botn
Buscar, el cual tendr el siguiente cdigo;

43
Figura 42. Mtodo para obtener el producto consultado
Ya creado el mtodo GetProducto() se procede a programar el control
Buscar, al igual que en los casos anteriores solo es dar doble clic en el
botn Buscar de la Vista de diseo del formulario y se crea el control vaco
para programarlo.

Lo primero es invocar al mtodo validarCodigo(); para asegurarnos que


el campo cdigo no sea nulo y que no est vaco.

Luego se invoca al mtodo GetProducto(), para hacer la comparacin


entre el dato que se digit en la caja de texto y la informacin que hay en
la lista visible en la DataGridView1. Si el dato no se encuentra en la lista
saca a travs de la propiedad ErrorProvider una alerta indicando que el
producto no figura registrado y se deshabilitan los botones Modificar y
eliminar, la idea es que solo estn habilitados cuando haya registros
cargados en las cajas de texto. En caso de que si exista el cdigo se
cargan los datos de la dataGridView1 a las cajas de texto del formulario.

44
Figura 43. Mtodo para cargar los datos de la dataGridView1 en las cajas
de texto
Continuamos con la programacin del evento del botn Eliminar, al igual
que en los casos anteriores solo es dar doble clic en el botn eliminar de
la Vista de diseo del formulario y se crea el control vaco para
programarlo.

En este caso lo primero es crear una ventana emergente llamada


DialogResult que al presionar el botn eliminar saca un mensaje
preguntando si est seguro de eliminar el registro, si la respuesta del
usuario es positiva, se procede a verificar el cdigo, invocando el mtodo
validarCodigo(), si es falso, retorna no hace nada, en caso contrario
invoca al mtodo GetProducto para verificar si el cdigo existe en la lista
y cargar el registro consultado a las cajas de texto, en caso de ser nulo
indica a travs de la alerta del ErrorProvider que el cdigo solicitado no
est registrado.

45
Figura 44. Evento del control del botn Eliminar
En caso contrario, es decir que si el cdigo figura registrado se quita la
alerta y a travs de un ciclo foreach() se recorre la lista en busca del
cdigo y se remueve de la lista. Se limpian los controles y se actualiza la
lista en la cuadrcula del DataGridView1.

Figura 45. Mtodo para eliminar un registro de la lista


Continuamos con la programacin del evento del botn llamado Modificar
y Guardar, al igual que en los casos anteriores solo es dar doble clic en el
botn Modificar y Guardar de la vista de diseo del formulario y se crea
el control vaco para programarlo.

46
Este control opera de forma similar que el evento de eliminar, antes de
realizar cualquier modificacin, se llevan a cabo validaciones, en primer
lugar, se procede a verificar el cdigo, invocando el mtodo
validarCodigo(), si es falso, retorna no hace nada, en caso contrario
invoca al mtodo GetProducto para consultar si el cdigo existe en la lista,
en caso de ser nulo indica a travs de la alerta del ErrorProvider que el
cdigo solicitado no est registrado.

Figura 46. Evento del control del botn Modificar al no encontrar el


registro

En caso contrario, es decir si el registro existe en la lista se quita la alerta


y se procede a verificar tanto el campo nombre como el campo precio,
invocando los mtodos ValidarNombre() y ValidarPrecio()
respectivamente, en caso de ser false retorna, es decir no hace nada.

47
Figura 47. Evento del control del botn Modificar para validar el nombre
y el precio

En caso contrario si los valores retornados es true, se recorre la lista a


travs de un ciclo Foreach() en el que se compara el cdigo de la lista con
el cdigo digitado en la caja de texto del campo cdigo, si son iguales se
pide que digite los datos del campo nombre y del precio y se actualice la
lista y se limpian los controles.

Figura 48. Ciclo para recorrer la lista en la actualizacin del registro

48
Finalmente programamos el botn Salir, estando en el formulario en vista
diseo Form.cs [Diseo] damos doble clic en el botn Salir, y nos conduce
al cdigo para programar el evento es este botn, solo se requiere invocar
al mtodo Close() que es un mtodo pre construido cuya funcin es cerrar
el formulario.

Figura 49. Evento del control de botn Salir

49
Fuentes Bibliogrficas

MSDN, M. (2015). Programacin orientada a objetos (C# y Visual Basic)


Recuperado de.
http://bibliotecavirtual.unad.edu.co:2048/login?user=proveedor&pass=
danue0a0&url=http://bibliotecavirtual.unad.edu.co:2051/login.aspx?dire
ct=true&db=ir00913a&AN=unad.10596.5645&lang=es&site=eds-live

Miller, R. (2012). C Collections : A Detailed Presentation. Falls Church,


Va: Pulp Free Press. Recuperado de:
http://bibliotecavirtual.unad.edu.co:2048/login?user=proveedor&pass=
danue0a0&url=http://bibliotecavirtual.unad.edu.co:2051/login.aspx?dire
ct=true&db=e000xww&AN=442484&lang=es&site=ehost-live

Ceballos, S. F. J. (2012). Enciclopedia de Microsoft Visual C#: interfaces


grficas y aplicaciones para Internet con Windows Forms y ASP.NET (4a.
ed.). Madrid, ES: RA-MA Editorial. Recuperado de:
http://bibliotecavirtual.unad.edu.co:2077/lib/unadsp/reader.action?ppg
=1&docID=11046414&tm=1477350882421

MSDN, M. (2015). Colecciones y estructuras de datos. Recuperado de


https://msdn.microsoft.com/es-
es/library/7y3x785f(v=vs.110).aspx#Caracter%C3%ADsticas%20comu
nes%20de%20las%20colecciones

MSDN, M. (2015). Clase List<T>. Recuperado de:


https://msdn.microsoft.com/es-es/library/6sh2ey19(v=vs.110).aspx

MSDN, M. (2015). Clase Queue<T>. Recuperado de:


https://msdn.microsoft.com/es-es/library/7977ey2c(v=vs.110).aspx

MSDN, M. (2015). Clase Stack<T>. Recuperado de:


https://msdn.microsoft.com/es-es/library/3278tedw(v=vs.110).aspx

Mosquera, H. (2015). Estructuras de datos en C++. Recuperado de:


https://hhmosquera.wordpress.com/

Pea, H. (2016). POO en C#. Proyecto crear una Lista completa en


modo consola. Recuperado de:
https://www.youtube.com/watch?v=rKnbtqMk50M&feature=youtu.be

50

Potrebbero piacerti anche