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.
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.