#include #include #include #include struct Tpessoa {​​​​ int matricula; char nome[60]; float salario; int ativo; // 0 = inativo e 1 = ativo }​​​​; typedef struct Tpessoa pessoa; char menu() {​​​​ char op; // Opção escolhida printf("\n----------------------------------------------------------\n"); printf("\n1. Incluir dados de um novo funcionário\n"); printf("2. Alterar dados de um funcionário\n"); printf("3. Excluir um funcionário\n"); printf("4. Listar todos os funcionários e seus respectivos salários\n"); printf("5. Listar todos os funcionários que recebem acima de um determinado salário informado pelo usuário\n"); printf("6. Sair do programa\n\n"); printf("Escolha uma das opções acima: "); scanf(" %c", &op); return (op); }​​​​ int main() {​​​​ setlocale(LC_ALL, "portuguese"); FILE* arquivo; arquivo = fopen("agenda.txt", "b"); pessoa pessoas[100]; // Foi arbitrado um número máximo de 100 funcionários int i, matricula_corrente, ind_ult_funcionario = -1, // Quando não há funcionários cadastrados, o índice do último funcionário vale -1 achou, // 0 = falso e 1 = verdadeiro indice_corrente; char opcao, ativar; float salario_pesquisado; // Preenche todos os 100 funcionários com dados iniciais for(i = 0; i < 100; i++) {​​​​ pessoas[i].matricula = 0; strcpy(pessoas[i].nome,"funcionario_inexistente"); pessoas[i].salario = 0; pessoas[i].ativo = 0; }​​​​ opcao = menu(); while(opcao != '6') {​​​​ switch (opcao) {​​​​ case '1': if (ind_ult_funcionario == 99) {​​​​ printf("\nNão é possível inserir mais um funcionário! Solicite a atualização do sistema.\n"); }​​​​ else {​​​​ ind_ult_funcionario = ind_ult_funcionario + 1; printf("\nDigite os dados do novo funcionário:\n"); printf("Matrícula: "); scanf("%d", &pessoas[ind_ult_funcionario].matricula); printf("Nome: "); fflush(stdin); gets(pessoas[ind_ult_funcionario].nome); printf("Salário (R$): "); scanf("%f", &pessoas[ind_ult_funcionario].salario); pessoas[ind_ult_funcionario].ativo = 1; fwrite(&ind_ult_funcionario, sizeof(pessoa), 1, arquivo); }​​​​ fclose(arquivo); break; case '2': printf("\nDigite o nº de matrícula do funcionário que deseja alterar: "); scanf("%d", &matricula_corrente); i = 0; achou = 0; while(i <= ind_ult_funcionario && achou == 0) {​​​​ if (pessoas[i].matricula == matricula_corrente) {​​​​ indice_corrente = i; achou = 1; }​​​​ i = i + 1; }​​​​ if (achou == 0) {​​​​ printf("Não existe um funcionário com esse nº de matrícula!\n"); }​​​​ else {​​​​ printf("\nDados do funcionário selecionado:\n"); printf("Matrícula: %d\n", pessoas[indice_corrente].matricula); printf("Nome: %s\n", pessoas[indice_corrente].nome); printf("Salário: R$ %.2f\n", pessoas[indice_corrente].salario); if (pessoas[indice_corrente].ativo == 0) {​​​​ printf("ATENÇÃO: Funcionário inativo.\n"); }​​​​ printf("\nEntre com os dados atualizados:\n"); printf("Nome: "); fflush(stdin); gets(pessoas[indice_corrente].nome); printf("Salário (R$): "); scanf("%f", &pessoas[indice_corrente].salario); if (pessoas[indice_corrente].ativo == 0) {​​​​ printf("Deseja reativar o funcionário (s/n)? "); scanf(" %c", &ativar); }​​​​ if (ativar == 's') {​​​​ pessoas[indice_corrente].ativo = 1; }​​​​ }​​​​ break; case '3': printf("\nDigite o nº de matrícula do funcionário que deseja excluir: "); scanf("%d", &matricula_corrente); i = 0; achou = 0; while(i <= ind_ult_funcionario && achou == 0) {​​​​ if (pessoas[i].matricula == matricula_corrente) {​​​​ indice_corrente = i; achou = 1; }​​​​ i = i + 1; }​​​​ if (achou == 0) {​​​​ printf("Não existe um funcionário com esse nº de matrícula!\n"); }​​​​ else {​​​​ printf("\nDados do funcionário selecionado:\n"); printf("Matrícula: %d\n", pessoas[indice_corrente].matricula); printf("Nome: %s\n", pessoas[indice_corrente].nome); printf("Salário: R$ %.2f\n", pessoas[indice_corrente].salario); pessoas[indice_corrente].ativo = 0; printf("\nFuncionário excluído!\n"); }​​​​ break; case '4': arquivo = fopen("agenda.txt", "rb"); printf("\nLista dos funcionários (ativos e inativos): \n\n"); while(fread(&ind_ult_funcionario, sizeof(pessoa), 1, arquivo) ==1){​​​​ for (i = 0; i <= ind_ult_funcionario; i++) {​​​​ printf("Matrícula: %d\n", pessoas[i].matricula); printf("Nome: %s\n", pessoas[i].nome); printf("Salário (R$): %.2f\n", pessoas[i].salario); if (pessoas[i].ativo == 0) {​​​​ printf("ATENÇÃO: Funcionário inativo.\n"); }​​​​ printf("\n"); }​​​​ fclose(arquivo); }​​​​ break; case '5': printf("\nDigite o salário acima do qual deseja a listagem (R$): "); scanf("%f", &salario_pesquisado); printf("\nFuncionários que recebem acima de R$ %.2f\n\n", salario_pesquisado); for (i = 0; i <= ind_ult_funcionario; i++) {​​​​ if (pessoas[i].salario > salario_pesquisado & (pessoas[i].ativo == 1)) {​​​​ printf("Matrícula: %d\n", pessoas[i].matricula); printf("Nome: %s\n", pessoas[i].nome); printf("Salário: R$ %.2f\n\n", pessoas[i].salario); }​​​​ }​​​​ break; default: printf("Opção inválida.\n\n"); }​​​​ opcao = menu(); }​​​​ return 0; }​​​​