Agenda (fones, compromissos, aniversários) em C usando arquivos binários

Publicado por Leonardo Weslei Diniz 11/12/2007 (última atualização em 09/12/2009)

[ Hits: 18.946 ]

Homepage: http://www.agilesoft.com.br/

Download agenda.c

Download agenda_leonardowesleidiniz.c (versão 2)




Agenda de telefones,compromissos,aniversários em c, usando arquivos binários.

Usa sistema de login com qualquer quantidade de usuários.

Conta com a função readkey (que lê as setas up e down)para criar um menu gráfico bem interessante.

  



Versões atualizadas deste script

Versão 2 - Enviado por Leonardo Weslei Diniz em 28/10/2009

Changelog: Correção de erros do programa
Antes de compilar definir as variáveis: PATH_INSTALL,PATH_HOME,PATH_FILE
Ex:
#define PATH_INSTALL "/home/leonardo/agenda_c/"
#define PATH_HOME "/home/leonardo/"
#define PATH_FILE "/home/leonardo/agenda_c/users.txt"

Compilar e pronto!

Download agenda_leonardowesleidiniz.c


Esconder código-fonte

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <termios.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
//==================================================================================================================   
struct compromisso{//estrutura com os elementos do tipo compromisso
  int dia,mes,ano;
  char local[1000];
  char obs[1000];
};

struct dados{//estrutura com os elementos do tipo telefone
  char nome[1000];
  char telefone[1000];
  char email[1000];
};

struct niver{//estrutura com os elementos do tipo aniversario
  int dia,mes,ano;
  char nome[1000];
};

struct user{//estrutura com os elementos do tipo novo
  int senha;
  char nome[1000];
};
//==================================================================================================================   
FILE *arquivo; //endereço de arquivo global
char nomearq[10000];//string com o nome do arquivo global
struct user a;
//==================================================================================================================
void rl_ttyset (int reset){
         static struct termios old; // Armazena as configuracoes antigas
         struct termios nova; // Recebe as novas configuracoes
         if (reset == 0){
               (void) tcgetattr (0, &old);
               nova = old; // Copia as configuracoes antigas
               nova.c_lflag &= ~(ECHO | ICANON); 
               nova.c_iflag &= ~(ISTRIP | INPCK);
               (void) tcsetattr (0, TCSANOW, &nova); // Habilita as novas configuracoes
               }
         else
         (void) tcsetattr (0, TCSANOW, &old); // Restaura as configuracoes antigas
         }
//==================================================================================================================

/*Funcao parecida com a do pascal, onde o caracter digitado eh
capturado pelo programa sem precisar de enter e sem exibir
o caracter na tela (a não ser que vc mande imprimi-lo) */

//==================================================================================================================   
novo(){
   FILE* arq;
   char DIRNAME[100],dir[100];
   int x,z;//,leo[100];
   struct user y;
   printf("Digite o login desejado:");
   gets(DIRNAME);
   printf("\n");
   dnov:
   printf("Digite a senha desejada(somente numeros inteiros!):{FONTE}33[37;37;1m");
   scanf("%d",&x);
   printf("{FONTE}33[m\n");
   printf("Confirme a senha(somente numeros inteiros!):{FONTE}33[37;37;1m");
   scanf("%d",&z);
   printf("{FONTE}33[m\n");
   if(x!=z)goto dnov;
   strcpy(y.nome,DIRNAME);
   y.senha=x;
   arq=fopen("arquivos/users.txt","a+");
   chdir("/home/computacao/lwd/tp2/arquivos/");
   mkdir(DIRNAME,999);
   fseek(arq,0,SEEK_END);//A função fseek ajusta o indicador de posição apontado pelas strings :SEEK_SET, SEEK_CUR, ou SEEK_END.
   fwrite(&y, sizeof(struct user), 1, arq);
   fclose(arq);
   chdir("/home/computacao/lwd/tp2");
   printf("Conta criada\nseu login é %s e sua senha é %d",DIRNAME,x);
   strcpy(DIRNAME," ");
   getchar();
   getchar();
   main();
}
//==================================================================================================================   
login(){
   FILE* arq;
   char DIRNAME[100];
   int x,cont=0;//,leo[100];
   struct user y;
   printf("Digite o login:");
   gets(DIRNAME);
   printf("\n");
   printf("Digite a senha(somente numeros inteiros!):{FONTE}33[37;37;1m");
   scanf("%d",&x);
   printf("{FONTE}33[m\n");
   arq=fopen("arquivos/users.txt","a+");
   fseek(arq,0,SEEK_SET);//A função fseek ajusta o indicador de posição apontado pelas strings :SEEK_SET, SEEK_CUR, ou SEEK_END.
   do{
      fread(&y, sizeof(struct user), 1, arq);
      if((strcmp(DIRNAME,y.nome)==0)&&(x==y.senha)){
         cont++;
         break;
      }
   }while(!feof(arq));
   fclose(arq);
   if(cont==0){
      printf("login ou senha não cadastrados!");
      getchar();
      getchar();
      main();
   }
   else{
   strcpy(a.nome,DIRNAME);
      a.senha=x;
      getchar();
      prin();
   }
}

//==================================================================================================================   

char readkey(){
      char caracter;
      rl_ttyset (0);
      caracter = getchar();
      rl_ttyset (1);
      return(caracter);
      }

//==================================================================================================================   

Mostracom(){
   int dia,mes,ano,c=0;
   struct compromisso x,y[100];
   printf ("\t\t\t\tDigite o data: {FONTE}33[18;49H");
   scanf("%d",&dia);
   printf ("{FONTE}33[18;52H/");
   scanf("%d",&mes);
   printf ("{FONTE}33[18;55H/");
   scanf("%d",&ano);
   printf ("\n");
   fseek(arquivo,0,SEEK_SET);//A função fseek ajusta o indicador de posição apontado pelas strings :SEEK_SET, SEEK_CUR, ou SEEK_END.
   do{
      if (feof(arquivo)) break;
      fread(&x, sizeof(struct compromisso), 1, arquivo);//lê do arquivo uma coisa por vez em x
      if ((x.dia==dia)&&(x.mes==mes)&&(x.ano==ano)){
         printf ("\t\t\t\t--------------------------------\n");
         printf ("\t\t\t\tData: %d/%d/%d\n",x.dia,x.mes,x.ano);
         printf ("\t\t\t\tLocal: %s\n",x.local);
         printf ("\t\t\t\tObs: %s\n",x.obs);
         printf ("\t\t\t\t--------------------------------\n");
         c++;
      }
      
   }while(!feof(arquivo));//Enquanto diferente de final de arquivo.
   if (c==0) {
      printf("\t\t\t\tNão existe esse compromisso!\n");
   }
   fclose(arquivo);//Fecha o arquivo binario.
   arquivo = fopen(nomearq,"ab+");//Abre  o arquivo binario para acrescentar e se não existe o cria.//Abre  o arquivo binario para acrescentar e se não existe o cria.
   printf ("\t\t\t\t--------------------------------\n");
   printf ("\t\t\t\tpress enter");
   getchar();
   getchar();
}

//==================================================================================================================

Incluicom(){
   struct compromisso x;
   fseek(arquivo,0,SEEK_END);//posiciona no final do arquivo
   printf ("\n\t\t\t\tDigite os dados do compromisso nos campos abaixo:\n");
   printf ("\t\t\t\tData((dia)-press enter,(mes)-press enter, (ano)-press enter):{FONTE}33[22;49H");
   scanf("%d",&x.dia);
   printf ("{FONTE}33[22;52H/");
   scanf("%d",&x.mes);
   printf ("{FONTE}33[22;55H/");
   scanf("%d",&x.ano);
   printf ("\n");
   printf ("\t\t\t\tLocal:");
   gets(x.local);
   gets(x.local);
   printf("\t\t\t\tObs(vc pode usar as observaçoes para digitar ahora e os detalhes do compromisso):\n\t\t\t\t");
   gets(x.obs);
   fwrite(&x, sizeof(struct compromisso), 1, arquivo);
   fclose(arquivo);//Fecha o arquivo binario.
   arquivo = fopen(nomearq,"ab+");//Abre  o arquivo binario para acrescentar e se não existe o cria.//Abre  o arquivo binario para acrescentar e se não existe o cria.
   printf ("\t\t\t\t--------------------------------\n");
   printf ("\t\t\t\tCompromisso gravado!\n\t\t\t\tpress enter");
   getchar();
}

//==================================================================================================================

Mostratodoscom(){
   int i=0,n,MIN,j,m=0;
   struct compromisso x,y[1000],z[1000],aux;
   fseek(arquivo,0,SEEK_SET);//A função fseek ajusta o indicador de posição apontado pelas strings :SEEK_SET, SEEK_CUR, ou SEEK_END.
   do {
      if(feof(arquivo))break;
      fread(&y[i], sizeof(struct compromisso), 1, arquivo);//lê do arquivo uma coisa por vez em vet na posição i
      i++;
      n=i;
   }while(!feof(arquivo));//Enquanto diferente de final de arquivo.
   for(i = 0; i<n; i++){//organiza pelo ano
      MIN = i;
      for(j = i+1; j<n; j++){
         if((y[j].ano<y[MIN].ano)){
            aux = y[MIN];
            y[MIN] = y[j]; 
            y[j] = aux;
            MIN=j;
         }
      }
   }
   for(i = 0; i<n; i++){//se o ano for igual organiza por mes
      MIN = i;
      for(j = i+1; j<n; j++){
         if((y[j].ano==y[MIN].ano)&&(y[j].mes<y[MIN].mes)){
            aux = y[MIN];
            y[MIN] = y[j]; 
            y[j] = aux;
            MIN=j;
         }
      }
   }
   for(i = 0; i<n; i++){//organiza o vetor usando como condições as variaveis do vetor do tipo inteiro
      MIN = i;
      for(j = i+1; j<n; j++){
         if((y[j].ano<y[MIN].ano)&&(y[j].mes<y[MIN].mes)&&(y[j].dia<y[MIN].dia)){
            aux = y[MIN];
            y[MIN] = y[j]; 
            y[j] = aux;
            MIN=j;
         }
      }
   }
   if(n>1){
   for(i=1;i<n;i++){
      printf ("\t\t\t\t--------------------------------\n");
      printf ("\t\t\t\tData: %d/%d/%d\n",y[i].dia,y[i].mes,y[i].ano);
      printf ("\t\t\t\tLocal: %s\n",y[i].local);
      printf ("\t\t\t\tObs: %s\n",y[i].obs);
      printf ("\t\t\t\t--------------------------------\n");
      y[i].dia=0;
      y[i].mes=0;
      y[i].ano=0;
      strcat(y[i].local,"{FONTE}");
      strcat(y[i].obs,"{FONTE}");
      }
   }
   n=0;
   i=0;
   fclose(arquivo);//Fecha o arquivo binario.
   arquivo = fopen(nomearq,"ab+");//Abre  o arquivo binario para acrescentar e se não existe o cria.//Abre  o arquivo binario para acrescentar e se não existe o cria.
   printf ("\t\t\t\t--------------------------------\n");
   printf ("\t\t\t\tpress enter");
   getchar();
}

//==================================================================================================================

