Skip to content

Instantly share code, notes, and snippets.

@vitorpacheco
Created November 29, 2010 17:08
Show Gist options
  • Save vitorpacheco/720225 to your computer and use it in GitHub Desktop.
Save vitorpacheco/720225 to your computer and use it in GitHub Desktop.
trabalho_andre_001.c
/**
* 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