Delphi: Lista Doble Enlace Ing Wilo Carpio

Bienvenido a mi website..!!

QUE ES.? Qué es esto..??
ALTA Altas
VER Consulta
BAJAS Bajas
MODIFICAR Modificar
OTRO Otros

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Grids, StdCtrls, Buttons, jpeg, ExtCtrls, ComCtrls, Tabnotbk;

type
PNodo = ^TNodo;
TNodo = record
PuntPila: PNodo;
PuntCola: PNodo;
Nombre:string[40];
Domicilio:string[20];
Legajo,Telefono:string[15];
end;

var MiFormulario: TMiFormulario;
PrimerNodo,UltNodo,NodoAux:PNodo;
j:INTEGER;

implementation
{$R *.DFM}

Volver al principio


Volver al principio Estructura DinámicaDELPHI: Lista de Doble Enlace

unit ProgramaParcial;

interface

procedure TMiFormulario.FormCreate(Sender: TObject);
var Horizontal : INTEGER;
begin
MiFormulario.Grilla.Cells[0,0]:='NOMBRE';
MiFormulario.Grilla.Cells[1,0]:='DIRECCIÓN';
MiFormulario.Grilla.Cells[2,0]:='TELÉFONO';
MiFormulario.Grilla.Cells[3,0]:='LEGAJO';
j:=1;
PrimerNodo := NIL;
UltNodo := NIL;
NodoAux := NIL;
Horizontal:=Screen.Width div 12;
MiFormulario.Left:=Screen.Width div 15;
MiFormulario.Top:= Screen.Height div 15;
MiFormulario.Width := 2* (Screen.Width div 3)-Horizontal div 3;
MiFormulario.Height := 2* (Screen.Height div 3);
MiFormulario.Caption := 'Segundo Parcial: Pilas y Colas';
end;


Volver al principio


Volver al principio ¦ ALTASIngreso de nuevos datos procedure TMiFormulario.GrabarClick(Sender: TObject);

begin
if(((MiFormulario.NombreA.Text='')OR(MiFormulario.NombreA.Text=' '))OR(MiFormulario.NombreA.Text=' '))
then application.messagebox('Debe ingresar el nombre','ALTA DE DATOS',mb_ok+mb_iconexclamation)
else begin
if(application.messagebox('Confirma inserción','ALTA DE DATOS',MB_ICONASTERISK+MB_YESNO+MB_DEFBUTTON1)=6)
then begin
OpcionBaja.Enabled:=TRUE;
GroupBox1.Enabled:=TRUE;
RadioGroup1.Enabled:=TRUE;
NEW(NodoAux);
NodoAux^.Nombre:=MiFormulario.NombreA.Text;
NodoAux^.Domicilio:=MiFormulario.DomAlt.Text;
NodoAux^.Telefono:=MiFormulario.TelA.Text;
NodoAux^.Legajo:=MiFormulario.LegA.Text;
NodoAux^.PuntPila:=NIL;
NodoAux^.PuntCola:=NIL;
if(PrimerNodo=NIL) {Esta vacío}
then begin
PrimerNodo := NodoAux; {PrimerNodo recibe la dirección del nodo auxiliar}
UltNodo := NodoAux;
end
else begin
NodoAux.PuntPila:=UltNodo;
UltNodo.PuntCola:=NodoAux;
UltNodo:=NodoAux;
end;
MiFormulario.Grilla.Cells[0,j]:=NodoAux^.Nombre;
MiFormulario.Grilla.Cells[1,j]:=NodoAux^.Domicilio;
MiFormulario.Grilla.Cells[2,j]:=NodoAux^.Telefono;
MiFormulario.Grilla.Cells[3,j]:=NodoAux^.Legajo;
if(j<>1)
then begin
Grilla.RowCount:=Grilla.RowCount+1;
end;
j:=j+1;
MiFormulario.NombreA.Text:='';
MiFormulario.TelA.Text:='';
MiFormulario.DomAlt.Text:='';
MiFormulario.LegA.Text:='';
MiFormulario.NombreA.SetFocus;
end;
end;
end;


Volver al principio


