Código
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.