Apagacom(){
   int reg,i=0,j,n,z=0,dia,mes,ano;
   struct compromisso f,x,vet[1000];
   arquivo=fopen(nomearq,"ab+");//Abre  o arquivo binario para acrescentar e se não existe o cria.//Abre  o arquivo binario para acrescentar e se não existe o cria.
   fseek(arquivo,0,SEEK_SET);//A função fseek ajusta o indicador de posição apontado pelas strings :SEEK_SET, SEEK_CUR, ou SEEK_END.
   printf ("\n\t\t\t\tDigite a data do compromisso a ser apagado abaixo:\n");
   printf ("\t\t\t\tData((dia)-press enter,(mes)-press enter, (ano)-press enter):{FONTE}33[22;49H");
   scanf("%d",&dia);
   printf ("{FONTE}33[22;52H/");
   scanf("%d",&mes);
   printf ("{FONTE}33[22;55H/");
   scanf("%d",&ano);
   printf ("\n");
   do{
      fread(&vet[i], sizeof(struct compromisso), 1, arquivo);//lê do arquivo uma coisa por vez em vet na posição i
      if((vet[i].ano == ano)&&(vet[i].mes == mes)&&(vet[i].dia == dia)){
         z++;
      }
      i++;
   }while(!feof(arquivo));//Enquanto diferente de final de arquivo.
   if(z==0)
      goto fim;
   fclose(arquivo);//Fecha o arquivo binario.
   arquivo=fopen(nomearq,"wb");//Abre  o arquivo binario para gravar mas apaga tudo o que tem dentro do arquivo.
   for(j=0;j<i-z;j++){
      if((vet[j].ano==ano)&&(vet[j].mes==mes)&&(vet[j].dia==dia))j=j+1;//Se as condições forem verdadeiras pula a posição do vetor escolhida pelo usuario para ser apagado.
      if((vet[j].ano<=0)||(vet[j].mes<=0)||(vet[j].dia<=0))j=j+1;
      fwrite(&vet[j], sizeof(struct compromisso), 1, arquivo);//escreve o vetor no arquivo    
   }
   fclose(arquivo);//Fecha o arquivo binario.
   fim:
   arquivo=fopen(nomearq,"ab+");//Abre  o arquivo binario para acrescentar e se não existe o cria.
   printf ("\t\t\t\t--------------------------------\n");
   printf ("\t\t\t\tCompromisso apagado com sucesso!\n\t\t\t\t press enter");
   getchar();
   getchar();
   printf ("\t\t\t\t");
}

//==================================================================================================================   

Mostra() {
   char reg[100];
   int i=0,v,c=0;
   struct dados x;
   printf ("\t\t\t\tDigite o nome da pessoa: ");
   gets(reg);
   fseek(arquivo,0,SEEK_SET);//A função fseek ajusta o indicador de posição apontado pelas strings :SEEK_SET, SEEK_CUR, ou SEEK_END.
   do{
      if (feof(arquivo)) break;
      fread(&x, sizeof(struct dados), 1, arquivo);//lê do arquivo uma coisa por vez em x
      v=strcmp(x.nome,reg);
      if(v==0){
         printf ("\t\t\t\t--------------------------------\n");
         printf ("\t\t\t\tNome: %s\n",x.nome);
         printf ("\t\t\t\tTelefone: %s\n",x.telefone);
         printf ("\t\t\t\tEmail: %s\n",x.email);
         printf ("\t\t\t\t--------------------------------\n");
         c++;
      }
   }while(!feof(arquivo));//Enquanto diferente de final de arquivo.
   if (c==0) {
      printf("\t\t\t\tNão existe esse registro!\n");
   }
   fclose(arquivo);//Fecha o arquivo binario.
   arquivo = fopen(nomearq,"ab+");//Abre  o arquivo binario para acrescentar e se não existe o cria.//Abre  o arquivo binario para acrescentar e se não existe o cria.
   printf ("\t\t\t\t--------------------------------\n");
   printf ("\t\t\t\tpress enter");
   printf ("\t\t\t\t");
   getchar();
}

//==================================================================================================================

MostraTodos() {
   int reg,n,i,MIN,j,p,q=0;
   struct dados x,z[100],aux;
   fseek(arquivo,0,SEEK_SET);//A função fseek ajusta o indicador de posição apontado pelas strings :SEEK_SET, SEEK_CUR, ou SEEK_END.
   reg=0;
   do {
      if(feof(arquivo))break;
      fread(&x, sizeof(struct dados), 1, arquivo);//lê do arquivo uma coisa por vez em x
      z[reg]=x;
      reg++;
   } while(!feof(arquivo));//Enquanto diferente de final de arquivo.
   n=reg;
   for(i = 0; i<n; i++){
      MIN = i;
      for(j = i+1; j<n; j++){
      p=strcmp(z[j].nome,z[MIN].nome);
      if(p==-1){
         MIN = j;
      }
      aux = z[MIN];
      z[MIN] = z[i]; 
      z[i] = aux;
      }
   }
   for(reg=0;reg<n;reg++){
      if(strcmp(z[reg].nome,z[reg-1].nome)==0){
         for(i=reg-1; i<n;i++){
            z[i]=z[i+1];
         }
      }
   }
   if(n>1){
   for(reg=0;reg<n-1;reg++){
      x=z[reg];
      printf ("\t\t\t\t--------------------------------\n");
      printf ("\t\t\t\tNome: %s\n",x.nome);
      printf ("\t\t\t\tTelefone: %s\n",x.telefone);
      printf ("\t\t\t\tEmail: %s\n",x.email);
      printf ("\t\t\t\t--------------------------------\n");
   }
   }
   fclose(arquivo);//Fecha o arquivo binario.
   arquivo = fopen(nomearq,"ab+");//Abre  o arquivo binario para acrescentar e se não existe o cria.//Abre  o arquivo binario para acrescentar e se não existe o cria.
   printf ("\t\t\t\t--------------------------------\n");
   printf ("\t\t\t\tpress enter");
   printf ("\t\t\t\t");
getchar();
}

//==================================================================================================================

IncluiRegistro() {
   char lixo[255];
   struct dados x;
   fseek(arquivo,0,SEEK_END);//posiciona no final do arquivo
   printf ("\n\t\t\t\tDigite os dados da pessoa nos campos abaixo:\n");
   printf ("\t\t\t\tNome:");
   gets(x.nome);
   printf ("\t\t\t\tTelefone:");
   gets(x.telefone);
   printf ("\t\t\t\tEmail:");
   gets(x.email);
   fwrite(&x, sizeof(struct dados), 1, arquivo);
   fclose(arquivo);//Fecha o arquivo binario.
   arquivo = fopen(nomearq,"ab+");//Abre  o arquivo binario para acrescentar e se não existe o cria.//Abre  o arquivo binario para acrescentar e se não existe o cria.
   printf ("\t\t\t\t--------------------------------\n");
   printf ("\t\t\t\tContato gravado!\n\t\t\t\tpress enter");
   printf ("\t\t\t\t");
   getchar();
}

//==================================================================================================================

