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

cjp

Listas com ficheiros

1 mensagem neste tópico

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora