Pascal/Turbo Pascal - Ayuda con arrays y registros

   
Vista:

Ayuda con arrays y registros

Publicado por Juan (3 intervenciones) el 27/11/2014 23:54:41
Necesito ayuda para crear un programa que esta compuesto de varios subprogramas basado en arrays y ficheros.

Queremos realizar una aplicación informática que sirva para recoger y servir pedidos para un restaurante de comida rápida, de cada pedido se recoge la siguiente información:
 Número de pedido. Generado por el sistema en riguroso orden partiendo del número uno.
Por lo tanto, cada pedido tendrá un número único, que no tiene que indicar necesariamente el orden de ser servido. Únicamente marca el orden de llegada.
 Nombre del primer plato.
 Nombre del segundo plato.
 Bebida.
 Precio del menú.
En principio cada pedido se atiende en orden de llegada y como el restaurante es pequeño se supone que va a tener como máximo 150 pedidos en espera en un día El programa permitirá acceder a las siguientes funciones por medio de un menú:
a) Tomar nota de un pedido. Recoge la información correspondiente a un pedido y lo pone en espera de ser servido. Es posible tener muchos pedidos en espera pero siempre por riguroso orden de llegada, excepto que el cliente sea un VIP (ver apartado siguiente).
b) Alta en posición intermedia. En ocasiones, cuando al restaurante llega un VIP, queremos situar un pedido en una posición concreta y no siempre en la última posición, en esta opción se nos debe preguntar, además de los datos del pedido, la posición en la que queremos que se atienda el pedido una vez que se ha tomado nota de él, de manera que desde esta opción podemos situar el pedido en cualquier posición del conjunto de pedidos y no solo al final. Incluso podemos ponerlo el primero.
c) Servir pedido. Tenemos que tener en cuenta que los pedidos se sirven en orden en el que están almacenados y por lo tanto siempre debe servirse primero el pedido que esté en primer lugar. Para servir el pedido En caso positivo lo eliminará del sistema ya que una vez procesado no necesitamos guardar constancia de los datos que formaban el pedido. El pedido siguiente pasará a situarse en primer lugar.
d) Eliminar un pedido. Si un cliente decide anular su pedido, deberá decir el número del pedido que va a anular. El sistema nos mostrará la información correspondiente a dicho pedido y nos preguntará si está seguro. En caso afirmativo el sistema se encargará de eliminar ese pedido de la lista.
e) Mostrar pedidos. Muestra los pedidos que quedan por servir ordenados desde el primero al último que se va a atender. Además nos muestra cuántos pedidos quedan por servir y el precio más alto y más bajo de todos los pedidos que quedan por servir.
d) Buscar pedido. Permite comprobar si un determinado pedido, del que solamente conocemos el nombre del primer y segundo plato está en la lista, el programa nos informará de la posición en la que se encuentra el pedido además de mostrarnos sus datos.
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 arrays y registros

