Buscar

Prova com Gab - 3ºEE

Prévia do material em texto

Observações gerais: 
1) Preencher os dados do cabeçalho do bloco de provas e na folha de questões o nome e a turma; 
2) Ao final da prova entregar ao professor ou fiscal a folha de questões e o caderno de prova; 
3) Cada quesito vale cinco pontos. 
 
1º quesito: Uma empresa de recrutamento deseja criar um programa para armazenar os candidatos a uma 
seleção para dois tipos de vagas: i) desenvolvedor ou ii) advogado. As informações dos candidatos são lidas 
do usuário e inicialmente para um vetor de estruturas e posteriormente armazenados em dois arquivos 
binários distintos que existem no computador: "advogados.bin" e "desenvolvedores.bin". As estruturas dos 
arquivos e o vetor de estrutura encontram-se abaixo. Escreva um programa em C, o qual deve conter: 
a) Uma função void preencherCandidatos(Candidato vetor[], int tamanho) que irá ler as informações 
dos candidatos via teclado e armazenar os dados em um vetor recebido como parâmetro; 
b) Uma função void armazenarCandidatos(Candidato vetor[], int tamanho) que recebe o vetor 
preenchido e adiciona no fim do arquivo correspondente ao tipo de vaga os candidatos que podem começar 
no emprego de forma imediata. Caso o candidato possa iniciar no emprego imediatamente o valor do campo 
Imediato será 1, caso contrário 0. Caso seja um advogado, o campo OAB estará preenchido, caso contrário, 
o campo estará vazio e representará um desenvolvedor. 
O programa principal deverá: 
1. Solicitar ao usuário a quantidade candidatos que deseja ler. Essa quantidade deverá ser utilizada para 
criar dinamicamente o vetor de candidatos (como não se sabe inicialmente a quantidade de 
candidatos deve ser utilizada alocação dinâmica de memória); 
2. Em seguida, chamar a função preencherCandidatos para preencher o vetor; 
3. Finalmente, chamar a função armazenarCandidatos para salvar os candidatos nos respectivos 
arquivos. Os candidatos com Imediato 0 devem ser desconsiderados. 
4. Após armazenar os registros no arquivo “advogados.bin” o arquivo deve ser aberto novamente e 
permitir que o usuário pesquise e imprima na tela os dados dos candidatos à vaga de advogado a 
partir do CPF digitado. Para isso, deve ser solicitado que o usuário digite o CPF a ser pesquisado e o 
mesmo será utilizado para localizar a posição do candidato no arquivo. Caso o CPF seja encontrado 
entre os candidatos, sua posição no arquivo e seus dados de cadastro devem ser impressos na tela. 
Se o CPF não existir no arquivo, uma mensagem indicativa deve ser impressa na tela. 
Estrutura tipo candidato 
 
 
 
 
Estrutura ‘desenvolvedores.bin’ Estrutura ‘advogados.bin’ 
 
*Use a função abaixo para comparar e fazer cópia de strings. 
char *strcpy(char *dest, const char *src) 
 Copia o conteúdo de uma string para outra 
 dest – ponteiro para o array que receberá a string copiada 
 src – ponteiro para a string cujo conteúdo será copiado para dest 
 
int strcmp ( const char * str1, const char * str2 ); 
 Compara o array str1 com o array str2 
 
 O valor de retorno é: 
 - menor que zero se str1 for menor que str2; 
 - igual a zero se str1 e str2 são iguais; 
 - maior que zero se str1 for maior que str2. 
 
Nome Telefone CPF OAB Endereço Imediato 
String (30) String (8) String (11) Inteiro Rua Número Cep Inteiro 
 String (30) Inteiro String (9) 
ÁREA II – CCEN / UFPE 
Disciplina: IF 165 – Computação Eletrônica – 3º Exercício Escolar 2014.2 Data: 27/01/ 2015 
Nome legível do aluno: ...................................GABARITO......................................... Turma ......... 
 
 
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
 
// estrutura dos arquivos e vetor 
typedef struct endereco{ 
 char rua[31]; 
 int numero; 
 char cep[9]; 
} ENDERECO; 
 
typedef struct candidato{ 
 char nome[31]; 
 char telefone[9]; 
 char cpf[12]; 
 int oab; 
 ENDERECO endereco; 
 int imediato; 
} Candidato; 
 
typedef struct desenvolvedores{ 
 char nome[31]; 
 char telefone[9]; 
 char cpf[12]; 
 ENDERECO endereco; 
} Desenvolvedor; 
 
typedef struct advogados{ 
 char nome[31]; 
 char telefone[9]; 
 char cpf[12]; 
 int oab; 
 ENDERECO endereco; 
} Advogado; 
 
void preencherCandidatos(Candidato vetor[], int tamanho); 
void armazenarCandidatos(Candidato vetor[], int tamanho); 
 
