Pascal/Turbo Pascal - Dudas con array de registros

 
Vista:
sin imagen de perfil

Dudas con array de registros

Publicado por Horacio Daniel Belardita (53 intervenciones) el 17/11/2011 19:50:30
hola bueno de vuelta acudiendo al foro que estan siempre dispuestos a ayudar,no asisti a clases y si me podrian ayudar con este problema:

Altas y bajas
Cuando se producen altas, bajas y/o modificaciones se debe generar un
nuevo array maestro con el mismo diseño que el original. Al terminar el
proceso, el array original deberá ser eliminado.

Se dispone de un array maestro de empleados y de un array de altas:
Array maestro: Un registro por empleado
SECCIÓN /EMPLEADO /NOMBRE_APELLIDO/ CARGO /SUELDO_BÁSICO

Array de altas: Uno o ningún registro por empleado
SECCIÓN / EMPLEADO/ NOMBRE_APELLIDO/ CARGO/ SUELDO_BÁSICO


Aparear los array a fin de generar un array maestro actualizado, incorporando las altas. Contar
e imprimir "ALTA ERRÓNEA" cuando el registro de alta ya existe en el array maestro.
Informar según la siguiente salida impresa:

Sección Empleado Nombre y apellido Cargo Sueldo basico
XXXX XXXXX XXXX XXXXX XXXX XXXXX
XXXX XXXXX XXXX XXXXX XXXX XXXXX
XXXX XXXXX XXXX XXXXX xxxx alta erronea


Total de altas realizadas: XXXX Erróneas: XXX

desde ya gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Dudas con array de registros

Publicado por ramon (2158 intervenciones) el 17/11/2011 21:33:47
Me puedes informar como defines estos datos.

SECCIÓN numero
EMPLEADO numero
NOMBRE_APELLIDO string
CARGO string
SUELDO_BÁSICO real

cuantos empleados tienen que entrar en el array 1..a
guardas el registro en archivo
las modificaciones de empleados [ anulaciones / altas / y bajas ]
tienes que realizar las con [readln] o puedes de otra forma
tienes que imprimir en pantalla o en impresora aclárame estas dudas
para poder ayudarte mejor.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Dudas con array de registros

Publicado por Horacio Daniel Belardita (53 intervenciones) el 17/11/2011 23:34:55
ramon el tipo de datos es tal cual como pusiste.
en el array ponele que sean 10 empleados.
yo tampoco entendi si hay que guardarlo en archivo pero creo que si.
las modificaciones de cualquier forma.
y solo imprimir en pantalla
gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Dudas con array de registros

Publicado por ramon (2158 intervenciones) el 19/11/2011 12:30:33
{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.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Dudas con array de registros

Publicado por Horacio Daniel Belardita (53 intervenciones) el 19/11/2011 14:42:52
Muchas gracias Roman por tu ayuda y el tiempo que te tomaste en hacerlo.Saludos y Que sigas bien
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar