Pascal/Turbo Pascal - Dudas ejercicio de archivos en pascal

   
Vista:

Dudas ejercicio de archivos en pascal

Publicado por ariel (1 intervención) el 14/11/2013 23:27:35
hola,tengo el siguiente ejercicio:

Una empresa tiene organizado su archivo magnético de registro de ingreso y egreso de
personal de la siguiente manera:
ARCHIVO “INGRES.DAT”
NLE_IN Número de legajo (1000 - 1500)
AÑO_IN Año
MES_IN Mes
DIA_IN Día
TIPO_IN Tipo de registro: 1=entró - 2=salió
HORA_IN Hora de registro
MINU_IN Minutos de registro
El archivo se encuentra ordenado por número de legajo y, dentro de legajo, por fecha. Los
registros corresponden sólo al año 2012. Las entradas y salidas siempre se realizan en el
mismo día.
La empresa cuenta también con un archivo de personal, organizado eficientemente de la
siguiente manera:
ARCHIVO “PERSONAL.DAT”
NLE_PE Número de legajo (clave primaria)
APE_PE Apellido
NOM_PE Nombre
SECT_PE Sector en el que trabaja (1 - 10)
DNI_PE Número de D.N.I.
HSTRA_PE Total de horas trabajadas
a) Informar cuál es la cantidad total de tiempo trabajado por cada uno de los empleados
en el año.
b) En que sector de la empresa se trabajaron más horas durante el mes de junio.
c) Actualizar el archivo PERSONAL.DAT.
Restricción: el archivo INGRES.DAT puede leerse solamente una vez en todo el
programa.
Nota: Tener en cuenta que la estructura de los registros del archivo de personal es la
siguiente:
regEmpleados = record
Legajo: integer;
Apellido: string[20];
Nombre: string[20];
Nro_Sector: integer;
dni:string[10];
horas_trab:real;
end;

ahora mis dudas,dice que solo debo leer INGRES.dat solo una vez,entonces pensaba recorrer los registros del archivo e ir guardando en variables las horas (o en un nuevo registro),lo que tengo hasta ahora:

program tp_archivos;
uses crt;
type
str10=integer;
regempleado=record
legajo:integer;
apellido:string[20];
nombre:string[20];
nro_sector:integer;
dni:string[10];
horas_trab:real;
end;
regingreso=record
nle_in:integer;
anio_in:integer;
mes_in:integer;
dia_in:integer;
tipo_in:string [4];
hora_in:word;
minuto_in:word;
end;
reg_maestro=file of regingreso;
reg_detalle=file of regempleado;
var
reg_m:reg_maestro;
reg_e:reg_detalle;
principal:regingreso;
personas:regempleado;
temporal:regingreso;
horas_mensu,horas_an,minutos_sem,minutos_an:str10;
aux_leg:integer;
aux_mes,aux_dia:integer;
hora_ingreso,minu_ingreso:word;
hora_salida,minu_salida:word;
begin
assign (reg_m , 'C:\pro\ingres.dat');
reset (reg_m);
while (not eof (reg_m) ) do
begin
read (reg_m ,principal);
aux_leg:=principal.nle_in;
while (aux_leg=principal.nle_in) do
begin
aux_mes:=principal.mes_in;
while (aux_mes=principal.mes_in) do
begin
aux_dia:=principal.dia_in;
while (aux_dia=principal.dia_in) do
begin
if (principal.tipo_in='1') then
begin
hora_ingreso:=principal.hora_in;
minu_ingreso:=principal.minuto_in;
else
hora_salida:=principal.hora_in;
minu_salida:=principal.hora_in;
end;

y me encontre con varios problemas,como que necesitare mas variables y el programa sumaria todas las horas y no las de un mes.
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 ejercicio de archivos en pascal

Publicado por ramon (2072 intervenciones) el 15/11/2013 00:04:57
Puedes usar punteros o array
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 ejercicio de archivos en pascal

