pascal que se ha cortedo ejercicio

Iniciado por manu3742, 14 Abril 2011, 13:06 PM

0 Miembros y 1 Visitante están viendo este tema.

manu3742

Código (pascal) [Seleccionar]


Necesito me ayudeis a ver que código esta mal preincipalmente el menu. no estoy muy  seguro si es correcto lo que he codificado

PROGRAM Bibliotecas;

(* Tamaño de cada registro que se pide *)

CONST

   TAMMAXI            = 40;
   TAMBIBLIOTECA     = 25;
   
TYPE

(* registro anidado que define las características de cada libro *)

   
   Tprestado = record
      
      nom_apellidos : string [TAMMAXI];
      email         : string [TAMMAXI];
      fecha        : char;
      end;
   
   
   Tlibro = record
         datos  : Tprestado;
         titulo : string [TAMMAXI];
         autor  : string [TAMMAXI];
         tema   : string [TAMMAXI];
         precio : integer;
         alta   : boolean;
      
         end;

   
   
(* -- TABLA SOBRE LA QUE VAMOS A TRABAJAR EN EL PROYECTO BIBLIOTECA --*)

   Tbiblioteca = array[1..TAMBIBLIOTECA] of Tlibro;
      Tfichero = file of Tlibro;

(*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*)   
(*!!!!!!!!!!!!!!!!    VARIABLES GLOBALES           !!!!!!!!!!!!!!!!!!!!!!!!*)
(*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*)   

VAR

libro     : Tlibro;
prestado  : Tprestado;
biblioteca: Tbiblioteca;
libro_prestado : Boolean;
alta      : Boolean;
fichero   : char;
opc        : integer;
opc1      : integer;
nombre    : string;



(*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*)   
(*!!!!!!!!!!!!!!!! FUNCIONES Y PROCEDIMIENTOS !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*)
(*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*)   

(* -- LEE DEL TECLADO TODA LA INFORMACIÓN DE UN LIBRO QUE SE LE PASA--*)

PROCEDURE lee_libro( var libro: Tlibro);

begin

   writeln;
   writeln('Alta o baja (true, false): ');
   readln(libro.alta);
   writeln('Titulo: ');
   readln(libro.titulo);
   writeln('Autor: ');
   readln(libro.autor);
   writeln('Tema: ');
   readln(libro.tema);
   writeln('Precio: ');
   readln(libro.precio);
   writeln;
   
end;

(* PRESENTAR LISTADOS DE LA BIBLIOTECA *)


PROCEDURE imprime_libro(libro: Tlibro); 

begin
                                         
      writeln('--------------------------------------');
      writeln('LISTADO POR LIBRO');
      writeln('--------------------------------------');
      
      writeln('Alta o baja (true o false)',libro.alta);
      writeln('Titulo : ', libro.titulo);
      writeln('Autor : ' , libro.autor);
      writeln('Tema : ', libro.tema);
      writeln('Precio : ',libro.precio);
        writeln;
      writeln('--------------------------------------');
   
end;

PROCEDURE lee_prestamos(var prestado: Tprestado);

begin

   writeln;
   writeln('------------------------------------');
   writeln('INTRODUCIR DATOS PRESTAMO BIBLIOTECA');
   writeln('------------------------------------');
   writeln('Introducir Nombre y Apellidos: ');
   readln(prestado.nom_apellidos);
   writeln('Email: ');
   readln(prestado.email);
   writeln('Fecha del Prestamo: ');
   readln(prestado.fecha);
   writeln;
   
end;

PROCEDURE imprime_prestados(prestado:Tprestado; longitud: integer);

var

   i:  integer;
   
begin

for i:= 1 to longitud do;

   begin
   
      writeln('----------------------------------------');
      writeln('-----LISTADO DE LIBROS PRESTADOS--------');
      writeln('----------------------------------------');
      
lee_prestamos(prestado);
      
   end;
   
end;

(* -- CON ESTE PROCEDIMIENTO PRETENDO BUSCAR Y MODIFICAR SU ESTADO DE ALTA, BAJA O MODIFICAR --*)

PROCEDURE busca_datos( biblioteca: Tbiblioteca; longitud: integer; buscado: char);

