Ir ao conteúdo

Programa de cadastro usando arquivos


Joao Carlos Dias

Posts recomendados

Postado

Preciso cria um programa de cadastro com arquivos registros e etc..

Eu criei um menu que contem:

Criar novo arquivo

Cadastrar novo personagem

Modificar um personagem

Deletar um personagem

Mostrar personagens

Buscar personagem

Salvar e Sair

Mas eu estou com extrema dificuldade nos topicos:

Modificar um personagem

Deletar um personagem

Agradeço a ajuda desde ja.

O algoritimo:


uses crt;

type personagem = record
nome,classe,especialidade,arma:string;
level:integer;
end;

var
op:char;
x: personagem;
arq:file of personagem;
quant,i:integer;
sair:boolean;

////////////////////////////////////////////////////////
{inicio das procedures}

{procedure de cadastro dos personagens}
procedure criarpersonagem;

begin
writeln('Quantos personagens voce deseja cadastrar?');
readln(quant);
reset(arq);
seek(arq,filesize(arq));
for i:=1 to quant do
begin
writeln('Digite o nome do personagem:');
readln(x.nome);
writeln('Digite a classe do seu personagem:');
readln(x.classe);
writeln('Digite a especialidade do seu personagem:');
readln(x.especialidade);
writeln('Qual arma seu personagem usa:');
readln(x.arma);
writeln('Digite o level do seu personagem:');
readln(x.level);
write(arq,x);
clrscr;
end;
end;
////////////////////////////////////////////////////////

procedure modificarpersonagem;
var
resp,nome,classe,especialidade,arma:string;
t,level:integer;
begin
reset(arq);
writeln('Digite o nome do personagem que voce deseja modificar:');
readln(resp);
t:=filesize(arq);
for i:=1 to t do
begin
read(arq,x);
if x.nome=resp then begin
writeln('Qual o novo nome?');
readln(nome);
x.nome:=nome;
writeln('Qual a nova classe?');
readln(classe);
x.classe:=classe;
writeln('Qual a nova especialidade?');
readln(especialidade);
x.especialidade:=especialidade;
writeln('Qual a nova arma?');
readln(arma);
x.arma:=arma;
writeln('Qual o novo level?');
readln(level);
x.level:=level;
end;
end;
end;

procedure deletarpersonagem;
begin
end;
////////////////////////////////////////////////////////
{procedures de busca}

procedure buscanome;
var
resp:string;
begin
writeln('Qual nome do personagem?');
readln(resp);
reset(arq);
while not eof(arq) do
begin
read(arq,x);
if x.nome=resp then begin
writeln('Nome: ',x.nome);
writeln('Classe: ',x.classe);
writeln('Especialidade: ',x.especialidade);
writeln('Arma: ',x.arma);
writeln('Level: ',x.level);
end;
end;
if x.nome<>resp then
begin
writeln('Personagem inexistente.');
end;
readkey;
clrscr;
end;


procedure buscaclasse;
var
resp:string;
begin
writeln('Qual classe voce deseja buscar?');
readln(resp);
writeln('Os personagens com essa classe:');
reset(arq);
while not eof(arq) do
begin
read(arq,x);
if (x.classe=resp) then begin
writeln('Nome: ',x.nome);
writeln('Classe: ',x.classe);
writeln('Especialidade: ',x.especialidade);
writeln('Arma: ',x.arma);
writeln('Level: ',x.level);
writeln;
end;
end;
if (x.classe<>resp) then
begin
writeln('Personagem inexistente.');
end;
readkey;
clrscr;
end;

procedure buscaespecialidade;
var
resp:string;
begin
writeln('Qual a especialidade voce deseja buscar?');
readln(resp);
writeln('Os personagens com essa especialidade são:');
while not eof(arq) do
begin
read(arq,x);
if (x.especialidade=resp) then begin
writeln('Nome: ',x.nome);
writeln('Classe: ',x.classe);
writeln('Especialidade: ',x.especialidade);
writeln('Arma: ',x.arma);
writeln('Level: ',x.level);
writeln;
end;
end;
if (x.especialidade<>resp) then
begin
writeln('Personagem inexistente.');
end;
readkey;
clrscr;
end;

