Sistema de Cadastro, Busca e Exclusão de Funcionários em C
Classificado em Grego
Escrito em em
português com um tamanho de 4,17 KB
Cadastro, busca e exclusão de funcionários
#include <stdio.h>
#include <string.h>
typedef struct {
int dia, mes, ano;
} data;
typedef struct {
int matricula;
char nome[100];
float salario;
data admissao;
} funcionario;
//variáveis globais
funcionario lista[100];
int cont = 0;
//função para buscar funcionário pelo número de matrícula
int busca(int mat) {
int indice = -1, i;
for (i = 0; i < cont; i++) {
if (mat == lista[i].matricula) {
indice = i;
}
}
return indice;
}
//função para cadastrar um novo funcionário
int cadastrar() {
int mat, ind;
if (cont <= 99) {
//cadastrar funcionários
printf("Matrícula: ");
scanf("%i", &mat);
//verificar se já existe a matrícula
ind = busca(mat);
if (ind == -1) { // retorno da função busca() == -1 --> não há a mesma matrícula no vetor
lista[cont].matricula = mat;
printf("Nome: ");
setbuf(stdin, NULL);
scanf("%99[^\n]", lista[cont].nome);
printf("Salário: ");
scanf("%f", &lista[cont].salario);
printf("Dia de admissão: ");
scanf("%i", &lista[cont].admissao.dia);
printf("Mês de admissão: ");
scanf("%i", &lista[cont].admissao.mes);
printf("Ano de admissão: ");
scanf("%i", &lista[cont].admissao.ano);
cont++;
} else { // já existe essa matrícula cadastrada
printf("Matrícula já existente");
}
} else {
printf("Impossível cadastrar novo funcionário\n Lista cheia!\n");
}
return 0;
}
//função para listar todos os funcionários cadastrados na lista
int listar() {
int i;
for (i = 0; i <= cont - 1; i++) {
printf("%i\t%s\t%.2f\t%i-%i-%i\n", lista[i].matricula, lista[i].nome, lista[i].salario, lista[i].admissao.dia, lista[i].admissao.mes, lista[i].admissao.ano);
}
return 0;
}
//função para calcular o total da folha de pagamento
float total() {
float soma = 0;
int i;
for (i = 0; i < cont; i++) {
soma += lista[i].salario;
}
return soma;
}
//função para excluir funcionário por número de matrícula
int excluir() {
int mat, ind, i;
printf("Número de matrícula para excluir: ");
scanf("%i", &mat);
ind = busca(mat);
if (ind == -1) printf("Matrícula não encontrada\n");
else if (ind == cont - 1) {
cont--;
printf("Funcionário da última posição excluído\n");
} else {
for (i = ind; i < cont - 1; i++) {
lista[i].matricula = lista[i + 1].matricula;
strcpy(lista[i].nome, lista[i + 1].nome);
lista[i].salario = lista[i + 1].salario;
lista[i].admissao.dia = lista[i + 1].admissao.dia;
lista[i].admissao.mes = lista[i + 1].admissao.mes;
lista[i].admissao.ano = lista[i + 1].admissao.ano;
}
cont--;
printf("Funcionário excluído com sucesso\n");
}
return ind;
}
int main() {
int op, ind, m;
do {
printf("1 - Cadastrar\n");
printf("2 - Listar\n");
printf("3 - Total da Folha\n");
printf("4 - Busca por Matrícula\n");
printf("5 - Excluir por Matrícula\n");
printf("0 - Sair\n");
scanf("%i", &op);
switch (op) {
case 1:
cadastrar();
break;
case 2:
listar();
break;
case 3:
printf("Total da folha de pagamento = %.2f", total());
break;
case 4:
printf("Digite a matrícula a ser buscada: ");
scanf("%i", &m);
ind = busca(m);
if (ind == -1) printf("Matrícula não encontrada!\n");
else printf("%i\t%s\n", lista[ind].matricula, lista[ind].nome);
break;
case 5:
excluir();
break;
case 0:
printf("Saindo...");
break;
default:
printf("Opção inválida!!");
}
system("pause");
system("cls"); //limpar tela
} while (op != 0);
system("PAUSE");
return 0;
}