ApagaUlt(){
   int reg,i=0,j,n,z=0;
   char nome[200];
   struct dados f,x,vet[1000];
   arquivo=fopen(nomearq,"ab+");//Abre  o arquivo binario para acrescentar e se não existe o cria.//Abre  o arquivo binario para acrescentar e se não existe o cria.
   fseek(arquivo,0,SEEK_SET);//A função fseek ajusta o indicador de posição apontado pelas strings :SEEK_SET, SEEK_CUR, ou SEEK_END.
   printf ("\n\t\t\t\tDigite o nome do contato a ser apagado abaixo:\n");
   printf ("{FONTE}33[22;49H");
   gets(nome);
   printf ("\n");
   do{
      fread(&vet[i], sizeof(struct dados), 1, arquivo);//lê do arquivo uma coisa por vez em vet na posição i
      if(strcmp(vet[i].nome,nome)==0){
         z++;
      }
      i++;
   }while(!feof(arquivo));//Enquanto diferente de final de arquivo.
   if(z==0)
      goto fim;
   fclose(arquivo);//Fecha o arquivo binario.
   arquivo=fopen(nomearq,"wb");//Abre  o arquivo binario para gravar mas apaga tudo o que tem dentro do arquivo.
   for(j=0;j<i-z;j++){
      if((strcmp(vet[j].nome,nome)==0)&&(j<i))j=j+1;//Se a condição for verdadeira pula a posição do vetor escolhida pelo usuario para ser apagado.
      fwrite(&vet[j], sizeof(struct dados), 1, arquivo);//escreve o vetor no arquivo    
   }
   fclose(arquivo);//Fecha o arquivo binario.
   fim:
   arquivo=fopen(nomearq,"ab+");//Abre  o arquivo binario para acrescentar e se não existe o cria.
   printf ("\t\t\t\t--------------------------------\n");
   printf ("\t\t\t\tContato apagado com sucesso!\n\t\t\t\t press enter");
   getchar();
   printf ("\t\t\t\t");
}

//==================================================================================================================

Mostraniver() {
   int dia,mes,ano,c=0;
   struct niver x,y[100];
   printf ("\t\t\t\tDigite o data: {FONTE}33[18;49H");
   scanf("%d",&dia);
   printf ("{FONTE}33[18;52H/");
   scanf("%d",&mes);
   printf ("{FONTE}33[18;55H/");
   scanf("%d",&ano);
   printf ("\n");
   fseek(arquivo,0,SEEK_SET);//A função fseek ajusta o indicador de posição apontado pelas strings :SEEK_SET, SEEK_CUR, ou SEEK_END.
   do{
      if (feof(arquivo)) break;
      fread(&x, sizeof(struct niver), 1, arquivo);//lê do arquivo uma coisa por vez em x
      if ((x.dia==dia)&&(x.mes==mes)&&(x.ano==ano)){
         printf ("\t\t\t\t--------------------------------\n");
         printf ("\t\t\t\tData: %d/%d/%d\n",x.dia,x.mes,x.ano);
         printf ("\t\t\t\tNome: %s\n",x.nome);
         printf ("\t\t\t\t--------------------------------\n");
         c++;
      }
   }while(!feof(arquivo));//Enquanto diferente de final de arquivo.
   if (c==0) {
      printf("\t\t\t\tAinda não foi anotado essa data!\n");
   }
   fclose(arquivo);//Fecha o arquivo binario.
   arquivo = fopen(nomearq,"ab+");//Abre  o arquivo binario para acrescentar e se não existe o cria.//Abre  o arquivo binario para acrescentar e se não existe o cria.
   printf ("\t\t\t\t--------------------------------\n");
   printf ("\t\t\t\tpress enter");
   getchar();
   getchar();
printf ("\t\t\t\t");
}

//==================================================================================================================

MostraTodosniver() {
   int reg=0,n,i,MIN,j,p,q=0;
   struct niver x,z[100],aux;
   fseek(arquivo,0,SEEK_SET);//A função fseek ajusta o indicador de posição apontado pelas strings :SEEK_SET, SEEK_CUR, ou SEEK_END.
   do {
   if(feof(arquivo))break;
   fread(&x, sizeof(struct niver), 1, arquivo);
   z[reg]=x;
   reg++;
   } while(!feof(arquivo));//Enquanto diferente de final de arquivo.
   n=reg;
   for(i = 0; i<n; i++){
      MIN = i;
      for(j = i+1; j<n; j++){
         p=strcmp(z[j].nome,z[MIN].nome);
         if(p==-1){
            MIN = j;
         }
         aux = z[MIN];
         z[MIN] = z[i]; 
         z[i] = aux;
      }
   }
   for(reg=0;reg<n;reg++){
      if(strcmp(z[reg].nome,z[reg-1].nome)==0){
         for(i=reg-1; i<n;i++){
            z[i]=z[i+1];
         }
      }
   }
   if(n>1){
   for(reg=0;reg<n-1;reg++){
      x=z[reg];
      printf ("\t\t\t\t--------------------------------\n");
      printf ("\t\t\t\tNome: %s\n",x.nome);
      printf ("\t\t\t\tFaz aniverssario em: %d/%d/%d\n",x.dia,x.mes,x.ano);
      printf ("\t\t\t\t--------------------------------\n");
   }
   }
   fclose(arquivo);//Fecha o arquivo binario.
   arquivo = fopen(nomearq,"ab+");//Abre  o arquivo binario para acrescentar e se não existe o cria.//Abre  o arquivo binario para acrescentar e se não existe o cria.
   printf ("\t\t\t\t--------------------------------\n");
   printf ("\t\t\t\tpress enter");
   getchar();
}

//==================================================================================================================

Incluiniver() {
   struct niver x;
   fseek(arquivo,0,SEEK_END);//posiciona no final do arquivo
   printf ("\n\t\t\t\tDigite a data e o nome da pessoa nos campos abaixo:\n");
   printf ("\t\t\t\tNome:");
   gets(x.nome);
   printf ("\t\t\t\tData((dia)-press enter,(mes)-press enter, (ano)-press enter):{FONTE}33[21;94H");
   scanf("%d",&x.dia);
   printf ("{FONTE}33[21;96H/");
   scanf("%d",&x.mes);
   printf ("{FONTE}33[21;99H/");
   scanf("%d",&x.ano);
   printf ("\n");
   fwrite(&x, sizeof(struct niver), 1, arquivo);
   fclose(arquivo);//Fecha o arquivo binario.
   arquivo = fopen(nomearq,"ab+");//Abre  o arquivo binario para acrescentar e se não existe o cria.//Abre  o arquivo binario para acrescentar e se não existe o cria.
   printf ("\t\t\t\t--------------------------------\n");
   printf ("\t\t\t\tData gravada!\n\t\t\t\tpress enter");
   getchar();
   getchar();
}