Volver al principio CONSULTAVer los datos procedure TMiFormulario.PilaOColaClick(Sender: TObject);
begin
j:=1;
Grilla.Cells[0,1]:='';
Grilla.Cells[0,1]:='';
Grilla.Cells[0,2]:='';
Grilla.Cells[0,3]:='';
if (PilaOCola.ItemIndex=0)//Cola
then begin
NodoAux:=PrimerNodo;
while(NodoAux<>NIL)
do begin
MiFormulario.Grilla.Cells[0,j]:=NodoAux^.Nombre;
MiFormulario.Grilla.Cells[1,j]:=NodoAux^.Domicilio;
MiFormulario.Grilla.Cells[2,j]:=NodoAux^.Telefono;
MiFormulario.Grilla.Cells[3,j]:=NodoAux^.Legajo;
NodoAux:=NodoAUx^.PuntCola;
j:=j+1;
end;
end
else begin ///Pila
NodoAux:=UltNodo;
while(NodoAux<>NIL)
do begin
MiFormulario.Grilla.Cells[0,j]:=NodoAux^.Nombre;
MiFormulario.Grilla.Cells[1,j]:=NodoAux^.Domicilio;
MiFormulario.Grilla.Cells[2,j]:=NodoAux^.Telefono;
MiFormulario.Grilla.Cells[3,j]:=NodoAux^.Legajo;
NodoAux:=NodoAUx^.PuntPila;
j:=j+1;
end;
end;
end;


Volver al principio


Volver al principio BAJASEliminar datos procedure TMiFormulario.BajaClick(Sender: TObject);
begin{1}
if(Application.MessageBox('Esta seguro que desea borrarlo..??','BAJA DE DATOS',MB_ICONASTERISK+MB_YESNO+MB_DEFBUTTON2)=6)
then
begin{2}
case OpcionBaja.ItemIndex of
0: begin{3}
NodoAux:=PrimerNodo;
while (NodoAux^.Nombre<>SelectBaja.Text)do
begin{4}
NodoAux:=NodoAux^.PuntCola;
end;{4}
end;{3}
1: begin {a}
NodoAux:=PrimerNodo;
while (NodoAux^.Legajo<>SelectBaja.Text)do
begin{b}
NodoAux:=NodoAux^.PuntCola;
end;{b}
end;{a}
2: begin{5}
NodoAux:=PrimerNodo;
while (NodoAux^.Domicilio<>SelectBaja.Text)do
begin{6}
NodoAux:=NodoAux^.PuntCola;
end;{6}
end;{5}
3: begin {7}
NodoAux:=PrimerNodo;
while (NodoAux^.Telefono<>SelectBaja.Text)do
begin{8}
NodoAux:=NodoAux^.PuntCola;
end;{8}
end;{7}
end;
if((NodoAux=PrimerNodo)and(NodoAux=UltNodo))
//Hay uno solo
then begin {9}
PrimerNodo:=NIL;
UltNodo:=NIL;
DISPOSE(NodoAux);
OpcionBaja.Enabled:=FALSE;
GroupBox1.Enabled:=FALSE;
RadioGroup1.Enabled:=FALSE;
grilla.Cells[0,1]:='';
grilla.Cells[1,1]:='';
grilla.Cells[2,1]:='';
grilla.Cells[3,1]:='';
end {9}
else begin {10}//Hay varios
if(NodoAux=PrimerNodo) // si es el primer nodo ingresado
then begin {11}
NodoAux^.PuntCola^.PuntPila:=NIL;
PrimerNodo:=PrimerNodo^.PuntCola;
NodoAux^.PuntCola:=NIL;
Dispose(NodoAux);
end {11}
else begin{12}
if(NodoAux=UltNodo)//si es el ultimo nodo ingresado
then begin{13}
NodoAux^.PuntPila^.PuntCola:=NIL;
UltNodo:=UltNodo^.PuntPila;
NodoAux^.PuntPila:=NIL;
Dispose(NodoAux);
end {13}
else begin {14}//es un nodo intermedio
NodoAux^.PuntCola^.PuntPila:=NodoAux^.PuntPila;
NodoAux^.PuntPila^.PuntCola:=NodoAux^.PuntCola;
NodoAux^.PuntCola:=NIL;
NodoAux^.PuntPila:=NIL;
DISPOSE(NodoAux);
end; {14}
end;{10}
if(PilaOCola.ItemIndex=0) then
PilaOCola.ItemIndex:=1
else PilaOCola.ItemIndex:=0;
if(PilaOCola.ItemIndex=0) then
PilaOCola.ItemIndex:=1
else PilaOCola.ItemIndex:=0;
if(j<>1)
then begin
Grilla.RowCount:=Grilla.RowCount-1;
j:=j-1;
end;
end;{2}
end;
Baja.Enabled:=FALSE;
MiFormulario.OpcionBaja.ItemIndex:=-1;
MiFormulario.SelectBaja.Visible:=FALSE;
end;{1}


