Eu tenho uma struct em meu código representado logo abaixo:
typedef struct
{
char nome[30];
int funcao;
int idade;
float salario;
} funcionario_struct;
E eu faço duas operações com essa struct, a primeira é adicionar um novo funcionário ao array de funcionario_struct, para isso eu pego informações digitadas pelo funcionario, peço, nome, função, idade e salário.
A funcao, é do tipo inteiro, que pode variar de 1 a 4, representado as funções desse funcionario: pode ser engenheiro = 1, arquiteto = 2, mestre de obra = 3 e pedreiro = 4, como no exemplo do código abaixo:
void adicionar_funcionaro(funcionario_struct funcionarios[])
{
if (MAX_FUNCIONARIOS <= qtd_funcionarios_adicionados)
{
mensagem_error_geral("Quantidade máxima de funcionarios cadastrados.");
}
else
{
printf("Digite o nome do novo funcionario: ");
while (getchar() != '\n')
;
scanf("%50[0-9a-zA-Z ]", funcionarios[qtd_funcionarios_adicionados].nome);
while (getchar() != '\n')
;
printf("Digite a idade do novo funcionario: ");
scanf("%d", &funcionarios[qtd_funcionarios_adicionados].idade);
printf("Digite o salário do novo funcionario: ");
scanf("%f", &funcionarios[qtd_funcionarios_adicionados].salario);
int funcao = -1;
while(funcao != 1 && funcao !=2 && funcao !=3){
system("clear");
verde();
printf("/*/\n\n");
printf("/* Digite o número correto para cadastrar a função do funcionario */\n\n");
printf(" 1.Engenheiro\n 2.Arquiteto\n 3.Mestre de Obra\n 4.Pedreiro.\n\n");
printf("/*/\n\n");
reset();
printf("Digite a função do novo funcionario: ");
scanf("%d", &funcao);
}
funcionarios[qtd_funcionarios_adicionados].funcao = funcao;
system("clear");
printf("\nO funcionario foi adicionado com sucesso.\n");
qtd_funcionarios_adicionados++;
}
}
A outra operação dar um aumento de salario para um tipo de função. Exemplo, o usuário digita um inteiro de 1 a 4, e eu faço uma busca no meu array de funcionario, se por acaso eu achar um funcionario que tenha a mesma função que a digitada pelo usuário, eu coloco uma porcentagem de aumento ao salário, como mostra no código abaixo:
void dar_aumento_funcionario(funcionario_struct funcionarios[]) {
if(qtd_funcionarios_adicionados < 0) {
mensagem_error_geral("Nenhum funcionário adicionado no momento...");
}else{
verde();
printf("/*********************************************************************/\n\n");
printf("/* Digite o número da função dos funcionários a ganhar aumento */\n\n");
printf(" 1.Engenheiro\n 2.Arquiteto\n 3.Mestre de Obra\n 4.Pedreiro.\n\n");
printf("/*********************************************************************/\n\n");
reset();
printf("Digite a função do novo funcionario: ");
int funcao;
scanf("%d", &funcao);
float porcentagem_aumento;
printf("Porcentagem de aumento ");
vermelho();
printf(" (Não digite o símbolo %%) ");
reset();
printf(": ");
scanf("%f", &porcentagem_aumento);
system("clear");
for(int i = 0; i < qtd_funcionarios_adicionados; i++){
if(funcionarios[i].funcao == funcao){
amarelo();
printf("O salario antigo de %s é: %.2f ", funcionarios[i].nome, funcionarios[i].salario);
funcionarios[i].salario = funcionarios[i].salario * ( 1 + ( porcentagem_aumento / 100.00 ));
printf("O salario atual é: %.2f\n", funcionarios[i].salario);
reset();
}
}
}
}
As dúvida são:
- Como definir um tipo enum para fazer essa listagem;
- Como adicionar esse enum dentro da struct substituindo o int funcao;
- Como ficaria a adição de um novo funcionario ao meu array funcionarios;
- Como eu faria essa verificaçao na função de aumento.