
		ic0158040
		
		(usa KUbuntu)
		
		Enviado em 23/06/2008 - 22:22h 
		turma. tipo, fiz um programa no windows, mas quando o compilo no linux ele não executa as opções 5 e 6 do switch. por quê?
troquem o system("cls") por system("clear") pois no programa que rodei no linux eu jah efetuei essa troca. o resto tah igualzinho.
# Código fonte em linguagem C++*/
//Inclusão das bibliotecas
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std ;
/*---------------------------------------------------------------------------------
//Definição da estrutura AGENDA
---------------------------------------------------------------------------------*/
typedef struct AGENDA
{
	char nome[50];//campo nome
    long int telefone;//campo telefone
    int dia ; //campo dia
    int mes ; // campo mes
    int ano ; //campo ano
    char endereco[150];//campo endereço
    char email[20];//campo e-mail
}AGENDA;
/*---------------------------------------------------------------------------------
//Protótipos das funções
---------------------------------------------------------------------------------*/
int menu();
int  inclusao(AGENDA agenda[200], int tamanho);
void altera(AGENDA agenda[200]);
void exclusao(AGENDA agenda[200]);
void pesquisa(AGENDA agenda[200]);
void imprime (AGENDA * agenda, int i);
//---------------------------------------------------------------------------------
//Programa principal
//================================================================================
int main()
{
    //Declaração das variáveis
    AGENDA agenda[200];
    AGENDA agendaOrdenada[200] ;
    int MENU, 
        teste, 
        tamanho,
        contador;
    
    //Inicialização das variáveis
    tamanho  = 0;
    MENU = 0;
    contador = 0;
//Tomada de decisão de acordo com o retorno da função principal
    while(MENU != 7)
    {
        //Chamada da função menu
        MENU = menu();
        
        //Tomada de decisão de acordo com a opção escolhida
        switch(MENU)
        {
            case 1:
                //chamada da função de inclusaõ de registros na tabela
                teste = inclusao(agenda, tamanho);
                tamanho = teste;
                contador ++ ;
                //imprimindo uma mensagem de erro
                if(teste == 0)
                    printf("\n\t Nao e possivel incluir um registro agenda cheia!!!");
                else
                    printf("\n\t Registro incluido com sucesso!!!");
                fflush(stdin);
                getchar();
                break;
                    
                    
            
            case 2:
                //chamada da função de alteração de registros da tabela
                altera(agenda);
                fflush(stdin);
                getchar();
                break;
                    
            
            case 3:
                //chamada da função de exclusaõ de registros da tabela
                exclusao(agenda);
                fflush(stdin);
                getchar();
                break;
                    
            
            case 4:
                //chamada da função de pesquisa da tabela
                    pesquisa(agenda);
                    fflush(stdin);
                    getchar();
                    break;
                        
            
            case 5:
            { 
                 system("cls");
                 //system("clear");
                 printf("\nNOME\t\t\t\ ENDERECO                                          ANIVERSARIO\t\tTELEFONE\tEMAIL\n\n");
                    
                    for (int i = 0 ; i < contador ; i++)
                    {
                        printf("%s", agenda[i].nome);
                        printf("\t\t\t\t %s", agenda[i].endereco);
                        printf("                                          %d/%d/%d", agenda[i].dia , agenda[i].mes, agenda[i].ano);
                        printf("\t\t %d", agenda[i].telefone);
                        printf("\t\t %s" , agenda[i].email);
                        printf("\n\n");
                    }
                     system("PAUSE");
            };  break;
                  
            case 6:
            {
                    system("cls");
                    //system("clear");
                    AGENDA *ordenada , auxiliar ;
                    ordenada = new AGENDA [contador] ;
                /*-------------------------------------------------------------
                
                //Ordenação dos registros no método bouble sort
                
                -------------------------------------------------------------*/
                    
                    for(int i = 0; i  < contador ; i++)
                    ordenada[i] = agenda[i];
                    for(int i = 0 ; i < contador-1 ; i++)
                    {
                        for(int j = 1 ; j < contador ; j ++)
                        {
                            if (strcmp(ordenada[j-1].nome, ordenada[j].nome) == 1)
                            {
                                auxiliar = ordenada[j];
                                ordenada[j] = ordenada[j-1];
                                ordenada[j-1] = auxiliar ;
                            }
                        }
                    }
                    /*-------------------------------------------------------------
                
                    //Impressão dos registros ordenados
                
                    -------------------------------------------------------------*/
                                                                                   
                    printf("\nNOME\t\t\t\ENDERECO                                          ANIVERSARIO\t\tTELEFONE\tEMAIL\n\n");
                    
                    for (int i = 0 ; i < contador ; i++)
                    {
                        printf("%s", ordenada[i].nome);
                        printf("\t\t\t\t %s", ordenada[i].endereco);
                        printf("                                          %d/%d/%d", ordenada[i].dia , ordenada[i].mes, ordenada[i].ano);
                        printf("\t\t %d", ordenada[i].telefone);
                        printf("\t\t %s" , ordenada[i].email);
                        printf("\n\n");
                    }
                    system("PAUSE");
                    };  break;
            
            case 7:
                 //imprimindo uma mensagem de finalizaçõ de progrma
                printf("\n\t O programa esta sendo finalizado!!!");
                return 0 ;
            break;
            
            default://imprimindo uma mensaagem de opção inválida
                printf("\n\t Opcao invalida!!!");
                fflush(stdin);
                getchar();
        }
    }
fflush(stdin);
system("PAUSE");
return 0;
}
//=================================================================================
//Fim do programa principal
/*---------------------------------------------------------------------------------
//Implementação das funções
---------------------------------------------------------------------------------*/
//Função menu
int menu()
{
    
    //system ("clear") ;
    system("cls");
    
	//variáveis locais
	int opcao;
    //impressão do menu
	printf("\n\n\t Menu ");
    printf("\n\t 1 - Incluir um registro ");
    printf("\n\t 2 - Alterar um registro ");
    printf("\n\t 3 - Excluir um registro ");
    printf("\n\t 4 - Pesquisar um registro ");
    printf("\n\t 5 - Listar os dados na ordem de entrada") ;
    printf("\n\t 6 - Listar os dados ordenados por nome");
    printf("\n\t 7 - Sair");
    printf("\n\t Escolha um aopcao ");
    scanf("%d", &opcao);
    //valor retornado
    return opcao;
}
//---------------------------------------------------------------------------------
//Função de inclusaõ de registros na agenda
int inclusao(AGENDA agenda[200], int tamanho)
{
	//variáveis locais
	int aux;
    //numero de registro já acrescentados
    aux = tamanho;
    //caso o numero de registros inseridos seja maior que 199 a agenda está cheia e a função e incerrada
    if(aux >= 199)return 0;
    //leitura do nome do indivíduo
	printf("\n\t Digite o nome - ");
    scanf(" %[^\n]",&agenda[aux].nome);
    //Leitura do telefone
    do
    {
		printf("\t Digite telefone - ");
    	scanf("%d", &agenda[aux].telefone);
    }while(agenda[aux].telefone <= 0);
    //Leitura do aniversário
    printf("\n\t Digite a data de aniversario - ");
    printf("\n\t Digite o dia - ") ;
    scanf("%d" , &agenda[aux].dia) ;
    printf("\n\t Digite o mes - ") ;
    scanf("%d" , &agenda[aux].mes) ;
    printf("\n\t Digite o ano - ") ;
    scanf("%d" , &agenda[aux].ano) ;
    //Leitura do endereço
	printf("\t Digite o endereco - ");
    scanf(" %[^\n]",&agenda[aux].endereco);
    //Leitura do e-mail
	printf("\t Digite o e-mail - ");
    scanf(" %[^\n]",&agenda[aux].email);
    //Retorna tamanho +1 isso quer dizer um registroa frente na agenda
    return tamanho + 1;
    
    //system ("clear") ;
    system("cls");
    
}
//---------------------------------------------------------------------------------------
//Função resposável por alterar os registros da estrutura
void altera(AGENDA agenda[200])
{
	//Definição de variávis
	char nom[50];
    int i;
    //leitura do nomme do registro a ser alterado
	printf("\n\t Digite o nome para alterar seus dados ");
    scanf(" %[^\n]",&nom);
    //Busaca do registro a ser alterado
    for(i = 0;i < 200;i++)
    {
    	//caso o registro tenaha sido encontrado ele é alterado pela seguinte estrutura
        if(strcmp(agenda[i].nome,nom) == 0)
        {
            printf("\n\t Alteracao:");
            //lendo o novo nome da estrutura
            printf("\n\t Digite o nome - ");
            scanf(" %[^\n]",&agenda[i].nome);
            //lendo o novo telefone
            do
            {
                printf("\t Digite telefone - ");
                scanf("%d", &agenda[i].telefone);
            }while(agenda[i].telefone <= 0);
            //lendo novo aniversario
            printf("\n\t Digite a data de aniversário - ");
            printf("\n\t Digite o dia - ") ;
            scanf("%d" , &agenda[i].dia) ;
            printf("\n\t Digite o mes - ") ;
            scanf("%d" , &agenda[i].mes) ;
            printf("\n\t Digite o ano - ") ;
            scanf("%d" , &agenda[i].ano) ;
            //lendo o novo endereço
            printf("\t Digite o endereco - ");
            scanf(" %[^\n]",&agenda[i].endereco);
            //lendo onovo e-mail
            printf("\t Digite o e-mail - ");
            scanf(" %[^\n]",&agenda[i].email);
            printf("\n\t Registro alterado com sucesso!!!");
        }
        //caso a estrutura com o nome digitado não tenha sido encontrada a seguitnte mensagem é impressa
        else if(i >= 199)
            printf("\n\t O nome e nao foi encontrado!!!");
    }
    
    //system ("clear") ;
    system("cls");
}
//------------------------------------------------------------------------------------
//função responsável pela exclusão de um registro
void exclusao(AGENDA agenda[200])
{
	//declaração de variáveis
	char nom[50], apaga[50];
    int i;
    //criando um vetor vazio
    for(i = 0;i<50;i++)apaga[i] = '{TEXTO}';
    //lendo o nome o registro que deve ser excluido
	printf("\n\t Digite o nome a ser excluido - ");
    scanf(" %[^\n]",&nom);
    //busscando o registro que deve ser excluído
    for(i = 0;i < 200;i++)
    {
    	//apagando um registro
        if(strcmp(agenda[i].nome,nom) == 0)
        {
        	//apaganod o nome
	        strcpy(agenda[i].nome,apaga);
            //apagando o telefone
            agenda[i].telefone = 0;
            //apagando o aniversário
            agenda[i].dia = 0 ;
            agenda[i].mes = 0 ;
            agenda[i].ano = 0 ;
            //apagando oendereço
            strcpy(agenda[i].endereco,apaga);
            //apagando o email
            strcpy(agenda[i].email,apaga);
            printf("\n\t O registro foi apagado com exito!!!");
        }
        //caso o elemento não seja encontrado
        
    }
    getchar();
    system ("cls") ;
    //system("clear");
}
//------------------------------------------------------------------------------------
//função responsável pela pesquisa de um determinado registro
void pesquisa(AGENDA agenda[200])
{
	//Declaração de variáveis
	char nom[50];
    long int tel;
    int i, opc;
    //inicializãção de variáveis
    opc = 0;
    //impressão do menu pesquisa
    do
    {
    	printf("\n\n\t Pesquisa:");
    	printf("\n\t 1 - Pesquisa por nome ");
    	printf("\n\t 2 - Pesquisa por telefone ");
    	printf("\n\t 3 - pesquisa por nome e telefone ");
    	printf("\n\t Digite sua opcao: ");
   		scanf("%d",&opc);
    }while(opc != 1 && opc != 2 && opc != 3);
    //tomada de decisão de acordo com o menu pequisa
    switch(opc)
    {
    	//realizabdo a busaca por nome
       	case 1:
			printf("\n\t Digite o nome completo - ");
   			scanf(" %[^\n]",&nom);
            //realizando a busaca
            for(i = 0;i < 200;i++)
            {
            	//caso seja encontrada os dados referente ao nome saõ impressos
                if(strcmp(agenda[i].nome,nom) == 0)
                {
                    imprime (agenda, i);
                }
                //caso o nome não possa ser encontrado uma mensagem é enviada ao úsuário
                else if(i >= 199)
                    printf("\n\t O nome e nao foi encontrado!!!");
             }
        break;
        //realizando a busca por telefone
        case 2:
   			printf("\n\t Digite o telefone - ");
   			scanf("%ld",&tel);
            //busacando o elemento por seu telefone
            for(i = 0;i < 200;i++)
            {
            	//imprimindo os elementos do vetor tem o telefone digitado
                if(agenda[i].telefone == tel)
                {
                    imprime (agenda, i);
                }
                //caso o telefone não exista na agenda uma mensagem de erro é impressa
                else if(i >= 199)
                    printf("\n\t O telefone nao foi encontrado!!!");
            }
		break;
        //procurando o reistro por nome e telefone
        case 3:
			printf("\n\t Digite o nome completo - ");
   			scanf(" %[^\n]",&nom);
  			printf("\n\t Digite o telefone - ");
   			scanf("%ld",&tel);
            //caso o registro possua o nome e o telefone digitados ele é impresso
            for(i = 0;i < 200;i++)
            {
            	//imprimindo o registro com o nome e o telefone digitados
                if(strcmp(agenda[i].nome,nom) == 0 && agenda[i].telefone == tel)
                {
                 imprime (agenda, i);
                }
                //caso este não seja encontrado um mensagem de erro é impressa
                else if(i >= 199)
                    printf("\n\t O nome e o telefone nao combinam!!!");
            }
		break;
    }
    system("PAUSE");
}
//---------------------------------------------------------------------------------
//Função responsável pela impressão da procura
void imprime (AGENDA * agenda, int i)
{
     printf("\n\t O nome e: %s", agenda[i].nome);
                    printf("\n\t O telefone e:  %d", agenda[i].telefone);
                    printf("\n\t O aniversario e: %d / %d / %d", agenda[i].dia , agenda[i].mes , agenda[i].ano);
                    printf("\n\t O endereco e: %s", agenda[i].endereco);
                    printf("\n\t O e-mail e: %s", agenda[i].email);
                    getchar();
}
//---------------------------------------------------------------------------------