#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#define Capacidade_Maxima_da_Agenda 5
// Autor: Mathias Santos Assis
/*Este programa permite a gravação em arquivo
de no máximo 5 contatos.
Ao escolher a opção 1 do menu principal,
o usuário deverá preencher os campos
exibidos. As informações obtidas irá
posteriormente ser gravadas no arquivo.
Ao escolher a opção 2 do menu principal,
se não existe pelo menos 1 contato em arquivo,
uma mensagem informativa irá ser exibida para o usuário.
Caso o contrário, se buscará no arquivo todos
os contatos salvos e exibirá na tela.
Quando o programa é executado, primeiramente se
procura saber quantos contatos se tem salvo.
Se já tiver, por exemplo 4 contatos salvos, e
o programa for executado, ao escolher a primeira
opção do menu principal (Inserir um cadastro),
o cadastrado será o quinto contato.
Se já tiver, por exemplo 5 contatos salvos
(número limites de contatos), e o programa
for executado, ao selecionar a primeira opção,
uma mensagem para avisar o usuário que a
agenda já está cheia.
*/
// Registro
struct Aluno{
char nome[80];
int idade;
char telefone[15];
char celular[15];
char endereco[255];
};
void Imprime(Aluno reg);
Aluno ler();
FILE *Arq_Agenda;
int main(){
struct Aluno contato;
int op=0;
int Quantidade_de_Contatos_no_Arquivo=0;
int Numero_do_Cadastrado;
int Capacidade = 0;
/*O modo de abertura (a+), permite anexar novos dados ou criar um
arquivo de texto para operações de leitura e de escritas*/
// Mude o diretório conforme suas necessidades ou preferência
Arq_Agenda=fopen ("C:\\Users\\Cliente\\Desktop\\Arquivando.txt","a+");
if(Arq_Agenda!=NULL){
fread(&contato,sizeof(Aluno),1,Arq_Agenda);
// Verificando o número de Pessoas cadastradas
while(!feof(Arq_Agenda)){
fread(&contato,sizeof(Aluno),1,Arq_Agenda);
// Quantidade_de_Contatos_no_Arquivo armazenará a quantidade de contatos salvo no arquivo
Quantidade_de_Contatos_no_Arquivo++;
}
} fclose(Arq_Agenda);
if (Quantidade_de_Contatos_no_Arquivo!=0) Capacidade=1;
while (op!=3){
system("CLS");
printf("\n Numero de pessoas ja cadastras.: %d\n",Quantidade_de_Contatos_no_Arquivo);
printf(" Capacidade Maxima da Agenda....: 5\n\n");
// Menu principal
printf(" 1 - Inserir contato\n");
printf(" 2 - Imprimir todos contatos\n");
printf(" 3 - Sair\n\n");
printf(" Digite a opcao: ");
scanf("%d",&op);
switch (op){
case 1:
if(Quantidade_de_Contatos_no_Arquivo<Capacidade_Maxima_da_Agenda){
Arq_Agenda=fopen ("C:\\Users\\Cliente\\Desktop\\Arquivando.txt","a+");
contato=ler();
// Gravando no arquivo
fwrite (&contato,sizeof(Aluno),1,Arq_Agenda);
fclose(Arq_Agenda);
Quantidade_de_Contatos_no_Arquivo++; Capacidade=1;
} else {printf("\n\tAGENDA CHEIA!\n\n "); system("pause");}
break;
case 2:
Arq_Agenda=fopen ("C:\\Users\\Cliente\\Desktop\\Arquivando.txt","a+");
if(Capacidade==0){
printf("\n\tNENHUM CONTATO CADASTRADO AINDA!\n\n ");
system("pause");
}
else{
Numero_do_Cadastrado=0;
// Lendo o arquivo
fread(&contato,sizeof(Aluno),1,Arq_Agenda);
// Enquanto o fim do arquivo não seja encontrado...
while(!feof(Arq_Agenda)){
printf("\n============= %d CONTATO ============\n",Numero_do_Cadastrado+1);
Imprime(contato);
fread(&contato,sizeof(Aluno),1,Arq_Agenda);
Numero_do_Cadastrado++;
// Ocorreu algum erro durante o uso do arquivo?
if(ferror(Arq_Agenda))
printf("\nErro na leitura\n");
else printf("\nLeitura realizada com sucesso\n");
system("PAUSE");
}
} fclose(Arq_Agenda);
break;
}
}
return 0;
}
void Imprime(Aluno reg){
printf(" Nome......: %s\n", reg.nome);
printf(" Idade.....: %d\n", reg.idade);
printf(" Telefone..: %s\n", reg.telefone);
printf(" Celular...: %s\n", reg.celular);
printf(" Endereco..: %s\n", reg.endereco);
}
Aluno ler(){
struct Aluno temp;
printf("\n Nome......: ");
scanf("%s",&temp.nome);
printf(" Idade.....: ");
scanf("%d",&temp.idade);
printf(" Telefone..: ");
scanf("%s",temp.telefone);
printf(" Celular...: ");
scanf("%s",temp.celular);
printf(" Endereco..: ");
scanf("%s",temp.endereco);
printf("\n Contato cadastrado!\n");
system("pause");
return temp;
}
Palavras-Chaves: Agenda, arquivo, fopen, diretório, feof, fread, sizeof, fclose, struct, Nome, Idade, Telefone, Celular, Endereço, C/C++.
Nota.: Deve-se alterar o diretório do arquivo.
Artigos relacionados em C/C++:
- Adivinhando um número em C/C++
- Programa com operações matemáticas C/C++
- Imprime um número N vezes, o número (N-1) ene menos uma vezes, e assim sucessivamente em C/C++
- Calculando a média de três notas em C/C++
- Programa com todos os comandos em C/C++
- Maior e menor valor de um vetor de inteiros em C/C++
- Uso de case em C/C++
- Desenhando um X na tela em C/C++
- Construindo um cronômetro em C/C++
- Desejando Feliz dia do amigo em C/C++
- União, Intersecção e Diferença de dois vetores em C/C++
- Jogo da Velha em C/C++
- Cálculo da Nota Final em C/C++
- Obtendo o IP do computador em C/C++
Feito no Dev C++ 4.9.9.2 | Executável |
Feito no Dev C++ 4.9.9.2 | Executável |