예제 #1
0
        public void InsertaRegistro(CRegistro registro)
        {
            Cubeta  C        = new Cubeta(noRegistros);
            Archivo archivo  = new Archivo(nombre, path);
            int     posicion = tabla.Hash(registro.Clave);
            long    dirC     = tabla.Cajones[posicion];

            if (dirC == -1)
            {
                dirC = tabla.PtrsCubetaVacia;
                if (dirC != -1)
                {
                    archivo.LeerCubeta(dirC, C);
                    tabla.PtrsCubetaVacia = C.DirSigCubeta;
                    C.DirSigCubeta        = -1;
                }

                C.Insertar(registro);
                C.Direccion = tabla.Cajones[posicion] = archivo.EscribirCubeta(C);
                archivo.EscribirTablaH(tabla);
            }
            else
            {
                long ant;
                dirC = tabla.Cajones[posicion];
                do
                {
                    C = new Cubeta(noRegistros);
                    archivo.LeerCubeta(dirC, C);
                    ant  = dirC;
                    dirC = C.DirSigCubeta;
                } while (C.NoRegistros >= noRegistros && dirC != -1);

                if (C.NoRegistros < noRegistros)
                {
                    C.Insertar(registro);
                    C.Direccion = ant;
                    archivo.EscribirCubeta(C);
                }
                else
                {
                    Cubeta cc = new Cubeta(noRegistros);
                    if (tabla.PtrsCubetaVacia != -1)
                    {
                        archivo.LeerCubeta(tabla.PtrsCubetaVacia, cc);
                        tabla.PtrsCubetaVacia = cc.DirSigCubeta;
                        cc.DirSigCubeta       = -1;
                    }

                    cc.Insertar(registro);
                    C.Direccion    = ant;
                    C.DirSigCubeta = cc.Direccion = archivo.EscribirCubeta(cc);
                    archivo.EscribirCubeta(C);
                }
                // archivo.LeerCubeta(dirC, C);
                // C.InsertaRegistro(registro);
            }
        }
예제 #2
0
        public void EliminaRegistro(int clave)
        {
            bool    encontrado = false;
            int     p          = tabla.Hash(clave);
            long    dirC       = tabla.Cajones[p];
            Cubeta  C          = new Cubeta(noRegistros);
            Cubeta  ant        = new Cubeta(noRegistros);
            Archivo archivo    = new Archivo(nombre, path);

            if (dirC != -1)
            {
                do
                {
                    archivo.LeerCubeta(dirC, C);
                    encontrado = C.Encontrado(clave);
                    if (!encontrado)
                    {
                        ant  = C;
                        dirC = C.DirSigCubeta;
                        C    = new Cubeta(noRegistros);
                    }
                } while (!encontrado && dirC != -1);
                if (encontrado)
                {
                    C.EliminaRegistro(clave);
                    if (C.Vacio())
                    {
                        if (C.Direccion == tabla.Cajones[p])
                        {
                            tabla.Cajones[p] = C.DirSigCubeta;
                        }
                        else
                        {
                            ant.DirSigCubeta = C.DirSigCubeta;
                            archivo.EscribirCubeta(ant);
                        }
                        C.DirSigCubeta        = tabla.PtrsCubetaVacia;
                        tabla.PtrsCubetaVacia = C.Direccion;
                        archivo.EscribirTablaH(tabla);
                    }
                    archivo.EscribirCubeta(C);
                }
            }
        }
예제 #3
0
        public void InsertaRegistro(CRegistro registro)
        {
            Cubeta  C        = new Cubeta(noRegistros);
            Archivo a        = new Archivo("", "");
            int     posicion = Hash(registro.Clave);
            long    dirC     = cajones[posicion];

            if (dirC == -1)
            {
                dirC = ptrsCubetaVacia;
                if (dirC != -1)
                {
                    a.LeerCubeta(cajones[posicion], C);
                    ptrsCubetaVacia = C.DirSigCubeta;
                    C.DirSigCubeta  = -1;
                }

                C.InsertaRegistro(registro);     //a = a eso
                cajones[posicion] = C.Direccion; // o cajones[posicion] = C.InsertaRegistro(registro);
                                                 // cajones[posicion] = a.EscribirCubeta(C);
                a.EscribirTablaH(this);
            }
            else
            {
                long ant;
                dirC = cajones[posicion];
                do
                {
                    a.LeerCubeta(dirC, C);
                    ant = dirC;
                } while ((dirC = C.DirSigCubeta) != -1 && C.Registros[C.Registros.Count - 1].Clave < registro.Clave);

                if (C.Registros[C.Registros.Count - 1].Clave > registro.Clave)
                {
                    if (C.Registros[0].Clave > registro.Clave)
                    {
                        dirC = ant;
                    }
                }
                a.LeerCubeta(dirC, C);
                C.InsertaRegistro(registro);
            }
        }
예제 #4
0
        private void buttonCrear_Click(object sender, EventArgs e)
        {
            if (nombreArch != "")
            {
                if (!File.Exists(path + nombreArch))
                {
                    if (!DatVacio())
                    {
                        tabla = new TablaHash(26, (int)numericNoReg.Value, (int)numericCajas.Value, (int)numericCajas.Value);
                        archivo.EscribirTablaH(tabla);
                        LimpiarCubeta();
                        MuestraDatos();
                        LimpiarTablaHash();
                        MuestraTabla();
                        HabilitarAbrirCrear(false);
                        buttonCerrar.Enabled = true;
                        HabilitarEliminaAgrega(true);
                    }
                    else
                    {
                        MessageBox.Show
                        (
                            "Campos Vacios !!!",
                            "Danger",
                            MessageBoxButtons.OK,
                            MessageBoxIcon.Exclamation
                        );
                    }
                }
                else
                {
                    MessageBox.Show
                    (
                        "El Archivo Ya Existe !!!",
                        "Danger",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Exclamation
                    );
                }

                //textBoxN1.Text = "";
            }
        }