Ir ao conteúdo
  • Cadastre-se

Exclusão e alteração de cadastro.


Visitante: rodrigo1311

Posts recomendados

Visitante: rodrigo1311
 

Eae pessoal? Bom eu estou fazendo um programa de cadastro de alunos, que tem cadastro, consulta, alteração, exclusão de todos os cadastros e exclusão de cadastro unico. E tenho enorme duvida em relação à exclusão e alteração de cadastro, já que não consigo fazer ambas :/

Tá aí o código, me ajudem por favor!

Program oiq ;

uses crt;

type cad = record

uf,nm,en,b,cid: string [50];

n: integer;

end;

var reg: array[1..20] of cad;

arq: file of cad;

i,pos,q: integer;

nome:string;

Procedure exclusao;

Begin

i:=1;

clrscr;

gotoxy(27,1);

writeln('EXCLUSAO DE CADASTRO');

writeln;

writeln('Digite o nome que deseja excluir:');

read(nome);

writeln;

assign(arq,'teste.txt');

reset(arq);

while not eof(arq) do

begin

read(arq, reg);

if (nome=reg.nm) then

begin

pos:=filepos(arq);

writeln;

writeln('CADASTRO DE ALUNO N: ',pos);

writeln;

writeln('Nome do aluno: ',reg.nm);

writeln('Endereco: ',reg.en);

writeln('N: ',reg.n);

writeln('Bairro: ',reg.B);

writeln('Cidade: ',reg.cid);

writeln('UF: ',reg.uf);

writeln;

writeln('Tem certeza que deseja excluir o cadastro? SIM=1 NAO=2');

readln(i);

if i=1 then

rewrite(arq);

end

else

begin

writeln('Cadastro nao encontrado');

readkey;

end;

end;

End;

Procedure ex;

Begin

i:=1;

assign(arq,'teste.txt');

reset(arq);

clrscr;

gotoxy(27,1);

writeln('EXCLUSAO DE CADASTROS');

writeln;

writeln('Deseja excluir todos os cadastros? (s\n)');

read(nome);

if nome = 's' then

begin

rewrite(arq);

clrscr;

gotoxy(27,4);

writeln('Cadastros apagados com sucesso');

readkey;

end;

end;

Procedure cadastro;

Begin

i:=1;

clrscr;

assign(arq,'teste.txt');

reset(arq);

while i<>2 do

begin

clrscr;

gotoxy(30,1);

writeln('CADASTRO DE ALUNO N: ');

writeln;

writeln('Nome do aluno: ');

Writeln('Endereco: ');

gotoxy(45,4);

writeln('N: ');

writeln('Bairro: ');

writeln('Cidade: ');

gotoxy(45,6);

writeln('UF: ');

gotoxy(16,3);

readln(reg.nm);

gotoxy(11,4);

readln(reg.en);

gotoxy(48,4);

readln(reg.n);

gotoxy(9,5);

readln(reg.B);

gotoxy(9,6);

readln(reg.cid);

gotoxy(49,6);

readln(reg.uf);

seek(arq,filesize(arq));

write(arq, reg);

writeln('Vocˆ deseja continuar? SIM=1 NAO=2: ' );

readln(i);

if i=2 then

begin

clrscr;

writeln('Cadastro(s) salvo(s) com sucesso');

end;

end;

close(arq);

End;

Procedure consulta;

Begin

i:=1;

clrscr;

while i=1 do

begin

clrscr;

gotoxy(27,1);

writeln('CONSULTA DE CADASTRO');

writeln;

writeln('Digite o nome que procura:');

read(nome);

writeln;

assign(arq,'teste.txt');

reset(arq);

while not eof(arq) do

begin

read(arq, reg);

if (nome=reg.nm) then

begin

pos:=filepos(arq);

writeln;

writeln('CADASTRO DE ALUNO N:', pos);

writeln;

writeln('Nome do aluno: ',reg.nm);

Writeln('Endereco: ',reg.en);

writeln('N: ',reg.n);

writeln('Bairro: ',reg.B);

writeln('Cidade: ',reg.cid);

writeln('UF: ',reg.uf);

writeln;

end;

end;

writeln('Tentar novamente? SIM=1 NAO=2');

readln(i);

end;

End;

Procedure alteracao;

Begin

i:=1;

clrscr;

gotoxy(27,1);

writeln('ALTERACAO DE CADASTRO');

writeln;

writeln('Digite o nome do aluno cadastrado que deseja alterar:');

read(nome);

writeln;

assign(arq,'teste.txt');

reset(arq);

while not eof(arq) do

begin