var

       i  : integer;
encontrado: Boolean;

begin

encontrado:= false;

for i:= 1 to longitud do

   begin
   
      if biblioteca .titulo = buscado then begin
      imprime_libro(biblioteca);
      encontrado:= true;
      end;
   
   end;
      
   begin
   
      if encontrado = false then begin
      lee_libro(biblioteca);
      end;
      
   end;


end;

(* -- PENDIENTE DE REALIZAR --*)

(* PROCEDURE baja_libro( var libro: Tlibro; longintud: integer);

begin


end; *)

(* -- PENDIENTE DE REALIZAR --*)

(*procedure modificar_datos(var prestado: Tprestado; longitud:integer);

begin



end;*)



(* lISTADOS DE TODOS LOS LIBROS *)

PROCEDURE imprime_libros(biblioteca: Tbiblioteca; longitud: integer);

var

i: integer;

begin

for i:= 1 to longitud do

   begin

      writeln('--------------------------------------');
      writeln('LISTADO DE TODOS LOS LIBROS BIBLIOTECA');
      writeln('--------------------------------------');
      
      imprime_libro(biblioteca);
   
   end;
   
end;



(* FUNCION QUE DEVUELVE EL VALOR TOTAL DE LA COLECCION DE LA BIBLIOTECA *)

FUNCTION suma_coleccion(biblioteca: Tbiblioteca; longitud: integer): real;

var

i: integer;
suma: integer;

begin

suma:= 0;

for i:= 1 to longitud do

   begin
   
      suma:= suma + biblioteca.precio;
      
   end;
   
end;

(* FUNCIÓN QUE DEVUELVE VALOR MÁXIMO DE LA COLECCION DE LA BIBLIOTECA *)

FUNCTION Maximo(bibliooteca: Tbiblioteca; longitud: integer): integer;

var

i: integer;
max: integer;

begin

max:= 0;

for i:= 1 to longitud do

   begin
   
      if max < biblioteca.precio then
         
         max:= biblioteca.precio;
      
         Maximo:= max;
   
   end;
   
end;

(* FUNCION QUE DEVUELVE VALOR MÍNIMO DE LA COLECCION DE LA BIBLIOTECA *)

FUNCTION Minimo(biblioteca: Tbiblioteca; longitud: integer): real;

var

i: integer;
min: integer;

begin

min:= 0;

for i:= 1 to longitud do

   begin
   
      if min > biblioteca.precio then
      
      min:= biblioteca.precio;
      
      Minimo:= min;
   
   end;
   
end;

(* FUNCION QUE DEVUELVE EL VALOR MEDIO DE LA COLECCION DE LA BIBLIOTECA *)

FUNCTION Media(biblioteca: Tbiblioteca; longitud: integer): real;

var

i: integer;
suma_coleccion: integer;

begin

suma_coleccion:= 0;
   
for i:=  1 to longitud do
   
      begin
      
         suma_coleccion:= suma_coleccion + biblioteca.precio;
         Media:= suma_coleccion/1.0+longitud;
      
      end;
      
end;

(*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*)   
(*!!!!!!!!!!!!!!!!    Funciones de ficheros   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*)
(*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*)   

(*-- ALMACENA DATOS LEIDOS DE UN FICHERO --*)
 
PROCEDURE graba_fichero(nombre: string; biblioteca: Tbiblioteca; longitud: integer);
Var
  i : integer;
  fichero : Tfichero;
Begin   
  assign(fichero, nombre);
   rewrite(fichero);

for i:= 1 to longitud do
      write(fichero, biblioteca);
      
   close(fichero);
End;

(*-- LEE DATOS DEL FICHERO --*)

PROCEDURE lee_fichero(nombre: string; var biblioteca: Tbiblioteca; longitud: integer);

Var
     i : integer;
fichero : Tfichero;

Begin   
  i := 0;
   
   assign(fichero, nombre);
   reset(fichero);
   
    while ( not(eof(fichero)) AND (i<TAMBIBLIOTECA) ) do begin
    i := i+1;      
    read(fichero, biblioteca);
   
   end;
      
   close(fichero);

   
