Ianaconi 0 Denunciar post Postado Junho 1, 2006 Olá Pessoal!Gostaria de fazer uma agente de contatos em C.Estou com algumas duvidas para fazer a tela inicial do programa.Gostaria que tivesse algumas opções como:1 - Incluir Contato2 - Pesquisar por Nome3 - Listar todos os Contatos4 - Listar todos os Contatos começando com _5 - Listar Aniversariantes do Mês6 - SairA minha dúvida seria pra deixar esse menu um pouco mais amigável e com uma estética melhor. O que vcs recomendam?Vlw!!! Compartilhar este post Link para o post Compartilhar em outros sites
ricci ottadnot 4 Denunciar post Postado Junho 1, 2006 você pode criar este menu em um quadro.. os caracteres 179 a 218 da tabala ASCII saum especialmente criados para isto.. por exemplo.. o codigo a seguir cria uma janelinha simples.. for(i = 0; i<5;i++){ if(i=0) printf("%c%c%c%c%c%c%c%c",213,196,196,196,196,196,196,191); if(i>0 && i<5) printf("%c %c",179,179); if(i=5) printf("%c%c%c%c%c%c%c%c",192,196,196,196,196,196,196,217);} procuro no Google Imagens uma tabela.. mas algumas naum listam estes caracteres.. procure akelas que listem flw.. Compartilhar este post Link para o post Compartilhar em outros sites
Ianaconi 0 Denunciar post Postado Junho 1, 2006 beleza, conheço o código ASCII. Vou fazer uns testes e ver o que da pra fazer. Depois eu coloco aqui o código fonte do programa.A agenda em si está praticamente pronta.Vlw! Compartilhar este post Link para o post Compartilhar em outros sites
Ianaconi 0 Denunciar post Postado Junho 6, 2006 Meu código: #include <stdio.h>#include <conio.h>#include <string.h>#include <iostream.h>//Agenda de Contatosint i=0, j;//Estrutura da Data de Nascimentostruct data{ int dia; int mes; int ano;};//Estrutura do Cadastrostruct dados{ char nome[30]; char endereco[50]; int telefone[10]; char email[35]; struct data nasc;}a[50];//Função para adicionar um contatovoid inserir(){ char repeat; system("cls"); printf("\t\t || 1: Inserir ||\n"); printf("\t\t || ||\n"); do { for(i=0; i<=1; i++) { printf("Nome: \n"); scanf("%s",&a[i].nome); printf("Endereço: \n"); scanf("%s",&a[i].endereco); printf("Telefone: \n"); scanf("%i",&a[i].telefone); printf("E-mail: \n"); scanf("%s",a[i].email); printf("Data de Nascimento (Ex:06/06/2006): \n"); scanf("%i",&a[i].nasc.ano); printf("Cadastro concluido com sucesso!"); printf("Deseja continuar? (S ou N) \n"); scanf("%c",&repeat); } }while(repeat=='s' || repeat=='S'); goto MENU;}//Função para pesquisar um contatovoid pesquisar(){ char x[50], repeat; system("cls"); printf("\t\t || 2: Pesquisar ||\n"); printf("\t\t || ||\n"); printf("Nome: \n"); scanf("%s",x); for(j=0;j<i;j++) { if(strcmp(x,a[j].nome)==0) { printf("%s",a[j].nome); printf("%s",a[j].endereco); printf("%i",&a[j].telefone); printf("%s",a[j].email); printf("%i/%i/%i ",&a[j].nasc.dia,&a[j].nasc.mes,&a[j].nasc.ano); printf("Pesquisa Concluida"); getch(); } } printf("Deseja continuar? (S ou N) \n"); scanf("%c",&repeat); if(repeat=='S' || repeat=='s') goto MENU;}//Função para listar os aniversariantes do mêsvoid aniversariantes(){ system("cls"); printf("\t\t || 3: Aniversariantes do Mes ||\n"); printf("\t\t || ||\n"); char repeat; int mesatual; printf("Mes Atual: "); scanf("%i", &mesatual); for(i=0; i<=50; i++) { if(a[i].nasc.mes == mesatual) printf("Aniversariantes do Mes:\n %s \n", a[i].nome); } printf("Deseja continuar? (S ou N) \n"); scanf("%c",&repeat); if(repeat=='S' || repeat=='s') goto MENU;}//Função para visualizar todos os contatosvoid todos(){ char repeat; system("cls"); printf("\t\t || 4: Visualizar Lista ||\n"); printf("\t\t || ||\n"); for(j=0;j<i;j++) { printf("\n%s",a[j].nome); printf("\n%s",a[j].endereco); printf("\n%i",a[j].telefone); printf("\n%s",a[j].email); printf("\n%i/%i/%i ",a[j].nasc.dia,a[j].nasc.mes,a[j].nasc.ano); } printf("Deseja continuar? (S ou N) \n"); scanf("%c",&repeat); if(repeat=='S' || repeat=='s') goto MENU;}//Função Principalint main(){ int s; do { system("cls"); printf("\t\t || Selecione uma opcao: ||\n"); printf("\t\t || ||\n"); printf("\t\t || 1: Inserir ||\n"); printf("\t\t || 2: Pesquisar ||\n"); printf("\t\t || 3: Aniversariantes do Mes ||\n"); printf("\t\t || 4: Visualizar Lista ||\n"); printf("\t\t || 5: Sair ||\n"); printf("\t\t || ||\n"); printf("\nOpcao: "); scanf("%i", &s); switch(s) { case 1: inserir(); break; case 2: pesquisar(); break; case 3: aniversariantes(); break; case 4: todos(); break; } }while(s!="5"); getch(); return 0;} O que vcs acham? Vlw! Estou com 2 erros: Line 50 - label 'MENU' used but not defined Line 131 - ANSI C++ forbids comparison between pointer and integer Compartilhar este post Link para o post Compartilhar em outros sites
ricci ottadnot 4 Denunciar post Postado Junho 6, 2006 Ianaconi. o 1º erro esta se referindo a um chamada inexistente.. com a função goto você pede ao compilador executar uma estrutura de codigos depois de uma label definida.. mas a label que você chama no seu programa você não criou.. seria mais eficiente você colocar todo a estrutura do MENU que você criou em uma void, dae em vez de chamar o goto MENU, você chama a void menu().. bem mais simples naum?!! o 2º erro se refere a estrutura bem no final de seu programa: while(s!="5");você declarou a variavel s como sendo de tipo inteiro, entao a comparação eh ineficiente.. pra resolver eh soh tirar as aspas do "5" .. while(s!=5);---------------dica: prefira utilizar a função gets() para ler uma string.. pois a função scanf() da um erro na hora de ler o caractere de espaço.. tipo, qdo você pede pra cadastrar o nome, se o usuario entrar com espaços no nome, o scanf automaticamente transfere a palavra apos o espaço para o lixo de memoria... em vez de: scanf("%s",&a[i].nome);substitua por gets(a[i].nome);mas tua agendinha esta dumal!!!parabens! http://forum.imasters.com.br/public/style_emoticons/default/clap.gif Compartilhar este post Link para o post Compartilhar em outros sites
Ianaconi 0 Denunciar post Postado Junho 8, 2006 Muito obrigado ricci ottadnot pelas dicas. Ainda estou com alguns problemas: Opção Inserir: Aparece: Nome: Endereço: E não tenho como digitar o nome. Pula direto pro Endereço. Mesma coisa com o E-mail. Pula direto pra Data de Nascimento. Dai fala Cadastro Concluido com Sucesso e vai direto pra outra. Não da a opção de Continuar (S ou N). Olha como ta o código agora: #include <stdio.h>#include <conio.h>#include <string.h>#include <iostream.h>#include <stdlib.h>#include <conio.c>//Agenda de Contatosint i=0, j;//Estrutura da Data de Nascimentostruct data{ int dia; int mes; int ano;};//Estrutura do Cadastrostruct dados{ char nome[30]; char endereco[50]; int telefone[10]; char email[35]; struct data nasc;}a[50];//Função para adicionar um contatovoid inserir(){ char repeat; system("cls"); textcolor(YELLOW); printf("\t\t || ||\n"); textcolor(WHITE); printf("\t\t || 1%c Inserir ||\n",26); textcolor(YELLOW); printf("\t\t || ||\n"); textcolor(WHITE); do { for(i=0; i<=50; i++) { printf("\nNome: "); gets(a[i].nome); printf("\nEndere%co: ",231); gets(a[i].endereco); printf("\nTelefone: "); scanf("&i",&a[i].telefone); printf("\nE-mail: "); gets(a[i].email); printf("\nData de Nascimento (Ex:06/06/2006): "); scanf("%i",&a[i].nasc.ano); printf("\nCadastro conclu%cdo com sucesso!\n",237); printf("\nDeseja continuar? (S ou N) \n"); scanf("%c",&repeat); } }while(repeat=='s' || repeat=='S');}//Função para pesquisar um contatovoid pesquisar(){ char x[50], repeat; system("cls"); textcolor(YELLOW); printf("\t\t || ||\n"); textcolor(WHITE); printf("\t\t || 2%c Pesquisar ||\n",26); textcolor(YELLOW); printf("\t\t || ||\n"); textcolor(WHITE); printf("\nNome: "); scanf("%s",x); for(j=0;j<i;j++) { if(strcmp(x,a[j].nome)==0) { printf("%s",a[j].nome); printf("%s",a[j].endereco); printf("%i",&a[j].telefone); printf("%s",a[j].email); printf("%i/%i/%i ",&a[j].nasc.dia,&a[j].nasc.mes,&a[j].nasc.ano); printf("Pesquisa Conclu%cda", 237); getch(); } } printf("\nDeseja continuar? (S ou N) \n"); scanf("%c",&repeat); if (repeat=='s' || repeat=='S') void menu();}//Função para listar os aniversariantes do mêsvoid aniversariantes(){ system("cls"); textcolor(YELLOW); printf("\t\t || ||\n"); textcolor(WHITE); printf("\t\t || 3%c Aniversariantes do M%cs ||\n", 26,234); textcolor(YELLOW); printf("\t\t || ||\n"); textcolor(WHITE); char repeat; int mesatual; printf("\nMes Atual: "); scanf("%i", &mesatual); for(i=0; i<=50; i++) { if(a[i].nasc.mes == mesatual) printf("\nAniversariantes do M%cs:\n %s \n", a[i].nome, 234); } printf("\nDeseja continuar? (S ou N) \n"); scanf("%c",&repeat); if (repeat=='s' || repeat=='S') void menu();}//Função para visualizar todos os contatosvoid todos(){ char repeat; system("cls"); textcolor(YELLOW); printf("\t\t || ||\n"); textcolor(WHITE); printf("\t\t || 4%c Visualizar Lista ||\n",26); textcolor(YELLOW); printf("\t\t || ||\n"); textcolor(WHITE); for(j=0;j<i;j++) { printf("\n%s",a[j].nome); printf("\n%s",a[j].endereco); printf("\n%i",a[j].telefone); printf("\n%s",a[j].email); printf("\n%i/%i/%i ",a[j].nasc.dia,a[j].nasc.mes,a[j].nasc.ano); } printf("\nDeseja continuar? (S ou N) \n"); scanf("%c",&repeat); if (repeat=='s' || repeat=='S') void menu();}//Função Menuvoid menu(){ int s; system("cls"); textcolor(YELLOW); printf("\t\t || Selecione uma op%c%co: ||\n",231,227); printf("\t\t || ||\n"); textcolor(WHITE); printf("\t\t || 1%c Inserir ||\n",26); printf("\t\t || 2%c Pesquisar ||\n",26); printf("\t\t || 3%c Aniversariantes do M%cs ||\n",26,234); printf("\t\t || 4%c Visualizar Lista ||\n",26); printf("\t\t || 5%c Sair ||\n",26); textcolor(YELLOW); printf("\t\t || ||\n"); textcolor(WHITE); printf("\t\t Op%c%co: ",231,227); scanf("%i", &s); switch(s) { case 1: inserir(); break; case 2: pesquisar(); break; case 3: aniversariantes(); break; case 4: todos(); break; case 5: exit; } getch();}//Função Principalint main(){ int s; system("cls"); textcolor(YELLOW); printf("\t\t || Selecione uma op%c%co: ||\n",231,227); printf("\t\t || ||\n"); textcolor(WHITE); printf("\t\t || 1%c Inserir ||\n",26); printf("\t\t || 2%c Pesquisar ||\n",26); printf("\t\t || 3%c Aniversariantes do M%cs ||\n",26,234); printf("\t\t || 4%c Visualizar Lista ||\n",26); printf("\t\t || 5%c Sair ||\n",26); textcolor(YELLOW); printf("\t\t || ||\n"); textcolor(WHITE); printf("\t\t Op%c%co: ",231,227); scanf("%i", &s); switch(s) { case 1: inserir(); break; case 2: pesquisar(); break; case 3: aniversariantes(); break; case 4: todos(); break; case 5: exit; } getch(); return 0;} Compartilhar este post Link para o post Compartilhar em outros sites
ricci ottadnot 4 Denunciar post Postado Junho 9, 2006 bom meu velho.. vamos la.. fikei grilado com o erro q tava dando.. infelizmente o C tem esse problema idiota com strings.. mas p tudo tem uma solução, naum eh?!! :) primeira coisa que fiz no seu codigo: DIZIMEI o scanf ... acho q ele q eh o culpado do erro.. a unica solução q encontrei foi colocar ates de cada gets() um getchar().. repare no trecho do seu codigo depois das modificações: printf("\nNome: "); getchar(); gets(a[i].nome); printf("\nEndere%co: ",231); getchar(); gets(a[i].endereco); printf("\nTelefone: "); getchar(); gets(a[i].telefone); printf("\nE-mail: "); getchar(); gets(a[i].email); printf("\nData de Nascimento (Ex:06/06/2006): "); getchar(); scanf("%i",&a[i].nasc.ano); printf("\nCadastro conclu%cdo com sucesso!\n",237); printf("\nDeseja continuar? (S ou N) \n"); getchar(); scanf("%c",&repeat);acredite ou nao.. no meu compilador rodou beleza..eu tb fikei surpreso!! deixei os scanf de onde nao estava dando problema.. tipo qdo ler o ano nascimento.. tem uma coisa no seu codigo tb q tava contribuindo p ele ignorar o questionamento se deseja continuar a incluir dados.. do { for(i=0; i<=50; i++) /** desnecessario este for */ { printf("\nNome: "); gets(a[i].nome); printf("\nEndere%co: ",231); gets(a[i].endereco); printf("\nTelefone: "); scanf("&i",&a[i].telefone); printf("\nE-mail: "); gets(a[i].email); printf("\nData de Nascimento (Ex:06/06/2006): "); scanf("%i",&a[i].nasc.ano); printf("\nCadastro conclu%cdo com sucesso!\n",237); printf("\nDeseja continuar? (S ou N) \n"); scanf("%c",&repeat); } }while(repeat=='s' || repeat=='S');} Repare que dentro do laço do você colocou um for para ir ate 50.. ou seja.. naum importa o que o usuario entrasse na variavel repeat ele sempre ia voltar a pedir os dados novamente.. eh soh tirar o for.. do { printf("\nNome: "); getchar(); gets(a[i].nome); printf("\nEndere%co: ",231); getchar(); gets(a[i].endereco); printf("\nTelefone: "); getchar(); gets(a[i].telefone); printf("\nE-mail: "); getchar(); gets(a[i].email); printf("\nData de Nascimento (Ex:06/06/2006): "); getchar(); scanf("%i",&a[i].nasc.ano); printf("\nCadastro conclu%cdo com sucesso!\n",237); printf("\nDeseja continuar? (S ou N) \n"); getchar(); scanf("%c",&repeat); i++; }while(repeat=='s' || repeat=='S');veja q a variavel i esta sendo incrementada no final..cara.. mas naum testei ainda o programa.. e pelo que vi tb, o teu menu principal deve estar dentro de um laço, se naum ele soh vai executar uma unica vez.. do{...}while(s!=5);se der mais algum erro, posta ai aonde esta o erro.. Compartilhar este post Link para o post Compartilhar em outros sites
Ianaconi 0 Denunciar post Postado Junho 9, 2006 Muito obrigado novamente. Não tinha percebido que o FOR ali estava sobrando. Tive que tirar o gets ali do campo telefone, porque tava dando erro de compilação (int argument...) E-mail (ainda está pulando) Depois que eu digito o último campo (Data de Nascimento, o programa fecha automaticamente). #include <stdio.h>#include <conio.h>#include <string.h>#include <iostream.h>#include <stdlib.h>#include <conio.c>//Agenda de Contatosint i=0, j;//Estrutura da Data de Nascimentostruct data{ int dia; int mes; int ano;};//Estrutura do Cadastrostruct dados{ char nome[30]; char endereco[50]; int telefone[10]; char email[35]; struct data nasc;}a[50];//Função para adicionar um contatovoid inserir(){ char repeat; system("cls"); textcolor(YELLOW); printf("\t\t || ||\n"); textcolor(WHITE); printf("\t\t || 1%c Inserir ||\n",26); textcolor(YELLOW); printf("\t\t || ||\n"); textcolor(WHITE); do { printf("\nNome: "); getchar(); gets(a[i].nome); printf("\nEndere%co: ",231); getchar(); gets(a[i].endereco); printf("\nTelefone: "); getchar(); scanf("&i",a[i].telefone); printf("\nE-mail: "); getchar(); gets(a[i].email); printf("\nData de Nascimento (Ex:06/06/2006): "); getchar(); scanf("%i",&a[i].nasc.ano); printf("\nCadastro conclu%cdo com sucesso!\n",237); printf("\nDeseja continuar? (S ou N) \n"); getchar(); getchar("%c",&repeat); }while(repeat=='s' || repeat=='S');}//Função para pesquisar um contatovoid pesquisar(){ char x[50], repeat; system("cls"); textcolor(YELLOW); printf("\t\t || ||\n"); textcolor(WHITE); printf("\t\t || 2%c Pesquisar ||\n",26); textcolor(YELLOW); printf("\t\t || ||\n"); textcolor(WHITE); printf("\nNome: "); scanf("%s",x); for(j=0;j<i;j++) { if(strcmp(x,a[j].nome)==0) { printf("%s",a[j].nome); printf("%s",a[j].endereco); printf("%i",&a[j].telefone); printf("%s",a[j].email); printf("%i/%i/%i ",&a[j].nasc.dia,&a[j].nasc.mes,&a[j].nasc.ano); printf("Pesquisa Conclu%cda", 237); getch(); } } printf("\nDeseja continuar? (S ou N) \n"); scanf("%c",&repeat); if (repeat=='s' || repeat=='S') void menu();}//Função para listar os aniversariantes do mêsvoid aniversariantes(){ system("cls"); textcolor(YELLOW); printf("\t\t || ||\n"); textcolor(WHITE); printf("\t\t || 3%c Aniversariantes do M%cs ||\n", 26,234); textcolor(YELLOW); printf("\t\t || ||\n"); textcolor(WHITE); char repeat; int mesatual; printf("\nMes Atual: "); scanf("%i", &mesatual); for(i=0; i<=50; i++) { if(a[i].nasc.mes == mesatual) printf("\nAniversariantes do M%cs:\n %s \n", a[i].nome, 234); } printf("\nDeseja continuar? (S ou N) \n"); scanf("%c",&repeat); if (repeat=='s' || repeat=='S') void menu();}//Função para visualizar todos os contatosvoid todos(){ char repeat; system("cls"); textcolor(YELLOW); printf("\t\t || ||\n"); textcolor(WHITE); printf("\t\t || 4%c Visualizar Lista ||\n",26); textcolor(YELLOW); printf("\t\t || ||\n"); textcolor(WHITE); for(j=0;j<i;j++) { printf("\n%s",a[j].nome); printf("\n%s",a[j].endereco); printf("\n%i",a[j].telefone); printf("\n%s",a[j].email); printf("\n%i/%i/%i ",a[j].nasc.dia,a[j].nasc.mes,a[j].nasc.ano); } printf("\nDeseja continuar? (S ou N) \n"); scanf("%c",&repeat); if (repeat=='s' || repeat=='S') void menu();}//Função Menuvoid menu(){ int s; do{ system("cls"); textcolor(YELLOW); printf("\t\t || Selecione uma op%c%co: ||\n",231,227); printf("\t\t || ||\n"); textcolor(WHITE); printf("\t\t || 1%c Inserir ||\n",26); printf("\t\t || 2%c Pesquisar ||\n",26); printf("\t\t || 3%c Aniversariantes do M%cs ||\n",26,234); printf("\t\t || 4%c Visualizar Lista ||\n",26); printf("\t\t || 5%c Sair ||\n",26); textcolor(YELLOW); printf("\t\t || ||\n"); textcolor(WHITE); printf("\t\t Op%c%co: ",231,227); scanf("%i", &s); switch(s) { case 1: inserir(); break; case 2: pesquisar(); break; case 3: aniversariantes(); break; case 4: todos(); break; case 5: exit; } getch(); }while(s!=5);}//Função Principalint main(){ int s; system("cls"); textcolor(YELLOW); printf("\t\t || Selecione uma op%c%co: ||\n",231,227); printf("\t\t || ||\n"); textcolor(WHITE); printf("\t\t || 1%c Inserir ||\n",26); printf("\t\t || 2%c Pesquisar ||\n",26); printf("\t\t || 3%c Aniversariantes do M%cs ||\n",26,234); printf("\t\t || 4%c Visualizar Lista ||\n",26); printf("\t\t || 5%c Sair ||\n",26); textcolor(YELLOW); printf("\t\t || ||\n"); textcolor(WHITE); printf("\t\t Op%c%co: ",231,227); scanf("%i", &s); switch(s) { case 1: inserir(); break; case 2: pesquisar(); break; case 3: aniversariantes(); break; case 4: todos(); break; case 5: exit; } getch(); return 0;} Consegui arrumar o esquema ali do número de telefone estar mudando. Simplesmente troquei o tipo dele na estrutura. Em vez de int, coloquei char. Mas ainda ta fechando o programa, depois de terminar de adicionar. Vlw! EDIT: A pesquisa tbm não está funcionando. Coloco pra pesquisar mas o programa fecha. Mesma coisa com a Lista de Aniversariantes, e a Lista Total. Acho que porque não está dando pra cadastrar os contatos. Vlw! Compartilhar este post Link para o post Compartilhar em outros sites
ricci ottadnot 4 Denunciar post Postado Junho 9, 2006 naum desanima naum hein..olha la no meu ultimo post, onde estou lhe aconselhando de colocar um getchar() antes dos gets.. Compartilhar este post Link para o post Compartilhar em outros sites
POGramador 0 Denunciar post Postado Setembro 17, 2007 o problema dele "pular" a leitura de algumas variaveis estah no buffer do tecladoqndo você le uma variavel, as vezes, pode ficar lixo no buffer ("memoria") do tecladoai, qndo o pograma chega na linha de leitura ele joga na variavel akele lixo q estava acumulado e passa p/ proxima linha do fonte.para resolver isso inclua a biblioteca <unistd.h> de acordo com a diretiva #includee use a funcao __fpurge(stdin) para limpar o buffereh recomendavel fzr isso sempre apos uma leitura(PS: Isso funciona em gcc no S.O. Master=Linux!!!) Compartilhar este post Link para o post Compartilhar em outros sites