int main() 
{ 
 int qtCand; 
 Candidato* candidatos; 
 do{ 
 printf("digite a quantidade de candidatos:"); 
 scanf("%d",&qtCand); 
 }while(qtCand <= 0); 
 
 // alocacao da memoria 
 candidatos = (Candidato*) malloc(qtCand*sizeof(Candidato)); 
 
 // leitura dos dados 
 preencherCandidatos(candidatos,qtCand); 
 
 // armazenamento nos arquivos 
 armazenarCandidatos(candidatos,qtCand); 
 
 // limpeza da memoria 
 free(candidatos); 
 
 // localizacao do candidato 
 char cpf[12]; int loc = 0; Advogado adv; 
 printf("digite o CPF do candidato %d:"); 
 scanf(" %11[^\n]",&cpf); 
 FILE* fAdv = fopen("advogados.bin","ab"); 
 if(fAdv != NULL) 
 { 
 while (!feof(fAdv)){ 
 fread(&adv, sizeof(Advogado), 1 ,fAdv); 
 if (strcmp(adv.cpf,cpf)==0){ 
 printf("dados do candidato solicitado:"); 
 printf("\nnome do candidato: %s:",adv.nome); 
 printf("\ntelefone do candidato: %s:",adv.telefone); 
 printf("\nCPF do candidato: %s:",adv.cpf); 
 printf("\noab do candidato: %d ",adv.oab); 
 printf("\nnome da rua do candidato %s:",adv.endereco.rua); 
 printf("\nnumero da residencia do candidato %d:",adv.endereco.numero); 
 printf("\nCEP do candidato %s:",adv.endereco.cep); 
 printf("\nposicao do registro no arquivo: %d", ftell(fAdv)-1); 
 loc = 1; 
 break; 
 } 
 } 
 } 
 if (loc == 0){ 
 printf("o CPF solicitado não foi encontrado no arquivo!"); 
 } 
 fclose(fAdv); 
 
 
 return 0; 
} 
 
 
void armazenarCandidatos(Candidato vetor[], int tamanho) 
{ 
 FILE* fDesenv = fopen("desenvolvedores.bin","ab"); 
 FILE* fAdv = fopen("advogados.bin","ab"); 
 
 Desenvolvedor desenv; 
 Advogado adv; 
 
 if(fDesenv == NULL || fAdv == NULL) 
 { 
 printf("\nerro na abertura dos arquivos!"); 
 exit(1); 
 } 
 
 int indCand; 
 for(indCand = 0; indCand < tamanho; indCand++) 
 { 
 if(vetor[indCand].imediato == 0) 
 continue; 
 
 if(vetor[indCand].oab == 1) 
 { 
 strcpy(adv.nome,vetor[indCand].nome); 
 strcpy(adv.telefone,vetor[indCand].telefone); 
 strcpy(adv.cpf,vetor[indCand].cpf); 
 adv.oab = 1; 
 adv.endereco=vetor[indCand].endereco; 
 fwrite(&adv,sizeof(Advogado),1,fAdv); 
 }else{ 
 strcpy(desenv.cpf,vetor[indCand].cpf); 
 desenv.endereco=vetor[indCand].endereco; 
 strcpy(desenv.nome,vetor[indCand].nome); 
 strcpy(desenv.telefone,vetor[indCand].telefone); 
 fwrite(&desenv,sizeof(Desenvolvedor),1,fDesenv); 
 } 
 } 
 fclose(fAdv); 
 fclose(fDesenv); 
} 
 
void preencherCandidatos(Candidato vetor[], int tamanho) 
{ 
 int indCand; 
 for(indCand = 0; indCand < tamanho; indCand++) 
 { 
 printf("\ndigite o nome do candidato %d:",indCand+1); 
 scanf(" %30[^\n]",vetor[indCand].nome); 
 printf("\ndigite o telefonedo candidato %d:",indCand+1); 
 scanf(" %8[^\n]",vetor[indCand].telefone); 
 printf("\ndigite o CPF do candidato %d:",indCand+1); 
 scanf(" %11[^\n]",vetor[indCand].cpf); 
 printf("\ndigite numero da oab caso o candidato seja um advogado",indCand+1); 
 scanf("%d",&vetor[indCand].oab); 
 printf("\ndigite o nome da rua do candidato %d:",indCand+1); 
 scanf(" %29[^\n]",vetor[indCand].endereco.rua); 
 printf("\ndigite o numero da residencia do candidato %d:",indCand+1); 
 scanf("%d",&vetor[indCand].endereco.numero); 
 printf("\ndigite o CEP do candidato %d:",indCand+1); 
 scanf(" %9[^\n]",vetor[indCand].endereco.cep); 
 printf("\ncandidato imediato? (1-SIM/0-NAO):",indCand+1); 
 scanf("%d",&vetor[indCand].imediato); 
 } 
}

Continue navegando