Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * To change this license header, choose License Headers in Project Properties.
- * To change this template file, choose Tools | Templates
- * and open the template in the editor.
- */
- /*
- * File: main.c
- * Author: renat
- *
- * Created on 5 de dezembro de 2020, 22:50
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include "EstruturaDados..h"
- #include "Auxiliar..h"
- #define NUM_MAX_FUNCIONARIOS_ 100
- #define NUM_MAX_FUNCIONARIOS_REMOVIDOS 100
- #define FUNCIONARIOS "Funcionarios.txt"
- void SalvarFuncionarios(InfoFuncionario* funcionarios, int numFuncionarios,
- InfoFuncionario funcionariosRemovidos[], int numFuncionariosRemovidos) {
- FILE* fFuncionarios = (FILE*) malloc(sizeof (FILE));
- fFuncionarios = fopen(FUNCIONARIOS, "w");
- printf("%d",funcionarios[0].Codigo);
- for (int i = 0; i < numFuncionarios; i++) {
- fprintf(fFuncionarios, "%d %s \n", funcionarios[i].Codigo, funcionarios[i].Nome);
- }
- fclose(fFuncionarios);
- }
- // Apresentar todas as informacoes do Funcionario inserido
- void InformacoesFuncionario(InfoFuncionario funcionario) {
- printf("\n\n");
- printf("Codigo: %d \n", funcionario.Codigo);
- printf("Nome: %s \n", funcionario.Nome);
- printf("Numero Telefone: %d \n", funcionario.NumeroTelefone);
- printf("Numero de Filhos: %d \n", funcionario.NumeroDeFilhos);
- ApresentarEstadocivil(funcionario.EstadoCivil);
- ApresentarCargo(funcionario.Cargo);
- printf("Salario Base por Hora: %.2f \n", funcionario.SalarioPorHora);
- printf("Subsidio de Alimentacao: %.2f \n", funcionario.SubsidioAlimentacao);
- printf("Data de Nascimento: %d %d %d \n",
- funcionario.DataNascimento.Dia,
- funcionario.DataNascimento.Mes,
- funcionario.DataNascimento.Ano);
- printf("Data de Entrada na Empresa: %d %d %d \n",
- funcionario.DataEntradaEmpresa.Dia,
- funcionario.DataEntradaEmpresa.Mes,
- funcionario.DataEntradaEmpresa.Ano);
- }
- // Editar um funcionario inserido
- InfoFuncionario EditarFuncionario(InfoFuncionario funcionario) {
- int opcao;
- printf("\n"
- "Qual Parte deseja editar ? \n"
- "Nome = 1 \n"
- "Numero Telefone = 2 \n"
- "Numero de Filhos = 3 \n"
- "Estado Civil = 4 \n"
- "Cargo = 5 \n"
- "Salario Base por Hora= 6 \n"
- "Subsidio de Alimentacao = 7 \n"
- "Data de Nascimento = 8 \n"
- "Data de entrada na empresa = 9 \n"
- "Sair = Qualquer outro numero \n");
- scanf("%d", &opcao);
- printf("\n");
- // Editar o Funcionar conforme a opcao escolhida em cima
- switch (opcao) {
- case 1:
- printf("Nome: ");
- scanf(" %s", funcionario.Nome);
- break;
- case 2:
- printf("Numero de telefone: ");
- InserirInt(&funcionario.NumeroTelefone, 100000000, 1000000000);
- break;
- case 3:
- printf("Numero de filhos: ");
- InserirInt(&funcionario.NumeroDeFilhos, 0, 500);
- break;
- case 4:
- printf("Estado Civil \n"
- "(Solteiro = 1,Casado = 2,Divorciado = 3,Viuvo = 4) : ");
- InserirEstadoCivil(&funcionario.EstadoCivil, 1, 4);
- break;
- case 5:
- printf("Cargo \n"
- "(Empregado = 1,Chefe = 2,Administrador = 3) : ");
- InserirCargo(&funcionario.Cargo, 1, 3);
- break;
- case 6:
- printf("Salario por hora: ");
- InserirFloat(&funcionario.SalarioPorHora, 0, 1000000);
- break;
- case 7:
- printf("Subsidio de Alimentacao: ");
- InserirFloat(&funcionario.SubsidioAlimentacao, 0, 1000000);
- break;
- case 8:
- printf("Data Nascimento(dia mes ano): ");
- InserirInt(&funcionario.DataNascimento.Dia, 1, 31);
- InserirInt(&funcionario.DataNascimento.Mes, 1, 12);
- InserirInt(&funcionario.DataNascimento.Ano, 2000, 3000);
- break;
- case 9:
- printf("Data de Entrada na Empresa(dia mes ano): ");
- InserirInt(&funcionario.DataEntradaEmpresa.Dia, 1, 31);
- InserirInt(&funcionario.DataEntradaEmpresa.Mes, 1, 12);
- InserirInt(&funcionario.DataEntradaEmpresa.Ano, 2000, 3000);
- break;
- }
- printf("\n");
- return funcionario;
- }
- // Apresentar todos os funcionarios
- void ListaFuncionarios(InfoFuncionario *funcionarios, int numeroFuncionarios) {
- if (numeroFuncionarios > 0) {
- printf("\n\n"
- "----------Funcionarios------------ "
- "\n\n");
- for (int i = 0; i < numeroFuncionarios; i++) {
- printf("Codigo : %5d Nome : %s \n", funcionarios[i].Codigo, funcionarios[i].Nome);
- }
- }
- }
- // Apresentar todos os funcionarios removidos
- void ListaFuncionariosRemovidos(InfoFuncionario funcionariosRemovidos[], int numeroFuncionariosRemovidos) {
- if (numeroFuncionariosRemovidos > 0) {
- printf("\n\n"
- "----------Funcionarios Removidos------------ "
- "\n\n");
- for (int i = 0; i < numeroFuncionariosRemovidos; i++) {
- printf("Codigo : %5d Nome : %s \n", funcionariosRemovidos[i].Codigo, funcionariosRemovidos[i].Nome);
- }
- }
- }
- // Mostrar as opcoes na lista de funcionarios (Selecionar Alterar Remover)
- void OpcoesListaFuncionarios(InfoFuncionario **funcionarios, int *numeroFuncionarios,
- InfoFuncionario **funcionariosRemovido, int *numeroFuncionariosRemovidos) {
- int codigoDigitado;
- char editar;
- int IndiceFuncionario;
- // Apresentar a Lista de Funcionarios na Empresa
- ListaFuncionarios(*funcionarios, *numeroFuncionarios);
- // Opcao de Selecionar algum funcionario ou voltar para o Menu
- printf("\n"
- "Se Deseja Selecionar Algum Funcionario Digite o seu Codigo \n"
- "Se Deseja Voltar atras Digite -1 \n"
- "Se Deseja Ver os Funcionarios Removidos -2 \n");
- scanf("%d", &codigoDigitado);
- printf("\n");
- // Arranjar isto **********************************************************
- while (1 == 1) {
- // Se nao quer voltar para o menu
- if (codigoDigitado == -1) {
- break;
- } else if (codigoDigitado == -2) {
- // Apresentar a Lista de Funcionarios Removidos
- ListaFuncionariosRemovidos(*funcionariosRemovido, *numeroFuncionariosRemovidos);
- break;
- } else {
- // Verificar se tem e qual é o funcionario com codigo igual ao inserido;
- IndiceFuncionario = VerificarFuncionario(*funcionarios, codigoDigitado, *numeroFuncionarios);
- if (IndiceFuncionario != -1) {
- // Apresentar todas as informacoes do funcionario escolhido
- InformacoesFuncionario((*funcionarios)[IndiceFuncionario]);
- printf("\n"
- "Deseja fazer alguma alteracao ? \n"
- "Editar Funcionario = E \n"
- "Remover = R \n"
- "Sair outra tecla qualquer \n");
- scanf(" %c", &editar);
- printf("\n");
- if (editar == 'e' || editar == 'E') {
- // Editar o funcionario escolhido
- (*funcionarios)[IndiceFuncionario] = EditarFuncionario((*funcionarios)[IndiceFuncionario]);
- break;
- } else if (editar == 'r' || editar == 'R') {
- // Mover o funcionario para a array de Funcionarios Removidos
- *funcionariosRemovido = (InfoFuncionario*)
- realloc(*funcionariosRemovido, ++(*numeroFuncionariosRemovidos));
- (*funcionariosRemovido)[*numeroFuncionariosRemovidos - 1] = (*funcionarios)[IndiceFuncionario];
- (*numeroFuncionarios)--;
- // Mover todos os funcionarios que estavam a frente do funcionario removido
- // um espaço para trás para ocupar o espaço do funcionario removido
- for (int u = IndiceFuncionario; u < *numeroFuncionarios; u++) {
- (*funcionarios)[u] = (*funcionarios)[u + 1];
- }
- break;
- } else {
- break;
- }
- }// o codigo inserido está incorreto é pedido outro codigo ou a opcao de sair
- else {
- printf("\n"
- "O Codigo inserido está incorreto \n"
- "Insire outro codigo ou -1 para voltar \n");
- scanf("%d", &codigoDigitado);
- printf("\n");
- // Se o codigo é diferente de -1 volta a testar toda a array de funcionarios
- if (codigoDigitado == -1) {
- break;
- }
- // Se o codigo é diferente de -1 volta para o incio
- // para verificar se tem um codigo igual ao inserido
- }
- }
- }
- }
- // Funcao Responsavel por adicionar um funcionario a Array de Funcionairos
- void InserirFuncionario(InfoFuncionario* funcionario, int *codigo) {
- funcionario->Codigo = ++(*codigo);
- printf("Nome: ");
- scanf(" %s", funcionario->Nome);
- printf("Numero de telefone: ");
- InserirInt(&funcionario->NumeroTelefone, 100000000, 1000000000);
- printf("Numero de filhos: ");
- InserirInt(&funcionario->NumeroDeFilhos, 0, 500);
- printf("Estado Civil \n"
- "(Solteiro = 1,Casado = 2,Divorciado = 3,Viuvo = 4) : ");
- InserirEstadoCivil(&funcionario->EstadoCivil, 1, 4);
- printf("Cargo \n"
- "(Empregado = 1,Chefe = 2,Administrador = 3) : ");
- InserirCargo(&funcionario->Cargo, 1, 3);
- printf("Salario por hora: ");
- InserirFloat(&funcionario->SalarioPorHora, 0, 1000000);
- printf("Subsidio de Alimentacao: ");
- InserirFloat(&funcionario->SubsidioAlimentacao, 0, 1000000);
- printf("Data Nascimento(dia mes ano): ");
- InserirInt(&funcionario->DataNascimento.Dia, 1, 31);
- InserirInt(&funcionario->DataNascimento.Mes, 1, 12);
- InserirInt(&funcionario->DataNascimento.Ano, 2000, 3000);
- printf("Data de Entrada na Empresa(dia mes ano): ");
- InserirInt(&funcionario->DataEntradaEmpresa.Dia, 1, 31);
- InserirInt(&funcionario->DataEntradaEmpresa.Mes, 1, 12);
- InserirInt(&funcionario->DataEntradaEmpresa.Ano, 2000, 3000);
- printf("\n");
- }
- int main(int argc, char** argv) {
- // Array dos Funcionarios atuais da empresa
- InfoFuncionario *funcionarios = (InfoFuncionario*) malloc(sizeof (InfoFuncionario));
- int numeroFuncionarios = 0;
- // Array dos Funcionarios Removidos da empresa
- InfoFuncionario *funcionariosRemovido = (InfoFuncionario*) malloc(sizeof (InfoFuncionario));
- int numeroFuncionariosRemovidos = 0;
- int codigo = 0;
- char opcao;
- do {
- printf("Insira a opcao: \n"
- "Adicionar Funcionario = A \n"
- "Lista de Funcionarios = L \n"
- "Sair = S \n\n");
- scanf(" %c", &opcao);
- printf("\n");
- switch (opcao) {
- case 'a':
- case 'A':
- // Chamar a funcao Funcionarios para Inserir um funcionario à Array dos funcionarios
- funcionarios = realloc(funcionarios, ++numeroFuncionarios * sizeof(InfoFuncionario));
- InserirFuncionario(&funcionarios[numeroFuncionarios - 1], &codigo);
- break;
- case 'l':
- case 'L':
- // Apresentar toda a lista de Funcionarios na empresa e removidos
- OpcoesListaFuncionarios(&funcionarios, &numeroFuncionarios,
- &funcionariosRemovido, &numeroFuncionariosRemovidos);
- break;
- }
- } while (opcao != 's' && opcao != 'S');
- printf("%d \n",funcionarios[0].Codigo);
- SalvarFuncionarios(
- funcionarios, numeroFuncionarios,
- funcionariosRemovido, numeroFuncionariosRemovidos);
- free(funcionarios);
- funcionarios = NULL;
- free(funcionariosRemovido);
- funcionariosRemovido = NULL;
- return (EXIT_SUCCESS);
- }
Add Comment
Please, Sign In to add comment