Volver al principio


Volver al principio MODIFICARCambiar datos procedure TMiFormulario.ModificarClick(Sender: TObject);
begin
if(Application.MessageBox('Esta seguro qu desea modificarlo..??','Esta por modificar una dato',MB_ICONASTERISK+MB_YESNO+MB_DEFBUTTON2)=6)
then begin
NodoAux^.Nombre:=Edit1.Text;
NodoAux^.Domicilio:=Edit2.Text;
NodoAux^.Telefono:=Edit3.Text;
NodoAux^.Legajo:=Edit4.Text;
SelectMod.Visible:=FALSE;
DatosModif.Visible:=FALSE;
end
else begin
DatosModif.Visible:=FALSE;
end;
end;

procedure TMiFormulario.CorregirClick(Sender: TObject);
begin
MiFormulario.NombreA.Text:='';
MiFormulario.TelA.Text:='';
MiFormulario.LegA.Text:='';
MiFormulario.DomAlt.Text:='';
MiFormulario.NombreA.SetFocus;
end;


Volver al principio


Volver al principio OTROSProcedimientos anexos

//////////////////////////////////////////////////////////
// Termina el programa
//
/////////////////////////////////////////////////////////////

procedure TMiFormulario.SalirClick(Sender: TObject);
begin
if(Application.MessageBox('Confirma la operación','Esta por cerrar el programa',MB_ICONASTERISK+MB_YESNO+MB_DEFBUTTON2)=6)
then BEGIN
MiFormulario.Close;
END;
end;

////////////////////////////////////////////////////////
// Elige si trabaja con cola o pila
////////////////////////////////////////////////////////

procedure TMiFormulario.OpcionBajaClick(Sender: TObject);
begin
SelectBaja.Clear;
NodoAux:=PrimerNodo;
if OpcionBaja.ItemIndex=0
then begin
while (NodoAux<>NIL)do
begin
SelectBaja.Items.Append(NodoAux^.Nombre);
NodoAux:=NodoAux^.PuntCola;
end;
end;
if OpcionBaja.ItemIndex=1
then begin
while (NodoAux<>NIL)do
begin
SelectBaja.Items.Append(NodoAux^.Legajo);
NodoAux:=NodoAux^.PuntCola;
end;
end;
if OpcionBaja.ItemIndex=2
then begin
while (NodoAux<>NIL)do
begin
SelectBaja.Items.Append(NodoAux^.Domicilio);
NodoAux:=NodoAux^.PuntCola;
end;
end;
if OpcionBaja.ItemIndex=3
then begin
while (NodoAux<>NIL)do
begin
SelectBaja.Items.Append(NodoAux^.Telefono);
NodoAux:=NodoAux^.PuntCola;
end;
end;
MiFormulario.SelectBaja.Visible:=TRUE;
end;

procedure TMiFormulario.NombreAChange(Sender: TObject);
begin
MiFormulario.Grabar.Enabled:=TRUE;
Corregir.Enabled:=TRUE;
end;

