Pascal/Turbo Pascal - Correccion de mi codigo :-( error fatal.. ayuda

   
Vista:

Correccion de mi codigo :-( error fatal.. ayuda

Publicado por Mari (16 intervenciones) el 16/07/2014 07:19:35
Buenas noches,

Agradecería su valiosa ayuda,

Realizo un programa para eliminar empleados y ordenarlos por número de empleado.

Tengo mi procedimiento de eliminar y ordenar, (Uso archivos), pero tengo un problema, yo elimino el registro correctamente, eso creo, ya que al consultar no muestra el registro eliminado, pero al ordenar por numero de empleado sigue apareciendo. Como puedo hacer para que se actualice al ordenar? O es que tengo un error al eliminar mi registro? Agradecería mucho su ayuda. Estos son mis procedimientos.

procedure Eliminar (num:string); //Aqui es donde elimino al empleado
Var
ar : longint;
begin
assign (f, archi);
{$I-}rESET(f);{$I+}
if ioresult<>0 then
begin
writeln(' Error’);
readkey;
end
else
begin
for arch := 0 to filesize(f) - 1 do
begin
seek(f,ar);
read(f,Datos);
if Datos.num<> num then
begin
end
else
begin
Datos.activo := false;
seek(f,ar);
write(f,Datos);
writeln ('Empleado eliminado’);
end
else
end;
close(f);
end;
end;


procedure NumOrdenado; //Aquí es donde ordeno
var
E1, A : RegistroE;
ar, ar2 : longint;
begin
assign (f, archi);
{$I-}rESET(f);{$I+}
if ioresult<>0 then
begin
writeln(' Error’);
readln;
exit;
end
else
begin
for ar := 0 to filesize(f) - 1 do
for ar2 := filesize(f) - 1 downto ar + 1 do
begin
seek(f,ar);
read(f,Datos);
seek(f,ar2);
read(f,E1);
if Datos.num> E1.num then
begin
A := Datos;
Datos := E1;
E1 := A;
seek(f,ar);
write(f,Datos);
seek(f,ar2);
write(f,E1);
end;
end;
end;
close(f);
end;


procedure MostrarPacientesArchivo; // y aquí es donde maestro los empleados ordenados
var
z: longint;
begin
assign(f,archi);
{$I-} reset(f); {$I+}
if ioresult <> 0 then
begin
writeln;
writeln(' Error’);
readln;
exit;
end
else
begin
for z := 0 to filesize(f) - 1 do
begin seek(f,z);
read(f,Datos);
writeln(Datos.Nom,' ',Datos.num);
end;
close(f);
writeln;
writeln(' Pulse Enter');
readln;
end;
end;
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

Correccion de mi codigo :-( error fatal.. ayuda

Publicado por ramon (39 intervenciones) el 17/07/2014 00:31:11
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
{Mira te corrijo tu procedimientos tienes que darle una condición para que detecte si es true o false puesto que
el registro sigue en el archivo siempre lo leerá   }
 
procedure Eliminar (num:string); {//Aqui es donde elimino al empleado}
Var
ar : longint;
begin
assign (f, archi);
{$I-}rESET(f);{$I+}
if ioresult<>0 then
begin
writeln(' Error');
readkey;
end
else
begin
for arch := 0 to filesize(f) - 1 do
begin
seek(f,arch);
read(f,Datos);
if (Datos.num = num) and (datos.activo = true) then
begin
  Datos.activo := false;
  seek(f,ar);
  write(f,Datos);
  writeln ('Empleado eliminado');
  break;
 end
   else
     begin
     end
 end;
close(f);
 end;
end;
 
 
procedure NumOrdenado; {//Aquí es donde ordeno}
var
E1, A : RegistroE;
ar, ar2 : longint;
begin
assign (f, archi);
{$I-}rESET(f);{$I+}
if ioresult<>0 then
begin
writeln(' Error');
readln;
exit;
end
else
begin
for ar := 0 to filesize(f) - 1 do
 begin
    seek(f,ar);
    read(f,Datos);
  if datos.activo = true then
  begin
  for ar2 := ar + 1 to filesize(f) - 1 do
  begin
    seek(f,ar2);
    read(f,E1);
   if Datos.num > E1.num then
   begin
      A := Datos;
      Datos := E1;
      E1 := A;
      seek(f,ar);
      write(f,Datos);
      seek(f,ar2);
      write(f,E1);
   end;
  end;
 end;
end;
close(f);
end;
 
 
procedure MostrarPacientesArchivo; {// y aquí es donde maestro los empleados
                                             ordenados}
var
z: longint;
begin
assign(f,archi);
{$I-} reset(f); {$I+}
if ioresult <> 0 then
begin
writeln;
writeln(' Error');
readln;
exit;
end
else
begin
for z := 0 to filesize(f) - 1 do
begin
seek(f,z);
read(f,Datos);
if datos.activo = true then
writeln(Datos.Nom,' ',Datos.num);
end;
close(f);
writeln;
writeln(' Pulse Enter');
readln;
end;
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

Correccion de mi codigo :-( error fatal.. ayuda

Publicado por Mari (16 intervenciones) el 17/07/2014 00:35:30
Es por eso? Estoy estudiando full pascal pero tiene muchis detalles. Voy a probarlo
De verdad muchas gracias por responder. Ya me estaba quedando sin cabello viendo q le pasaba al codigo. Jajaja te aviso
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

Correccion de mi codigo :-( error fatal.. ayuda

Publicado por Mari (16 intervenciones) el 17/07/2014 05:11:41
Funciono!! que bien, muchas gracias de verdad . Los adoro. quiero un dia saber tanto como ustedes. mil 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

Correccion de mi codigo :-( error fatal.. ayuda

Publicado por lisbeth lisbeth_suarez2@hotmail.com (9 intervenciones) el 19/07/2014 18:06:44
hola disculpa ese programa por casualidad no es de una clinica la mejor.. a mi me hace falta la parte de ordenación y reporte... me gustaría que ayudaran soy estudiante de ing industrial y no se mucho de programacion.. este es el enunciado del trabajo..

La Clínica “La Mejor”, requiere un sistema automatizado para registrar a los
pacientes que son atendidos, de tal modo, que se puedan obtener datos
específicos tales como: las estadísticas en atención a menores de edad,
adultos mayores, tanto femenino como masculino, los ingresos recaudados
mensualmente según los tipos de patologías atendidas, entre otros. Es
importante destacar, que se han clasificado estas patologías en tres categorías:
las tipo A, las B y las tipo C; y se deberán tomar en cuenta las siguientes
especificaciones, al momento de ser atendidas en la Clínica:
· Los pacientes deberán cancelar Bs. 500 por ingreso a la clínica.
· Deberán pagar diariamente Bs. 550 si son atendidos por patologías
tipo A.
· Bs. 430 si se trata de las tipo B.
· Bs. 620 si es por las tipo C.
Dicho Sistema Automatizado, debe cumplir con las siguientes pautas:
· Presentar un menú de mantenimiento con las opciones siguientes:
 Incluir
 Consultar
 Modificar
 Eliminar
 Reporte
 Salida
Debe registrar, con la opción Incluir, los siguientes datos:
 Cédula de Identidad.
 Apellidos y Nombres.
 Edad.
 Sexo.
 Días de hospitalización.
 Tipo de patologías (A/B/C).
· Debe ordenar el registro de pacientes por el número de la cédula de
identidad.
· Mostrar por pantalla, cuando se consulte a un paciente por su número de
cédula de identidad, toda la información referente al mismo.
· Mostrar por pantalla, en la opción Modificar y en la opción Eliminar, un
mensaje de confirmación, donde el usuario ratifica la acción de modificar
o eliminar datos en el sistema.
· Las opciones Consultar, Modificar y Eliminar, harán uso de los mismos
datos registrados en la opción Incluir.
· La opción Reporte, debe generar un listado impreso que presente la
siguiente información:
 Ingresos recaudados por patologías tipo A.
 Ingresos recaudados por patologías tipo B.
 Ingresos recaudados por patologías tipo C.
 Número de pacientes atendidos menores de 18 años.
 Número de pacientes atendidos mayores de 65 años sexo femenino.
 Número de pacientes atendidos mayores de 65 años sexo masculino.
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