#include #include #include typedef struct funcionario { char nome[30]; char cargo[30]; float salario; } FUNCIONARIO; typedef struct funcionarioEl { FUNCIONARIO dadoF; struct funcionarioEl *prox; } FUNCIONARIOEL; typedef struct setor { int hierarquia; char setor[30]; FUNCIONARIOEL *fun; } SETOR; typedef struct setorEl { SETOR dadoS; struct setorEl *mHierar; struct setorEl *nHierar; } SETOREL; SETOREL *inicio; SETOR leSetor() { SETOR set; printf("Digite o nivel hierarquico: "); scanf("%d", &set.hierarquia); fflush(stdin); printf("Digite o nome de setor: "); scanf("%[^\n]s", set.setor); fflush(stdin); set.fun = NULL; return set; } FUNCIONARIO leFuncionario() { FUNCIONARIO fun; printf("Digite o nome do funcionario: "); scanf("%[^\n]s", fun.nome); fflush(stdin); printf("Digite o cargo do funcionario: "); scanf("%[^\n]s", fun.cargo); fflush(stdin); printf("Digite o salario do funcionario: "); scanf("%f", &fun.salario); fflush(stdin); return fun; } SETOREL *achaSet(char st[30], SETOREL *inicio) { SETOREL *setEss = NULL; if (inicio->nHierar != NULL || inicio->mHierar != NULL) { if (strcmp(inicio->dadoS.setor,st) == 0) { setEss = inicio; } else { if (inicio->nHierar != NULL) { setEss = achaSet(st, inicio->nHierar); } else if(inicio->mHierar!=NULL) { setEss = achaSet(st, inicio->mHierar); } } } return setEss; } SETOREL *achaSetor(char st[30]) { SETOREL *setEss = achaSet(st, inicio); return setEss; } void addSetor(SETOR set) { SETOREL *setEl; setEl = (SETOREL *) malloc(sizeof(SETOREL)); setEl->dadoS = set; setEl->mHierar = NULL; setEl->nHierar = NULL; if (inicio == NULL) { inicio = setEl; } else { if (setEl->dadoS.hierarquia == 1) { SETOREL *setEl1 = inicio; while (setEl1->mHierar != NULL) { setEl1 = setEl1->mHierar; } setEl1->mHierar = setEl; } else { char st[30]; printf("Digite em qual setor o %s sera vinculado: ", setEl->dadoS.setor); scanf("%[^\n]s", st); fflush(stdin); SETOREL *setEss; setEss = achaSetor(st); if (setEss != NULL) { if (setEss->nHierar == NULL) { setEss->nHierar = setEl; } else { setEss = setEss->nHierar; while (setEss->mHierar != NULL) { setEss = setEss->mHierar; } setEss->mHierar = setEl; } } else { printf("O setor %s não foi encontrado.\n", st); } } } } void addFuncionario(FUNCIONARIO fun) { FUNCIONARIOEL *funEl; SETOREL *setEss; funEl = (FUNCIONARIOEL *) malloc(sizeof(FUNCIONARIOEL)); funEl->dadoF = fun; funEl->prox = NULL; char st[30]; printf("Digite um setor para adicionar o funcionario: "); scanf("%[^\n]s", st); fflush(stdin); if (inicio == NULL) { printf("Lista vazia!\n"); } else { setEss = achaSetor(st); printf("ss: %s", setEss->dadoS.setor); } } void identacaoS(int n) { if (n > 1) { identacaoS(n - 1); printf("\t"); } } void most(SETOREL *setEl) { printf("\n"); identacaoS(setEl->dadoS.hierarquia); printf("Nivel: %d\n", setEl->dadoS.hierarquia); identacaoS(setEl->dadoS.hierarquia); printf("Setor: %s\n", setEl->dadoS.setor); if (setEl->nHierar != NULL) { most(setEl->nHierar); } if (setEl->mHierar != NULL) { most(setEl->mHierar); } return; } void mostrar() { SETOREL *setEl = inicio; if (inicio == NULL) { printf("Lista vazia!\n"); } else { most(setEl); } } int main(void) { setbuf(stdout, NULL); inicio = NULL; int op; SETOR set; FUNCIONARIO fun; do { do { printf( "\n\n1-Inserir setor\n2-Inserir funcionario\n3-Mostrar\n9-Fim\nOpção: "); scanf("%d", &op); fflush(stdin); if (op < 1 || op > 9) printf("Opção invalida!\n"); } while (op < 1 || op > 9); switch (op) { case 1: set = leSetor(); addSetor(set); break; case 2: fun = leFuncionario(); addFuncionario(fun); break; case 3: mostrar(); break; } } while (op != 9); return EXIT_SUCCESS; }