Si que lo agradezco lo que pasa es que estoy haciendo un curso sobre Pascal desde el inicio puro y duro y no de Delhpi. siempre se me contesta con este último. Con lo que la ayuda es nula. de todas formas te pongo el código para que veas mejor pues tendrás muchos mas conocimientos que yo como hacerlo
PROGRAM Bibliotecas;
(* Tamaño de cada registro que se pide *)
CONST
TAMMAXI = 40;
TAMBIBLIOTECA = 5;
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;
codigo : integer;
titulo : string [TAMMAXI];
autor : string [TAMMAXI];
tema : string [TAMMAXI];
precio : integer;
alta : boolean;
prestado : boolean;
end;
(* -- TABLA SOBRE LA QUE VAMOS A TRABAJAR EN EL PROYECTO BIBLIOTECA --*)
Tbiblioteca = array[1..TAMBIBLIOTECA] of Tlibro;
Tfichero = file of Tlibro;
(*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*)
(*!!!!!!!!!!!!!!!! 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('Codigo: ');
readln(libro.codigo);
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('Codigo : ', libro.codigo);
writeln('Titulo : ', libro.titulo);
writeln('Autor : ' , libro.autor);
writeln('Tema : ', libro.tema);
writeln('Precio : ',libro.precio);
writeln;
writeln('--------------------------------------');
end;
PROCEDURE hacer_prestamo(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('----------------------------------------');
hacer_prestamo(prestado);
end;
end;
(* -- CON ESTE PROCEDIMIENTO PRETENDO BUSCAR Y MODIFICAR SU ESTADO DE ALTA, BAJA O MODIFICAR --*)
PROCEDURE baja_modificacion( biblioteca: Tbiblioteca; longitud: integer; buscado: integer);
var
i : integer;
encontrado: Boolean;
begin
encontrado:= false;
for i:= 1 to longitud do
begin
if biblioteca
.codigo = 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): integer;
var
i: integer;
suma: integer;
begin
suma:= 0;
for i:= 1 to longitud do
begin
suma:= suma + biblioteca.precio;
suma:=suma_coleccion;
end;
end;
(* FUNCIÓN QUE DEVUELVE VALOR MÁXIMO DE LA COLECCION DE LA BIBLIOTECA *)
FUNCTION Maximo(biblioteca: Tbiblioteca; longitud: integer): integer;
var
i: integer;
max: integer;
begin
max:= 0;
for i:= 1 to longitud do
begin
if max < biblioteca.precio then begin
max:= biblioteca.precio;
Maximo:= max;
end;
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; var 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('MENU DE GESTION DE BIBLIOTECA');
writeln('-----------------------------');
writeln;
writeln('1. ALTA DE LIBRO');
writeln('2. BAJA DE LIBRO');
writeln('3. DATOS DE PRESTAMO');
writeln('4. MODIFICACION DE DATOS');
writeln('5. GUARDAR DATOS EN FICHEROS');
writeln('6. LECTURA DE DATOS DE FICHERO');
writeln('7. PRESENTACION 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('MENU PRESENTACION 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 MAXIMOS, MINIMOS, LA MEDIA Y EL VALOR TOTAL DE LA COLECCION');
writeln;
writeln('12. VOLVER MENU PRINCIPAL');
writeln('OPCION: ');
readln(opc1);
until ( (opc1>=9) and (opc1<=12) );
submenu:= opc1;
END;
(*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*)
(*!!!!!!!!!!!!!!!! VARIABLES GLOBALES !!!!!!!!!!!!!!!!!!!!!!!!*)
(*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*)
VAR
libro : Tlibro;
prestado : Tprestado;f
biblioteca: Tbiblioteca;
opc : integer;
opc1 : integer;
nombre : string;
buscado : integer;
(*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*)
(*!!!!!!!!!!!!!!!! PROGRAMA PRINCIPAL !!!!!!!!!!!!!!!!!!!!!!!!!!!*)
(*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*)
BEGIN
repeat
opc:= Menu;
case opc of
1: lee_libro(libro);
2: begin
writeln('Introducir codigo: ');
readln(buscado);
baja_modificacion(biblioteca, TAMBIBLIOTECA, buscado);
end;
3: hacer_prestamo(prestado);
4: baja_modificacion(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: begin
opc1:=submenu;
end;
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: begin
opc:= menu;
end;(* ME DA ERROR *)
end;
until(opc1=12);
END.