End;

(*-- FUNCIÓN QUE PRESENTA MENÚ Y DEVUELVE OPCIÓN ELEGIDA --*)

FUNCTION Menu: INTEGER;

VAR

opc: integer;

BEGIN

   repeat
   
      writeln('-----------------------------');
      writeln('MENÚ DE GESTIÓN DE BIBLIOTECA');
      writeln('-----------------------------');
      writeln;
      writeln('1. ALTA DE LIBRO');
      writeln('2. BAJA DE LIBRO');
      writeln('3. DATOS DE PRÉSTAMO');
      writeln('4. MODIFICACIÓN DE DATOS');
      writeln('5. GUARDAR DATOS EN FICHEROS');
      writeln('6. LECTURA DE DATOS DE FICHERO');
      writeln('7. PRESENTACIÓN DE LISTADO DE BIBLIOTECA');
            
      writeln;
      writeln('8. SALIR');
      writeln('OPCION:  ');
      readln(opc);
       until ( (opc>=1) and (opc <=7) or (opc=8)    );

Menu := opc;
End;   

(*--  FUNCIÓN QUE PRESENTA UN SUBMENU DE LA OPCION 6 DEL MENÚ PRINCIPAL Y DEVUELVE LA OPCION ELEGIDA --*)

FUNCTION submenu: INTEGER;

VAR

opc1: integer;

BEGIN

   repeat
   
      writeln('------------------------------------------');
      writeln('MENÚ PRESENTACIÓN DE LISTADO DE BIBLIOTECA');
      writeln('------------------------------------------');
      writeln;
      writeln('9. LISTADO DE TODOS LOS LIBROS DE LA BIBLIOTECA');
      writeln('10. LISTADO DE LIBROS PRESTADOS');
      writeln('11. LISTADO DE PRECIOS MÁXIMOS, MÍNIMOS, LA MEDIA Y EL VALOR TOTAL DE LA COLECCIÓN');
      writeln;
      writeln('12. VOLVER MENU PRINCIPAL');
      writeln('OPCION: ');
      readln(opc1);
      until ( (opc1>=9) and (opc<=11) or (opc1=12) );

submenu:= opc1;

END;
      
      
   
(*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*)   
(*!!!!!!!!!!!!!!!!    PROGRAMA PRINCIPAL          !!!!!!!!!!!!!!!!!!!!!!!!!!!*)
(*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*)   

BEGIN

   repeat
   
      opc:= Menu;
      
      case opc of
      
         1: lee_libro(libro);
         2: busca_datos(biblioteca, TAMBIBLIOTECA, buscado);
         3: lee_prestamos(biblioteca);
         4: busca_datos(biblioteca, TAMBIBLIOTECA, buscado);
         5: begin
            writeln('Introduzca el nombre del fichero de datos: ');
            readln(nombre);
            graba_fichero(nombre, biblioteca, TAMBIBLIOTECA);
            end;
         6: begin
            writeln('Introduzca el nombre del fichero: ');
            readln(nombre);
            lee_fichero(nombre, biblioteca, TAMBIBLIOTECA);
            end;
         7: opc1;
      end;
   until(opc=8);
   
   repeat
      opc1:= Submenu;
      
      case opc1 of
      
         9: imprime_libros(biblioteca, TAMBIBLIOTECA);
         10: imprime_prestados(prestado, TAMBIBLIOTECA);
         11: begin
            writeln('--------------------------------------------------------------');
            writeln('LISTADO DE PRECIOS MAXIMOS, MINIMOS, LA MEDIA Y EL VALOR TOTAL');
            writeln('--------------------------------------------------------------');
            writeln('Valor máximo: ');
            maximo(biblioteca, TAMBIBLIOTECA);
            writeln('Valor mínimo: ');
            minimo(biblioteca, TAMBIBLIOTECA);
            writeln('Valor medio: ');
            media(biblioteca, TAMBIBLIOTECA);
            writeln('Valor total Biblioteca');
            suma_coleccion(biblioteca, TAMBIBLIOTECA);
            end;
         12: opc;
       end;
   until(opc1=12);
END.

Khronos14