Publicado por ramon (2072 intervenciones) el 15/11/2013 14:37:46
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
{Esto te podría ir sirviendo}
 
 program tp_archivos;
 uses
    crt;
 type
     str10 = integer;
    regempleado = record
            legajo : integer;
          apellido : string[20];
            nombre : string[20];
        nro_sector : integer;
               dni : string[10];
        horas_trab : real;
          end;
 
     regingreso = record
            nle_in : integer;
           anio_in : integer;
            mes_in : integer;
            dia_in : integer;
           tipo_in : integer;
           hora_in : word;
         minuto_in : word;
            end;
 
 
  var
    reg_m : file of regingreso;
    reg_e : file of regempleado;
    principal : regingreso;
    personas : regempleado;
    ingresos : array[0..5400] of byte;
    da : integer;
 
  procedure guarda_archivo_ingresos;
  begin
      assign(reg_m,'INGRES.DAT');
   {$I-} reset(reg_m); {$I+}
   if ioresult <> 0 then
   begin
      rewrite(reg_m);
      seek(reg_m,0);
      write(reg_m,principal);
      close(reg_m);
   end
 else
    begin
       seek(reg_m,filesize(reg_m));
       write(reg_m,principal);
       close(reg_m);
    end;
  end;
 
  procedure entrada_ingresos;
  begin
     clrscr;
     writeln('  ***** Ingresos *****');
     writeln;
     write('   Entre Num. Legajo Del 1000..1500 : ');
     readln(principal.nle_in);
     write('   Entre A¤o                        : ');
     readln(principal.anio_in);
     write('   Entre Mes                        : ');
     readln(principal.mes_in);
     write('   Entre Dia                        : ');
     readln(principal.dia_in);
     write('   Entre Tipo 1=[entra]  2=[salie]  : ');
     readln(principal.tipo_in);
     write('   Entre Hora                       : ');
     readln(principal.hora_in);
     write('   Entre Minuto                     : ');
     readln(principal.minuto_in);
     guarda_archivo_ingresos;
  end;
 
  procedure salva_empleados;
  begin
     assign(reg_e,'PERSONAL.DAT');
  {$I-} reset(reg_e); {$I+}
     if ioresult <> 0 then
     begin
        rewrite(reg_e);
        seek(reg_e,0);
        write(reg_e,personas);
        close(reg_e);
     end
 else
     begin
         seek(reg_e,filesize(reg_e));
         write(reg_e,personas);
         close(reg_e);
     end;
  end;
 
  procedure entradas_empleados;
  begin
      clrscr;
      writeln('**** Personas ****');
      writeln;
      write('   Entre Num. Legajo    : ');
      readln(personas.legajo);
      write('   Entre Entre Apellido : ');
      readln(personas.apellido);
      write('   Entre Nombre         : ');
      readln(personas.nombre);
      write('   Entre Num. Sector    : ');
      readln(personas.nro_sector);
      write('   Entre Num. DNI       : ');
      readln(personas.dni);
      write('   Entre Horas Trabajo  : ');
      readln(personas.horas_trab);
      salva_empleados;
  end;
 
 
 
 
  procedure menu;
  var
    sal : boolean;
    tec : char;
  begin
      sal := false;
      repeat
          clrscr;
          writeln('   ******* Menu General *******');
          writeln;
          writeln('    1 = Entrada Datos Ingresos');
          writeln('    2 = Entrada Datos Empleado');
          writeln('    3 = ');
          writeln('    4 = ');
          writeln('    5 = ');
          writeln('    6 = Salir');
          writeln;
          writeln('<<<<< Elija Opcion >>>>>');
         repeat
             tec := readkey;
         until tec in['1','2','3','4','5','6'];
         clrscr;
     case tec of
  '1' : entrada_ingresos;
  '2' : entradas_empleados;
  '3' :;
  '4' :;
  '5' : begin
 
        end;
  '6' : sal := true;
     end;
      until sal = true;
  end;
 
  begin
      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