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_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ã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
#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.
Manipulação de arquivos CSV - Estruturado
Função readConf. Ler arquivos de configuração.
Alfabeto escrito 30 vezes e operação XOR
Nenhum comentário foi encontrado.
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI
Tem como instalar o gerenciador AMD Adrenalin no Ubuntu 24.04? (15)
Tenho dois Link's ( IP VÁLIDOS ), estou tentando fazer o failover... (0)
Pendrive não formata de jeito nenhum (4)