xickoh

LP Renato

Dec 25th, 2020 (edited)
221
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 12.35 KB | None | 0 0
  1. /*
  2.  * To change this license header, choose License Headers in Project Properties.
  3.  * To change this template file, choose Tools | Templates
  4.  * and open the template in the editor.
  5.  */
  6.  
  7. /*
  8.  * File:   main.c
  9.  * Author: renat
  10.  *
  11.  * Created on 5 de dezembro de 2020, 22:50
  12.  */
  13.  
  14. #include <stdio.h>
  15. #include <stdlib.h>
  16. #include "EstruturaDados..h"
  17. #include "Auxiliar..h"
  18.  
  19. #define NUM_MAX_FUNCIONARIOS_ 100
  20. #define NUM_MAX_FUNCIONARIOS_REMOVIDOS 100
  21.  
  22. #define FUNCIONARIOS "Funcionarios.txt"
  23.  
  24. void SalvarFuncionarios(InfoFuncionario* funcionarios, int numFuncionarios,
  25.         InfoFuncionario funcionariosRemovidos[], int numFuncionariosRemovidos) {
  26.    
  27.     FILE* fFuncionarios = (FILE*) malloc(sizeof (FILE));
  28.     fFuncionarios = fopen(FUNCIONARIOS, "w");
  29.     printf("%d",funcionarios[0].Codigo);
  30.  
  31.     for (int i = 0; i < numFuncionarios; i++) {
  32.         fprintf(fFuncionarios, "%d %s \n", funcionarios[i].Codigo, funcionarios[i].Nome);
  33.     }
  34.  
  35.     fclose(fFuncionarios);
  36. }
  37.  
  38.  
  39. // Apresentar todas as informacoes do Funcionario inserido
  40.  
  41. void InformacoesFuncionario(InfoFuncionario funcionario) {
  42.  
  43.     printf("\n\n");
  44.     printf("Codigo: %d \n", funcionario.Codigo);
  45.     printf("Nome: %s \n", funcionario.Nome);
  46.     printf("Numero Telefone: %d \n", funcionario.NumeroTelefone);
  47.     printf("Numero de Filhos: %d \n", funcionario.NumeroDeFilhos);
  48.     ApresentarEstadocivil(funcionario.EstadoCivil);
  49.     ApresentarCargo(funcionario.Cargo);
  50.     printf("Salario Base por Hora: %.2f \n", funcionario.SalarioPorHora);
  51.     printf("Subsidio de Alimentacao: %.2f \n", funcionario.SubsidioAlimentacao);
  52.     printf("Data de Nascimento: %d %d %d \n",
  53.             funcionario.DataNascimento.Dia,
  54.             funcionario.DataNascimento.Mes,
  55.             funcionario.DataNascimento.Ano);
  56.     printf("Data de Entrada na Empresa: %d %d %d \n",
  57.             funcionario.DataEntradaEmpresa.Dia,
  58.             funcionario.DataEntradaEmpresa.Mes,
  59.             funcionario.DataEntradaEmpresa.Ano);
  60. }
  61.  
  62. // Editar um funcionario inserido
  63.  
  64. InfoFuncionario EditarFuncionario(InfoFuncionario funcionario) {
  65.  
  66.     int opcao;
  67.  
  68.     printf("\n"
  69.             "Qual Parte deseja editar ? \n"
  70.             "Nome = 1 \n"
  71.             "Numero Telefone = 2 \n"
  72.             "Numero de Filhos = 3 \n"
  73.             "Estado Civil = 4 \n"
  74.             "Cargo = 5 \n"
  75.             "Salario Base por Hora= 6 \n"
  76.             "Subsidio de Alimentacao = 7 \n"
  77.             "Data de Nascimento = 8 \n"
  78.             "Data de entrada na empresa = 9 \n"
  79.             "Sair = Qualquer outro numero \n");
  80.     scanf("%d", &opcao);
  81.     printf("\n");
  82.  
  83.     // Editar o Funcionar conforme a opcao escolhida em cima
  84.     switch (opcao) {
  85.  
  86.         case 1:
  87.             printf("Nome: ");
  88.             scanf(" %s", funcionario.Nome);
  89.             break;
  90.  
  91.         case 2:
  92.             printf("Numero de telefone: ");
  93.             InserirInt(&funcionario.NumeroTelefone, 100000000, 1000000000);
  94.             break;
  95.  
  96.         case 3:
  97.             printf("Numero de filhos: ");
  98.             InserirInt(&funcionario.NumeroDeFilhos, 0, 500);
  99.             break;
  100.  
  101.         case 4:
  102.             printf("Estado Civil \n"
  103.                     "(Solteiro = 1,Casado = 2,Divorciado = 3,Viuvo = 4) : ");
  104.             InserirEstadoCivil(&funcionario.EstadoCivil, 1, 4);
  105.             break;
  106.  
  107.         case 5:
  108.             printf("Cargo \n"
  109.                     "(Empregado = 1,Chefe = 2,Administrador = 3) : ");
  110.             InserirCargo(&funcionario.Cargo, 1, 3);
  111.             break;
  112.  
  113.         case 6:
  114.             printf("Salario por hora: ");
  115.             InserirFloat(&funcionario.SalarioPorHora, 0, 1000000);
  116.             break;
  117.  
  118.         case 7:
  119.             printf("Subsidio de Alimentacao: ");
  120.             InserirFloat(&funcionario.SubsidioAlimentacao, 0, 1000000);
  121.             break;
  122.  
  123.         case 8:
  124.             printf("Data Nascimento(dia mes ano): ");
  125.             InserirInt(&funcionario.DataNascimento.Dia, 1, 31);
  126.             InserirInt(&funcionario.DataNascimento.Mes, 1, 12);
  127.             InserirInt(&funcionario.DataNascimento.Ano, 2000, 3000);
  128.             break;
  129.  
  130.         case 9:
  131.             printf("Data de Entrada na Empresa(dia mes ano): ");
  132.             InserirInt(&funcionario.DataEntradaEmpresa.Dia, 1, 31);
  133.             InserirInt(&funcionario.DataEntradaEmpresa.Mes, 1, 12);
  134.             InserirInt(&funcionario.DataEntradaEmpresa.Ano, 2000, 3000);
  135.  
  136.             break;
  137.  
  138.     }
  139.     printf("\n");
  140.  
  141.     return funcionario;
  142. }
  143.  
  144. // Apresentar todos os funcionarios
  145.  
  146. void ListaFuncionarios(InfoFuncionario *funcionarios, int numeroFuncionarios) {
  147.  
  148.     if (numeroFuncionarios > 0) {
  149.  
  150.         printf("\n\n"
  151.                 "----------Funcionarios------------ "
  152.                 "\n\n");
  153.  
  154.         for (int i = 0; i < numeroFuncionarios; i++) {
  155.  
  156.             printf("Codigo : %5d  Nome : %s \n", funcionarios[i].Codigo, funcionarios[i].Nome);
  157.         }
  158.     }
  159. }
  160.  
  161. // Apresentar todos os funcionarios removidos
  162.  
  163. void ListaFuncionariosRemovidos(InfoFuncionario funcionariosRemovidos[], int numeroFuncionariosRemovidos) {
  164.  
  165.     if (numeroFuncionariosRemovidos > 0) {
  166.  
  167.         printf("\n\n"
  168.                 "----------Funcionarios Removidos------------ "
  169.                 "\n\n");
  170.  
  171.         for (int i = 0; i < numeroFuncionariosRemovidos; i++) {
  172.  
  173.             printf("Codigo : %5d  Nome : %s \n", funcionariosRemovidos[i].Codigo, funcionariosRemovidos[i].Nome);
  174.         }
  175.     }
  176. }
  177.  
  178. // Mostrar as opcoes na lista de funcionarios (Selecionar Alterar Remover)
  179.  
  180. void OpcoesListaFuncionarios(InfoFuncionario **funcionarios, int *numeroFuncionarios,
  181.         InfoFuncionario **funcionariosRemovido, int *numeroFuncionariosRemovidos) {
  182.  
  183.     int codigoDigitado;
  184.     char editar;
  185.  
  186.     int IndiceFuncionario;
  187.  
  188.     // Apresentar a Lista de Funcionarios na Empresa
  189.     ListaFuncionarios(*funcionarios, *numeroFuncionarios);
  190.  
  191.     // Opcao de Selecionar algum funcionario ou voltar para o Menu
  192.     printf("\n"
  193.             "Se Deseja Selecionar Algum Funcionario Digite o seu Codigo \n"
  194.             "Se Deseja Voltar atras Digite -1 \n"
  195.             "Se Deseja Ver os Funcionarios Removidos -2 \n");
  196.     scanf("%d", &codigoDigitado);
  197.     printf("\n");
  198.  
  199.     // Arranjar isto **********************************************************
  200.     while (1 == 1) {
  201.         // Se nao quer voltar para o menu
  202.         if (codigoDigitado == -1) {
  203.             break;
  204.         } else if (codigoDigitado == -2) {
  205.  
  206.             // Apresentar a Lista de Funcionarios Removidos
  207.             ListaFuncionariosRemovidos(*funcionariosRemovido, *numeroFuncionariosRemovidos);
  208.  
  209.             break;
  210.         } else {
  211.  
  212.             // Verificar se tem e qual é o funcionario com codigo igual ao inserido;
  213.             IndiceFuncionario = VerificarFuncionario(*funcionarios, codigoDigitado, *numeroFuncionarios);
  214.  
  215.             if (IndiceFuncionario != -1) {
  216.  
  217.                 // Apresentar todas as informacoes do funcionario escolhido
  218.                 InformacoesFuncionario((*funcionarios)[IndiceFuncionario]);
  219.  
  220.                 printf("\n"
  221.                         "Deseja fazer alguma alteracao ? \n"
  222.                         "Editar Funcionario = E \n"
  223.                         "Remover = R \n"
  224.                         "Sair outra tecla qualquer \n");
  225.                 scanf(" %c", &editar);
  226.                 printf("\n");
  227.  
  228.                 if (editar == 'e' || editar == 'E') {
  229.  
  230.                     // Editar o funcionario escolhido
  231.                     (*funcionarios)[IndiceFuncionario] = EditarFuncionario((*funcionarios)[IndiceFuncionario]);
  232.  
  233.                     break;
  234.  
  235.                 } else if (editar == 'r' || editar == 'R') {
  236.  
  237.                     // Mover o funcionario para a array de Funcionarios Removidos
  238.                     *funcionariosRemovido = (InfoFuncionario*)
  239.                             realloc(*funcionariosRemovido, ++(*numeroFuncionariosRemovidos));
  240.  
  241.                     (*funcionariosRemovido)[*numeroFuncionariosRemovidos - 1] = (*funcionarios)[IndiceFuncionario];
  242.  
  243.                     (*numeroFuncionarios)--;
  244.  
  245.                     // Mover todos os funcionarios que estavam a frente do funcionario removido
  246.                     // um espaço para trás para ocupar o espaço do funcionario removido
  247.                     for (int u = IndiceFuncionario; u < *numeroFuncionarios; u++) {
  248.  
  249.                         (*funcionarios)[u] = (*funcionarios)[u + 1];
  250.                     }
  251.  
  252.                     break;
  253.                 } else {
  254.                     break;
  255.                 }
  256.             }// o codigo inserido está incorreto é pedido outro codigo ou a opcao de sair
  257.             else {
  258.  
  259.                 printf("\n"
  260.                         "O Codigo inserido está incorreto \n"
  261.                         "Insire outro codigo ou -1 para voltar \n");
  262.                 scanf("%d", &codigoDigitado);
  263.                 printf("\n");
  264.  
  265.                 // Se o codigo é diferente de -1 volta a testar toda a array de funcionarios
  266.                 if (codigoDigitado == -1) {
  267.  
  268.                     break;
  269.                 }
  270.                 // Se o codigo é diferente de -1 volta para o incio
  271.                 // para verificar se tem um codigo igual ao inserido
  272.             }
  273.         }
  274.     }
  275. }
  276.  
  277. // Funcao Responsavel por adicionar um funcionario a Array de Funcionairos
  278.  
  279. void InserirFuncionario(InfoFuncionario* funcionario, int *codigo) {
  280.  
  281.     funcionario->Codigo = ++(*codigo);
  282.  
  283.     printf("Nome: ");
  284.     scanf(" %s", funcionario->Nome);
  285.  
  286.  
  287.     printf("Numero de telefone: ");
  288.     InserirInt(&funcionario->NumeroTelefone, 100000000, 1000000000);
  289.  
  290.     printf("Numero de filhos: ");
  291.     InserirInt(&funcionario->NumeroDeFilhos, 0, 500);
  292.  
  293.     printf("Estado Civil \n"
  294.             "(Solteiro = 1,Casado = 2,Divorciado = 3,Viuvo = 4) : ");
  295.     InserirEstadoCivil(&funcionario->EstadoCivil, 1, 4);
  296.  
  297.     printf("Cargo \n"
  298.             "(Empregado = 1,Chefe = 2,Administrador = 3) : ");
  299.     InserirCargo(&funcionario->Cargo, 1, 3);
  300.  
  301.     printf("Salario por hora: ");
  302.     InserirFloat(&funcionario->SalarioPorHora, 0, 1000000);
  303.  
  304.     printf("Subsidio de Alimentacao: ");
  305.     InserirFloat(&funcionario->SubsidioAlimentacao, 0, 1000000);
  306.  
  307.     printf("Data Nascimento(dia mes ano): ");
  308.     InserirInt(&funcionario->DataNascimento.Dia, 1, 31);
  309.     InserirInt(&funcionario->DataNascimento.Mes, 1, 12);
  310.     InserirInt(&funcionario->DataNascimento.Ano, 2000, 3000);
  311.  
  312.     printf("Data de Entrada na Empresa(dia mes ano): ");
  313.     InserirInt(&funcionario->DataEntradaEmpresa.Dia, 1, 31);
  314.     InserirInt(&funcionario->DataEntradaEmpresa.Mes, 1, 12);
  315.     InserirInt(&funcionario->DataEntradaEmpresa.Ano, 2000, 3000);
  316.  
  317.  
  318.     printf("\n");
  319. }
  320.  
  321. int main(int argc, char** argv) {
  322.  
  323.     // Array dos Funcionarios atuais da empresa
  324.     InfoFuncionario *funcionarios = (InfoFuncionario*) malloc(sizeof (InfoFuncionario));
  325.     int numeroFuncionarios = 0;
  326.  
  327.     // Array dos Funcionarios Removidos da empresa
  328.     InfoFuncionario *funcionariosRemovido = (InfoFuncionario*) malloc(sizeof (InfoFuncionario));
  329.     int numeroFuncionariosRemovidos = 0;
  330.  
  331.     int codigo = 0;
  332.     char opcao;
  333.  
  334.     do {
  335.  
  336.         printf("Insira a opcao: \n"
  337.                 "Adicionar Funcionario = A \n"
  338.                 "Lista de Funcionarios = L \n"
  339.                 "Sair = S \n\n");
  340.         scanf(" %c", &opcao);
  341.         printf("\n");
  342.  
  343.         switch (opcao) {
  344.  
  345.             case 'a':
  346.             case 'A':
  347.                 // Chamar a funcao Funcionarios para Inserir um funcionario à Array dos funcionarios
  348.                 funcionarios = realloc(funcionarios, ++numeroFuncionarios * sizeof(InfoFuncionario));
  349.                 InserirFuncionario(&funcionarios[numeroFuncionarios - 1], &codigo);
  350.  
  351.                 break;
  352.  
  353.             case 'l':
  354.             case 'L':
  355.                 // Apresentar toda a lista de Funcionarios na empresa e removidos
  356.                 OpcoesListaFuncionarios(&funcionarios, &numeroFuncionarios,
  357.                         &funcionariosRemovido, &numeroFuncionariosRemovidos);
  358.                 break;
  359.         }
  360.  
  361.     } while (opcao != 's' && opcao != 'S');
  362.  
  363.     printf("%d \n",funcionarios[0].Codigo);
  364.    
  365.     SalvarFuncionarios(
  366.             funcionarios, numeroFuncionarios,
  367.             funcionariosRemovido, numeroFuncionariosRemovidos);
  368.  
  369.     free(funcionarios);
  370.     funcionarios = NULL;
  371.  
  372.     free(funcionariosRemovido);
  373.     funcionariosRemovido = NULL;
  374.  
  375.     return (EXIT_SUCCESS);
  376. }
Add Comment
Please, Sign In to add comment