Ir ao conteúdo
  • Cadastre-se

Dúvida Ordenar Struct


rs40

Posts recomendados

Gostaria de saber como ordeno este código seguindo as regras propostas pelo mesmo

Regras:

Lista com todos os dados obdecendo o seguinte critério: tipo em Ordem Ascendente, etinia em ordem Descendente e por

nome em ordem ascendente.

Exemplo de como deverá ficar o sistema depois de clicar em listar:

parda K Catia

parda K Mariana

parda L Juliana

parda L Amanda

branca S Severino

indigena L Amianco

indigena L Beto

indigena L Carlos

indigena L Maria


#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <ctype.h>

#define MAX 9
#define MAX_NOME 255
#define MAX_COR 50
#define MAX_TIPO 50

typedef struct{
char nome[MAX_NOME];
char cor[MAX_COR];
char tipo[MAX_TIPO];
}Funcionarios;

//Protótipos
void lerDados(Funcionarios *dados, int cont);
void listarDados(Funcionarios *dados, int cont);
void ordenarNome (Funcionarios *dados, int cont);
void ordenarCor (Funcionarios *dados, int cont);
void ordenarTipo (Funcionarios *dados, int cont);
void pesquisarDados(Funcionarios *dados, int cont);

int main(void){

Funcionarios dados[MAX], *p;
int opcao,cont=0;

do{
printf("\n\t---------------------.M.E.N.U.---------------------\n\n\n");
printf(" 1. Cadastrar\n 2. Listar todos\n 3. Pesquisar\n 4. sair\n\n\n Opcao - ");
scanf("%d", &opcao);

switch(opcao){
case 1:
system("cls");
lerDados(dados, cont);
cont ++;
break;
case 2:
system("cls");
ordenarNome(dados, cont);
ordenarCor(dados, cont);
ordenarTipo(dados, cont);
listarDados(dados,cont);
break;
case 3:
system("cls");
pesquisarDados(dados, cont);
break;
}
}while(opcao != 4 && cont < MAX);

getch();

return 0;
}

void lerDados(Funcionarios *dados, int cont){
int tamanho=0;
printf("\n\t---------------------.CADASTRO.---------------------\n\n\n");

do{
printf("\n\tNome - ");
fgets(dados[cont].nome,MAX_NOME,stdin);
tamanho = strlen(dados[cont].nome);

if(dados[cont].nome[tamanho-1] == '\n'){
dados[cont].nome[tamanho-1] = '\0';
tamanho--;
}
}while(tamanho == 0);

do{
printf("\n\tEtnia - Branco, Negra ou Indigena - ");
fgets(dados[cont].cor,MAX_COR,stdin);
tamanho = strlen(dados[cont].cor);

if(dados[cont].cor[tamanho-1] == '\n'){
dados[cont].cor[tamanho-1] = '\0';
tamanho--;
}
}while(tamanho == 0);

do{
printf("\n\tSetor Valores possiveis:K, L, S - ");
fgets(dados[cont].tipo,MAX_TIPO,stdin);
tamanho = strlen(dados[cont].tipo);

if(dados[cont].tipo[tamanho-1] == '\n'){
dados[cont].tipo[tamanho-1] = '\0';
tamanho--;
}
}while(tamanho == 0);

printf("\n\n\n\t\tFUNCIONARIO INSERIDO COM SUCESSO NO SISTEMA!\n\n\n\n\n");
system("pause");
system("cls");
return;
}


void listarDados(Funcionarios *dados, int cont){

int aux;
printf("\n\t---------------.REGISTROS.---------------\n\n\n");

if(cont > 0){
printf("\n\tSETOR \tETINIA \tNOME\n\n");

for(aux=0;aux<cont;aux++){
printf ("\n\t%s\t %s\t %s\t", dados[aux].tipo, dados[aux].cor,dados[aux].nome);
}

printf("\n\n\n\n");
system("pause");
system("cls");
}
else{
printf("\n\t\n NAO EXISTE NENHUM FUNCIONARIO CADASTRADO NO SISTEMA\n\n\n\n");
system("pause");
system("cls");
}
return;
}

void ordenarNome (Funcionarios *dados, int cont){
int cont1, cont2;
Funcionarios funcionario;

for(cont1=0;cont1<cont-1;cont1++){

for(cont2=cont1+1;cont2<cont;cont2++){

if(stricmp(dados[cont1].nome,dados[cont2].nome) > 0){
funcionario = dados[cont1];
dados[cont1] = dados[cont2];
dados[cont2] = funcionario;
}
}
}
return;
}

void ordenarTipo (Funcionarios *dados, int cont){
int cont1, cont2;
Funcionarios funcionario;

for(cont1=0;cont1<cont-1;cont1++){
for(cont2=cont1+1;cont2<cont;cont2++){

if(stricmp(dados[cont1].tipo,dados[cont2].tipo) > 0){
funcionario = dados[cont1];
dados[cont1] = dados[cont2];
dados[cont2] = funcionario;
}
}
}
return;
}

void ordenarCor (Funcionarios *dados, int cont){
int cont1, cont2;
Funcionarios funcionario;

for(cont1=0;cont1<cont-1;cont1++){
for(cont2=cont1+1;cont2<cont;cont2++){

if(stricmp(dados[cont1].cor,dados[cont2].cor) > 0){
funcionario = dados[cont1];
dados[cont1] = dados[cont2];
dados[cont2] = funcionario;
}
}
}
return;
}

void pesquisarDados(Funcionarios *dados, int cont){
char nome[MAX_NOME];
int tamanho, aux;
printf("\n\t---------------.PESQUISA DADOS NO SISTEMA.---------------\n\n\n");

if(cont > 0){

do{
printf("\n\n\tNome - ");
fflush(stdin);
fgets(nome,MAX_NOME,stdin);
tamanho = strlen(nome);

if(nome[tamanho-1] == '\n'){
nome[tamanho-1] = '\0';
tamanho --;
}
}while(tamanho <= 0);

printf("\n\n NOME\t ETINIA\t TIPO\n\n");

for(aux=0;aux<cont;aux++){
if(strstr(strupr(dados[aux].nome),strupr(nome)) )
printf ("\n\t%s\t\t %s\t\t %s", dados[aux].nome, dados[aux].cor,dados[aux].tipo);
}

printf("\n\n\n");
system("pause");
system("cls");
}

else{
printf("\n\t\tNAO FOI ENCONTRADO NENHUM FUNCIONARIO CADASTRADO NO SISTEMA\n\n\n\n");
system("pause");
system("cls");
getch();
}
}

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...