Pascal/Turbo Pascal - Ayuda con Base de datos

   
Vista:

Ayuda con Base de datos

Publicado por Pedro (2 intervenciones) el 08/01/2012 10:35:46
Necesito ayuda creando un programa con Pascal, soy nuevo en esto y aún no entiendo bien como funcionan los arrays y records.

Necesito crear una base de datos de la plantilla de una empresa que incluya contratación, despido de empleados, vista de plantilla y ordenación alfabética.

Cada empleado tendría su ficha tipo:

type Empleado=Record
Nombre:string[30]; // Ej:Pedro Martinez
Especialidad:string[15]; //Ej: Electricista
Fecha_contratacion:string[12]; // Ej: Marzo
Estudios:string[20]; //Ej: Universitarios

end;

var Plantilla: Array[1..100] of Empleado;
Emp: Empleado;


La primera función/procedimiento serviría para agregar uno a uno empleados introduciendo cada vez los datos del nuevo empleado, algo así creo yo:

writeln('Nombre del nuevo empleado.');
readln(Emp.Nombre);
writeln('especialidad');
readln(Emp.Especialidad);
writeln('fecha.');
readln(Emp.Fecha_contratacion);
writeln('Estudios.');
readln(Emp.Estudios);

readkey;

(Sientanse libres de decirme que todo esta mal claro)

La segunda parte sería una función/procedimiento en el que yo introduzca el nombre del empleado que quiero despedir, me muestre los que tienen ese nombre y seleccionar cuál quiero despedir.

La tercera parte es una función procedimiento que muestre el listado de empleados de 4 en 4 cada vez que se pulsa enter o cualquier letra supongo que valdría.

Y la última sería un programa que ordenara alfabeticamente a los empleados por su nombre, especialidad o fecha de contratacion.

Agradecería mucho cualquier ayuda que me puedan dar.
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

Ayuda con Base de datos

Publicado por ramon (2072 intervenciones) el 09/01/2012 11:12:01
{Espero esto te ayude}

program base_datos;
uses
crt;
type
Empleado = Record
Nombre : string[30];
Especialidad : string[15];
Fecha_contratacion : string[12];
Estudios : string[20];
end;

const
archivo : string = 'C:\TP\Basedato.dta';

var
Plantilla : Array[0..100] of Empleado;
Emp : Empleado;
fa, f : file of empleado;
tama, cargo : longint;
tecla : char;


procedure guardar_empleado_entrado(ent : empleado);
begin
assign(f,archivo);
{$I-} reset(f); {$I+}
if ioresult <> 0 then
begin
rewrite(f);
seek(f,0);
write(f,ent);
close(f);
end
else
begin
seek(f,filesize(f));
write(f,ent);
close(f);
end;
end;

procedure entrada_datos_empleado;
begin
clrscr;
writeln('Nombre del nuevo empleado.');
readln(Emp.Nombre);
writeln('especialidad');
readln(Emp.Especialidad);
writeln('fecha.');
readln(Emp.Fecha_contratacion);
writeln('Estudios.');
readln(Emp.Estudios);
guardar_empleado_entrado(emp);
end;

procedure carga_datos_empleado;
var
i : longint;
tc : char;
begin
assign(f,archivo);
{$I-} reset(f); {$I+}
if ioresult <> 0 then
begin
clrscr;
writeln(' Archivo Nombre ',archivo,' No Encontrado Pulse Enter');
repeat
tc := readkey;
until tc = #13;
end
else
begin
fillchar(plantilla,sizeof(plantilla),' ');
tama := filesize(f) - 1;
if tama <= 100 then
begin
for i := 0 to tama do
begin
seek(f,i);
read(f,emp);
plantilla[i] := emp;
end;
cargo := tama;
close(f);
end
else
begin
for i := 0 to 99 do
begin
seek(f,i);
read(f,emp);
plantilla[i] := emp;
end;
cargo := 99;
close(f);
end;
end;
end;

procedure presenta_datos_empeados;
var
pulsa : char;
cont : integer;
x, y : integer;
i : longint;
begin
cont := 0;
x := 1;
y := 1;
i := 0;
repeat
clrscr;
gotoxy(x,y);write(' NOMBRE ESPECIALIDAD FECHA CONTRATO ',
'ESTUDIOS');
for cont := i to i + 3 do
begin
gotoxy(x,y + 2);write(plantilla[cont].Nombre);
gotoxy(x + 23,y + 2);write(plantilla[cont].Especialidad);
gotoxy(x + 44,y + 2);write(plantilla[cont].Fecha_contratacion);
gotoxy(x + 62,y + 2);write(plantilla[cont].Estudios);
y := y + 1;
x := 1;
end;
pulsa := readkey;
if pulsa = #80 then
begin
i := i + 4;
if i > cargo then
i := cargo - 3;
x := 1;
y := 1;
end;
if pulsa = #72 then
begin
i := i - 4;
if i < 0 then
i := 0;
x := 1;
y := 1;
end;
until pulsa = #13;
end;