read(arq, reg);

if (nome=reg.nm) then

begin

pos:=filepos(arq);

writeln;

writeln('CADASTRO DE ALUNO N:',pos);

writeln;

writeln('Nome do aluno: ',reg.nm);

writeln('Endereco: ',reg.en);

writeln('N: ',reg.n);

writeln('Bairro: ',reg.B);

writeln('Cidade: ',reg.cid);

writeln('UF: ',reg.uf);

writeln;

writeln('ALTERACAO DE CADASTRO');

writeln('Nome do aluno: ',reg.nm );

writeln('Endereco: ');

writeln('N: ');

writeln('Bairro: ');

writeln('Cidade: ');

writeln('UF: ');

readln;

gotoxy(11,18);

readln(reg.en);

gotoxy(4,19);

readln(reg.n);

gotoxy(9,20);

readln(reg.B);

gotoxy(9,21);

readln(reg.cid);

gotoxy(5,22);

readln(reg.uf);

write(arq, reg);

clrscr;

gotoxy(30,10);

writeln('DADOS ALTERADOS');

readkey;

end;

end;

close(arq);

End;

Begin

clrscr;

i:=0;

while (i<>6) do

begin

clrscr;

gotoxy(25,2);

writeln('TURMA DA TRAXX: REGISTRO ESCOLAR');

gotoxy(30,4);

writeln('MENU PRINCIPAL');

gotoxy(30,6);

writeln('1-CADASTRO DE ALUNO ');

gotoxy(30,7);

writeln('2-CONSULTA DE CADASTRO');

gotoxy(30,8);

writeln('3-ALTERACAO DE CADASTRO ');

gotoxy(30,9);

writeln('4-EXCLUSAO DE CADASTRO');

gotoxy(30,10);

writeln('5-EXCLUIR TODOS OS CADASTROS');

gotoxy(30,11);

writeln('6-SAIR');

gotoxy(30,14);

writeln('Digite a opcao [ ]');

gotoxy(46,14);

readln(i);

if (i<1) or (i>6) then

begin

clrscr;

gotoxy(30,6);

write('Opcao invalida, repita a operacao');

delay(2000);

end;

if i=6 then

begin

clrscr;

gotoxy(30,6);

write('voce saiu com exito');

readkey;

end;

if i=2 then consulta;

if i=1 then cadastro;

if i=3 then alteracao;

if i=4 then exclusao;

if i=5 then ex;

end;

End.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Eae pessoal? Bom eu estou fazendo um programa de cadastro de alunos, que tem cadastro, consulta, alteração, exclusão de todos os cadastros e exclusão de cadastro unico. E tenho enorme duvida em relação à exclusão e alteração de cadastro, já que não consigo fazer ambas :/

Tá aí o código, me ajudem por favor!

Program oiq ;

uses crt;

type cad = record

uf,nm,en,b,cid: string [50];

n: integer;

end;

var reg: array[1..20] of cad;

arq: file of cad;

i,pos,q: integer;

nome:string;

Procedure exclusao;

Begin

i:=1;

clrscr;

gotoxy(27,1);

writeln('EXCLUSAO DE CADASTRO');

writeln;

writeln('Digite o nome que deseja excluir:');

read(nome);

writeln;

assign(arq,'teste.txt');

reset(arq);

while not eof(arq) do

begin

read(arq, reg);

if (nome=reg.nm) then

begin

pos:=filepos(arq);

writeln;

writeln('CADASTRO DE ALUNO N: ',pos);

writeln;

writeln('Nome do aluno: ',reg.nm);

writeln('Endereco: ',reg.en);

writeln('N: ',reg.n);

writeln('Bairro: ',reg.B);

writeln('Cidade: ',reg.cid);

writeln('UF: ',reg.uf);

writeln;

writeln('Tem certeza que deseja excluir o cadastro? SIM=1 NAO=2');

readln(i);

if i=1 then

rewrite(arq);

end

else

begin

writeln('Cadastro nao encontrado');

readkey;

end;

end;

End;

Procedure ex;

Begin

i:=1;

assign(arq,'teste.txt');

reset(arq);

clrscr;

gotoxy(27,1);

writeln('EXCLUSAO DE CADASTROS');

writeln;

writeln('Deseja excluir todos os cadastros? (s\n)');

read(nome);

if nome = 's' then

begin

rewrite(arq);

clrscr;

gotoxy(27,4);

writeln('Cadastros apagados com sucesso');

readkey;

end;

end;

Procedure cadastro;

Begin

i:=1;

clrscr;

assign(arq,'teste.txt');

reset(arq);

while i<>2 do

begin

clrscr;

gotoxy(30,1);

writeln('CADASTRO DE ALUNO N: ');

writeln;

writeln('Nome do aluno: ');

Writeln('Endereco: ');

gotoxy(45,4);

writeln('N: ');

writeln('Bairro: ');

writeln('Cidade: ');

gotoxy(45,6);

writeln('UF: ');

gotoxy(16,3);

readln(reg.nm);

gotoxy(11,4);

readln(reg.en);

gotoxy(48,4);

readln(reg.n);

gotoxy(9,5);

readln(reg.B);

gotoxy(9,6);

readln(reg.cid);

gotoxy(49,6);

readln(reg.uf);

seek(arq,filesize(arq));

write(arq, reg);

writeln('Vocˆ deseja continuar? SIM=1 NAO=2: ' );

readln(i);

if i=2 then

begin

clrscr;

writeln('Cadastro(s) salvo(s) com sucesso');

end;

end;

close(arq);

End;

Procedure consulta;

Begin

i:=1;

clrscr;

while i=1 do

begin

clrscr;

gotoxy(27,1);

writeln('CONSULTA DE CADASTRO');

writeln;

writeln('Digite o nome que procura:');

read(nome);

writeln;

assign(arq,'teste.txt');

reset(arq);

while not eof(arq) do

begin

read(arq, reg);

if (nome=reg.nm) then

begin

pos:=filepos(arq);

writeln;

writeln('CADASTRO DE ALUNO N:', pos);

writeln;

writeln('Nome do aluno: ',reg.nm);

Writeln('Endereco: ',reg.en);

writeln('N: ',reg.n);

writeln('Bairro: ',reg.B);

writeln('Cidade: ',reg.cid);

writeln('UF: ',reg.uf);

writeln;

end;

end;

writeln('Tentar novamente? SIM=1 NAO=2');

readln(i);

end;

End;

Procedure alteracao;

Begin

i:=1;

clrscr;

gotoxy(27,1);

writeln('ALTERACAO DE CADASTRO');

writeln;

writeln('Digite o nome do aluno cadastrado que deseja alterar:');

read(nome);

writeln;

assign(arq,'teste.txt');

reset(arq);

while not eof(arq) do

begin

read(arq, reg);

if (nome=reg.nm) then

begin

pos:=filepos(arq);

writeln;

writeln('CADASTRO DE ALUNO N:',pos);

writeln;

writeln('Nome do aluno: ',reg.nm);

writeln('Endereco: ',reg.en);

writeln('N: ',reg.n);

writeln('Bairro: ',reg.B);

writeln('Cidade: ',reg.cid);

writeln('UF: ',reg.uf);

writeln;

writeln('ALTERACAO DE CADASTRO');

writeln('Nome do aluno: ',reg.nm );

writeln('Endereco: ');

writeln('N: ');

writeln('Bairro: ');

writeln('Cidade: ');

writeln('UF: ');

readln;

gotoxy(11,18);

readln(reg.en);

gotoxy(4,19);

readln(reg.n);

gotoxy(9,20);

readln(reg.B);

gotoxy(9,21);

readln(reg.cid);

gotoxy(5,22);

readln(reg.uf);

write(arq, reg);

clrscr;

gotoxy(30,10);

writeln('DADOS ALTERADOS');

readkey;

end;

end;

close(arq);

End;

Begin

clrscr;

i:=0;

while (i<>6) do

begin

clrscr;

gotoxy(25,2);

writeln('TURMA DA TRAXX: REGISTRO ESCOLAR');

gotoxy(30,4);

writeln('MENU PRINCIPAL');

gotoxy(30,6);

writeln('1-CADASTRO DE ALUNO ');

gotoxy(30,7);

writeln('2-CONSULTA DE CADASTRO');

gotoxy(30,8);

writeln('3-ALTERACAO DE CADASTRO ');

gotoxy(30,9);

writeln('4-EXCLUSAO DE CADASTRO');

gotoxy(30,10);

writeln('5-EXCLUIR TODOS OS CADASTROS');

gotoxy(30,11);

writeln('6-SAIR');

gotoxy(30,14);

writeln('Digite a opcao [ ]');

gotoxy(46,14);

readln(i);

if (i<1) or (i>6) then

begin

clrscr;

gotoxy(30,6);

write('Opcao invalida, repita a operacao');

delay(2000);

end;

if i=6 then

begin

clrscr;

gotoxy(30,6);

write('voce saiu com exito');

readkey;

end;

if i=2 then consulta;

if i=1 then cadastro;

if i=3 then alteracao;

if i=4 then exclusao;

if i=5 then ex;

end;

End.

Olá,

rodrigo1311, seja bem vindo ao Fórum do Clube do Hardware.

Vamos la:

1) Sobre exclusão de registro em arquivos

Assim como no windows, os dados não são necessariamente excluídos fisicamente do local armazenado, mas sim são excluídos de modo lógico, ou seja, em vez de remover, ou cobrir de um monte de "0" por exemplo, a MS simplesmente marcar o dado como apagado.

Como assim???

É simples, é cria uma flag para indicar se o dado foi excluído ou não, assim caso ele esteja, o dado simplesmente não é listado, dando a impressão que ele foi apagado. É fácil provar... tando é que existem programas que (tentam) recuperar aquivos apagados, ou seja, eles localizam os arquivos que estão marcados como apagados, mas que ainda possui seu conteúdo íntegro (que não foi substituído por outro). Outra forma de perceber é: compare o tempo que demora para copiar um filme completo e para excluir esse filme!!! (excluir é quase instantâneo ^_^, já que basta marcar, por exemplo colocando um @ no início de alguma parte...)

Em fim, você pode utilizar deste mesmo conceito. As formas são diversas, basta usar a criatividade. Uma forma simples seria colocar mais um campo, como:

  cad [color=#000000]=[/color] [color=#0000ff]record[/color]
EXCLUIDO [color=#000000]:[/color][color=#0000ff]boolean[/color][color=#000000];[/color]
uf[color=#000000],[/color]
nm[color=#000000],[/color]
en[color=#000000],[/color]
b[color=#000000],[/color]
cid [color=#000000]:[/color][color=#0000ff]string[/color] [color=#000000][[/color][color=#000000]50[/color][color=#000000]];[/color]
n [color=#000000]:[/color][color=#0000ff]integer[/color][color=#000000];[/color]
[color=#0000ff]end[/color][color=#000000];[/color]

Ai quando cadastrar marca como EXCLUIDO:=false;, e quando deletado marca como EXCLUIDO:=true;, entendeu?

Veja que ai você precisar fazer algumas adaptações, como por exemplo definir se você vai querer aproveitar esse novo espaço vago ou não. Tipo, você pode ter no menu, uma opção de recuperar dados excluídos... ou também implementar o cadastro observando o próximo lugar vago ou seja, ou o próximo "EXCLUIDO=true" ou no final do arquivo (novo registro).

Existe outra forma mais bruta, que é simplesmente você criar um novo arquivo removendo os registro que forma excluído... mas veja o trabalho que isso vai dá para o coitado do processador e hd??? (imagine isso numa escala maior, por exemplo com 100.000 cadastros??? ou 1.000.000??? ou mais???

Na teoria é muito mais fácil você marcar o registro como excluído e controlar isso no programa principal. Veja que assim você também não precisa se preocupar com a posição do registro, ou seja, o cadastro 10, sempre vai está na posição 10. E no caso de ser excluído poderá ser substituído por um novo ou simplesmente deixar o lugar dele queto. (o registro nunca sendo apagada definidamente, neste caso, a posição nunca é reutilizada).

Um exemplo de não reutilização são logins de alguns sites, por exemplo, se você tiver uma conta no Gmail e apagar ela, outro usuário não poderá criar outra conta com o mesmo nome, ou seja, sua conta foi excluída mas não pode ser substituída (e as vezes nem recuperada... ela fica lá queta).

RESUMINDO

Use um campo a mais como demonstrei... ou seja, a exclusão não passará de uma "edição".

2) Edição de registro

Uma coisa que você falta fazer pare sobrescrever um registro é reposicioná-lo corretamente, já que após a leitura o read pula uma linha do arquivo, ou seja, você precisa voltar para a posição original do registro.

[color=#000000]seek[/color][color=#000000]([/color]arq[color=#000000],[/color]pos[color=#000000]);[/color] [color=#008000]//posiciona na posição do registro atual[/color]

(ou é pos-1, testa ai....)

3) Read x ReadLN

Existe diferenças sobre os dois. Mas quando se trata de leitura do teclado, use sempre ReadLN, nunca Read. (a não se que você use para aproveitar a diferença que existe). Se quiser dê uma pesquisada no Fórum sobre isso... mas adianto: NA DÚVIDA SEMPRE USE READLN PARA LER DO TECLADO.

***

PS: Veja que rewrite(arq); significa "reescreve o arq", que na prática APAGA todo o conteúdo!!! (apaga, cria outro e abre novamente), ou seja, você está apagando o arquivo todo!

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!