Uma empresa deseja desenvolver um sistema que contém os dados de seus funcionários. O cadastro de cada um deles deve conter os seguintes campos: nome, endereço, telefone, e-mail, data de aniversário (dia, mês e ano), ano de chegada à empresa e um campo para possíveis observações. Desenvolva um sistema para a agenda proposta com um menu para executar cada uma das seguintes ações:
a. Ler a quantidade de funcionários;
b. Cadastrar os funcionários;
c. Imprimir uma lista com os dias de nascimento dos funcionários nascidos em um mês desejado;
d. Imprimir o nome e o telefone dos funcionários com uma quantidade específica de anos de empresa;
e. Imprimir o funcionário que possui o campo de observações com preenchimento mais extenso;
f. Verificar se o e-mail de um funcionário possui o caractere ‘@’ e a string “.com”;
g. Imprimir os dados de todos os funcionários.

Passo 1

Resumindo o enunciado, precisamos criar um cadastro de funcionários contendo os campos nome, endereço, telefone, e-mail, data de aniversário (dia, mês e ano), ano de chegada e observações. Vamos implementar em C usando um struct para representar cada funcionário e um vetor (dinâmico) para armazenar todos. O menu principal vai controlar as ações de (a) a (g).

Passo 2

Definimos o tipo de dado para o funcionário e variáveis auxiliares:
typedef struct {
 char nome[100];
 char endereco[150];
 char telefone[20];
 char email[100];
 int diaAniv;
 int mesAniv;
 int anoAniv;
 int anoChegada;
 char obs[200];
} Funcionario;

Funcionario *vetor = NULL;
int nFuncionarios \(=0\);
Aqui vetor será alocado após sabermos nFuncionarios.

Passo 3

Implementamos a leitura da quantidade de funcionários (opção a) e alocação do vetor:
printf("Quantos funcionarios? ");
scanf("%d", &nFuncionarios);
vetor = malloc(nFuncionarios * sizeof(Funcionario));

Passo 4

Fazemos o cadastro (opção b) percorrendo o vetor e lendo cada campo:
for(int i \(=0\); i < nFuncionarios; i\(++\)) {
 printf("Funcionario %d
", i\(+1\));
 printf("Nome: "); scanf(" %[^
]", vetor[i].nome);
 printf("Endereco: "); scanf(" %[^
]", vetor[i].endereco);
 printf("Telefone: "); scanf(" %[^
]", vetor[i].telefone);
 printf("Email: "); scanf(" %[^
]", vetor[i].email);
 printf("Data Aniv (d m a): ");
 scanf("%d %d %d", &vetor[i].diaAniv, &vetor[i].mesAniv, &vetor[i].anoAniv);
 printf("Ano de chegada: ");
 scanf("%d", &vetor[i].anoChegada);
 printf("Observacoes: "); scanf(" %[^
]", vetor[i].obs);
}

Passo 5

Para imprimir aniversariantes de um mês desejado (opção c):
int mesDesejado;
printf("Mes desejado: ");
scanf("%d", &mesDesejado);
printf("Aniversariantes do mes %d:
", mesDesejado);
for(int i \(=0\); i < nFuncionarios; i\(++\)) {
 if (vetor[i].mesAniv \(==\) mesDesejado) {
 printf("%s: dia %d
", vetor[i].nome, vetor[i].diaAniv);
 }
}

Passo 6

Para imprimir nome e telefone de quem tem um número específico de anos de empresa (opção d), assumindo que temos o ano atual em anoAtual:
int anosDesejados, anoAtual \(=2023\);
printf("Quantidade de anos de empresa: ");
scanf("%d", &anosDesejados);
printf("Funcionarios com %d anos de empresa:
", anosDesejados);
for(int i \(=0\); i < nFuncionarios; i\(++\)) {
 int anos = anoAtual - vetor[i].anoChegada;
 if (anos \(==\) anosDesejados) {
 printf("%s - %s
", vetor[i].nome, vetor[i].telefone);
 }
}

Passo 7

Para encontrar quem tem a observação mais extensa (opção e):
int idxMax \(=0\);
\(size_t\) tamMax = strlen(vetor[0].obs);
for(int i \(=1\); i < nFuncionarios; i\(++\)) {
 \(size_t\) tam = strlen(vetor[i].obs);
 if (tam > tamMax) {
 tamMax = tam;
 idxMax = i;
 }
}
printf("Obs mais extensa pertence a %s:
\"%s\"
",
 vetor[idxMax].nome, vetor[idxMax].obs);

Passo 8

Para verificar se o e-mail de um funcionário (pode ser pesquisado por índice ou nome) possui '@' e a string ".com" (opção f):
int idx;
printf("Indice do funcionario para ver email: ");
scanf("%d", &idx);
// supondo 0 <= idx < nFuncionarios
if (strchr(vetor[idx].email, '@') != NULL &&
 strstr(vetor[idx].email, ".com") != NULL) {
 printf("Email valido.
");
} else {
 printf("Email invalido.
");
}

Passo 9

Para imprimir todos os dados de todos os funcionários (opção g):
for(int i \(=0\); i < nFuncionarios; i\(++\)) {
 Funcionario *f = &vetor[i];
 printf("---- Funcionario %d ----
", i\(+1\));
 printf("Nome: %s
", f->nome);
 printf("Endereco: %s
", f->endereco);
 printf("Telefone: %s
", f->telefone);
 printf("Email: %s
", f->email);
 printf("Aniversario: %02d/%02d/%04d
",
 f->diaAniv, f->mesAniv, f->anoAniv);
 printf("Ano de chegada: %d
", f->anoChegada);
 printf("Observacoes: %s
", f->obs);
}

Resposta

Acima está o esqueleto em C de um programa com menu que executa as ações (a) a (g) para gerenciar o cadastro de funcionários.

Exercícios relacionados