procedure ordenapor(nm : integer);
var
ewe, tempo : Empleado;
pos, ii, pp, cant : longint;
f1 : file of empleado;
tc : char;
begin
assign(f,archivo);
{$I-} reset(f); {$I+}
if ioresult <> 0 then
begin
clrscr;
writeln(' Archivo Nombre ',archivo,' No Encontrado Pulse Enter');
repeat
tc := readkey;
until tc = #13;
end
else
begin
cant := filesize(f) - 1;
if cant > 100 then
cant := 100;
ii := 0;
pos := 0;
repeat
seek(f,ii);
read(f,Emp);
Plantilla[ii] := emp;
ii := ii + 1;
until ii > cant;
close(f);
if nm = 1 then
begin
for pos := 0 to cant - 1 do
for ii := cant downto pos do
begin
if Plantilla[pos].nombre > Plantilla[ii].nombre then
begin
tempo := Plantilla[pos];
Plantilla[pos] := Plantilla[ii];
Plantilla[ii] := tempo;
end;
end;
end;
if nm = 2 then
begin
for pos := 0 to cant - 1 do
for ii := cant downto pos do
begin
if Plantilla[pos].especialidad > Plantilla[ii].especialidad then
begin
tempo := Plantilla[pos];
Plantilla[pos] := Plantilla[ii];
Plantilla[ii] := tempo;
end;
end;
end;
if nm = 3 then
begin
for pos := 0 to cant - 1 do
for ii := cant downto pos do
begin
if Plantilla[pos].Fecha_contratacion < Plantilla[ii].Fecha_contratacion then
begin
tempo := Plantilla[pos];
Plantilla[pos] := Plantilla[ii];
Plantilla[ii] := tempo;
end;
end;
end;
end;
assign(f1,'c:\tp\temporal.tep');
rewrite(f1);
for ii := 0 to cant do
begin
seek(f1,ii);
write(f1,Plantilla[ii]);
end;
close(f1);
erase(f);
rename(f1,archivo);
end;

procedure ordena_empleados;
var
por : string[20];
opci : char;
sal : boolean;
begin
gotoxy(10,2);write('ORDENACION DE EMPLEADOS POR');
gotoxy(10,4);write(' 1 = nombre');
gotoxy(10,5);write(' 2 = especialidad');
gotoxy(10,6);write(' 3 = fecha de contratacion');
gotoxy(10,7);write(' 4 = nada');
gotoxy(10,9);write('Elija Opcion De Ordenacion');
sal := false;
repeat
opci := readkey;
case opci of
#49 : begin
ordenapor(1);
sal := true;
end;
#50 : begin
ordenapor(2);
sal := true;
end;
#51 : begin
ordenapor(3);
sal := true;
end;
#52 : sal := true;
end;
until sal = true;

end;

procedure anula_ficha_empleado;
var
anular : Empleado;
f1 : file of empleado;
ii, pp, borra, ip : longint;
tc : char;
y : integer;
nomb : string[30];
begin
assign(f,archivo);
{$I-} reset(f); {$I+}
if ioresult <> 0 then
begin
clrscr;
writeln(' Archivo Nombre ',archivo,' No Encontrado Pulse Enter');
repeat
tc := readkey;
until tc = #13;
end
else
begin
ip := filesize(f) - 1;
if ip > 100 then
ip := 100;
for borra := 0 to ip do
begin
seek(f,borra);
read(f,anular);
Plantilla[borra] := anular;
end;
close(f);
clrscr;
gotoxy(10,2);write('Entre El Nombre Del Empleado');
gotoxy(10,4);write('Nombre : ');
readln(nomb);
clrscr;
y := 2;
for pp := 0 to ip do
begin
if Plantilla[pp].nombre = nomb then
begin
gotoxy(10,y);write(' N§ = ',pp + 1,' = ',Plantilla[pp].nombre);
y := y + 1;
end;
end;
end;
gotoxy(10,10);write('Entre N§ A Borrar : ');
gotoxy(30,10);readln(borra);
assign(f1,'c:\tp\temporal.tep');
rewrite(f1);
pp := 0;
for ii := 0 to ip do
begin
if ii <> borra - 1 then
begin
seek(f1,pp);
write(f1,Plantilla[ii]);
pp := pp + 1;
end;
end;
close(f1);
erase(f);
rename(f1,archivo);
end;

procedure menu;
var
opcion : char;
final : boolean;
begin
final := false;
repeat
clrscr;
gotoxy(10,2);write('***** Menu General *****');
gotoxy(10,4);write(' 1 = Entrada Datos Empleado ');
gotoxy(10,5);write(' 2 = Visualizacion Empleados');
gotoxy(10,6);write(' 3 = Ordenar Archivo Empleado');
gotoxy(10,7);write(' 4 = Anular Ficha Empleado');
gotoxy(10,8);write(' 5 = Salir');
gotoxy(10,11);write('<<< Elija Opcion >>>');
opcion := readkey;
clrscr;
case opcion of
#49 : begin
repeat
entrada_datos_empleado;
clrscr;
writeln;
writeln('ENTRA MAS EMPLEADOS [S/N]');
repeat
tecla := readkey;
if tecla in['s','S'] then
clrscr;
until tecla in['s','S','n','N'];
until tecla in['n','N'];
end;
#50 : begin
carga_datos_empleado;
presenta_datos_empeados;
end;
#51 : ordena_empleados;
#52 : anula_ficha_empleado;
#53 : final := true;
end;
until final = true;
end;

begin
clrscr;
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

Ayuda con Base de datos

Publicado por Pedro (2 intervenciones) el 10/01/2012 15:35:48
Antes de nada muchas gracias por contestar con tanta rapidez y haber hecho tanto esfuerzo.

La verdad es que todavía estoy intentando entender algunas cosas del código, como he dicho soy nuevo en esto y hay muchas cosas que no he usado nunca como #49, #50, file, reset y alguna otra cosilla de operaciones.

He probado el programa de todas formas y compila bien pero cuando relleno los datos del empleado y va a guardarlos me salta "RunError(64800)"
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

Ayuda con Base de datos

Publicado por ramon (2072 intervenciones) el 12/01/2012 20:32:20
Primero cambia esto a tu dirección de disco duro y directorio que quieras.

archivo : string = 'C:\TP\Basedato.dta';

segundo los #x corresponde a los números de cada tecla comprueba los códigos del teclado
en dos.
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