Jump to content

Menu corre bem mas tem pequenos bugs


lammu

Recommended Posts

Bem pessoal venho pedir ajuda o programa corre bem so k tens pekenos bugs k eu nao sei resolver se alguem me ajudar agradecia ca ta o programa. ao escolher a opcao 2 k e acresentar nomes idade e numero corre bem. a segunda vez passa logo po nome

program lammu;
uses crt;
const
   opcoes = ['n','s','S','N'];
   sim = ['s','S'];
   nao = ['n','N'];
var alunos: Text;
procedure ficheiro;
var op:char;
begin
  Clrscr;
  op:='z';
  Repeat
    Gotoxy(20,12);
    Write('Quer continuar? (s/n)');
    Read(op);
  until op in opcoes;
  if op in sim then
  begin
    Rewrite(alunos);
    Close(alunos);
    Clrscr;
    Gotoxy(20,12);
    Write('Opera‡Æo bem sucedida.');
    Readln;
    Readln;
  end
  else
  begin
    Gotoxy(20,12);
    Write('Opera‡Æo mal sucedida.');
    Readln;
    Readln;
  end;

end;
procedure novo;
var op:char;
    st,n,nome,id,aux:string;
    idade:integer;
begin
  Repeat
    Clrscr;
    Append(alunos);
    Gotoxy(5,5);
    Write('N£mero? ');
    Gotoxy(5,7);
    Write('Nome? ');
    Gotoxy(5,9);
    Write('Idade? ');
    Gotoxy(13,5);
    Readln(n);
    Gotoxy(13,7);
    Readln(nome);
    Gotoxy(13,9);
    Readln(idade);
    Str(idade,id);
    st:=n+nome+id;
    Writeln(alunos, st);
    Gotoxy(5,15);
    Write('Continuar? (s/n)');
    Gotoxy(22,15);
    Read(op);
  until op in nao;
  Close(alunos);
end;
procedure listar;
var linha,nr,nm,ida:string;
    l:integer;
begin
  clrscr;
  l:=4;
  reset(alunos);
  while not Eof(alunos) do
  begin
    ReadLn(alunos, Linha);
    nr:=copy(linha,1,2);
    nm:=copy(linha,3,20);
    ida:=copy(linha,23,2);
    Gotoxy(5,l);
    Write(nr);
    Gotoxy(8,l);
    Write(nm);
    Gotoxy(30,l);
    Write(ida);
    l:=l+1;
  end;
  repeat until keypressed;
end;
procedure menu;
var op:integer;
begin
  Clrscr;
  Repeat
    Clrscr;
    Gotoxy(5,5);
    Write('1 - Novo ficheiro');
    Gotoxy(5,7);
    Write('2 - Acrescentar dados');
    Gotoxy(5,9);
    Write('3 - Listar');
    Gotoxy(5,11);
    Write('0 - Sair');
    Gotoxy(5,15);
    Write('Qual a tua op‡Æo? ');
    Readln(op);
    case op of
      1: Ficheiro;
      2: Novo;
      3: Listar;
    end;
  until op=0;
end;
begin
  Assign(alunos, 'c:\10e\alunos.dat');
  Menu;
end.
 

Quando colocares código utiliza a função GeShi e seleciona o respectivo código.

Link to comment
Share on other sites

Oi, antes de mais vindo ao fórum 😁

Quanto à problema k dizes k acontece não vejo qual a razão. Axo k o código ta bem feito e tem uma boa estrutura, no entanto vou te dar uma sugestão e perguntar umas cenas.

Porquê k escreves 2x readln?

    Write('Opera‡Æo bem sucedida.');
    Readln;
    Readln;
   (...)
    Write('Opera‡Æo mal sucedida.');
    Readln;
    Readln;
  end;

Sugiro k devias avisar o utilizador (tbm k deves ser so tu k utilizas o programa, mas pa ficar + completo) para o máx. de caracteres do nome, pois cm fizeste:

    ReadLn(alunos, Linha);
    nr:=copy(linha,1,2);
    nm:=copy(linha,3,20);
    ida:=copy(linha,23,2);

o utilizador pode introduzir mais k 20 caracteres e assim vai interferir com a leitura da idade, pois se tal acontecer vai aparecer caracteres na posição 23 e 24 da string -> para isso, ao declarar a variável podias por nome:string[20].

Só mais uma coisa, se introduzires menos k 20 caracteres no nome consegues ler a idade?

Cumps.

Link to comment
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
×
×
  • Create New...

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.