[ Foro de Pascal ]
hola, estoy haciendo un ejercicio que me mando la profe.
mi enunciado dice que tengo que crear un programa donde el admin pueda registrar nuevos productos y buscarlos mediante un código. tengo que usar registros, archivos y procesos. ya hice parte del codigo. puedo registrar los productos que yo quieras, pero el problema esta en que cuando busco un producto y cuando quiero buscar otro no me deja. tengo un IF donde se ejecuta los de buscar el producto y else donde me dice que ocurrió un error. y la primera ves que busco se me cumple la exprexion del if pero a la segunda ves no se cumple.
les dejo lo que llevo hasta el momento.
program proyecto_V1;
uses Crt;
const
ArchivoPro = 'Productos_V1.dat';
type
productos = record
Nombre,
Proveedor,
codigo: String[10];
Precio : Real;
Cantidad_A: Integer;
end;
var
F: file of productos;
Producto : productos;
function Existe_A: Boolean; // ARCHIVO
begin
assign (F, ArchivoPro);
{$I-}
reset(f);
{$I+}
if (Ioresult <> 0) then
begin
Existe_A := false;
end
else
begin
Existe_A := true;
end;
end;
procedure T_Empresa(); // EL NOMBRE DE LA EMPRESA
begin
writeln('***********************************************************');
writeln('*************** EL BACHAQUERO DEL SIGLO XXI ***************');
writeln('***********************************************************');
end;
procedure opcion1(); // REGISTRAMOS UN PRODUCTO
var
opcion: Char;
begin
clrscr;
T_Empresa;
writeln('*********************** PRODUCTO **************************');
write('Nombre del Producto: ');
readln(Producto.Nombre);
write('Proveedor: ');
readln(Producto.Proveedor);
write('Precio: ');
readln(Producto.Precio);
write('Codigo del Producto: ');
readln(Producto.codigo);
write('Cantidad: ');
readln(Producto.Cantidad_A);
writeln('Desea Registrar Este producto [S/N]: ');
repeat
opcion := upcase(readkey);
until opcion in ['S','N'];
if opcion = 'S' then
begin
if Existe_A = true then
begin
seek (F,filesize(F));
write(f,producto);
close(f);
writeln('Producto guardado con exito.');
end
else
begin
rewrite(F);
seek(F,0);
write(F,producto);
close(F);
writeln('Producto guardado con exito.');
end;
end
else
begin
writeln('Registro destruido.');
end;
readln;
end;
procedure opcion5(); // BUSCAR UN PRODUCTO POR NOMBRE Y POR CODIGO
var
Codigo_p: String;
i: Longint;
Codigo_E: Boolean;
begin
clrscr;
T_Empresa;
if Existe_A = true then
begin
writeln('****************** BUSCAR PRODUCTO *********************');
write('Por favor coloque el nombre o codigo del producto: ');
readln(Codigo_p);
Codigo_E:= false;
for i := 0 to filesize(F)-1 do
begin
seek(f,i);
read(F,producto);
if Producto.codigo = Codigo_p then
begin
Codigo_E := true;
break;
end;
end;
if Codigo_E = true then
begin
writeln('*********************** PRODUCTO **************************');
writeln('Nombre del Producto: ',Producto.Nombre);
writeln('Proveedor: ',Producto.Proveedor);
writeln('Precio: ',Producto.Precio:0:2);
writeln('Codigo del Producto: ',Producto.codigo);
writeln('Cantidad: ',Producto.Cantidad_A);
readln;
end
else
begin
writeln('el producto no existe!.');
close(F);
writeln;
readln;
end;
end
else
begin
writeln('el producto no existe!!!!!.');
readkey;
end;
end;
procedure Admin_Opciones();
var
Salir: Boolean;
opcion: Char;
begin
Salir := false;
repeat
clrscr;
T_Empresa;
writeln('Buenos dias, que desea hacer:');
writeln(' 1: Registrar Nuevo Producto.');
writeln(' 2: Listar en orden ascendente por precio.');
writeln(' 3: Listar en orden alfabetico por proveedor.');
writeln(' 4: Listar en orden alfabetico por nombre.');
writeln(' 5: Buscar un producto por nombre y por codigo.');
writeln(' 6: Salir del Programa.');
write('Por Favor Marque el numero de la opcion que elegira: ');
repeat
opcion := readkey;
until opcion in ['1','2','3','4','5','6'];
clrscr;
case opcion of
'1' : opcion1;
'5' : opcion5;
'6' : Salir := true;
end;
until Salir = true;
end;
begin
clrscr;
Admin_Opciones;
end.
Espero que me pueda ayuda, que llevo días intentado solucionarlo.
gracias.
El segundo mensaje de error es incorrecto, y eso te puede estar dando problemas. Debería ser "Fichero no encontrado", pero incluso ese texto no es totalmente fiel, porque quizá ni puedas acceder al fichero si no está abierto (y no lo abres dentro de "opcion5") o si está cerrado (y lo cierras en el "else" pero no en el "if").
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)