Pascal/Turbo Pascal - Apareo de archivo de biblioteca

   
Vista:

Apareo de archivo de biblioteca

Publicado por Horacio (53 intervenciones) el 15/10/2012 23:18:46
Hola gente;quisiera si alguno me puede dar una mano con este ejercicio:


Una biblioteca tiene almacenados los datos de sus socios y los préstamos realizados durante el último mes en dos
archivos: Archivo maestro (Un registro por lector)
NRO LECTOR NOMBRE Y APELLIDO DNI DOMICILIO

Archivo de novedades (Uno o ningún registro por lector)
NRO LECTOR CANT. LIBROS DEVUELTOS EN TÉRMINO CANT. LIBROS DEVUELTOS FUERA DE TÉRMINO

Se desea obtener un listado de los lectores detallando número, nombre, cantidad de libros devueltos en término y cantidad de libros devueltos fuera de término. Imprimir "*" en un campo de observaciones para aquellos lectores que devolvieron 5 o más libros fuera de término, e informar el total general de préstamos.

mi codificación es

link : http://pastebin.com/G3TQYMyV

se supone que como es apareo de archivo vienen los dos archivos ordenados por numero de lector.

lo que quiero saber es si esta bien planteado y resuelto el ejercicio .gracias.saludos
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

Apareo de archivo de biblioteca