procedure TMiFormulario.RadioGroup1Click(Sender: TObject);
begin
SelectMod.Clear;
NodoAux:=PrimerNodo;
if RadioGroup1.ItemIndex=0
then begin
while (NodoAux<>NIL)do
begin
SelectMod.Items.Append(NodoAux^.Nombre);
NodoAux:=NodoAux^.PuntCola;
end;
end;
if RadioGroup1.ItemIndex=1
then begin
while (NodoAux<>NIL)do
begin
SelectMod.Items.Append(NodoAux^.Legajo);
NodoAux:=NodoAux^.PuntCola;
end;
end;
if RadioGroup1.ItemIndex=2
then begin
while (NodoAux<>NIL)do
begin
SelectMod.Items.Append(NodoAux^.Domicilio);
NodoAux:=NodoAux^.PuntCola;
end;
end;
if RadioGroup1.ItemIndex=3
then begin
while (NodoAux<>NIL)do
begin
SelectMod.Items.Append(NodoAux^.Telefono);
NodoAux:=NodoAux^.PuntCola;
end;
end;
SelectMod.Visible:=TRUE;
end;

procedure TMiFormulario.SelectBajaChange(Sender: TObject);
begin
if(SelectBaja.Text<>'')
then Baja.Enabled:=TRUE;
end;

procedure TMiFormulario.SelectModChange(Sender: TObject);
begin
if(SelectMod.Text<>'')
then begin
DatosModif.Visible:=TRUE;
Modificar.Enabled:=FALSE;
case RadioGroup1.ItemIndex of
0: begin{3}
NodoAux:=PrimerNodo;
while (NodoAux^.Nombre<>SelectMod.Text)do
begin{4}
NodoAux:=NodoAux^.PuntCola;
end;{4}
end;{3}
1: begin {a}
NodoAux:=PrimerNodo;
while (NodoAux^.Legajo<>SelectMod.Text)do
begin{b}
NodoAux:=NodoAux^.PuntCola;
end;{b}
end;{a}
2: begin{5}
NodoAux:=PrimerNodo;
while (NodoAux^.Domicilio<>SelectMod.Text)do
begin{6}
NodoAux:=NodoAux^.PuntCola;
end;{6}
end;{5}
3: begin {7}
NodoAux:=PrimerNodo;
while (NodoAux^.Telefono<>SelectMod.Text)do
begin{8}
NodoAux:=NodoAux^.PuntCola;
end;{8}
end;{7}
end;
Edit1.Text:=NodoAux^.Nombre;
Edit2.Text:=NodoAux^.Domicilio;
Edit3.Text:=NodoAux^.Telefono;
Edit4.Text:=NodoAux^.Legajo;
SelectMod.Visible:=FALSE;
RadioGroup1.ItemIndex:=-1;
end;
end;

procedure TMiFormulario.BotonesChange(Sender: TObject; NewTab: Integer;
var AllowChange: Boolean);
begin
if(PilaOCola.ItemIndex=0) then
PilaOCola.ItemIndex:=1
else PilaOCola.ItemIndex:=0;
if(PilaOCola.ItemIndex=0) then
PilaOCola.ItemIndex:=1
else PilaOCola.ItemIndex:=0;
DatosModif.Visible:=FALSE;
RadioGroup1.ItemIndex:=-1;
OpcionBaja.ItemIndex:=-1;
SelectBaja.Visible:=FALSE;
Corregir.Enabled:=FALSE;
Grabar.Enabled:=FALSE;
NombreA.Text:='';
DomAlt.Text:='';
TelA.Text:='';
LegA.Text:='';
Baja.Enabled:=FALSE;
SelectMod.Visible:=FALSE;
end;

procedure TMiFormulario.Edit1Change(Sender: TObject);
begin
Modificar.Enabled:=TRUE;
end;

procedure TMiFormulario.Edit2Change(Sender: TObject);
begin
Modificar.Enabled:=TRUE;
end;

procedure TMiFormulario.Edit3Change(Sender: TObject);
begin
Modificar.Enabled:=TRUE;
end;

procedure TMiFormulario.Edit4Change(Sender: TObject);
begin
Modificar.Enabled:=TRUE;
end;

procedure TMiFormulario.SelectModClick(Sender: TObject);
begin
Modificar.Enabled:=FALSE;
end;
end.


Volver al principio