//==================================================================================================================

Apaganiver(){
   int reg,i=0,j,n,z=0,dia,mes,ano;
   struct niver f,x,vet[1000];
   arquivo=fopen(nomearq,"ab+");//Abre  o arquivo binario para acrescentar e se não existe o cria.//Abre  o arquivo binario para acrescentar e se não existe o cria.
   fseek(arquivo,0,SEEK_SET);//A função fseek ajusta o indicador de posição apontado pelas strings :SEEK_SET, SEEK_CUR, ou SEEK_END.
   printf ("\n\t\t\t\tDigite a data do aniverssario a ser apagado abaixo:\n");
   printf ("\t\t\t\tData((dia)-press enter,(mes)-press enter, (ano)-press enter):{FONTE}33[22;49H");
   scanf("%d",&dia);
   printf ("{FONTE}33[22;52H/");
   scanf("%d",&mes);
   printf ("{FONTE}33[22;55H/");
   scanf("%d",&ano);
   printf ("\n");
   do{
      fread(&vet[i], sizeof(struct niver), 1, arquivo);//lê do arquivo uma coisa por vez em vet na posição i
      if((vet[i].ano == ano)&&(vet[i].mes == mes)&&(vet[i].dia == dia)){
         z++;
      }
      i++;
   }while(!feof(arquivo));//Enquanto diferente de final de arquivo.
   if(z==0)
      goto fim;
   fclose(arquivo);//Fecha o arquivo binario.
   arquivo=fopen(nomearq,"wb");//Abre  o arquivo binario para gravar mas apaga tudo o que tem dentro do arquivo.//Abre  o arquivo binario para gravar mas apaga tudo o que tem dentro do arquivo.
   for(j=0;j<i;j++){
      if((vet[j].ano==ano)&&(vet[j].mes==mes)&&(vet[j].dia==dia))j=j+1;//Se as condições forem verdadeiras pula a posição do vetor escolhida pelo usuario para ser apagado.
      if((vet[j].ano==0)&&(vet[j].mes==0)&&(vet[j].dia==0))j=j+1;//Se as condições forem verdadeiras pula a posição do vetor escolhida pelo usuario para ser apagado.
      fwrite(&vet[j], sizeof(struct niver), 1, arquivo);//escreve o vetor no arquivo    
   }
   fclose(arquivo);//Fecha o arquivo binario.
   arquivo=fopen(nomearq,"ab+");//Abre  o arquivo binario para acrescentar e se não existe o cria.//Abre  o arquivo binario para acrescentar e se não existe o cria.
   fim:
   printf ("\t\t\t\t--------------------------------\n");
   printf ("\t\t\t\tData apagada com sucesso!\n\t\t\t\t press enter");
   getchar();
   getchar();
}

//==================================================================================================================

manual(){
   system("clear");//Limpa a tela.
   printf("\n\t\t-------------------------------------------------------------------\n\t\tPara usar a agenda selecione uma opção com as setas\n\t\te execute as ações indicadas depois de selecionadas\n\t\t--------------------------------------------------------------------\n\t\tpress enter\n");
   getchar();
}

//==================================================================================================================

alerta(){
   system("clear");//Limpa a tela.
   printf("\n\t\t-------------------------------------------------------------------\n\t\tO programa é muito simples, mas sob presença de qualquer duvida\n\t\t mande um email para \"leonardowd@gmail.com\"\n\t\t ou \"exterminador3@gmail.com\".FLW...\n\t\t--------------------------------------------------------------------\n\t\tpress enter\n");
   getchar();
}

//==================================================================================================================

desenvolvedor(){
   system("clear");//Limpa a tela.
   printf("\n\t\t-------------------------------------------------------------------\n\t\tAluno: Leonardo Weslei Diniz\n\t\tCurso: Ciencia da computação 1º Periodo\n\t\tProf: Erikson de Freitas Morais\n\t\tMat: Prática de programação I\n\t\t--------------------------------------------------------------------\n\t\tpress enter\n");
   getchar();
}

//==================================================================================================================

agradescimentos(){
   system("clear");//Limpa a tela.
   printf("\n\t\t-------------------------------------------------------------------\n\t\tA todos que possibilitaram esse projeto possivel.\n\t\t--------------------------------------------------------------------\n\t\tpress enter\n");
   getchar();
}

//==================================================================================================================

