[ Foro de Pascal ]

Problema con archivos

03-Apr-2017 00:22
Yordis Gonzalez
1 Respuestas

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.


03-Apr-2017 16:09
Nacho Cabanes (+83)

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.)