Publicado por ramon (2072 intervenciones) el 16/10/2012 19:29:24
{El proceso no puedo probártelo por falta de los archivos de base y me encuentro con
unidades que no poseo para ejecutarlo con fiabilidad como son [uses
SysUtils, console, crt;]. visual mente parece que esta 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

Apareo de archivo de biblioteca

Publicado por Horacio (53 intervenciones) el 17/10/2012 15:22:00
gracias ramon.el archivo base yo tampoco lo tengo mi pregunta es si esta bien el proceso de manejo de archivo para obtener lo que pide el ejercicio.y por las librerias la unica es uses crt las demas quedaron porque lo codifique en el ide de delphi,perdon.
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

Apareo de archivo de biblioteca

Publicado por ramon (2072 intervenciones) el 17/10/2012 15:54:24
Personal mente no me parece correcta la forma del tratamiento que se emplea en el pero
si a usted le sirve adelante pero yo lo plantearía de forma distinta todo el tratamiento de
los archivos de registros suerte.
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

Apareo de archivo de biblioteca

Publicado por Horacio (53 intervenciones) el 17/10/2012 16:49:29
podrias explicarme de que manera ramon??si dispones del tiempo.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

Apareo de archivo de biblioteca

Publicado por ramon (2072 intervenciones) el 17/10/2012 18:36:58
Te preparare un ejemplo de como lo trataría yo.
puesto que una imagen vale mas que 1000 palabras y intentare comentar cada zona.
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

Apareo de archivo de biblioteca

Publicado por Horacio Daniel (53 intervenciones) el 17/10/2012 18:58:34
Buenísimo ramón por tu ayuda estaré esperando.
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

Apareo de archivo de biblioteca

Publicado por ramon (2072 intervenciones) el 18/10/2012 19:13:41
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
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
{Primero podrás apreciar que están varios procedimientos para la creación de los archivos
 para poder ver el funcionamiento del programa así como un menú.
 si necesitas alguna aclaración dímelo y lo haré con mucho gusto}
 
 program biblioteca;
  uses
     crt, dos;
   type
        RLector = record
             nro : integer;
        nomApell : string[30];
             dni : string[10];
       domicilio : string[20];
     end;
 
    RNovedad = record
              nro : integer;
        prestados : integer;
      cantDevTerm : integer;
     cantDevFTerm : integer;
      end;
 
 
   var
    archM : file of rlector;
    archN : file of rnovedad;
     regL : RLector;
     regN : RNovedad;
   TotPrestamos : integer;
 
  procedure entrada_nuevo_socios;   {este procedimiento es para crear el
                                     archivo Maestro}
  var
    tee : char;
  begin
      clrscr;
      writeln('**** Entrada Datos Socios ****');
      writeln;
      write('    N§ Del Socio     : ');
      readln(regl.nro);
      write('   Nombre y Apellido : ');
      readln(regl.nomApell);
      write('   N§ DNI            : ');
      readln(regl.dni);
      write('   Domicilio         : ');
      readln(regl.domicilio);
    assign(archM,'Amaestro.dat');
   {$I-} reset(archm); {$I+}
   if ioresult <> 0 then
   begin
      rewrite(archM);
      seek(archM,0);
      write(archM,regl);
      close(archM);
    end
  else
     begin
        seek(archM,filesize(archM));
        write(archM,regl);
        close(archM);
     end;
  end;
 
  procedure prestamo_a_socio;   {Este para crear el archivo Novedades
                                 con relacion al archivo Maestro}
  var
     nums : integer;
      veri, lon : longint;
      exite, enco : boolean;
  begin
      clrscr;
      enco := false;
      lon := 0;
      write('  Entre N§ Socio : ');
      readln(nums);
      assign(archM,'Amaestro.dat');
   {$I-} reset(archm); {$I+}
        if ioresult <> 0 then
         begin
           clrscr;
           writeln('  El archivo No Existe Pulse [Enter]');
           readln;
           exit;
         end;
     repeat
         seek(archM,lon);
         read(archM,regl);
         if regl.nro = nums then
         begin
            enco := true;
         end
       else
          begin
             lon := lon + 1;
          end;
     until (enco = true) or (lon > filesize(archM) - 1);
     if enco = true then
     begin
         assign(archN,'novedades.dat');
      {$I-} reset(archn); {$I+}
      if ioresult <> 0 then
      begin
          writeln('  N§ Socio : ',regl.nro,'   Nombre : ',regl.nomApell);
          writeln(' Sim Prestamon Actual Mente');
          regn.nro := regl.nro;
          regn.prestados := 1;
          regn.cantDevTerm := 0;
          regn.cantDevFTerm := 0;
          rewrite(archn);
          seek(archn,0);
          write(archn,regn);
          close(archn);
          close(archm);
      end
    else
       begin
           veri := 0;
           exite := false;
         repeat
             seek(archn,veri);
             read(archn,regn);
             if regn.nro = regl.nro then
             exite := true
           else
             veri := veri + 1;
         until (exite = true) or (veri > filesize(archn) - 1);
         if exite = true then
         begin
            writeln('  N§ Socio : ',regl.nro,'   Nombre : ',regl.nomApell);
            writeln('  Con Prestamon Actual Mente');
            regn.nro := regl.nro;
            regn.prestados := regn.prestados + 1;
            regn.cantDevTerm := 0;
            regn.cantDevFTerm := 0;
            seek(archn,veri);
            write(archn,regn);
            close(archn);
            close(archm);
            writeln('  Prestamos : ',regn.prestados);
         end
      else
         begin
            writeln('  N§ Socio : ',regl.nro,'   Nombre : ',regl.nomApell);
            writeln('  Primer Prestamon Actual Mente');
            regn.nro := regl.nro;
            regn.prestados := regn.prestados + 1;
            regn.cantDevTerm := 0;
            regn.cantDevFTerm := 0;
            seek(archn,filesize(archn));
            write(archn,regn);
            close(archn);
            close(archm);
         end;
       end;
     end;
       writeln;
       writeln(' Pulse [Enter]');
       readln;
   end;
 
   procedure devueltos;     {Para ingresar las devoluciones realizadas}
   var
      nuent, num : integer;
      co : longint;
      enco : boolean;
      tien : char;
   begin
       clrscr;
       write('  N§ Socio : ');
       readln(num);
       co := 0;
       enco := false;
    assign(archM,'Amaestro.dat');
   {$I-} reset(archm); {$I+}
        if ioresult <> 0 then
         begin
           clrscr;
           writeln('  El archivo No Existe Pulse [Enter]');
           readln;
           exit;
         end;
     repeat
         seek(archM,co);
         read(archM,regl);
         if regl.nro = num then
         begin
            enco := true;
         end
       else
          begin
             co := co + 1;
          end;
     until (enco = true) or (co > filesize(archM) - 1);
     if enco = true then
     begin
         assign(archN,'novedades.dat');
      {$I-} reset(archn); {$I+}
       if ioresult <> 0 then
       begin
           clrscr;
           close(archm);
           writeln('   Archivo No Encontrado Pulse [Enter]');
           readln;
           exit;
       end
     else
        begin
           co := 0;
           enco := false;
     repeat
         seek(archn,co);
         read(archn,regn);
         if regl.nro = regn.nro then
         begin
            enco := true;
         end
       else
          begin
             co := co + 1;
          end;
     until (enco = true) or (co > filesize(archM) - 1);
           writeln('   N§ Socio  = ',regl.nro,'   ','Nombre = ',regl.nomApell);
           writeln('   Prestados = ',regn.prestados);
           writeln;
           write('   Entrega   = ');
           readln(nuent);
           writeln('  1 = Entrega en tiempo');
           writeln('  2 = Entrega Fuera De Tiempo');
        repeat
           tien := readkey;
        until tien in['1','2'];
        if tien = '1' then
        begin
          regn.prestados := regn.prestados - nuent;
          regn.cantDevTerm := nuent;
          regn.cantDevFTerm := regn.cantDevFTerm;
          regn.nro := regl.nro;
          seek(archn,co);
          write(archn,regn);
          close(archm);
          close(archn);
        end
      else
         begin
            regn.prestados := regn.prestados - nuent;
            regn.cantDevTerm := regn.cantDevTerm;
            regn.cantDevFTerm := nuent;
            regn.nro := regl.nro;
            seek(archn,co);
            write(archn,regn);
            close(archm);
            close(archn);
         end;
      end;
   end;
  end;
 
   procedure presenta_estado_prestamos;  {Presenta la situacion de
                                          prestamos}
   var
      nov, pos : longint;
      si, armaes, arnov : boolean;
   begin
       clrscr;
       pos := 0;
       armaes := false;
       arnov := false;
       TotPrestamos := 0;
       assign(archM,'Amaestro.dat');
   {$I-} reset(archm); {$I+}
        if ioresult <> 0 then
         begin
            clrscr;
            writeln('  Error De Archivo Maestro Pulse [Enter]');
            readln;
            exit;
         end
      else
          begin
             armaes := true;
             assign(archN,'novedades.dat');
             {$I-} reset(archn); {$I+}
             if ioresult <> 0 then
             begin
                 clrscr;
                 writeln('  Error De Archivo Novedades Pulse [Enter]');
                 readln;
                 exit;
             end
           else
              arnov := true;
          end;
      if (arnov = true) and (armaes = true) then
      begin
    repeat
        seek(archm,pos);
        read(archm,regl);
        nov := 0;
        si := false;
     repeat
        seek(archn,nov);
        read(archn,regn);
        if regn.nro = regl.nro then
        si := true
      else
        nov := nov + 1;
     until (si = true) or (nov > filesize(archn) - 1);
     if si = true then
     begin
     TotPrestamos := TotPrestamos + (regn.cantDevTerm + regn.cantDevFTerm);
         writeln('  Socio N§ : ',regl.nro,'   Nombre : ',regl.nomApell);
         writeln('  Devueltos OK : ',regn.cantDevTerm,
         '   Devueltos NOK : ',regn.cantDevFTerm);
         if regn.cantDevFTerm > 4 then
         writeln('  Observaciones : ***********');
         writeln;
     end;
     pos := pos + 1;
    until (pos > filesize(archm) - 1);
    writeln('  Total Prestados A Socios = ',TotPrestamos);
    writeln;
    close(archm);
    close(archn);
    writeln('  Pulse [Enter]');
    readln;
   end;
  end;
 
  procedure menu;  {Menu para elegir que realizar}
  var
    sal : boolean;
    tec : char;
  begin
     sal := false;
   repeat
      clrscr;
      writeln(' **** Menu General ****');
      writeln;
      writeln('  1 = Entrada Socios');
      writeln('  2 = Cojida Libro Socio');
      writeln('  3 = Entrega Libro socio');
      writeln('  4 = Ver Estado Prestamos Libros');
      writeln('  5 = Salir');
      writeln;
      writeln(' <<< Eloja Opcion >>>');
    repeat
       tec := readkey;
    until tec in['1','2','3','4','5'];
   case tec of
 '1' : begin clrscr; entrada_nuevo_socios; end;
 '2' : begin clrscr; prestamo_a_socio; end;
 '3' : begin clrscr; devueltos; end;
 '4' : begin clrscr; presenta_estado_prestamos; end;
 '5' : 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

Apareo de archivo de biblioteca

Publicado por Horacio (53 intervenciones) el 18/10/2012 20:11:58
Gracias Ramon por la molestia y tu ayuda.todavia me cuesta un poco pero mas que nada por la interpretacion del enunciado del ejercicio.ahora entendi por que me dijiste q manejaba mal los archivos yo lo hacia como acceso secuencial y al ser de tipo se tiene un acceso directo,puede ser?
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

Apareo de archivo de biblioteca

Publicado por ramon (2072 intervenciones) el 18/10/2012 22:24:10
Ok para presentar pocos datos sirve pero para manejo de muchos no.
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