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

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

Manipulação de arquivos CSV - Estruturado

Logger

Função readConf. Ler arquivos de configuração.

Alfabeto escrito 30 vezes e operação XOR

[C] Arquivos e Stat


  

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