procedure buscapersonagem;
var
res:char;
begin
writeln('voce deseja buscar por:');
writeln('1- Nome');
writeln('2- Classe');
writeln('3- Especialidade');
readln(res);
clrscr;
case res of
'1' : buscanome;
'2' : buscaclasse;
'3' : buscaespecialidade;
end;
end;
{fim das procedures de busca}
///////////////////////////////////////////////////
{modificar a variavel do for}
procedure mostrarpersonagens;
var
cont:integer;
begin
reset(arq);
while not eof(arq) do
begin
read(arq,x);
clrscr;
writeln('Os personagens cadastrados:');
writeln('Nome: ',x.nome);
writeln('Classe: ',x.classe);
writeln('Especialidade: ',x.especialidade);
writeln('Arma: ',x.arma);
writeln('Level: ',x.level);
writeln;
writeln('Aperte enter para passar pro proximo.');
readkey;
end;
readkey;
clrscr;
end;
{fim das procedures}


///////////////////////////////////////////////////////
{PROGRAMA PRINCIPAL}
begin
assign(arq,'arq.dat');
sair:=false;
repeat
writeln('voce deseja:');
writeln('1- Criar arquivo.');
writeln('2- Cadastrar um novo personagem.');
writeln('3- Modificar um personagem.');
writeln('4- Deletar um personagem.');
writeln('5- Mostrar personagens.');
writeln('6- Buscar personagem.');
writeln('7- Salvar e Sair.');
writeln;
write('-->');
readln(op);
clrscr;
case op of
'1': rewrite(arq);
'2': criarpersonagem;
'3': modificarpersonagem;
'4': deletarpersonagem;
'5': mostrarpersonagens;
'6': buscapersonagem;
'7': sair:=true;
else
begin
writeln('Opcao invalida');
end;
end;
until(sair=true);
end.
PROGRAM Personagens;

Postado

Cara se for realmente pra você deletar , você tem que fazer muitos comandos então eu não ,deletei , eu "escondi" eu fiz o seguinte, peguei no arquivo procurei o registro que eu quero apagar , coloquei o ponteiro no inicio do registro e atribui '' a todos os valores , e na hora de mostrar/buscar pelo nome do personagem eu coloquei uma condição para nao mostrar esses personagens deletados... isso foi pra um trab da faculdade , então cara , se você for programar de verdade para algum cliente , nunca faça isso , porque você vai so pesar o arquivo com registros vazios.


procedure deletarpersonagem;
var
resp:string;
posi,pont:integer;
begin
reset(arq);
clrscr;
writeln('Digite o nome do personagem que deseja deletar.');
readln(resp);
while not eof(arq) do
begin
read(arq,x);
if x.nome=resp then
begin
posi:=filepos(arq);
seek(arq,posi-1);
x.nome:='';
x.classe:='';
x.especialidade:='';
x.arma:='';
x.level:=0;
write(arq,x);
writeln('Personagem deletado.');
readkey;
end;
end;
end;

  • Membro VIP
Postado
Cara se for realmente pra você deletar , você tem que fazer muitos comandos então eu não ,deletei , eu "escondi" eu fiz o seguinte, peguei no arquivo procurei o registro que eu quero apagar , coloquei o ponteiro no inicio do registro e atribui '' a todos os valores , e na hora de mostrar/buscar pelo nome do personagem eu coloquei uma condição para nao mostrar esses personagens deletados...

Você não precisa zerar os dados... acho que nem deve... uma boa solução seria criar um atributo a mais, ex.:

x.ATIVO:=false

E lógico que na hora de cadastrar, marco como true.

isso foi pra um trab da faculdade , então cara , se você for programar de verdade para algum cliente , nunca faça isso , porque você vai so pesar o arquivo com registros vazios.

Então, como comentei antes, creio que acontece o oposto... uma vez criado, o dado NÃO É MAIS APAGADO. Ele simplesmente é marcado como tal... O que pode acontecer é de tempos em tempos fazer uma limpeza, por exemplo, após X anos, o arquivo pode ser substituído ou apagado...

O mesmo acontece com o próprio Windows... Se não me engano, ele coloca um @ ou algo do tipo antes do arquivo.. daí o "Windows Explorer" passa a "ignorar" o arquivo... É fácil deduzir isso, veja que para copiar um arquivo, demora certo tempo, para apagar, é praticamente instantâneo... Daí, ao criar um arquivo, ele procura um espaço vazio e/ou espaços marcado como apagados e escreve por cima... Existem inclusive programas que consegue enxergar esses arquivos apagados e recuperar..

PS: Quando formata um HD, os arquivos geralmente também não são apagados.. tá tudo lá! ^_^. Existem também programas que apagam de fato... o método pode ser conhecido como "exclusão segura".. geralmente colocar um monte de "0" por cima... ou bits aleatórios..

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!