menu(char a[55],char b[55],char c[55],char d[55],char e[55]){//Recebe os itens do menu e o subtitulo por argumento. 
   int  t,i;
   char op1a='>', op1b='<',op1c='-', op2a=' ', op2b=' ', op2c=' ', op3a=' ', op3c=' ',op3b=' ', op4a=' ', op4c=' ', op4b=' ', op5a=' ',op5b=' ',op5c=' ',op6a=' ',op6b=' ',op6c=' ';
   int op=1;
   char texto[50]=" ";
   if (strcmp(e, "AGENDA DE TELEFONES")==0) strcat(nomearq,"/tel.txt");//copia "AGENDA DE TELEFONES" para a string nomearq se acondição for verdadeira.
   if (strcmp(e, "AGENDA DE COMPROMISSOS")==0) strcat(nomearq,"/com.txt");//copia "AGENDA DE COMPROMISSOS" para a string nomearq se acondição for verdadeira.
   if (strcmp(e, "ANIVERSSARIOS")==0) strcat(nomearq,"/niver.txt");//copia "ANIVERSSARIOS" para a string nomearq se acondição for verdadeira.
   arquivo = fopen(nomearq,"ab+");//Abre  o arquivo binario para acrescentar e se não existe o cria.//Abre  o arquivo binario para acrescentar e se não existe o cria.
   inicio:
   system("clear");//Limpa a tela.
   do{
      for(i=0;i<459;i++){
               printf("%c",' ');
            }
      for(i=0;i<312;i++){
               printf("%c",' ');
      }
      for(i=0;i<150;i++){
               printf("%c",' ');
            }
      printf("{FONTE}33[2;54H---MULTI-AGENDA---");
      //------Posiciona o subtitulo de acordo com seu tamanho.
      if (strcmp(e, "AGENDA DE TELEFONES")==0)printf("{FONTE}33[3;52H---%s---",e);
      if (strcmp(e, "AGENDA DE COMPROMISSOS")==0)printf("{FONTE}33[3;50H---%s---",e);
      if (strcmp(e, "ANIVERSSARIOS")==0)printf("{FONTE}33[3;53H---%s---",e);
      if (strcmp(e, "AJUDA")==0)printf("{FONTE}33[3;57H---%s---",e);
      //------------------------------------------------------
      printf("{FONTE}33[7;48H+------------------------------+");
      printf("{FONTE}33[8;48H| %1c%1c                        %1c%1c |",op1c,op1a,op1b,op1c);//%1c%1c imprime as setinhas na tela
      printf("{FONTE}33[9;48H| %1c%1c                        %1c%1c |",op2c,op2a,op2b,op2c);//%1c%1c imprime as setinhas na tela
      printf("{FONTE}33[10;48H| %1c%1c                        %1c%1c |",op3c,op3a,op3b,op3c);//%1c%1c imprime as setinhas na tela
      printf("{FONTE}33[11;48H| %1c%1c                        %1c%1c |",op4c,op4a,op4b,op4c);//%1c%1c imprime as setinhas na tela
      printf("{FONTE}33[12;48H| %1c%1c         MENU           %1c%1c |",op5c,op5a,op5b,op5c);//%1c%1c imprime as setinhas na tela
      printf("{FONTE}33[13;48H| %1c%1c         SAIR           %1c%1c |",op6c,op6a,op6b,op6c);//%1c%1c imprime as setinhas na tela
      printf("{FONTE}33[14;48H+------------------------------+");
      printf("{FONTE}33[4;51H+------------------------+");
      printf("{FONTE}33[5;51H| DATA : %s     |\n{FONTE}33[6;51H| HORA: %s         |\n",__DATE__,__TIME__);
      printf("{FONTE}33[7;51H+------------------------+");
      printf("{FONTE}33[16;42H Use as teclas seta para cima e para baixo para movimentar o menu.");
      printf("{FONTE}33[17;48H Use ENTER para selecionar a opção.");
      printf("{FONTE}33[8;53H %s",a);//Opção 1 recebida por argumento.
      printf("{FONTE}33[9;53H %s",b);//Opção 2 recebida por argumento.
      printf("{FONTE}33[10;53H %s",c);//Opção 3 recebida por argumento.
      printf("{FONTE}33[11;53H %s",d);//Opção 4 recebida por argumento.
      printf("{FONTE}33[18;1H %s",texto);
      fflush(stdout);
      fflush(stdin);
      /*A  função fflush força a gravação de todos os dados bufferizados para a
      saída dada ou atualiza stream através da  função  write  subjacente  da
      stream.  O estado de abertura da stream não é afetado.
      Se  o  argumento  stream  é NULL, fflush descarrega todas as streams de
      saída abertas.*/
      t=readkey();
   
      if (t==10 && op==6){//sai do programa .
         system("clear");//Limpa a tela.
         exit(0);// A  função exit() causa o término normal do programa.
      }
      if (t==10 && op==5){//volta para o menu.
         prin();//chama o prin meio que uma função recursiva.
         t=0;
      }
      if (t==10 && op==4){//executa as funções de acordo com o subtitulo recebido.
         if (e== "AGENDA DE TELEFONES"){
            MostraTodos();
            goto inicio;
            }
         if (e== "AGENDA DE COMPROMISSOS"){
            Mostratodoscom();
            goto inicio;
            }
         if (e== "ANIVERSSARIOS"){
            MostraTodosniver();
            goto inicio;
            }
         if (e== "AJUDA"){
            agradescimentos();
            goto inicio;
            }
         else
            printf("op4");
         t=0;
      }
      if (t==10 && op==3){//executa as funções de acordo com o subtitulo recebido.
         if (e== "AGENDA DE TELEFONES"){
            ApagaUlt();
            goto inicio;
         }
         if (e== "AGENDA DE COMPROMISSOS"){
            Apagacom();
            goto inicio;
         }
         if (e== "ANIVERSSARIOS"){
            Apaganiver();
            goto inicio;
         }
         if (e== "AJUDA"){
            desenvolvedor();
            goto inicio;
         }
         else
            printf("op3");
         t=0;
      }
   
      if (t==10 && op==2){//executa as funções de acordo com o subtitulo recebido.
         if (e== "AGENDA DE TELEFONES"){
            Mostra();
            goto inicio;
         }
         if (e== "AGENDA DE COMPROMISSOS"){
            Mostracom();
            goto inicio;
         }
         if (e== "ANIVERSSARIOS"){
            Mostraniver();
            goto inicio;
         }
         if (e== "AJUDA"){
            alerta();
            goto inicio;
         }
         else
            printf("op2");
         t=0;
      }
      if (t==10 && op==1){//executa as funções de acordo com o subtitulo recebido.
         if (e== "AGENDA DE TELEFONES"){
            IncluiRegistro();
            goto inicio;
         }
         if (e== "AGENDA DE COMPROMISSOS"){
            Incluicom();
            goto inicio;
         }
         if (e== "ANIVERSSARIOS"){
            Incluiniver();
            goto inicio;
         }
         if (e== "AJUDA"){
            manual();
            goto inicio;
         }
         else
            printf("op1");
         t=0;
      }
      if(t==65 && op==1){ //seta pra cima e op =1
         op1a=' '; op1b=' ';
         op6a='>'; op6b='<';
         op1c=' '; op6c='-';
         t=0;
         op=6;
      }
      if(t==65 && op==2){
         op1a='>'; op1b='<';
         op2a=' '; op2b=' ';
         op2c=' '; op1c='-';
         t=0;
         op=1;
      }
      if(t==65 && op==3){
         op2a='>'; op2b='<';
         op3a=' '; op3b=' ';
         op3c=' '; op2c='-';
         t=0;
         op=2;
      }
      if(t==65 && op==4){
         op3a='>'; op3b='<';
         op4a=' '; op4b=' ';
         op4c=' '; op3c='-';
         t=0;
         op=3;
      }
      if(t==65 && op==5){
         op4a='>'; op4b='<';
         op5a=' '; op5b=' ';
         op5c=' '; op4c='-';
         t=0;
         op=4;
      }
      if(t==65 && op==6){
         op5a='>'; op5b='<';
         op6a=' '; op6b=' ';
         op6c=' '; op5c='-';
         t=0;
         op=5;
      }
      if(t==66 && op==1){ //seta pra baixo
         op1a=' '; op1b=' ';
         op2a='>'; op2b='<';
         op1c=' '; op2c='-';
         t=0;
         op=2;
      }
      if(t==66 && op==2){
         op2a=' '; op2b=' ';
         op3a='>'; op3b='<';
         op2c=' '; op3c='-';
         t=0;
         op=3;
      }
      if(t==66 && op==3){
         op3a=' '; op3b=' ';
         op4a='>'; op4b='<';
         op3c=' '; op4c='-';
         t=0;
         op=4;
      }
      if(t==66 && op==4){
         op4a=' '; op4b=' ';
         op5a='>'; op5b='<';
         op4c=' '; op5c='-';
         t=0;
         op=5;
      }
      if(t==66 && op==5){
         op5a=' '; op5b=' ';
         op6a='>'; op6b='<';
         op5c=' '; op6c='-';
         t=0;
         op=6;
      }
      if(t==66 && op==6){
         op1a='>'; op1b='<';
         op6a=' '; op6b=' ';
         op6c=' ';  op1c='-';
         t=0;
         op=1;
      }
   }while(1);
}
//==================================================================================================================
prin(){
   int  t,i;
   char op1a='>', op1b='<',op1c='-', op2a=' ', op2b=' ', op2c=' ', op3a=' ', op3c=' ',op3b=' ', op4a=' ', op4c=' ', op4b=' ', op5a=' ',op5b=' ',op5c=' ';
   int op=1;
   char texto[50]=" ";
   system("clear");//Limpa a tela.
   strcpy(nomearq,"{FONTE}");
   strcat(nomearq,"arquivos/");
   strcat(nomearq,a.nome);
   ini:
   do{
      for(i=0;i<459;i++){
               printf("%c",' ');
            }
      for(i=0;i<312;i++){
               printf("%c",' ');
      }
      for(i=0;i<150;i++){
               printf("%c",' ');
            }
      printf("{FONTE}33[2;57HMULTI-AGENDA");
      printf("{FONTE}33[7;48H+-- ------------------------ --+");
      printf("{FONTE}33[8;48H| %1c%1c     COMPROMISSOS       %1c%1c |",op1c,op1a,op1b,op1c);//%1c%1c imprime as setinhas na tela
      printf("{FONTE}33[9;48H| %1c%1c     ANIVERSSARIOS      %1c%1c |",op2c,op2a,op2b,op2c);//%1c%1c imprime as setinhas na tela
      printf("{FONTE}33[10;48H| %1c%1c       TELEFONES        %1c%1c |",op3c,op3a,op3b,op3c);//%1c%1c imprime as setinhas na tela
      printf("{FONTE}33[11;48H| %1c%1c        AJUDA           %1c%1c |",op4c,op4a,op4b,op4c);//%1c%1c imprime as setinhas na tela
      printf("{FONTE}33[12;48H| %1c%1c         SAIR           %1c%1c |",op5c,op5a,op5b,op5c);//%1c%1c imprime as setinhas na tela
      printf("{FONTE}33[13;48H+------------------------------+");
      printf("{FONTE}33[4;51H+------------------------+");
      printf("{FONTE}33[5;51H| DATA : %s     |\n{FONTE}33[6;51H| HORA: %s         |\n",__DATE__,__TIME__);
      printf("{FONTE}33[7;51H+------------------------+");
      printf("{FONTE}33[15;42H Use as teclas seta para cima e para baixo para movimentar o menu.");
      printf("{FONTE}33[16;48H Use ENTER para selecionar a opção.{FONTE}33[18;70H");
      printf("{FONTE}33[17;1H %s",texto);
      fflush(stdout);
      fflush(stdin);
      /*A  função fflush força a gravação de todos os dados bufferizados para a
      saída dada ou atualiza stream através da  função  write  subjacente  da
      stream.  O estado de abertura da stream não é afetado.
      Se  o  argumento  stream  é NULL, fflush descarrega todas as streams de
      saída abertas.*/
      t=readkey();
      if (t==10 && op==5){//sai do programa.
         system("clear");//Limpa a tela.
         exit(0);// A  função exit() causa o término normal do programa.
      }
      if (t==10 && op==4){//passa para a função menu as strings de acordo com a escolha do usuario.
         menu("MANUAL DA MULTI-AGENDA","ALERTAS DE USO (LEIA!)","   DESENVOLVEDOR","   AGRADECIMENTOS","AJUDA");
         goto ini;//chama o prin meio que uma função recursiva.
         t=0;
      }
      if (t==10 && op==3){//passa para a função menu as strings de acordo com a escolha do usuario.
         menu("   NOVO CONTATO","   VER CONTATO","  APAGAR COMTATO","  LISTAR CONTATOS","AGENDA DE TELEFONES");
         goto ini;//chama o prin meio que uma função recursiva.
         t=0;
      }
      if (t==10 && op==2){//passa para a função menu as strings de acordo com a escolha do usuario.
         menu("     NOVA DATA","   PROCURAR DATA","APAGAR ANIVERSSARIO","   LISTAR TODOS","ANIVERSSARIOS");
         goto ini;//chama o prin meio que uma função recursiva.
         t=0;
      }
      if (t==10 && op==1){//passa para a função menu as strings de acordo com a escolha do usuario.
         menu("  NOVO COMPROMISSO","  VER COMPROMISSOS"," APAGAR COMPROMISSO","VER TODOS COMPROMISSOS","AGENDA DE COMPROMISSOS");
         goto ini;//chama o prin meio que uma função recursiva.
         t=0;
      }
      if(t==65 && op==1){ //seta pra cima e op =1
         op1a=' '; op1b=' ';
         op5a='>'; op5b='<';
         op1c=' '; op5c='-';
         t=0;
         op=5;
      }
      if(t==65 && op==2){
         op1a='>'; op1b='<';
         op2a=' '; op2b=' ';
         op2c=' '; op1c='-';
         t=0;
         op=1;
      }
      if(t==65 && op==3){
         op2a='>'; op2b='<';
         op3a=' '; op3b=' ';
         op3c=' '; op2c='-';
         t=0;
         op=2;
      }
      if(t==65 && op==4){
         op3a='>'; op3b='<';
         op4a=' '; op4b=' ';
         op4c=' '; op3c='-';
         t=0;
         op=3;
      }
      if(t==65 && op==5){
         op4a='>'; op4b='<';
         op5a=' '; op5b=' ';
         op5c=' '; op4c='-';
         t=0;
         op=4;
      }
      if(t==66 && op==1){ //seta pra baixo
         op1a=' '; op1b=' ';
         op2a='>'; op2b='<';
         op1c=' '; op2c='-';
         t=0;
         op=2;
      }
      if(t==66 && op==2){
         op2a=' '; op2b=' ';
         op3a='>'; op3b='<';
         op2c=' '; op3c='-';
         t=0;
         op=3;
      }
      if(t==66 && op==3){
         op3a=' '; op3b=' ';
         op4a='>'; op4b='<';
         op3c=' '; op4c='-';
         t=0;
         op=4;
      }
      if(t==66 && op==4){
         op4a=' '; op4b=' ';
         op5a='>'; op5b='<';
         op4c=' '; op5c='-';
         t=0;
         op=5;
      }
      if(t==66 && op==5){
         op5a=' '; op5b=' ';
         op1a='>'; op1b='<';
         op5c=' '; op1c='-';
         t=0;
         op=1;
      }
   }while(1);
}
//==================================================================================================================
main(){
   int  t,i;
   char op1a='>', op1b='<',op1c='-', op2a=' ', op2b=' ', op2c=' ', op3a=' ', op3c=' ',op3b=' ', op4a=' ', op4c=' ', op4b=' ', op5a=' ',op5b=' ',op5c=' ';
   int op=1;
   char texto[50]=" ";
   system("clear");//Limpa a tela.
   strcat(nomearq,"arquivos/");
   strcat(nomearq,a.nome);
   do{
      for(i=0;i<459;i++){
               printf("%c",' ');
            }
      for(i=0;i<312;i++){
               printf("%c",' ');
      }
      for(i=0;i<150;i++){
               printf("%c",' ');
            }
      printf("{FONTE}33[2;57HMULTI-AGENDA");
      printf("{FONTE}33[7;48H+-- ------------------------ --+");
      printf("{FONTE}33[8;48H| %1c%1c        Login           %1c%1c |",op1c,op1a,op1b,op1c);//%1c%1c imprime as setinhas na tela
      printf("{FONTE}33[9;48H| %1c%1c      Criar conta       %1c%1c |",op2c,op2a,op2b,op2c);//%1c%1c imprime as setinhas na tela
       printf("{FONTE}33[10;48H| %1c%1c         SAIR           %1c%1c |",op3c,op3a,op3b,op3c);//%1c%1c imprime as setinhas na tela
      printf("{FONTE}33[11;48H+------------------------------+");
      printf("{FONTE}33[4;51H+------------------------+");
      printf("{FONTE}33[5;51H| DATA : %s     |\n{FONTE}33[6;51H| HORA: %s         |\n",__DATE__,__TIME__);
      printf("{FONTE}33[7;51H+------------------------+");
      printf("{FONTE}33[13;42H Use as teclas seta para cima e para baixo para movimentar o menu.");
      printf("{FONTE}33[14;48H Use ENTER para selecionar a opção.{FONTE}33[18;70H");
      printf("{FONTE}33[15;1H %s",texto);
      fflush(stdout);
      fflush(stdin);
      /*A  função fflush força a gravação de todos os dados bufferizados para a
      saída dada ou atualiza stream através da  função  write  subjacente  da
      stream.  O estado de abertura da stream não é afetado.
      Se  o  argumento  stream  é NULL, fflush descarrega todas as streams de
      saída abertas.*/
      t=readkey();
      if (t==10 && op==3){//sai do programa.
         system("clear");//Limpa a tela.
         exit(0);// A  função exit() causa o término normal do programa.
      }
      
      if (t==10 && op==2){//passa para a função menu as strings de acordo com a escolha do usuario.
         novo();
         t=0;
      }
      if (t==10 && op==1){//passa para a função menu as strings de acordo com a escolha do usuario.
         login();
         t=0;
      }
      if(t==65 && op==1){ //seta pra cima e op =1
         op1a=' '; op1b=' ';
         op3a='>'; op3b='<';
         op1c=' '; op3c='-';
         t=0;
         op=3;
      }
      if(t==65 && op==2){
         op1a='>'; op1b='<';
         op2a=' '; op2b=' ';
         op2c=' '; op1c='-';
         t=0;
         op=1;
      }
      if(t==65 && op==3){
         op2a='>'; op2b='<';
         op3a=' '; op3b=' ';
         op3c=' '; op2c='-';
         t=0;
         op=2;
      }
      
      if(t==66 && op==1){ //seta pra baixo
         op1a=' '; op1b=' ';
         op2a='>'; op2b='<';
         op1c=' '; op2c='-';
         t=0;
         op=2;
      }
      if(t==66 && op==2){
         op2a=' '; op2b=' ';
         op3a='>'; op3b='<';
         op2c=' '; op3c='-';
         t=0;
         op=3;
      }
      if(t==66 && op==3){
         op3a=' '; op3b=' ';
         op1a='>'; op1b='<';
         op3c=' '; op1c='-';
         t=0;
         op=1;
      }
   }while(1);
}

//==================================================================================================================
//num ta muito explicadinho não mas é facil de se entender.

Scripts recomendados

gerador de BMPs

Barra de progresso em forma de “roda”

Manipulação de arquivos CSV - Estruturado

Números de caracteres em arquivo


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts