Dudas con array de registros
{Espero esto te ayude}
program arrayreg;
uses
crt;
type
regempleado = record
SECCION : integer;
EMPLEADO : integer;
NOMBRE_APELLIDO : string[50];
CARGO : string[30];
SUELDO_BASICO : real;
end;
var
empleado : regempleado;
arrayemp : array[1..10] of regempleado;
cont : integer;
f : file of regempleado;
procedure textos(x,y : integer; tipo : char; t : integer);
var
sec, num : integer;
nombape : string[50];
carg : string[30];
suel : real;
tecla : char;
dato : string;
error, i : integer;
begin
i := 1;
fillchar(dato,256,' ');
dato[0] := chr(255);
gotoxy(x,y);
repeat
tecla := readkey;
if tipo in['t','T'] then
begin
if tecla in[#39..#126,#124,#125,#32] then
begin
dato[i] := tecla;
dato[0] := chr(i);
gotoxy(x + i,y);write(dato[i]);
i := i + 1;
if i > 255 then
i := 255;
end;
end;
if tipo in['n','N'] then
begin
if tecla in[#48..#57] then
begin
dato[i] := tecla;
dato[0] := chr(i);
gotoxy(x + i,y);write(dato[i]);
i := i + 1;
if i > 12 then
i := 12;
end;
end;
if tipo in['r','R'] then
begin
if tecla in[#48..#57,#46,#44] then
begin
if tecla = #44 then
tecla := #46;
dato[i] := tecla;
dato[0] := chr(i);
gotoxy(x + i,y);write(dato[i]);
i := i + 1;
if i > 15 then
i := 15;
end;
end;
if tecla = #8 then
begin
i := i - 1;
if i < 1 then
i := 1;
dato[i] := ' ';
dato[0] := chr(i);
gotoxy(x + i,y);write(dato[i]);
end;
until tecla = #13;
if dato[0] = chr(255) then
begin
i := 1;
fillchar(dato,256,' ');
dato[0] := chr(255);
end
else
begin
case t of
1 : val(dato,empleado.seccion,error);
2 : val(dato,empleado.empleado,error);
3 : empleado.nombre_apellido := copy(dato,1,length(dato));
4 : empleado.cargo := copy(dato,1,length(dato));
5 : val(dato,empleado.sueldo_basico,error);
end;
end;
end;
procedure entrada_datos_empleado;
var
fue : boolean;
put : char;
cs : integer;
begin
fue := false;
repeat
gotoxy(10,2);write('<< Entrada Datos Empleado >>');
gotoxy(10,4);write('Seccion : ');
gotoxy(10,5);write('N§ Empleado : ');
gotoxy(10,6);write('Nombre y Apellido : ');
gotoxy(10,7);write('Cargo : ');
gotoxy(10,8);write('Sueldo Basico : ');
textos(29,4,'n',1);
textos(29,5,'n',2);
textos(29,6,'t',3);
textos(29,7,'t',4);
textos(29,8,'r',5);
gotoxy(30,4);write(empleado.seccion);
gotoxy(30,5);write(empleado.empleado);
gotoxy(30,6);write(empleado.nombre_apellido);
gotoxy(30,7);write(empleado.cargo);
gotoxy(30,8);write(empleado.sueldo_basico:8:2);
cs := 1;
repeat
if arrayemp[cs].empleado = empleado.empleado then
begin
gotoxy(10,14);write('ALTA ERRONEA El Numero Existe');
repeat until keypressed;
exit;
end;
cs := cs + 1;
until cs > cont - 1;
gotoxy(10,10);write('Los Datos Son Correctos [S/N]');
repeat
put := readkey;
until put in['s','S','n','N'];
if put in['s','S'] then
fue := true
else
clrscr;
until fue = true;
arrayemp[cont] := empleado;
cont := cont + 1;
if cont > 10 then
cont := 10;
clrscr;
end;
procedure modificaciones;
var
u : integer;
pul : char;
begin
gotoxy(10,2);write('<<< Modificacion Datos Empleado >>>');
gotoxy(10,4);write('Entre N§ Empleado : ');
textos(29,4,'n',2);
gotoxy(30,4);write(empleado.empleado);
u := 0;
repeat
u := u + 1;
until (arrayemp[u].empleado = empleado.empleado) or (u > cont - 1);
if u <= cont - 1 then
begin
clrscr;
repeat
gotoxy(10,2);write('<<< Modificacion Datos Empleado >>>');
empleado := arrayemp[u];
gotoxy(10,4);write('[1] Seccion : ');
gotoxy(10,5);write('[2] N§ Empleado : ');
gotoxy(10,6);write('[3] Nombre y Apellido : ');
gotoxy(10,7);write('[4] Cargo : ');
gotoxy(10,8);write('[5] Sueldo Basico : ');
gotoxy(34,4);write(empleado.seccion);
gotoxy(34,5);write(empleado.empleado);
gotoxy(34,6);write(empleado.nombre_apellido);
gotoxy(34,7);write(empleado.cargo);
gotoxy(34,8);write(empleado.sueldo_basico:8:2);
gotoxy(10,10);write('Elija El Numero A Modificar [ESC] = Termina');
pul := readkey;
clrscr;
case pul of
'1' : begin
empleado.seccion := 0;
gotoxy(10,4);write('Seccion : ');
textos(29,4,'n',1);
arrayemp[u].seccion := empleado.seccion;
gotoxy(34,4);write(empleado.seccion);
end;
'2' : begin
empleado.empleado := 0;
gotoxy(10,5);write('N§ Empleado : ');
textos(29,5,'n',2);
arrayemp[u].empleado := empleado.empleado;
gotoxy(34,5);write(empleado.empleado);
end;
'3' : begin
empleado.nombre_apellido := ' ';
gotoxy(10,6);write('Nombre y Apellido : ');
textos(29,6,'t',3);
arrayemp[u].nombre_apellido := empleado.nombre_apellido;
gotoxy(34,6);write(empleado.nombre_apellido);
end;
'4' : begin
empleado.cargo := ' ';
gotoxy(10,7);write('Cargo : ');
textos(29,7,'t',4);
arrayemp[u].cargo := empleado.cargo;
gotoxy(34,7);write(empleado.cargo);
end;
'5' : begin
empleado.sueldo_basico := 0.0;
gotoxy(10,8);write('Sueldo Basico : ');
textos(29,8,'r',5);
arrayemp[u].sueldo_basico := empleado.sueldo_basico;
gotoxy(34,8);write(empleado.sueldo_basico:8:2);
end;
end;
until pul = #27;
arrayemp[u] := empleado;
u := 0;
end
else
begin
gotoxy(10,10);write('El Empleado N§ ',empleado.empleado,
' No Aparece');
gotoxy(10,12);write('Pulse Una Tecla');
repeat until keypressed;
end;
clrscr;
end;
procedure bajaempleado;
var
borrados : array[1..10] of regempleado;
u, z, c : integer;
encontrado : boolean;
begin
gotoxy(10,2);write('<<< Baja Empleado >>>');
gotoxy(10,4);write('Entre N§ Empleado : ');
textos(29,4,'n',2);
gotoxy(30,4);write(empleado.empleado);
u := 1;
encontrado := false;
repeat
if arrayemp[u].empleado = empleado.empleado then
begin
encontrado := true;
end;
u := u + 1;
until (encontrado = true) or (u > cont - 1);
if encontrado = true then
begin
c := 1;
z := 1;
repeat
if c <> u - 1 then
begin
borrados[z] := arrayemp[c];
z := z + 1;
c := c + 1;
end
else
begin
c := c + 1;
end;
until c > cont - 1;
end;
if encontrado = true then
begin
for c := 1 to z - 1 do
begin
arrayemp[c] := borrados[c];
end;
cont := z;
end;
clrscr;
end;
procedure guardardatos;
var
i : integer;
begin
assign(f,'c:\tp\Empleado.dat');
rewrite(f);
i := 0;
repeat
seek(f,i);
write(f,arrayemp[i + 1]);
i := i + 1;
until i > cont - 1;
close(f);
end;
procedure muestradatos;
var
h, i : integer;
terb : char;
begin
gotoxy(10,2);write('**** Presentacion Datos Empleados ****');
gotoxy(10,4);write('Pulse [A] De Array o [D] De Disco');
repeat
terb := readkey;
until terb in['a','A','d','D'];
if terb in['d','D'] then
begin
assign(f,'c:\tp\Empleado.dat');
{$I-} reset(f); {$I+}
if ioresult <> 0 then
begin
exit;
end
else
begin
i := 0;
repeat
seek(f,i);
read(f,arrayemp[i + 1]);
i := i + 1;
until i > filesize(f) - 1;
close(f);
cont := i;
end;
end;
if terb in['a','A'] then
begin
h := 1;
end;
clrscr;
gotoxy(19,2);write('<<<<< Losdatos Son >>>>>');
gotoxy(2,4);write('SECCION EMPLEADO NOMBRE APELLIDO CARGO SUELDO BISICO');
for h := 1 to cont - 1 do
begin
gotoxy(4,4 + h);write(arrayemp[h].seccion);
gotoxy(13,4 + h);write(arrayemp[h].empleado);
gotoxy(23,4 + h);write(arrayemp[h].nombre_apellido);
gotoxy(44,4 + h);write(arrayemp[h].cargo);
gotoxy(57,4 + h);write(arrayemp[h].sueldo_basico:8:2);
end;
readln;
clrscr;
end;
procedure menu;
var
tec : char;
y, opcion : integer;
salir : boolean;
begin
opcion := 1;
salir := false;
y := 4;
repeat
gotoxy(10,2);write('**** Menu General ****');
gotoxy(10,4);write('Entrada Datos');
gotoxy(10,5);write('Modifica Datos');
gotoxy(10,6);write('Borrar Empleado');
gotoxy(10,7);write('Salvar Datos');
gotoxy(10,8);write('Muestra Datos');
gotoxy(10,9);write('Salir');
gotoxy(10,11);write('Elija opcion con [',chr(24),chr(25),'] y [Enter]');
gotoxy(5,y);write('|=|>');
tec := readkey;
clrscr;
if tec = #72 then
begin
opcion := opcion - 1;
if opcion < 1 then
opcion := 1;
y := y - 1;
if y < 4 then
y := 4;
end;
if tec = #80 then
begin
opcion := opcion + 1;
if opcion > 6 then
opcion := 6;
y := y + 1;
if y > 9 then
y := 9;
end;
if tec = #13 then
begin
case opcion of
1 : entrada_datos_empleado;
2 : modificaciones;
3 : bajaempleado;
4 : guardardatos;
5 : muestradatos;
6 : salir := true;
end;
end;
until salir = true;
end;
begin
clrscr;
cont := 1;
menu;
end.