Created
November 29, 2010 17:08
-
-
Save vitorpacheco/720225 to your computer and use it in GitHub Desktop.
trabalho_andre_001.c
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* A companhia aérea recém chegada no mercado, necessita de um programa em C | |
* para registrar e controlar a compra dos bilhetes de passagens aéreas. | |
* Considerando uma única viagem, o programa tem os seguintes requisitos: | |
* a) Mostrar tela inicial com o seguintes opções de menu : | |
* 1 - Comprar passagem | |
* O usuário informará o código do cliente que viajará e o assento | |
* desejado. Só é permitida a compra de passagem aos clientes já | |
* cadastrados. Não poderá ser vendida passagem para o mesmo | |
* assento mais de uma vez. O sistema deverá avisar caso o assento | |
* escolhido já tiver sido vendido. Caso o passageiro tenha idade | |
* inferior a 10 anos ou superior a 80, terá que ser indicado um | |
* cliente, maior que 18 anos como responsável. Um único cliente | |
* pode ser responsável por mais de um passageiro. | |
* 2 - Cadastrar Clientes | |
* No momento do cadastro, o cliente deve informar Nome, RG, data | |
* de nascimento e telefone. | |
* 3 - Visualizar ocupação | |
* O único avião da companhia possui 50 lugares, distribuídos na | |
* aeronave em 2 fileiras, aos pares. O sistema identificará o | |
* assento vendido com os caracteres "[#]" e o livre com "[_]", | |
* como segue: | |
* Fileira 1 2 25 | |
* Assentos [#] [_] [#] | |
* [#] [#] [#] | |
* Corredor | |
* Assentos [_] [#] [_] | |
* [#] [#] [#] | |
* 4 - Visualizar cliente | |
* O sistema deve solicitar do usuário parte do nome do cliente | |
* (chave de pesquisa) e mostrará os dados de todos os clientes | |
* cujo nome é iniciado pela chave, desconsiderando maiúsculas e | |
* minúsculas. | |
* 5 - Visualizar cliente por assento | |
* O sistema deve solicitar do usuário o número do assento e | |
* mostrará os dados do cliente que comprou passagem para o assento | |
* indicado, ou informar que o assento está livre. | |
* 6 - Visualizar dependentes | |
* O sistema deve mostrar os dados de todos os passageiros, menores | |
* de 10 e maiores de 80, os assentos que ocuparão e nomes de seus | |
* responsáveis. | |
* | |
* Data: 28/11/2010 | |
* Autor: André Luis Pacheco Pereira | |
*/ | |
#include <stdio.h> | |
#include <stdlib.h> | |
#include <conio.h> | |
#include <string.h> | |
#include <ctype.h> | |
// define a quantidade de acentos | |
#define ACENTOS 15 | |
// define o ano atual | |
#define ANOATUAL 2010 | |
/** | |
* Função que atribui 0 em todas as posições de um vetor passado como | |
* parâmetro. | |
*/ | |
void inicializaVetor(int *vetor){ | |
int i; | |
for(i = 1; i <= ACENTOS; ++i){ | |
vetor[i] = 0; | |
} | |
} | |
int main(){ | |
/** | |
* Variáveis gerais | |
* | |
* op = Opção do menu | |
* codCliente = codigo do cliente | |
* numAcento = numero do acento | |
* totalPesquisa = total de clientes encontrados na pesquisa | |
* codigos = contador de codigos dos clientes cadastrados | |
* resultadoPesquisa = resultado da pesquisa realizada | |
*/ | |
int op=0, codCliente=0, numAcento=0, totalPesquisa=0, codigos=1; | |
int codResponsavel=0, idadeCliente=0, i=0; | |
char *resultadoPesquisa; | |
/** | |
* Variáveis que armazenam as informações dos clientes cadastrados. | |
* | |
* nomeClientes = Nomes dos clientes | |
* RGClientes = RG dos clientes | |
* nascimentoClientes = Data de nascimento dos clientes | |
* telefonesClientes = Telefones dos clientes | |
* responsaveisClientes = Código dos responsaveis | |
*/ | |
char nomeClientes[ACENTOS][20], RGClientes[ACENTOS][10]; | |
char nascimentoClientes[ACENTOS][10], telefonesClientes[ACENTOS][8]; | |
int responsaveisClientes[ACENTOS]; | |
/** | |
* Variáveis que guardam as informações digitadas pelos usuários. | |
* | |
* nomeCliente = nome do cliente | |
* RGCliente = RG do cliente | |
* nascimentoCliente = data de nascimento do cliente | |
* telefoneCliente = telefone do cliente | |
* nomePesquisa = string digitada na pesquisa | |
*/ | |
char nomeCliente[20], RGCliente[10], nascimentoCliente[10]; | |
char telefoneCliente[8], nomePesquisa[50]; | |
/** | |
* Variável que armazena informações sobre os acentos. Se for = 0 é porque o | |
* acento ainda não foi vendido. Quando um acento é vendido é armazenado o | |
* código do cliente que o comprou. | |
*/ | |
int acentosVendidos[ACENTOS]; | |
/** | |
* Função que armazena nos arrays dos clientes cadastrados as informações | |
* que são passadas a ela. | |
*/ | |
void salvarCliente(char *nomeCliente, char *RGCliente, char *nascimentoCliente, char *telefoneCliente) { | |
// esta sendo usada a função strcpy() para fazer a cópia do conteudo de | |
// uma string para outra | |
// ex.: o conteudo da string nomeCliente esta sendo copiado para o array | |
// de strings nomeClientes na posição determinada pela variável codigos. | |
strcpy(nomeClientes[codigos], nomeCliente); | |
strcpy(RGClientes[codigos], RGCliente); | |
strcpy(nascimentoClientes[codigos], nascimentoCliente); | |
strcpy(telefonesClientes[codigos], telefoneCliente); | |
codigos++; | |
}// salvarCliente | |
/** | |
* Função que calcula a idade de uma pessoa, tendo base a data de nascimento passada | |
* como parâmetro. | |
* A data deve ser passada no padrão brasileiro. ex.: 27/10/1989 | |
* ex.: printf("%d", idade("27/10/1989")), imprime 21 | |
*/ | |
int idade(char *data) { | |
int anoNascimento = 0, i = 0, j = 0; | |
char ano[4]; | |
// pega os 4 ultimos numeros da string e guarda em outra string | |
for (i=6; i < 10; ++i) { | |
ano[j] = data[i]; | |
j++; | |
} | |
// converte a nova string em inteiro usando a função atoi() | |
anoNascimento = atoi(ano); | |
return ANOATUAL - anoNascimento; | |
}// idade | |
// Aqui são zerados os arrays de inteiros. | |
inicializaVetor(acentosVendidos); | |
inicializaVetor(responsaveisClientes); | |
do { | |
system ("cls"); | |
printf("MENU - SISTEMA COMPANHIA AEREA\n\n"); | |
printf("\t1. Comprar passagem\n"); | |
printf("\t2. Cadastrar Clientes\n"); | |
printf("\t3. Visualizar ocupacao\n"); | |
printf("\t4. Visualizar cliente\n"); | |
printf("\t5. Visualizar cliente por assento\n"); | |
printf("\t6. Visualizar dependentes\n"); | |
printf("\t7. Sair\n\n"); | |
printf("\tDigite uma opcao: "); | |
scanf("%d", &op); | |
system ("cls"); | |
fflush(stdin); | |
// Comprar passagem | |
if (op == 1) { | |
fflush(stdin); | |
printf("Comprar passagem\n\n"); | |
printf("Digite o codigo do cliente: "); | |
scanf("%d", &codCliente); | |
printf("Digite o numero do acento: "); | |
scanf("%d", &numAcento); | |
// verifica se existem alguma informação registrada com o código | |
// digitado, verifica também se o acento digitado é válido | |
if (strlen(RGClientes[codCliente]) > 0 && RGClientes[codCliente] != NULL && numAcento <= ACENTOS && numAcento > 0) { | |
// verifica se o acento já foi vendido ou não, se não foi passa, | |
// para o proximo passo que é efetuar a compra | |
if (acentosVendidos[numAcento] == 0) { | |
// calcula a idade do cliente | |
idadeCliente = idade(nascimentoClientes[codCliente]); | |
// e faz a verificação para saber se é necessário o cadastro | |
// de um responsável | |
if (idadeCliente < 10 || idadeCliente > 80) { | |
printf("Digite o codigo do responsavel do cliente: "); | |
scanf("%d", &codResponsavel); | |
responsaveisClientes[codCliente] = codResponsavel; | |
acentosVendidos[numAcento] = codCliente; | |
// caso não precise de responsável | |
} else { | |
acentosVendidos[numAcento] = codCliente; | |
} | |
printf("Compra comfirmada.\n\n"); | |
// se o acento já foi vendido | |
} else { | |
printf("Acento ja foi vendido.\n\n"); | |
} | |
} else { | |
// se o acento digitado é inválido | |
if (numAcento > ACENTOS || numAcento == 0) { | |
printf("Acento nao encontrado\n\n"); | |
// imprime caso o acento seja válido, porém o código não seja | |
// encontrado | |
} else { | |
printf("Codigo do cliente nao encontrado.\n\n"); | |
} | |
} | |
op = 0; | |
system("pause"); | |
// Cadastrar cliente | |
} else if (op == 2) { | |
fflush(stdin); | |
// pega as informações do usuário | |
printf("Cadastrar cliente\n\n"); | |
printf("Digite o nome do cliente: "); | |
gets(nomeCliente); | |
printf("Digite o RG do cliente: "); | |
gets(RGCliente); | |
printf("Digite a data de nascimento do cliente: "); | |
gets(nascimentoCliente); | |
printf("Digite o telefone do cliente: "); | |
gets(telefoneCliente); | |
// salva o clinte | |
salvarCliente(nomeCliente, RGCliente, nascimentoCliente, telefoneCliente); | |
op = 0; | |
system("pause"); | |
// Visualizar Ocupação | |
} else if (op == 3) { | |
fflush(stdin); | |
printf("Visualizar Ocupacao\n\n"); | |
// percorre todo o array de acentos | |
for (i = 1; i <= ACENTOS; ++i) { | |
// caso tenha sido vendido | |
if (acentosVendidos[i] > 0) { | |
printf("Acento %d [#]", i); | |
} else { | |
printf("Acento %d [_]", i); | |
} | |
printf("\n"); | |
} | |
op = 0; | |
system("pause"); | |
// Visualizar Cliente | |
} else if (op == 4) { | |
fflush(stdin); | |
printf("Visualizar Cliente\n\n"); | |
printf("Pesquisar: "); | |
gets(nomePesquisa); | |
totalPesquisa = 0; | |
// percorre os array que guardam as informações dos clientes | |
for (i = 1; i <= ACENTOS; ++i) { | |
// verifica com o uso da funcao strstr() se a string esta em | |
// alguma parte do nome do cliente | |
resultadoPesquisa = strstr(nomeClientes[i], nomePesquisa); | |
// caso tenha retornado alguma coisa a pesquisa | |
if (resultadoPesquisa) { | |
// incrementa o total de registros encontrados | |
totalPesquisa += 1; | |
printf("\n"); | |
printf("Nome: %s\n", nomeClientes[i]); | |
printf("RG: %s\n", RGClientes[i]); | |
printf("Data de Nascimento: %s\n", nascimentoClientes[i]); | |
printf("Telefone: %s\n", telefonesClientes[i]); | |
// caso tenha algum responsável | |
if (responsaveisClientes[i] != 0) { | |
printf("Codigo responsavel: %s\n", responsaveisClientes[i]); | |
} | |
} | |
} | |
// se não foi encontrado nenhum usuário com o nome parecido com o | |
// digitado | |
if (totalPesquisa == 0) { | |
printf("Nenhum cliente encontrado...\n"); | |
} | |
op = 0; | |
system("pause"); | |
// Visualizar cliente por assento | |
} else if (op == 5) { | |
fflush(stdin); | |
printf("Visualizar cliente por assento\n\n"); | |
printf("Digite o numero do acento: "); | |
scanf("%d", &numAcento); | |
// caso o acento digitado tenha sido vendido, as informações do | |
// cliente que a comprou é impressa | |
if (acentosVendidos[numAcento] > 0) { | |
codCliente = acentosVendidos[numAcento]; | |
printf("Nome: %s\n", nomeClientes[codCliente]); | |
printf("RG: %s\n", RGClientes[codCliente]); | |
printf("Data de Nascimento: %s\n", nascimentoClientes[codCliente]); | |
printf("Telefone: %s\n", telefonesClientes[codCliente]); | |
// caso o codigo do cliente seja encontrado no array de códigos | |
// dos responsáveis o respectivo código será impresso | |
if (responsaveisClientes[codCliente] != 0) { | |
printf("Codigo responsavel: %s\n", responsaveisClientes[codCliente]); | |
} | |
} | |
op = 0; | |
system("pause"); | |
// Visualizar dependentes | |
} else if (op == 6) { | |
fflush(stdin); | |
printf("Visualizar dependentes\n\n"); | |
// percorre todo o array de reponsaveis | |
for (i = 1; i <= ACENTOS; ++i) { | |
// caso seja diferente de zero o valor encontrado, quer dizer | |
// que tem um responsável, então as informações do cliente são | |
// impressas. | |
if (responsaveisClientes[i] != 0) { | |
printf("Nome: %s\n", nomeClientes[i]); | |
printf("RG: %s\n", RGClientes[i]); | |
printf("Data de Nascimento: %s\n", nascimentoClientes[i]); | |
printf("Telefone: %s\n", telefonesClientes[i]); | |
// como no array de responsaveis é guardado o codigo do | |
// cliente responsável, pode ser feita a impressao | |
// diretamente pelo array de nomes de clientes | |
printf("Nome do responsavel: %s\n", nomeClientes[responsaveisClientes[codCliente]]); | |
} | |
} | |
op = 0; | |
system("pause"); | |
} | |
} while (op != 7); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment