FICHERO BINARIO
Publicado por oscar (64 intervenciones) el 18/11/2012 15:37:19
Hola chicos, me urge bastante, como casi siempre pero es que ya acabe todas las practicas que tenia que hacer pero me han reportado una y es que no es exactamente como la tengo como habia que hacerla os paso enunciado y lo que yo hice, a ver si podeis mirarla y decirme como tengo q ponerlo, gracias mil como siempre!!
supongo q es pq no lo hice definiendo el fichero binario que seria del tipo “file of..” y las consiguientes modificaciones, a ver si me decis como quedaria entonces…GRACIAS
Defina un fichero binario en el que cada elemento del fichero sea de tipo Producto.
Codifique un procedimiento (guarda_cesta) que guarda todos los productos de una cesta de la compra, que se pasa como parámetro, en un fichero cuyo nombre también se pasa como parámetro.
Tenga en cuenta que salvo el producto que ocupa la posición cero (que como ya veremos tiene un significado especial) todos los demás están en la cesta sólo si el campo en_cesta=TRUE, si este campo es FALSE no necesitamos, por tanto, guardar ese producto en el fichero.
2.
Codifique un procedimiento (recupera_cesta) que lea de un fichero de elementos de tipo producto, cuyo nombre se pasa como parámetro JUNTO CON OTROS QUE CONSIDERE NECESARIO, todos los productos que tenga almacenados y los guarde en una variable del tipo cesta que también se pasa como parámetro. Asegúrese de que no se sobrepasarán los límites de la cesta intentando introducir más de TAMMAXCESTA.
3.
Codifique un módulo principal en el que reutilizando los resultados de cuestiones y actividades anteriores (procedimientos de lectura y escritura de ficheros, presentación, modificación de datos de una cesta…), se muestre al usuario el menú y se ejecuten las acciones pertinentes a cada opción.
Tenga en cuenta que si el usuario elige:
1. Abrir cesta de compra existente: se preguntará al usuario el nombre de la cesta (que será el nombre del fichero que la contiene).
2. Comenzar cesta de compra nueva: se creará una cesta desde cero.
5. Guardar cesta: se pedirá al usuario el nombre del fichero donde guardar la cesta.
6. Pedir cesta: se mostrará la cesta actual.
7. Salir del programa: se terminará la ejecución del programa
OS DEJO MI CODIGO
program registrocesta;
uses
crt;
const
tammaxcesta = 5;
type
regcesta = record
nombre : string;
numero : integer;
precio : real;
en_cesta : boolean;
end;
producto = array[0..tammaxcesta] of regcesta;
var
cesta : array[1..10] of producto;
nn:integer;
nu:integer;
cont : integer;
tec : char;
procedure lee_producto(ces, n : integer);
var
r : integer;
rd : char;
begin
repeat
clrscr;
writeln(‘ Entrada Cesta Numero : ‘,n);
writeln;
write(‘ Introduce Nombre Producto : ‘);
readln(cesta[ces][n].nombre);
write(‘ Introduce Cantidad : ‘);
readln(cesta[ces][n].numero);
write(‘ Introduce Precio Unidad : ‘);
readln(cesta[ces][n].precio);
cesta[ces][r].en_cesta := true;
writeln;
writeln(‘ Desea introducir mas Productos en La Cesta [S/N]‘);
repeat
rd := upcase(readkey);
until rd in['S','N'];
if rd = ‘S’ then
n := n + 1;
until (n > tammaxcesta) or (rd = ‘N’);
if n > tammaxcesta then
begin
clrscr;
writeln(‘**** Fin De Entradas Pulse una tecla ****’);
end;
end;
procedure inicializa_cestas(ces : integer);
var
i : integer;
begin
if ces > 10 then
begin
writeln(‘ Excedido Numero de Cestas. Pulsar [Enter]‘);
readln;
end
else
begin
for i := 0 to tammaxcesta do
begin
cesta[ces][i].en_cesta := false;
cesta[ces][i].nombre := ‘ ‘;
end;
clrscr;
writeln(‘Cesta Inicializada. Pulse una tecla’);
readln;
end;
end;
procedure mostrar_productos(pro : integer);
var
y:integer;
d : integer;
begin
clrscr;
if cont > 1 then
begin
y := 3;
writeln(‘Nombre de Producto , Numero de Productos y Precio’);
for d := 1 to tammaxcesta do
begin
if cesta[pro][d].nombre = ‘ ‘ then
begin
end
else
begin
writeln(cesta[pro][d].nombre);
writeln(cesta[pro][d].numero);
writeln(cesta[pro][d].precio:0:2);
y := y + 1;
end;
end;
end
else
writeln(‘ La Cesta esta Vacia. Pulsar [Enter] ‘);
readln;
end;
procedure mostrar_cesta(ces : integer);
var
p : integer;
begin
clrscr;
write(‘ Introduzca Posicion a Visualizar : ‘);
readln(p);
if (p ‘ ‘) then
begin
if cont > 1 then
begin
writeln(‘Nombre:’);
writeln(cesta[ces][p].nombre);
writeln(‘Numero De Productos:’);
writeln(cesta[ces][p].numero);
writeln(‘Precio’);
writeln(cesta[ces][p].precio:0:2);
writeln;
writeln(‘Pulse [Enter] ‘);
end
else
writeln(‘La Cesta Esta Vacia. Pulse una tecla ‘);
readln;
end;
end;
function cuenta_productos(ddd : integer) : integer;
var
b:integer;
c : integer;
begin
c := 0;
for b := 1 to tammaxcesta do
if cesta[ddd][b].en_cesta = true then
c := c + 1;
cuenta_productos := c;
end;
function busca_libre(lll : integer) : integer;
var
c:integer;
vv : integer;
begin
c := 0;
for vv := 1 to tammaxcesta do
if cesta[lll][vv].en_cesta = false then
begin
c := vv;
break;
end;
if c > 0 then
begin
busca_libre := c;
end
else
begin
busca_libre := 0;
end;
end;
procedure incluir_producto_en_cesta;
var
n, gg : integer;
begin
writeln(‘ Introduzca Numero Cesta : ‘);
readln(n);
gg := busca_libre(n);
lee_producto(n,gg);
end;
begin
cont := 1;
repeat
clrscr;
writeln(‘ ***** Menu ***** ‘);
writeln;
writeln(‘ 1 : Iniciar una Cestas’);
writeln(‘ 2 : Rellenar Una Cesta ‘);
writeln(‘ 3 : Mostrar Todos los Productos de Una Cesta’);
writeln(‘ 4 : Mostrar Un Productos de la Cesta’);
writeln(‘ 5 : Nuevo Producto En Cesta’);
writeln(‘ 6 : Salir’);
writeln;
writeln(‘ <<>>’);
repeat
tec := readkey;
until tec in['1','2','3','4','5','6'];
case tec of
’1′ : begin write(‘ Cesta Numero : ‘); readln(nn); inicializa_cestas(nn); end;
’2′ : begin lee_producto(cont,1); cont := cont + 1; end;
’3′ : begin write(‘ Cesta Numero : ‘); readln(nn); mostrar_productos(nn); end;
’4′ : begin
clrscr;
write(‘ Introduce el Numero de Cesta : ‘);
readln(nu);
if (nu > tammaxcesta) or (cont < 1) then
begin
clrscr;
writeln('Error de Numero o Cesta Vacia. Pulse una tecla');
readln;
exit;
end
else
mostrar_cesta(nu);
end;
'5' : incluir_producto_en_cesta;
end;
until tec = '6';
end.
supongo q es pq no lo hice definiendo el fichero binario que seria del tipo “file of..” y las consiguientes modificaciones, a ver si me decis como quedaria entonces…GRACIAS
Defina un fichero binario en el que cada elemento del fichero sea de tipo Producto.
Codifique un procedimiento (guarda_cesta) que guarda todos los productos de una cesta de la compra, que se pasa como parámetro, en un fichero cuyo nombre también se pasa como parámetro.
Tenga en cuenta que salvo el producto que ocupa la posición cero (que como ya veremos tiene un significado especial) todos los demás están en la cesta sólo si el campo en_cesta=TRUE, si este campo es FALSE no necesitamos, por tanto, guardar ese producto en el fichero.
2.
Codifique un procedimiento (recupera_cesta) que lea de un fichero de elementos de tipo producto, cuyo nombre se pasa como parámetro JUNTO CON OTROS QUE CONSIDERE NECESARIO, todos los productos que tenga almacenados y los guarde en una variable del tipo cesta que también se pasa como parámetro. Asegúrese de que no se sobrepasarán los límites de la cesta intentando introducir más de TAMMAXCESTA.
3.
Codifique un módulo principal en el que reutilizando los resultados de cuestiones y actividades anteriores (procedimientos de lectura y escritura de ficheros, presentación, modificación de datos de una cesta…), se muestre al usuario el menú y se ejecuten las acciones pertinentes a cada opción.
Tenga en cuenta que si el usuario elige:
1. Abrir cesta de compra existente: se preguntará al usuario el nombre de la cesta (que será el nombre del fichero que la contiene).
2. Comenzar cesta de compra nueva: se creará una cesta desde cero.
5. Guardar cesta: se pedirá al usuario el nombre del fichero donde guardar la cesta.
6. Pedir cesta: se mostrará la cesta actual.
7. Salir del programa: se terminará la ejecución del programa
OS DEJO MI CODIGO
program registrocesta;
uses
crt;
const
tammaxcesta = 5;
type
regcesta = record
nombre : string;
numero : integer;
precio : real;
en_cesta : boolean;
end;
producto = array[0..tammaxcesta] of regcesta;
var
cesta : array[1..10] of producto;
nn:integer;
nu:integer;
cont : integer;
tec : char;
procedure lee_producto(ces, n : integer);
var
r : integer;
rd : char;
begin
repeat
clrscr;
writeln(‘ Entrada Cesta Numero : ‘,n);
writeln;
write(‘ Introduce Nombre Producto : ‘);
readln(cesta[ces][n].nombre);
write(‘ Introduce Cantidad : ‘);
readln(cesta[ces][n].numero);
write(‘ Introduce Precio Unidad : ‘);
readln(cesta[ces][n].precio);
cesta[ces][r].en_cesta := true;
writeln;
writeln(‘ Desea introducir mas Productos en La Cesta [S/N]‘);
repeat
rd := upcase(readkey);
until rd in['S','N'];
if rd = ‘S’ then
n := n + 1;
until (n > tammaxcesta) or (rd = ‘N’);
if n > tammaxcesta then
begin
clrscr;
writeln(‘**** Fin De Entradas Pulse una tecla ****’);
end;
end;
procedure inicializa_cestas(ces : integer);
var
i : integer;
begin
if ces > 10 then
begin
writeln(‘ Excedido Numero de Cestas. Pulsar [Enter]‘);
readln;
end
else
begin
for i := 0 to tammaxcesta do
begin
cesta[ces][i].en_cesta := false;
cesta[ces][i].nombre := ‘ ‘;
end;
clrscr;
writeln(‘Cesta Inicializada. Pulse una tecla’);
readln;
end;
end;
procedure mostrar_productos(pro : integer);
var
y:integer;
d : integer;
begin
clrscr;
if cont > 1 then
begin
y := 3;
writeln(‘Nombre de Producto , Numero de Productos y Precio’);
for d := 1 to tammaxcesta do
begin
if cesta[pro][d].nombre = ‘ ‘ then
begin
end
else
begin
writeln(cesta[pro][d].nombre);
writeln(cesta[pro][d].numero);
writeln(cesta[pro][d].precio:0:2);
y := y + 1;
end;
end;
end
else
writeln(‘ La Cesta esta Vacia. Pulsar [Enter] ‘);
readln;
end;
procedure mostrar_cesta(ces : integer);
var
p : integer;
begin
clrscr;
write(‘ Introduzca Posicion a Visualizar : ‘);
readln(p);
if (p ‘ ‘) then
begin
if cont > 1 then
begin
writeln(‘Nombre:’);
writeln(cesta[ces][p].nombre);
writeln(‘Numero De Productos:’);
writeln(cesta[ces][p].numero);
writeln(‘Precio’);
writeln(cesta[ces][p].precio:0:2);
writeln;
writeln(‘Pulse [Enter] ‘);
end
else
writeln(‘La Cesta Esta Vacia. Pulse una tecla ‘);
readln;
end;
end;
function cuenta_productos(ddd : integer) : integer;
var
b:integer;
c : integer;
begin
c := 0;
for b := 1 to tammaxcesta do
if cesta[ddd][b].en_cesta = true then
c := c + 1;
cuenta_productos := c;
end;
function busca_libre(lll : integer) : integer;
var
c:integer;
vv : integer;
begin
c := 0;
for vv := 1 to tammaxcesta do
if cesta[lll][vv].en_cesta = false then
begin
c := vv;
break;
end;
if c > 0 then
begin
busca_libre := c;
end
else
begin
busca_libre := 0;
end;
end;
procedure incluir_producto_en_cesta;
var
n, gg : integer;
begin
writeln(‘ Introduzca Numero Cesta : ‘);
readln(n);
gg := busca_libre(n);
lee_producto(n,gg);
end;
begin
cont := 1;
repeat
clrscr;
writeln(‘ ***** Menu ***** ‘);
writeln;
writeln(‘ 1 : Iniciar una Cestas’);
writeln(‘ 2 : Rellenar Una Cesta ‘);
writeln(‘ 3 : Mostrar Todos los Productos de Una Cesta’);
writeln(‘ 4 : Mostrar Un Productos de la Cesta’);
writeln(‘ 5 : Nuevo Producto En Cesta’);
writeln(‘ 6 : Salir’);
writeln;
writeln(‘ <<>>’);
repeat
tec := readkey;
until tec in['1','2','3','4','5','6'];
case tec of
’1′ : begin write(‘ Cesta Numero : ‘); readln(nn); inicializa_cestas(nn); end;
’2′ : begin lee_producto(cont,1); cont := cont + 1; end;
’3′ : begin write(‘ Cesta Numero : ‘); readln(nn); mostrar_productos(nn); end;
’4′ : begin
clrscr;
write(‘ Introduce el Numero de Cesta : ‘);
readln(nu);
if (nu > tammaxcesta) or (cont < 1) then
begin
clrscr;
writeln('Error de Numero o Cesta Vacia. Pulse una tecla');
readln;
exit;
end
else
mostrar_cesta(nu);
end;
'5' : incluir_producto_en_cesta;
end;
until tec = '6';
end.
Valora esta pregunta


0