Agenda
Publicado por César Rocha 21/02/2006
[ Hits: 8.557 ]
Agenda de nomes e telefones que utiliza arquivos para armazenar os dados, feita em C.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct agenda nomes;
void criar_lista (void);
void inclusao (void);
void remover (void);
void leitura (void);
void escrever (void);
void ajuda (void);
void imprimir (void);
struct agenda{
char nome[30];
char tele[8];
nomes *prox;
nomes *ante;
};
nomes *first;
nomes *last;
//criando lista...
void criar_lista()
{
first=(nomes*)malloc(sizeof(nomes));
last=(nomes*)malloc(sizeof(nomes));
last=first;
first->prox=NULL;
first->ante=NULL;
}
//abertura...
void main()
{
char menu;
do
{
printf("\nMenu:\n");
printf("\tA) Inserir, alterar, apagar ou informacoes, digite A.\n");
printf("\tL) Leitura de dados gravados no disco, digite L.\n");
printf("\tI) Imprimir os nomes da lista na tela, digite I.\n");
printf("\tE) Salvar nomes da lista no arquivo, digite E.\n");
printf("\tH) Help-me, digite H.\n");
printf("\tF) Fim do programa, digite F.\n");
printf("\nDigite -> ");
scanf("%s",&menu);
if (menu!='A'&&menu!='L'&&menu!='I'&&menu!='E'&&menu!='F'&&menu!='H')
printf("\n\n\tOpcao de menu invalida!\n\n");
switch (menu) {
case ('A'): inclusao(); break;
case ('L'): leitura(); break;
case ('I'): imprimir(); break;
case ('E'): escrever(); break;
case ('H'): ajuda(); break;
case ('F'): break;
}
} while (menu!='F');
}
//inclusao...
void inclusao ()
{
nomes *aux, *next, *prev;
aux = (nomes*)malloc(sizeof(nomes));
char nome[30],tel[8];
printf("Qual o nome a ser incluido/alterado/apagado?\n");
printf("Nome: ");
scanf("%s", &aux->nome);
printf("Tel: ");
scanf("%s", &aux->tele);
strcpy(nome,aux->nome);
strcpy(tel,aux->tele);
if ((strcmp(aux->tele,"?")!=0)&&(strcmp(aux->tele,"/")!=0)) {
aux->prox = NULL;
aux->ante = NULL;
if(first==NULL)
{
first = aux;
last = aux;
return;
}
next = first;
prev = NULL;
while(next)
{
if(strcmp(next->nome, aux->nome)<0)
{
prev = next;
next = next->prox;
}
else
{
if(next->ante)
{
next->ante->prox = aux;
aux->prox = next;
aux->ante = next->ante;
next->ante = aux;
return;
}
aux->prox = next;
aux->ante = NULL;
next->ante = aux;
first = aux;
return;
}
}
prev->prox = aux; //final
aux->prox = NULL;
aux->ante = prev;
last = aux;
} else {
if (strcmp(aux->tele,"?")==0) {
for (aux=first;aux;aux=aux->prox)
{
if (strcmp(aux->nome,nome)==0) {
printf("\nNome: %s", aux->nome);
printf("\nTel: %s\n", aux->tele);
break;
}
}
} if (strcmp(aux->tele,"/")==0) {
for(aux=first;aux;aux=aux->prox)
{
if(strcmp(aux->nome,nome)==0){
strcpy(aux->tele,tel);
break;
}
}
if (aux->ante) aux->ante->prox=aux->prox;
else {
first=aux->prox;
if (first) first->ante=NULL;
}
if (aux->prox) aux->prox->ante=aux->ante;
else last=aux->ante; }
}
}
//imprimir arquivo na tela...
void leitura()
{
FILE *arquivo;
char nome[30],tele[8];
arquivo=fopen("Agenda.txt","r");
if (!arquivo)
{
printf("\n\n\tErro na abertura do arquivo!\n\n");
exit(0);
}
printf("\n\t*****Nome*****|*****Fone*****\n");
while (!feof(arquivo)) {
fscanf(arquivo,"%s %s ",&nome,&tele);
fprintf(stdout,"\t %s %s\n",nome,tele);
}
fclose(arquivo);
}
//imprimir lista na tela...
void imprimir()
{
nomes *aux;
printf("\n\t*****Nome*****|*****Fone*****\n");
aux=first;
if (aux==NULL) printf("\n\n\tLista Vazia!\n\n");
else{
do
{
if ((aux==last)||(aux->prox==NULL))
{
printf("\t %s %s\n", aux->nome,aux->tele);
break;
} else {
printf("\t %s %s\n", aux->nome,aux->tele);
aux=aux->prox;
}
} while (aux!=NULL);
}
}
//salvar lista digitada...
void escrever ()
{
FILE *arquivo;
nomes *aux,*aux2;
aux=(nomes*)malloc(sizeof(nomes));
arquivo=fopen("Agenda.txt","a");
if (!arquivo)
{
printf("\n\n\tErro na abertura do arquivo!\n\n");
exit(0);
}
printf("\nSalvando arquivo...\n");
aux=first;
while (aux!=NULL) {
fprintf(arquivo,"%s %s ",aux->nome,aux->tele);
aux=aux->prox;
}
fclose(arquivo);
aux=first;
while (first) {
aux=first;
first=first->prox;
free(aux);
}
last=NULL;
}
//ajuda...
void ajuda()
{
printf("\n\n1) Alterar nome: va em Adicionar digite o nome existente com o novo numero!");
printf("\n2) Apagar nome: va em Adicionar digite o nome e coloque / no lugar do numero!");
printf("\n3) Procurar nome: va em Adicionar digite o nome e coloque ? no lugar do numero!\n\n");
}
Utilizando acentuação na linguagem C
Exibi os números primos de um numero recebido pelo usuário, sem estrutura de repetição
Nenhum comentário foi encontrado.
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Novos apps de produtividade, avanços em IA e distros em ebulição agitam o universo Linux
Como instalar o repositório do DBeaver no Ubuntu
Como instalar o Plex Media Server no Ubuntu
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
dpkg: erro: gatilho de arquivo duplicado chamado pelo arquivo de nome (6)
Instalação não está resolvendo as dependencias (2)
Captação de áudio no zorin linux começa a diminuir com o tempo (5)
Alternativas ao Multilogin para gerenciamento de múltiplas contas/prof... (0)