Publicado por ramon (2072 intervenciones) el 29/11/2014 00:42:56
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
{Mira esto puede hayudar]
 
 program comidarapida;
  uses
     crt;
  const
     max = 150;
 
   type
      pedido = record
              posicion : integer;
          primer_plato : string[100];
         segundo_plato : string[100];
                Bebida : string[100];
           Precio_menu : real;
               servido : boolean;
        end;
 
   var
     pedidos : array[1..max] of pedido;
     f : file of pedido;
     np, don, cont : integer;
 
 
   procedure coloca_posicion(p : integer; posi : pedido);
   var
     temp : pedido;
     t : integer;
   begin
       if cont < max then
       begin
          temp := posi;
          for t := cont downto p do
          begin
             pedidos[t + 1] := pedidos[t];
          end;
           pedidos[p] := temp;
       end
    else
       begin
       writeln('   **** Lo Siento Lista LLena ****');
       writeln('   Pulse Una Tecla ');
       readkey;
       end;
   end;
 
   procedure recoje_pedido(n : integer);
   var
      dd : integer;
      tec : char;
   begin
      clrscr;
      writeln('  ***** Toma De Pedidos *****');
      writeln('  ---------------------------');
      writeln;
      write('   Primer Plato  : ');
      readln(pedidos[n].primer_plato);
      write('   Segundo Plato : ');
      readln(pedidos[n].segundo_plato);
      write('   bebida        : ');
      readln(pedidos[n].bebida);
      write('   Precio Menu   : ');
      readln(pedidos[n].precio_menu);
      pedidos[n].posicion := n;
      pedidos[n].servido := false;
      cont := cont + 1;
      if cont > max then
      cont := max;
     end;
 
   procedure servir_pedido(cual : integer);
   var
     tca : char;
   begin
      writeln('   >>>>>>> Entre Pedido A Servir <<<<<<<');
      write('   Pedido Num. : ');
      readln(don);
      writeln('   Primer Plato  = ',pedidos[cual].primer_plato);
      writeln('   Segundo Plato = ',pedidos[cual].segundo_plato);
      writeln('   Bebida        = ',pedidos[cual].bebida);
      writeln('   Costo Menu    = ',pedidos[cual].precio_menu:0:2);
      writeln;
      writeln('  ////// Pedido Servido [S/N] //////');
      repeat
          tca := upcase(readkey);
      until tca in['S','N'];
      if tca = 'S' then
      pedidos[cual].servido := true;
   end;
 
   procedure eliminar_pedido;
   var
     nn : integer;
   begin
      writeln('  ****** Entre Num. Pedido A Eliminar ********');
      write('   Num. Pedido : ');
      readln(nn);
      pedidos[nn].servido := true;
      writeln;
      writeln('   Pedido Eliminado pulse Una Tecla');
      readkey;
   end;
 
   procedure muestra_pedidos;
   var
     pe : integer;
   begin
      for pe := 1 to cont - 1 do
      begin
         if pedidos[pe].servido = false then
         with pedidos[pe] do
         begin
  writeln(primer_plato,' ** ',segundo_plato,' ** ',bebida,' ** ',precio_menu:0:2);
         end;
      end;
      writeln('  <<<<<< Pulse Una Tecla >>>>>>');
      readkey;
   end;
 
   procedure buscar_pedido;
   var
      nup : integer;
    begin
       writeln('  ****** Entre Num. Pedido A Buscar ********');
      write('   Num. Pedido : ');
      readln(nup);
      clrscr;
      writeln('   ****** Su Menu Es ******');
      writeln;
      writeln('   Primer Plato  = ',pedidos[nup].primer_plato);
      writeln('   Segundo Plato = ',pedidos[nup].segundo_plato);
      writeln('   Bebida        = ',pedidos[nup].bebida);
      writeln('   Precio Menu   = ',pedidos[nup].precio_menu:0:2);
      writeln;
      writeln('  <<<<<< Pulse Una Tecla >>>>>>');
      readkey;
    end;
 
   procedure menu;
   var
     tecla : char;
     salir : boolean;
   begin
      salir := false;
    repeat
        clrscr;
        writeln('   ***** Menu Jeneral *****');
        writeln;
        writeln('   1 = Tomar nota de un pedido');
        writeln('   2 = Alta en posicion intermedia');
        writeln('   3 = Servir pedido');
        writeln('   4 = Eliminar un pedido');
        writeln('   5 = Mostrar pedidos');
        writeln('   6 = Buscar pedido');
        writeln('   7 = Salir');
        writeln;
        writeln('   <<<<< Elija Opcion >>>>>');
        repeat
            tecla := readkey;
        until tecla in['1','2','3','4','5','6','7'];
        clrscr;
      case tecla of
  '1' : recoje_pedido(cont);
  '2' : begin
           writeln('   Entre Numero Pedido A Mover Y Donde');
           writeln;
           write('   Num. Pedido : ');
           readln(np);
           write('   Donde       : ');
           readln(don);
           coloca_posicion(don,pedidos[np]);
        end;
  '3' : servir_pedido(don);
  '4' : eliminar_pedido;
  '5' : muestra_pedidos;
  '6' : buscar_pedido;
  '7' : salir := true;
     end;
    until salir = true;
   end;
 
 
   begin
      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
2
Comentar

Ayuda con arrays y registros

Publicado por Juan (3 intervenciones) el 29/11/2014 00:59:24
Muchas gracias, Ramón. No podría estar más agradecido.

Sólo una pregunta, en el último apartado difiere un poquito del enunciado, como sería teniendo sólo el nombre del primer plato y el segundo. En tu respuesta está perfecto, pero es con eel numero de pedido. Y mi problema es que no sé como leer ciertos datos de un registro, como por ejemplo el nombre del primer plato y el segundo para buscar el pedido correspondiente.

Muchas gracias nuevamente.
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