Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
cjp

Listas com ficheiros

Recommended Posts

cjp

Estou a tentar fazer um programa simples que tem um menu com 3 opções: criar ficheiro, inserir dados (código e nome do produto) e listar dados.

Para isso estou a utilizar listas ligadas e ficheiros. O código que escrevi só funciona quando utilizo todas as opções de uma vez, isto é, se correr o programa, criar o ficheiro, inserir dados e listar de seguida ele funciona mas se sair do programa e voltar a entrar quando vou tentar listar o programa rebenta.

Eu estou a escrever e ler do ficheiro cada nodo individualmente e tenho dúvidas se se faz assim pois, desta forma nem sequer preciso de utilizar a inserção à cabeça, daí haver código em comentário no procedimento inserir.

Será que alguém pode dar uma vista de olhos ao código?

Obrigada antecipadamente.

PROGRAM ficheiros_listas (INPUT, OUTPUT);

USES CRT;

TYPE apont_estrutura = ^estrutura;

    estrutura = RECORD

                    cod_prod: INTEGER;

                    nome_prod: STRING;

                    seguinte: apont_estrutura;

                END;

      fich_list = FILE OF apont_estrutura;

VAR p_lista: apont_estrutura;

    fich_l2: fich_list;

    opcao: INTEGER;

PROCEDURE criar_fich;

BEGIN

    REWRITE (fich_l2);

    CLOSE (fich_l2);

    WRITELN ('Ficheiro criado com sucesso');

    READLN;

END;

PROCEDURE inserir;

VAR resp: CHAR;

    p_aux: apont_estrutura;

BEGIN

    RESET (fich_l2);

    SEEK (fich_l2, FILESIZE(fich_l2));

    resp:='s';

    WHILE (resp = 's') OR (resp = 'S') DO

        BEGIN

            NEW (p_aux);

            WRITE ('Insira o c¢digo do produto: ');

            READLN (p_aux^.cod_prod);

            WRITE ('Insira o nome do produto: ');

            READLN (p_aux^.nome_prod);

            (*IF p_lista = NIL THEN

                p_aux^.seguinte := NIL

            ELSE

                p_aux^.seguinte := p_lista;

            p_lista := p_aux;*)

            WRITE (fich_l2,p_aux);

            WRITE ('Deseja inserir mais dados (s/n) ');

            READLN (resp);

        END;

    CLOSE (fich_l2);

    READLN;

END;

PROCEDURE listar;

VAR p_aux: apont_estrutura;

BEGIN

    NEW(p_aux);

    RESET (fich_l2);

    WHILE NOT EOF(fich_l2) DO

        BEGIN

            WRITE ('Estou aqui');

            READLN;

            READ (fich_l2, p_aux);

            WRITELN (p_aux^.cod_prod);

            WRITELN (p_aux^.nome_prod);

        END;

    CLOSE (fich_l2);

    READLN;

END;

BEGIN

    TEXTBACKGROUND (WHITE);

    TEXTCOLOR (BLACK);

    opcao := 0;

    ASSIGN (fich_l2, 'fich_l2.dat');

    WHILE opcao<>4 DO

        BEGIN

            CLRSCR;

            GOTOXY (30,5);

            WRITELN ('FICHEIROS COM LISTAS');

            GOTOXY (30,7);

            WRITELN ('1 - Criar');

            GOTOXY (30,8);

            WRITELN ('2 - Inserir');

            GOTOXY (30,9);

            WRITELN ('3 - Listar');

            GOTOXY (30,10);

            WRITELN ('4 - Sair');

            GOTOXY (30,12);

            WRITE ('Escolha uma op‡Æo: ');

            READLN (opcao);

            CASE opcao OF

                1: BEGIN CLRSCR; WRITELN; WRITELN ('CRIAR FICHEIRO'); WRITELN; criar_fich; END;

                2: BEGIN CLRSCR; WRITELN; WRITELN ('INSERIR'); WRITELN; inserir; END;

                3: BEGIN CLRSCR; WRITELN; WRITELN ('LISTAR'); WRITELN; listar; END;

                4: BEGIN GOTOXY (25,17); WRITELN ('Obrigado por ter usado este programa'); END

            ELSE

                BEGIN

                    GOTOXY (10,13);

                    WRITELN ('Op‡Æo inv lida. Prima qualquer tecla e escolha uma op‡Æo de 1 a 3');

                    READLN;

                END;

          END;

    END;

    READLN;

END.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.