martes, 13 de diciembre de 2011

Estructuras Dinámicas "Listas Enlazadas"

Listas enlazadas.- Estructura dinámica formada por un conjunto de nodos interconectados entre si.


Esta es un aplicación creada en el lenguaje de programación C# la cual consiste en registrar los datos de un hotel,ya cea las reservas activas o las reservas canceladas y que de igual forma podamos eliminar y insertar en la parte cea necesario de la lista por ej:
insertar atrás
eliminar atrás
insertar al frente
eliminar al frente
insertar en una posición n
eliminar en una posición n
en el cual hacemos uso de varios componentes como los listbox,radiobutton,textbox,datatimepicker etc.
Para empezar crearemos el formulario reserva,luego la clase nodo,reserva,lista enlazada y por ultimo programaremos nuestros componentes que hemos utilizado en el formulario.


Clase nodo:



 public class Nodo
    {
        Object datos;//clase
        Nodo izq;
        Nodo der;
        public Nodo()
        {//nodo nulo
            datos = izq = der = null;
        }
        public Nodo(object ob)
        {// nodo solitario
            datos = ob;
            izq = der = null;


        }


        public Nodo(object ob, Nodo enlace)
        {
            datos = ob;
            der = enlace;


        }
        public void setDatos(object ob)
        {
            datos = ob;
        }
        public void setizq(Nodo ob)
        {
            izq = ob;
        }
        public void setder(Nodo ob)
        {
            der = ob;
        }


        public object getdatos()
        {
            return datos;
        }
        public Nodo getizq()
        {
            return izq; 
        }
        public Nodo getDer()
        {
            return der; 
        }
    }
}


Clase Reserva:



class Reserva
    {
        public int nro;
        public String cliente;
        public DateTime fecha_r;
        public String f_reserva;
        public String t_habitacion;
        public String f_pago;
        public String servicios;
        


        public Reserva() {
            nro = 0;
            fecha_r = DateTime.MinValue;
            cliente = t_habitacion = f_pago = servicios = "";
            
        }
        public Reserva(int n,String cli,DateTime fr,String th,String fp,String ser) {
            nro = n;
            cliente = cli;
            fecha_r = fr;
            t_habitacion = th;
            f_pago = fp;
            servicios = ser;
        }
        public void  SetReserva(int n, String cli, DateTime fr, String th, String fp, String ser)
        {
            nro = n;
            cliente = cli;
            fecha_r = fr;
            t_habitacion = th;
            f_pago = fp;
            servicios = ser;
        }
        public void setnro(int n) { nro = n; }
        public void setcliente(String cli) { cliente = cli; }
        public void setfechareserva(DateTime fr) { fecha_r = fr; }
        public void setthabitacion(String th) { t_habitacion = th; }
        public void setfpago(String fp) {f_pago = fp; }
        public void setservicios(String ser) { servicios = ser; }


        public String GetReserva() {
            return "Nro:" + nro + "\nCliente:" + cliente + "\nFecha de Reserva:" + f_reserva + "Tipo de Habitacon:" + t_habitacion +
                    "\nForma de Pago:" + f_pago + "\nServicios:" + servicios;
        }


        public int getnro() { return nro; }
        public String getcliente() { return cliente;}
        public String getfechareserva() { return f_reserva; }
        public String getthabitacion() { return t_habitacion; }
        public String getfpago() { return f_pago; }
        public String getservicios() { return servicios; }
    }
}

Clase Lista Enlazada:

class ListaEnlazada
    {
        protected String nombre;
        protected Nodo primero;
        protected Nodo ultimo;

        public ListaEnlazada(String n) {
            nombre = n;
            primero = ultimo = null;  
        }
        public ListaEnlazada() {
            this.nombre = "Lista";
        }
        //metodos
        public Boolean Lvacia() {
            return primero == null;
        }
        public String getnombre(){
        return nombre;
        }
        public Nodo getprimero() {
            return primero;
        }
        public Nodo getultimo() {
            return ultimo;
        }
        public void InsertFrente(Object obj) {

            if (Lvacia())
                primero = ultimo = new Nodo(obj);
            else
                primero= new Nodo(obj,primero);
        }
        public void InsertarAtras(Object obj) {
            if (Lvacia())
                primero = ultimo = new Nodo(obj);
            else
                ultimo = ultimo.Sgte = new Nodo(obj);
        
        }
        public Object DeleteFrente() {
            Object DatoRemovido = null;
            if (Lvacia())
                Console.WriteLine("Vacia");
                primero = primero.datos;
                if (primero.Equals(ultimo))
                    primero = ultimo = null;
                else
                    primero = primero.Sgte;
                return DatoRemovido;
        }
        public Object DeleteAtras() {
            Object DatoRemovido = null;
            if (Lvacia()) {
                Console.WriteLine("Vacia");
            }
            DatoRemovido = ultimo.Datos;
            if (primero.Equals(ultimo))
            {
                primero = ultimo = null;
            }
            else {
                Nodo Actual = primero;
                while (Actual.Sgte != ultimo)
                    Actual = Actual.Sgte;
                ultimo = Actual;
                Actual.Sgte = null;
            }
            return DatoRemovido;
        }
        public Object getElementoIndice(int posicion) {
            if (Lvacia())
            {
                return null;
            }
            else {
                Nodo Actual = primero;
                int cont = 1;
                while ((Actual != null) && (cont < posicion)){
                    Actual = Actual.Sgte;
                    cont++;
                }
                if ((Actual != null) && (cont == posicion))
                {
                    return Actual.Datos;
                }
                else {
                    return null;
                }


            }
        
        }

        public void InsertarElementoEnIndice(int posicion,Object obj){
        Nodo nuevo;
        Nodo actual;
        if (Lvacia())
        {
            return;
        }
        else {
            actual = primero;
            int cont = 1;
            while((actual !=null) && (cont < posicion-1)){
                actual = actual.Sgte;
                cont++;
            }
            if((actual != null) && (cont== posicion-1)){
                nuevo = new Nodo(obj,actual.Sgte);
                actual.Sgte = nuevo;
            
            }
          }
        
        }
        public Object DeleteElementoDeIndice(int posicion) {
            Object DatoRemovido;
            Nodo actual;

            if (Lvacia() == true)
            {
                return null;
            }
            else {
                if (posicion == 1)
                {
                    DatoRemovido = primero.Datos;
                    primero = primero.Sgte;
                    return DatoRemovido;
                }
                else {
                    actual = primero;
                    int cont = 1;

                    while((actual != null) && (cont < posicion-1)){
                        actual = actual.Sgte;
                        cont++;
                    }
                    if ((actual != null ) && (cont == posicion -1)){
                        DatoRemovido = actual.Sgte.Datos;
                        actual.Sgte = actual.Sgte.Sgte;
                        return DatoRemovido;
                    }

                }
                return null;
            }
        
        }

    }
}

FrmReserva:

public partial class FrmReserva : Form
    {

        public void combohabitacion() {
            cbthabitacion.Items.Add("Simple");
            cbthabitacion.Items.Add("doble");
            cbthabitacion.Items.Add("Suite");
        }
        public String formapago() {
            String fp = "";
            if (rbefectivo.Checked == true)
                fp = rbefectivo.Text;
            else
                fp = rbtargeta.Text;
            return fp;
         }
        public String obtenerservicios() {
            String serv = "";
            if (chkinternet.Checked == true)
                serv = serv + chkinternet.Text + ",";
            if (chkpiscina.Checked == true)
                serv = serv + chkpiscina.Text + ",";
            if (chkrestaurant.Checked == true)
                serv = serv + chkrestaurant.Text + ",";
            return serv;
        }
        public void limpiardatos() {
            txtnro.Text = "";
            txtcliente.Text = "";
        }
        public void mostrarlista() {
            if (Lista.Lvacia() == true)
            {
                lbactivas.Items.Clear();
                lbactivas.Items.Insert(0, "Lista vacia");
            }
            else {
                Nodo auxnodo = Lista.getprimero();

                lbactivas.Items.Clear();
                while (auxnodo != null) { 
                auxdatos = (Reserva)auxnodo.getdatos();
                String separador = "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.";
                lbactivas.Items.Insert(0,auxdadatos.getnro());
                lbactivas.Items.Insert(1, auxdadatos.getcliente());
                lbactivas.Items.Insert(2, auxdadatos.getthabitacion());
                lbactivas.Items.Insert(3, auxdadatos.getfechareserva());
                lbactivas.Items.Insert(4, auxdadatos.getfpago());
                lbactivas.Items.Insert(5, auxdadatos.getservicios());
                lbactivas.Items.Insert(6, separador);
                auxnodo = auxnodo.sgte;

                
                }
            
            }

        
        }

        public FrmReserva()
        {
            InitializeComponent();
        }

        private void FrmReserva_Load(object sender, EventArgs e)
        {
            combohabitacion();

        }

        private void groupBox2_Enter(object sender, EventArgs e)
        {

        }

        private void groupBox4_Enter(object sender, EventArgs e)
        {

        }

        private void btnsalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btninsertarfrente_Click(object sender, EventArgs e)
        {
            String nro = "";
            String cliente = "";
            String tipohab = "";
            DateTime fecha = DateTime.MinValue;
            String formapago = "";
            String serv = "";

            int centinela = 1;
            try
            {

                nro = txtnro.Text;
                cliente = txtcliente.Text;
                tipohab = cbthabitacion.Text;
                fecha = DateTime.Parse(dtpfreserva.Text);
                formapago = ObtenerFormaPago();
                serv = obtenerservicios();
            }
            catch (Exception Ex)
            {
                centinela = 0;
                if (MessageBox.Show(Ex.ToString() + "Ocurrio un error verifique los campos ", "Error", MessageBoxButtons.OK, MessageBoxIcon.Information) == DialogResult.OK) { 
                

                }
            }
            if (centinela == 1) {
                Lista.InsertFrente(new Reserva(nro,cliente,tipohab,fecha,formapago,serv));
            }
            limpiardatos();
            mostrarlista();
        }

        private void btnmostrar_Click(object sender, EventArgs e)
        {
            mostrarlista();
        }

        private void btnborrarfrente_Click(object sender, EventArgs e)
        {
            if (Lista.Lvacia() == true) {
                lbcanceladas.Items.Clear();
                lbcanceladas.Items.Insert(0,"Lista Vacia"):
            
            }
            else{
            Reserva aux;
                aux=(Reserva)Lista.DeleteFrente();

                String separador="$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$";
                lbcanceladas.Items.Insert(0, aux.getnro());
                lbcanceladas.Items.Insert(1, aux.getcliente());
                lbcanceladas.Items.Insert(2, aux.getthabitacion());
                lbcanceladas.Items.Insert(4, aux.getfechareserva());
                lbcanceladas.Items.Insert(3, aux.getfpago());
                lbcanceladas.Items.Insert(5, aux.getservicios());
                lbcanceladas.Items.Insert(6, separador);
            
            }
            limpiardatos();
            mostrarlista();
        }

        private void btninsertaratras_Click(object sender, EventArgs e)
        {
            String nro = "";
            String cliente = "";
            String tipohab = "";
            DateTime fecha = DateTime.MinValue;
            String formapago = "";
            String serv = "";
            int centinela = 1;
            try
            {

                nro = txtnro.Text;
                cliente = txtcliente.Text;
                tipohab = cbthabitacion.Text;
                fecha = DateTime.Parse(dtpfreserva.Text);
                formapago = ObtenerFormaPago();
                serv = obtenerservicios();
            }
            catch (Exception Ex)
            {
                centinela = 0;
                if (MessageBox.Show(Ex.ToString() + "Ocurrio un error verifique los campos ", "Error", MessageBoxButtons.OK, MessageBoxIcon.Information) == DialogResult.OK)
                {
                }
              }
            if (centinela == 1) {
                Lista.InsertarAtras(nro,cliente,tipohab,fecha,formapago,serv);
            
            }
            limpiardatos();
            mostrarlista();


        }

        private void btnborraratras_Click(object sender, EventArgs e)
        {
            if (Lista.Lvacia() == true)
            {
                lbcanceladas.Items.Clear();//limpia por completo el listbox
                lbcanceladas.Items.Insert(0, "Lista vacia");//inserta el object al indice 0
            }
            else {
                Reserva aux;
                aux = (Reserva)Lista.DeleteAtras();//elimina el ultimo dato introducido en la pila

                String separador = "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$";
                lbcanceladas.Items.Insert(0, aux.getnro());
                lbcanceladas.Items.Insert(1, aux.getcliente());
                lbcanceladas.Items.Insert(2, aux.getthabitacion());
                lbcanceladas.Items.Insert(4, aux.getfechareserva());
                lbcanceladas.Items.Insert(3, aux.getfpago());
                lbcanceladas.Items.Insert(5, aux.getservicios());
                lbcanceladas.Items.Insert(6, separador);
            }
            limpiardatos();
            mostrarlista();
        }

        private void btninsertarpos_Click(object sender, EventArgs e)
        {
            String nro = "";
            String cliente = "";
            String tipohab = "";
            DateTime fecha = DateTime.MinValue;
            String formapago = "";
            String serv = "";
            int centinela = 1;
            try
            {

                nro = txtnro.Text;
                cliente = txtcliente.Text;
                tipohab = cbthabitacion.Text;
                fecha = DateTime.Parse(dtpfreserva.Text);
                formapago = ObtenerFormaPago();
                serv = obtenerservicios();
            }
            catch (Exception Ex) {
                centinela = 0;
                if (MessageBox.Show(Ex.ToString() + "Ocurrio un error verifique los datos ", "Error", MessageBoxButtons.OK, MessageBoxIcon.Information) == DialogResult.OK)
                {
                }
                }
            if (centinela == 1) {

                lista.insertarElementoEnIndice(indice, (new Reserva(nro,cliente,tipohab,fecha,formapago,ser)));
             //se introduce el objeto de tipo de datos

            }
            limpiardatos();
            mostrarlista();

        }

        private void btnborrarposicion_Click(object sender, EventArgs e)
        {

            if (Lista.Lvacia() == true)
            {
                lbcanceladas.Items.Clear();//limpia por completo el listbox
                lbcanceladas.Items.Insert(0, "Lista vacia");//inserta el object al indice 0
            }
            else {
                Reserva aux = new Reserva();
                int centinela ==1;
                try{
                
                   aux=(Reserva)lista.DeleteElementoDeIndice(int.Parse(txtposicion.Text));
                }
                catch(Exception Ex){


                if (MessageBox.Show(Ex.ToString() + "Ocurrio un error verifique los datos ", "Error", MessageBoxButtons.OK, MessageBoxIcon.Information) == DialogResult.OK)
                {
                }
                }
                if(centinela==1){
                tring separador = "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$";
                lbcanceladas.Items.Insert(0, aux.getnro());
                lbcanceladas.Items.Insert(1, aux.getcliente());
                lbcanceladas.Items.Insert(2, aux.getthabitacion());
                lbcanceladas.Items.Insert(4, aux.getfechareserva());
                lbcanceladas.Items.Insert(3, aux.getfpago());
                lbcanceladas.Items.Insert(5, aux.getservicios());
                lbcanceladas.Items.Insert(6, separador
                }
            }
            limpiardatos();
            mostrarlista();
        }

        private void btnreservar_Click(object sender, EventArgs e)
        {
            btninsertaratras_Click(sender,e);
        }

        private void btncancelar_Click(object sender, EventArgs e)
        {
            btnborraratras_Click(sender ,e);
        }


    }
}

Bueno ese seria todo nuestro código fuente de nuestro programa para terminar con nuestra aplicación les mostrare la interfaz gráfica:




No hay comentarios:

Publicar un comentario