Escolar Documentos
Profissional Documentos
Cultura Documentos
Concluses
Como podemos acompanhar na leitura dos textos propostos, chegamos a algumas
concluses sobre determinados temas discutidos na matria.
Alocao de memria nada mais do que o processo de reservar (utilizar) um espao
de memria durante a execuo de um determinado programa, a alocao de memria
pode ser esttica ou dinmica, dependendo das necessidades do programa.
Ponteiros em C, so variveis que tem como valor o endereo de memria de outras
variveis, ele utilizado para fazer referencia ao endereo nele contido.
Estruturas. Quando se pensa em Estruturas, voc est pensando em um tipo de varivel
(ou dado) que guarde consigo vrios tipos de informaes relacionadas. Ou seja um
dado do tipo calendrio, que possa ser capaz de armazenar dias, meses e anos em
formato Inteiro, e tambm o nome dos meses e dias da semana em formato String. Na
prtica voc cria uma referencia a uma estrutura, e dentro dela voc ter as variveis de
tipo primitivo que guardaro as informaes inerentes aquele tipo de dado.
Vetores nada mais so do que uma sequencia de vrios valores de um mesmo tipo, por
exemplo do tipo inteiro. A ideia se usar os vetores toda vez que voc tiver que guardar
uma sequencia de informaes de um mesmo tipo, ao invs de se declarar inmeras
variveis para armazenar os valores, voc cria um vetor e armazena suas informaes
dentro deste vetor.
Strings de caracteres, so vetores do tipo char, que so usados para guardar uma cadeia
de caracteres, que podem formar palavras ou textos. O ultimo caractere de uma string
o caractere especial \0, que indica para o programa que a string acabou, mesmo que o
vetor contenha espao para mais caracteres. Na biblioteca String.h, existem vrias
funes para o tratamento das string, funes que vo desde retornar o tamanho da
string, copiar o contedo da string A para a string B, como tambm converter uma
string, em inteiro ou float, entre outros.
Programa 1.0
Descrio
Como foi proposto no passo 3 da 1 etapa, foi desenvolvido um programa em C, que
implementasse uma estrutura nominada avio, com os seguintes campos: Modelo,
Fabricante, Passageiros, Comprimento, Altura, Velocidade, Altitude, Motor.
O programa deveria ser capaz de cadastrar os dados na estrutura, e posteriormente fazer
a leitura dos dados cadastrados. Para tal foi desenvolvido um programa em forma de
menu com 3 opes: cadastrar novos avies, exibir os avies cadastrados e encerrar o
programa. O menu funciona atravs da leitura da opo do usurio pela funo Scanf,
que armazena a opo digitada em uma varivel Op, atravs do desvio condicional
(switch) os comandos relacionados a opo escolhida so executados.
O que existe de mais notvel neste simples programa, o a aplicao de 3 funes (que
so muito semelhantes entre si), criadas para tornar o programa mais seguro. A estas
funes foram dados os nomes CapturarS, CapturarI, CapturarF; suas atribuies so
respectivamente: Capturar uma String digitada pelo usurio, podendo o programador
definir o limite mximo de caracteres aceitos. Capturar em formato de string, nmeros
digitados pelo usurio, e retorn-los em formato de Inteiros, podendo o programador
determinar o limite mximo de dgitos aceitos. Capturar em formato de string, nmeros
digitados pelo usurio, e retorn-los em formado de Float, podendo o usurio utilizar a
vrgula no lugar do ponto, ou vice e versa, e tambm ficando a critrio do programador
o nmero mximo de dgitos(a vrgula ou ponto pontuado como um dgito pela
funo).
No demais o programa em si bem simples, fazendo apenas a atribuio de valores aos
campos da estrutura, e posteriormente imprimindo na tela, os valores contidos nos
campos da estrutura.
Arquivo - funcoes.h
#ifndef FUNCOES_H_INCLUDED
#define FUNCOES_H_INCLUDED
//Cabecalho das Funes
void CapturarS(char *Variavel[],int Tamanho); // Capturar String
int CapturarI(int Tamanho); // Capturar Inteiro
float CapturarF(int Tamanho); // Capturar Float
void InserirLinha(int Tamanho); // Imprimir Linha
//Funes
void CapturarS(char *Variavel[],int Tamanho){
int i;
char Teste;
char Tempo[Tamanho + 1];
int Final;
Final = Tamanho;
for(i=0;i<Tamanho;i++){
fflush(stdin);
Teste = getche();
if(Teste == 13 || Teste == 8){
if (Teste == 13){
Final = i;
i = Tamanho;
}else{
Tempo[i] = Teste;
printf(" ");
printf("%c",Teste);
i = i - 2 ;
}
}else{
Tempo[i] = Teste;
}
}
Tempo[Final] = 0;
strcpy(Variavel,Tempo);
}
int CapturarI(int Tamanho){
int i;
char Teste;
char Tempo[Tamanho + 1];
int Final;
Final = Tamanho;
for(i=0;i<Tamanho;i++){
fflush(stdin);
Teste = getche();
if(Teste == 13 || Teste == 8){
if (Teste == 13){
Final = i;
i = Tamanho;
}else{
Tempo[i] = Teste;
printf(" ");
printf("%c",Teste);
i = i - 2 ;
}
}else{
Arquivo - main.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LIM 25
#include "funcoes.h"
struct aviao{
char modelo [15];
char fabricante [15];
int passageiros;
float comprimento;
float altura;
float velocidade;
float altitude;
char motor[15];
};
int main()
{
struct aviao VoebemAvioes[LIM];
int LoopP = 0, Op = 0, i = 0, indice = 0;
float TESTE = 0;
while (LoopP == 0){
system("cls");
fflush(stdin); // Limpar o Buffer caso o usurio digite um
caractere no Scanf (Windows)
printf("Escolha uma Opcao\n");
printf("\n1 - Cadastrar Novo Aviao");
printf("\n2 - Exibir Avioes Cadastrados");
printf("\n3 - Encerrar Aplicacao");
printf("\n\nDigite sua opcao: ");
scanf("%d", &Op);
switch(Op){
case 1:
system("cls");
if(indice == LIM){
printf("A lista de Avioes ja esta cheia!\n");
system("pause");
LoopP == 0;
}else{
LoopP = 2;
while(LoopP == 2){
system("cls");
printf("Digite Modelo do Aviao: ");
CapturarS(VoebemAvioes[indice].modelo,14);
printf("\n\nDigite o Fabricante do Aviao:
");
CapturarS(VoebemAvioes[indice].fabricante,14);
Passageiros do Aviao:
CapturarI(4);
printf("\n\nDigite o comprimento do Aviao:
");
VoebemAvioes[indice].comprimento =
CapturarF(6);
printf("\n\nDigite a altura do Aviao: ");
VoebemAvioes[indice].altura = CapturarF(6);
printf("\n\nDigite a veocidade max do Aviao:
");
VoebemAvioes[indice].velocidade =
CapturarF(6);
printf("\n\nDigite a altidue max do Aviao:
");
VoebemAvioes[indice].altitude = CapturarF(6);
printf("\n\nDigite o modelo do motor do Aviao:
");
CapturarS(VoebemAvioes[indice].motor,14);
system("cls");
printf("Os dados Inseridos para o novo Aviao
sao:\n");
printf("\nModelo:
%30s",VoebemAvioes[indice].modelo);
InserirLinha(42);
printf("\nFabricante:
%30s",VoebemAvioes[indice].fabricante);
InserirLinha(42);
printf("\nN Passageiros:
%27d",VoebemAvioes[indice].passageiros);
InserirLinha(42);
printf("\nComprimento:
%29.2f",VoebemAvioes[indice].comprimento);
InserirLinha(42);
printf("\nAltura:
%34.2f",VoebemAvioes[indice].altura);
InserirLinha(42);
printf("\nVelocidade:
%30.2f",VoebemAvioes[indice].velocidade);
InserirLinha(42);
printf("\nAltitude:
%32.2f",VoebemAvioes[indice].altitude);
InserirLinha(42);
printf("\nMotor:
%35s",VoebemAvioes[indice].motor);
InserirLinha(42);
printf("\n\n");
printf("Confirmar Informacoes? 1- Sim / 2 Nao\n");
scanf("%d",&LoopP);
}
indice++;
LoopP = 0;
}
break;
case 2:
system("cls");
printf("Modelo
|Fabricante
|Passag|Compri|Altura |Veloci|Altitu|Motor");
printf("\n");
printf("______________|______________|______|______|_______|______|___
___|_____________");
for(i=0;i<indice;i++){
printf("\n");
printf("
|
|
");
printf("\n");
printf("%-14s",VoebemAvioes[i].modelo);
printf("|%-14s",VoebemAvioes[i].fabricante);
printf("|%-4d ",VoebemAvioes[i].passageiros);
printf("|%-6.1f",VoebemAvioes[i].comprimento);
printf("|%-6.1f ",VoebemAvioes[i].altura);
printf("|%-6.1f",VoebemAvioes[i].velocidade);
printf("|%-6.1f",VoebemAvioes[i].altitude);
printf("|%-8s",VoebemAvioes[i].motor);
//printf("\n");
}
printf("\n");
printf("______________|______________|______|______|_______|______|___
___|_____________");
printf("\n\n");
system("pause");
break;
case 3:
LoopP = 1;
break;
default:
system("cls");
printf("Esta Opcao nao e valida!\n\n");
system("pause");
break;
}
}
return 0;
}
Programa 2.0
Descrio do Programa
Foi proposto no passo 2 da 2 Etapa, que fosse desenvolvido um programa em
linguagem C que trabalha-se com uma estrutura de dados denominada Voo. A estrutura
deveria ser implementada de forma dinmica, e as aes cadastrar, consultar e remover,
deveriam ser implementadas atravs de funes.
Como no programa 1.0, utilizado um menu principal para dar acesso as funes do
programa. Algumas funes desenvolvidas para o programa 1.0 foram aprimoradas e
reutilizadas neste programa, so elas a CapturarS, CapturarI e CapturarF.
Excluir() : Esta funo exclui elementos da lista, com base nos parmetros informados.
Telas do Programa
10
Arquivo - funcoes.h
#ifndef FUNCOES_H_INCLUDED
#define FUNCOES_H_INCLUDED
//Cabealho Funes
void CapturarS(char *Variavel[],int Tamanho); // Capturar String
int CapturarI(int Tamanho, int Digitos); // Capturar Inteiro
float CapturarF(int Tamanho); // Capturar Float
void ZerarEstrutura(voo *Estrutura);// Deixar Estrutura Zerada
voo* Iniciar(void); // Inicia a Lista Encadeada
int vazio(voo *Atual); // Funo para Retornar se Lista Esta vazia
int Validar(voo *Atual,voo Parametros); // Validar informaes
voo* AdicinoarVoo(voo *Atual, voo Auxiliar); // Adiciona novo item a
lista
int ConsultaQTD(voo *Atual, voo Parametros); // Retorna numero de
registros encontrados com base nos parmetros
voo* ConsultarEnd(voo *Atual, voo Parametros,int Ordem); // Retorna
Endereo de item da lista, com base em parmetros
void ExibirTodos(voo *Atual); // Exibe todos os itens da lista
void ExibirDetalhes(voo *Atual, int Num); // Exibi detalhes de um item
da lista, com base em parmetro
voo* Excluir(voo *Atual, voo Parametros); // Exclui itens da lista com
base em parmetros
// Funes
void CapturarS(char *Variavel[],int Tamanho){
int i;
char Teste;
char Tempo[Tamanho + 1];
int Final;
Final = Tamanho;
for(i=0;i<Tamanho;i++){
fflush(stdin);
Teste = getche();
if(Teste == 13 || Teste == 8){
if (Teste == 13){
Final = i;
i = Tamanho;
}else{
Tempo[i] = Teste;
printf(" ");
printf("%c",Teste);
i = i - 2 ;
}
}else{
Tempo[i] = Teste;
}
if( i < -1){
i = -1;
printf(" ");
}
}
11
Tempo[Final] = 0;
strcpy(Variavel,Tempo);
}
int CapturarI(int Tamanho,int Digitos){
int i;
char Teste;
char Tempo[Tamanho + 1];
int Final;
Final = Tamanho;
if(Digitos > 9)
Digitos = 0;
for(i=0;i<Tamanho;i++){
fflush(stdin);
Teste = getche();
if(Teste == 27)
return 0;
if(Teste == 13 || Teste == 8){
if (Teste == 13){
Final = i;
i = Tamanho;
}else{
Tempo[i] = Teste;
printf(" ");
printf("%c",Teste);
i = i - 2 ;
}
}else{
if(Teste > 47 && Teste < (58 - Digitos)){
Tempo[i] = Teste;
}else{
printf("%c",8);
printf(" ");
printf("%c",8);
i--;
}
}
if( i < -1){
i = -1;
printf(" ");
}
}
Tempo[Final] = 0;
return atoi(Tempo);
}
12
13
voo* Iniciar(void){
return NULL;
}
int vazio(voo *Atual){
if (Atual == NULL)
return 1;
else
return 0;
}
int Validar(voo *Atual,voo Parametros){
int Erros = 0;
time_t Tempo;
int Teste;
voo Auxiliar;
ZerarEstrutura(&Auxiliar);
Auxiliar.NumVoo = 1;
Auxiliar.NumVoo = Parametros.NumVoo;
if(ConsultaQTD(Atual,Auxiliar) > 0){
printf("\nJa existe um voo com o numero informado:
%d\n",Parametros.NumVoo);
Erros++;
}
Tempo = time(NULL);
Teste = (Tempo/31556952)+1970;
if((Parametros.Data.ano < Teste) || (Parametros.Data.mes < 1 ||
Parametros.Data.mes > 12) || (Parametros.Data.dia < 1 ||
Parametros.Data.dia > 31)){
printf("\nA data informada nao e valida:
%02d/%02d/%04d\n",Parametros.Data.dia,Parametros.Data.mes,Parametros.D
ata.ano);
Erros++;
}else if ((Parametros.Data.mes == 4 || Parametros.Data.mes == 6 ||
Parametros.Data.mes == 9 || Parametros.Data.mes == 11) &&
(Parametros.Data.dia > 30)){
printf("\nA data informada nao e valida:
%02d/%02d/%04d\n",Parametros.Data.dia,Parametros.Data.mes,Parametros.D
ata.ano);
Erros++;
}else if(Parametros.Data.mes == 2 && Parametros.Data.dia > 29){
printf("\nA data informada nao e valida:
%02d/%02d/%04d\n",Parametros.Data.dia,Parametros.Data.mes,Parametros.D
ata.ano);
Erros++;
}
if (Parametros.Hora.hora > 23){
printf("\nA hora informada nao e valida:
%02d:%02d:%02d\n",Parametros.Hora.hora,Parametros.Hora.minuto,Parametr
os.Hora.segundo);
Erros++;
}else if(Parametros.Hora.minuto > 59){
14
15
novo->Tempo.segundo = Auxiliar.Tempo.segundo;
novo->Tempo.nulo = Auxiliar.Tempo.nulo;
novo->Passageiros = Auxiliar.Passageiros;
novo->Proxima = Atual;
return novo;
}
int ConsultaQTD(voo *Atual, voo Parametros){
int Dif = 0, Total = 0;
voo *Auxiliar = Atual;
while(Auxiliar != NULL){
if((Parametros.NumVoo != 0 ) && (Auxiliar->NumVoo !=
Parametros.NumVoo))
Dif++;
if((Parametros.Data.nulo != 1 ) && (Auxiliar->Data.dia !=
Parametros.Data.dia || Auxiliar->Data.mes != Parametros.Data.mes ||
Auxiliar->Data.ano != Parametros.Data.ano))
Dif++;
if((Parametros.Hora.nulo != 1 ) && (Auxiliar->Hora.hora !=
Parametros.Hora.hora || Auxiliar->Hora.minuto !=
Parametros.Hora.minuto || Auxiliar->Hora.segundo !=
Parametros.Hora.segundo))
Dif++;
if((Parametros.AeroportoSaida[0] != '\0' ) &&
(strcmp(Auxiliar->AeroportoSaida, Parametros.AeroportoSaida) != 0))
Dif++;
if((Parametros.AeroportoChegada[0] != '\0' ) &&
(strcmp(Auxiliar->AeroportoChegada, Parametros.AeroportoChegada) !=
0))
Dif++;
if((Parametros.Rota[0] != '\0' ) && (strcmp(Auxiliar->Rota,
Parametros.Rota) != 0))
Dif++;
if((Parametros.Tempo.nulo != 1 ) && (Auxiliar->Tempo.hora !=
Parametros.Tempo.hora || Auxiliar->Tempo.minuto !=
Parametros.Tempo.minuto || Auxiliar->Tempo.segundo !=
Parametros.Tempo.segundo))
Dif++;
if((Parametros.Passageiros != 0 ) && (Auxiliar->Passageiros !=
Parametros.Passageiros))
Dif++;
if(Dif == 0)
Total++;
Dif = 0;
Auxiliar = Auxiliar->Proxima;
}
return Total;
}
voo* ConsultarEnd(voo *Atual, voo Parametros,int Ordem){
int Dif = 0, Total = 0;
voo *Auxiliar = Atual;
16
while(Auxiliar != NULL){
if((Parametros.NumVoo != 0 ) && (Auxiliar->NumVoo !=
Parametros.NumVoo))
Dif++;
if((Parametros.Data.nulo != 1 ) && (Auxiliar->Data.dia !=
Parametros.Data.dia || Auxiliar->Data.mes != Parametros.Data.mes ||
Auxiliar->Data.ano != Parametros.Data.ano))
Dif++;
if((Parametros.Hora.nulo != 1 ) && (Auxiliar->Hora.hora !=
Parametros.Hora.hora || Auxiliar->Hora.minuto !=
Parametros.Hora.minuto || Auxiliar->Hora.segundo !=
Parametros.Hora.segundo))
Dif++;
if((Parametros.AeroportoSaida[0] != '\0' ) &&
(strcmp(Auxiliar->AeroportoSaida, Parametros.AeroportoSaida) != 0))
Dif++;
if((Parametros.AeroportoChegada[0] != '\0' ) &&
(strcmp(Auxiliar->AeroportoChegada, Parametros.AeroportoChegada) !=
0))
Dif++;
if((Parametros.Rota[0] != '\0' ) && (strcmp(Auxiliar->Rota,
Parametros.Rota) != 0))
Dif++;
if((Parametros.Tempo.nulo != 1 ) && (Auxiliar->Tempo.hora !=
Parametros.Tempo.hora || Auxiliar->Tempo.minuto !=
Parametros.Tempo.minuto || Auxiliar->Tempo.segundo !=
Parametros.Tempo.segundo))
Dif++;
if((Parametros.Passageiros != 0 ) && (Auxiliar->Passageiros !=
Parametros.Passageiros))
Dif++;
if(Dif == 0){
if(Total == Ordem)
return Auxiliar;
Total++;
}
Dif = 0;
Auxiliar = Auxiliar->Proxima;
}
}
void ExibirTodos(voo *Atual){
printf("______________________________________________________________
_________________\n");
printf("Num
|Data
|Horario |Saida
|Destino\n");
printf("______|___________|________|_____________________________|____
_________________\n");
while(Atual != NULL){
printf("%-5d |",Atual->NumVoo);
printf("%02d/%02d/%04d |",Atual->Data.dia,Atual>Data.mes,Atual->Data.ano);
printf("%02d:%02d
|", Atual->Hora.hora,Atual->Hora.minuto);
17
printf("%-29s|",Atual->AeroportoSaida);
printf("%s\n",Atual->AeroportoChegada);
printf("______|___________|________|_____________________________|____
_________________\n");
Atual = Atual->Proxima;
}
}
void ExibirDetalhes(voo *Atual, int Num){
int Teste = 0;
while (Atual != NULL && Teste == 0){
if (Atual->NumVoo == Num){
printf("
--------- Informacoes do Voo
---------\n");
printf("
________________________________________\n");
printf("
|Numero: %32d|\n",Atual>NumVoo);
printf("
|________________________________________|\n");
printf("
|Data:
%26d/%02d/%4d|\n",Atual->Data.dia,Atual->Data.mes,Atual->Data.ano);
printf("
|________________________________________|\n");
printf("
|Horario:
%25d:%02d:%02d|\n",Atual->Hora.hora,Atual->Hora.minuto,Atual>Hora.segundo);
printf("
|________________________________________|\n");
printf("
|Saida: %32s|\n",Atual>AeroportoSaida);
printf("
|________________________________________|\n");
printf("
|Chegada: %31s|\n",Atual>AeroportoChegada);
printf("
|________________________________________|\n");
printf("
|Rota: %34s|\n",Atual->Rota);
printf("
|________________________________________|\n");
printf("
|Tempo:
%27d:%02d:%02d|\n",Atual->Tempo.hora,Atual->Tempo.minuto,Atual>Tempo.segundo);
printf("
|________________________________________|\n");
printf("
|Passageiros: %27d|\n",Atual>Passageiros);
printf("
|________________________________________|\n\n");
Teste = 1;
}
Atual = Atual->Proxima;
}
if (Teste == 0){
18
19
Auxiliar = Temp;
}
Total++;
}else{
Ant = Auxiliar;
Auxiliar = Auxiliar->Proxima;
}
Dif = 0;
}
printf("\n\nForam Excluidos %d Registros\n\n",Total);
system("pause");
return Atual;
}
#endif // FUNCOES_H_INCLUDED
20
Arquivo - main.h
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
typedef struct Datas DataVoo;
typedef struct Horarios HoraVoo;
typedef struct estrutura_voo voo;
struct Datas{
int dia;
int mes;
int ano;
int nulo;
};
struct Horarios{
int hora;
int minuto;
int segundo;
int nulo;
};
struct estrutura_voo{
int NumVoo;
DataVoo Data;
HoraVoo Hora;
char AeroportoSaida[30];
char AeroportoChegada [30];
char Rota [30];
HoraVoo Tempo;
int Passageiros;
struct voo *Proxima;
};
#include "funcoes.h"
int main()
{
int
voo
voo
voo
while(LoopP == 0){
system("cls");
printf("Menu de Opcoes:\n\n");
printf("1 - Adicionar Voo\n");
printf("2 - Consultar Voos\n");
printf("3 - Cancelar Voo\n");
printf("4 - Encerrar Aplicacao\n");
printf("\nDigite sua escolha: ");
op = CapturarI(1,5);
switch (op){
case 1:
LoopAux = 1;
while (LoopAux == 1){
21
system("cls");
ZerarEstrutura(&Auxiliar);
printf("Digite o Numero deste Voo:
Auxiliar.NumVoo = CapturarI(5,0);
");
22
printf("
|Horario:
%25d:%02d:%02d|\n",Auxiliar.Hora.hora,Auxiliar.Hora.minuto,Auxiliar.Ho
ra.segundo);
printf("
|________________________________________|\n");
printf("
|Saida:
%32s|\n",Auxiliar.AeroportoSaida);
printf("
|________________________________________|\n");
printf("
|Chegada:
%31s|\n",Auxiliar.AeroportoChegada);
printf("
|________________________________________|\n");
printf("
|Rota:
%34s|\n",Auxiliar.Rota);
printf("
|________________________________________|\n");
printf("
|Tempo:
%27d:%02d:%02d|\n",Auxiliar.Tempo.hora,Auxiliar.Tempo.minuto,Auxiliar.
Tempo.segundo);
printf("
|________________________________________|\n");
printf("
|Passageiros:
%27d|\n",Auxiliar.Passageiros);
printf("
|________________________________________|\n\n");
if (Validar(ListaVoos,Auxiliar) > 0){
printf("\n\nVoce precisa arrumar os problemas
informados...\n\n");
system("pause");
}else{
printf("\n\nConfirmar 1-Nao/2-Sim ? ");
printf("\nDigite sua escolha: ");
LoopAux = CapturarI(1,7);
if(LoopAux == 0)
LoopAux = 1;
}
}
ListaVoos = AdicinoarVoo(ListaVoos,Auxiliar);
break;
case 2:
printf("\n\n1-Exibir todos / 2-Exibir com base em
parametros de busca\n");
printf("\nDigite sua escolha: ");
op = CapturarI(1,7);
switch(op){
case 1:
system("cls");
ExibirTodos(ListaVoos);
break;
case 2:
ZerarEstrutura(&Auxiliar);
system("cls");
23
");
");
");
24
");
printf("\n\nInforme o Aeroporto de
Chegada: ");
CapturarS(Auxiliar.AeroportoChegada,29);
}
system("cls");
printf("Usar Rota do Voo como Filtro? 1-Sim /
2-Nao\n");
printf("\nDigite sua escolha:
op = CapturarI(1,7);
if(op == 1){
");
25
printf("______|___________|________|_____________________________|____
_________________\n");
for(i=0;i<Resultados;i++){
ResultadoVoo =
ConsultarEnd(ListaVoos,Auxiliar,i);
printf("%-5d |",ResultadoVoo->NumVoo);
printf("%02d/%02d/%4d |",ResultadoVoo>Data.dia,ResultadoVoo->Data.mes,ResultadoVoo->Data.ano);
printf("%02d:%02d
|", ResultadoVoo>Hora.hora,ResultadoVoo->Hora.minuto);
printf("%-29s|",ResultadoVoo>AeroportoSaida);
printf("%s\n",ResultadoVoo>AeroportoChegada);
printf("______|___________|________|_____________________________|____
_________________\n");
}
break;
}
printf("\n\nPara Detalhes do Voo digite seu numero, ou
tecle 'esc' para encerrar a consulta.\n");
printf("\nDigite sua escolha: ");
op = CapturarI(5,0);
if ( op != 0 ){
system("cls");
ExibirDetalhes(ListaVoos,op);
printf("\n\n");
system("pause");
}
break;
case 3:
LoopP = 1;
while(LoopP == 1){
system("cls");
printf("Sera necessario informar os parametros
para a exclusao do voo...\n\n");
system("pause");
ZerarEstrutura(&Auxiliar);
system("cls");
printf("Usar Numero do Voo como Filtro? 1-Sim / 2Nao\n");
printf("\nDigite sua escolha: ");
op = CapturarI(1,7);
if(op == 1){
LoopP++;
printf("\n\nDigite o Numero do Voo: ");
26
Auxiliar.NumVoo = CapturarI(5,0);
}
system("cls");
printf("Usar Data do Voo como Filtro? 1-Sim / 2Nao\n");
printf("\nDigite sua escolha: ");
op = CapturarI(1,7);
if(op == 1){
LoopP++;
printf("\n\nInsira a data do Voo:");
printf("\nDia ");
Auxiliar.Data.dia = CapturarI(2,0);
printf(" /Mes ");
Auxiliar.Data.mes = CapturarI(2,0);
printf(" /Ano ");
Auxiliar.Data.ano = CapturarI(4,0);
Auxiliar.Data.nulo = 0;
}
system("cls");
printf("Usar Horario do Voo como Filtro? 1-Sim /
2-Nao\n");
printf("\nDigite sua escolha: ");
op = CapturarI(1,7);
if(op == 1){
LoopP++;
printf("\n\nInsira o Horario do Voo:");
printf("\nHora ");
Auxiliar.Hora.hora = CapturarI(2,0);
printf(" :Minuto ");
Auxiliar.Hora.minuto = CapturarI(2,0);
printf(" :Segundo ");
Auxiliar.Hora.segundo = CapturarI(2,0);
Auxiliar.Hora.nulo = 0;
}
system("cls");
printf("Usar Aeroporto de Saida do Voo como
Filtro? 1-Sim / 2-Nao\n");
printf("\nDigite sua escolha: ");
op = CapturarI(1,7);
if(op == 1){
LoopP++;
printf("\n\nInforme o Aeroporto de Saida: ");
CapturarS(Auxiliar.AeroportoSaida,29);
}
system("cls");
printf("Usar Aeroporto de Chegada do Voo como
Filtro? 1-Sim / 2-Nao\n");
printf("\nDigite sua escolha: ");
op = CapturarI(1,7);
if(op == 1){
LoopP++;
printf("\n\nInforme o Aeroporto de Chegada:
");
CapturarS(Auxiliar.AeroportoChegada,29);
}
27
system("cls");
printf("Usar Rota do Voo como Filtro? 1-Sim / 2Nao\n");
printf("\nDigite sua escolha: ");
op = CapturarI(1,7);
if(op == 1){
LoopP++;
printf("\n\nInforme a Rota: ");
CapturarS(Auxiliar.Rota,29);
}
system("cls");
printf("Usar Tempo Previsto do Voo como Filtro? 1Sim / 2-Nao\n");
printf("\nDigite sua escolha: ");
op = CapturarI(1,7);
if(op == 1){
LoopP++;
printf("\n\nInsira o Tempo previsto do Voo:");
printf("\nHora ");
Auxiliar.Tempo.hora = CapturarI(2,0);
printf(" :Minuto ");
Auxiliar.Tempo.minuto = CapturarI(2,0);
printf(" :Segundo ");
Auxiliar.Tempo.segundo = CapturarI(2,0);
Auxiliar.Tempo.nulo = 0;
}
system("cls");
printf("Usar Numero de Passageiros do Voo como
Filtro? 1-Sim / 2-Nao\n");
printf("\nDigite sua escolha: ");
op = CapturarI(1,7);
if(op == 1){
LoopP++;
printf("\n\nInforme o numero de passageiros :
");
Auxiliar.Passageiros = CapturarI(4,0);
}
if(LoopP == 1){
system("cls");
printf("Voce nao inseriu nenhum parametro para
a exclusao!\n\n");
system("pause");
}
}
LoopP = 0;
Resultados = ConsultaQTD(ListaVoos,Auxiliar);
system("cls");
if (Resultados > 0){
printf("______________________________________________________________
_________________\n");
printf("Num
|Data
|Horario |Saida
|Destino\n");
28
printf("______|___________|________|_____________________________|____
_________________\n");
for(i=0;i<Resultados;i++){
ResultadoVoo =
ConsultarEnd(ListaVoos,Auxiliar,i);
printf("%-5d |",ResultadoVoo->NumVoo);
printf("%02d/%02d/%4d |",ResultadoVoo>Data.dia,ResultadoVoo->Data.mes,ResultadoVoo->Data.ano);
printf("%02d:%02d
|", ResultadoVoo>Hora.hora,ResultadoVoo->Hora.minuto);
printf("%-29s|",ResultadoVoo->AeroportoSaida);
printf("%s\n",ResultadoVoo->AeroportoChegada);
printf("______|___________|________|_____________________________|____
_________________\n");
}
printf("\n\nResultados encontrados:
%d\n\n",Resultados);
printf("Deseja Realmente Excluir o(s) %d Voo(s)?
1-Nao / 2-Sim\n",Resultados);
printf("\nDigite sua escolha: ");
op = CapturarI(1,7);
if(op == 2)
ListaVoos = Excluir(ListaVoos,Auxiliar);
}else{
printf("Nao foram encontrados resultados para os
parametros informados...\n\n");
system("pause");
}
break;
case 4:
LoopP = 1;
break;
}
}
return 0;
}
29
Programa 3.0
Descrio do Programa
Foi proposto no passo 3 da 2 Etapa, que fosse desenvolvido um programa em
linguagem C que trabalha-se com uma estrutura de dados denominada Passagem. Esta
estrutura, assim como a do programa anterior deveria ser implementada de forma
dinmica, e utilizaramos as funes cadastrarPassagem, e consultarPassagem, para
trabalhar com a estrutura.
Basicamente, o que foi feito foi adaptar as funes e a estrutura do programa 2.0 para
este novo programa, ento, basicamente as funes continuam as mesmas.
Telas do Programa
30
Arquivo - funcoes.h
#ifndef FUNCOES_H_INCLUDED
#define FUNCOES_H_INCLUDED
//Cabealho Funes
void CapturarS(char *Variavel[],int Tamanho); // Capturar String
int CapturarI(int Tamanho, int Digitos); // Capturar Inteiro
float CapturarF(int Tamanho); // Capturar Float
void ZerarEstrutura(Passagem *Estrutura);// Deixar Estrutura Zerada
Passagem* Iniciar(void); // Inicia a Lista Encadeada
int vazio(Passagem *Atual); // Funo para Retornar se Lista Esta
vazia
int Validar(Passagem *Atual,Passagem Parametros); // Validar
informacoes
Passagem* Adicinoar(Passagem *Atual, Passagem Auxiliar); // Adiciona
novo item a lista
int ConsultaQTD(Passagem *Atual, Passagem Parametros); // Retorna
numero de registros encontrados com base nos parametros
Passagem* ConsultarEnd(Passagem *Atual, Passagem Parametros,int
Ordem); // Retorna Endereo de item da lista, com base em parametros
void ExibirTodos(Passagem *Atual); // Exibe todos os itens da lista
//Funes
void CapturarS(char *Variavel[],int Tamanho){
int i;
char Teste;
char Tempo[Tamanho + 1];
int Final;
Final = Tamanho;
for(i=0;i<Tamanho;i++){
fflush(stdin);
Teste = getche();
if(Teste == 13 || Teste == 8){
if (Teste == 13){
Final = i;
i = Tamanho;
}else{
Tempo[i] = Teste;
printf(" ");
printf("%c",Teste);
i = i - 2 ;
}
}else{
Tempo[i] = Teste;
}
if( i < -1){
i = -1;
printf(" ");
}
}
31
Tempo[Final] = 0;
strcpy(Variavel,Tempo);
}
int CapturarI(int Tamanho,int Digitos){
int i;
char Teste;
char Tempo[Tamanho + 1];
int Final;
Final = Tamanho;
if(Digitos > 9)
Digitos = 0;
for(i=0;i<Tamanho;i++){
fflush(stdin);
Teste = getche();
if(Teste == 27)
return 0;
if(Teste == 13 || Teste == 8){
if (Teste == 13){
Final = i;
i = Tamanho;
}else{
Tempo[i] = Teste;
printf(" ");
printf("%c",Teste);
i = i - 2 ;
}
}else{
if(Teste > 47 && Teste < (58 - Digitos)){
Tempo[i] = Teste;
}else{
printf("%c",8);
printf(" ");
printf("%c",8);
i--;
}
}
if( i < -1){
i = -1;
printf(" ");
}
}
Tempo[Final] = 0;
return atoi(Tempo);
}
32
33
else
return 0;
}
int Validar(Passagem *Atual,Passagem Parametros){
int Erros = 0;
time_t Tempo;
int Teste;
Passagem Auxiliar;
ZerarEstrutura(&Auxiliar);
Auxiliar.NumPass = 1;
Auxiliar.NumPass = Parametros.NumPass;
if(ConsultaQTD(Atual,Auxiliar) > 0){
printf("\nJa existe uma Passagem com o numero informado:
%d\n",Parametros.NumPass);
Erros++;
}
Tempo = time(NULL);
Teste = (Tempo/31556952)+1970;
if((Parametros.Data.ano < Teste) || (Parametros.Data.mes < 1 ||
Parametros.Data.mes > 12) || (Parametros.Data.dia < 1 ||
Parametros.Data.dia > 31)){
printf("\nA data informada nao e valida:
%02d/%02d/%04d\n",Parametros.Data.dia,Parametros.Data.mes,Parametros.D
ata.ano);
Erros++;
}else if ((Parametros.Data.mes == 4 || Parametros.Data.mes == 6 ||
Parametros.Data.mes == 9 || Parametros.Data.mes == 11) &&
(Parametros.Data.dia > 30)){
printf("\nA data informada nao e valida:
%02d/%02d/%04d\n",Parametros.Data.dia,Parametros.Data.mes,Parametros.D
ata.ano);
Erros++;
}else if(Parametros.Data.mes == 2 && Parametros.Data.dia > 29){
printf("\nA data informada nao e valida:
%02d/%02d/%04d\n",Parametros.Data.dia,Parametros.Data.mes,Parametros.D
ata.ano);
Erros++;
}
if (Parametros.Horario.hora > 23){
printf("\nA hora informada nao e valida:
%02d:%02d:%02d\n",Parametros.Horario.hora,Parametros.Horario.minuto,Pa
rametros.Horario.segundo);
Erros++;
}else if(Parametros.Horario.minuto > 59){
printf("\nA hora informada nao e valida:
%02d:%02d:%02d\n",Parametros.Horario.hora,Parametros.Horario.minuto,Pa
rametros.Horario.segundo);
Erros++;
}else if (Parametros.Horario.segundo > 59){
printf("\nA hora informada nao e valida:
%02d:%02d:%02d\n",Parametros.Horario.hora,Parametros.Horario.minuto,Pa
rametros.Horario.segundo);
Erros++;
34
return Erros;
}
Passagem* Adicinoar(Passagem *Atual, Passagem Auxiliar){
Passagem *novo = (Passagem*) malloc(sizeof(Passagem));
novo->NumPass = Auxiliar.NumPass;
novo->NumVoo = Auxiliar.NumVoo;
novo->Data.dia = Auxiliar.Data.dia;
novo->Data.mes = Auxiliar.Data.mes;
novo->Data.ano = Auxiliar.Data.ano;
novo->Data.nulo = Auxiliar.Data.nulo;
novo->Horario.hora = Auxiliar.Horario.hora;
novo->Horario.minuto = Auxiliar.Horario.minuto;
novo->Horario.segundo = Auxiliar.Horario.segundo;
novo->Horario.nulo = Auxiliar.Horario.nulo;
strcpy(novo->Portao,Auxiliar.Portao);
novo->Proxima = Atual;
return novo;
}
int ConsultaQTD(Passagem *Atual, Passagem Parametros){
int Dif = 0, Total = 0;
Passagem *Auxiliar = Atual;
while(Auxiliar != NULL){
if((Parametros.NumPass != 0 ) && (Auxiliar->NumPass !=
Parametros.NumPass))
Dif++;
if((Parametros.NumVoo != 0 ) && (Auxiliar->NumVoo !=
Parametros.NumVoo))
Dif++;
if((Parametros.Data.nulo != 1 ) && (Auxiliar->Data.dia !=
Parametros.Data.dia || Auxiliar->Data.mes != Parametros.Data.mes ||
Auxiliar->Data.ano != Parametros.Data.ano))
Dif++;
if((Parametros.Horario.nulo != 1 ) && (Auxiliar->Horario.hora
!= Parametros.Horario.hora || Auxiliar->Horario.minuto !=
Parametros.Horario.minuto || Auxiliar->Horario.segundo !=
Parametros.Horario.segundo))
Dif++;
if((Parametros.Portao[0] != '\0' ) && (strcmp(Auxiliar>Portao, Parametros.Portao) != 0))
Dif++;
if(Dif == 0)
Total++;
Dif = 0;
Auxiliar = Auxiliar->Proxima;
}
35
return Total;
}
Passagem* ConsultarEnd(Passagem *Atual, Passagem Parametros,int
Ordem){
int Dif = 0, Total = 0;
Passagem *Auxiliar = Atual;
while(Auxiliar != NULL){
if((Parametros.NumPass != 0 ) && (Auxiliar->NumPass !=
Parametros.NumPass))
Dif++;
if((Parametros.NumVoo != 0 ) && (Auxiliar->NumVoo !=
Parametros.NumVoo))
Dif++;
if((Parametros.Data.nulo != 1 ) && (Auxiliar->Data.dia !=
Parametros.Data.dia || Auxiliar->Data.mes != Parametros.Data.mes ||
Auxiliar->Data.ano != Parametros.Data.ano))
Dif++;
if((Parametros.Horario.nulo != 1 ) && (Auxiliar->Horario.hora
!= Parametros.Horario.hora || Auxiliar->Horario.minuto !=
Parametros.Horario.minuto || Auxiliar->Horario.segundo !=
Parametros.Horario.segundo))
Dif++;
if((Parametros.Portao[0] != '\0' ) && (strcmp(Auxiliar>Portao, Parametros.Portao) != 0))
Dif++;
if(Dif == 0){
if(Total == Ordem)
return Auxiliar;
Total++;
}
Dif = 0;
Auxiliar = Auxiliar->Proxima;
}
}
void ExibirTodos(Passagem *Atual){
printf("_____________________________________________\n");
printf("Num
|Voo
|Data
|Horario |Portao
|\n");
printf("______|______|___________|________|__________|\n");
while(Atual != NULL){
printf("%-5d |",Atual->NumPass);
printf("%-5d |",Atual->NumVoo);
printf("%02d/%02d/%04d |",Atual->Data.dia,Atual>Data.mes,Atual->Data.ano);
printf("%02d:%02d
|", Atual->Horario.hora,Atual>Horario.minuto);
printf("%-10s|\n",Atual->Portao);
printf("______|______|___________|________|__________|\n");
Atual = Atual->Proxima;
}
}
#endif // FUNCOES_H_INCLUDED
36
Arquivo - main.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
typedef struct Datas DataPassagem;
typedef struct Horarios HoraPassagem;
typedef struct passagem Passagem;
struct Datas{
int dia;
int mes;
int ano;
int nulo;
};
struct Horarios{
int hora;
int minuto;
int segundo;
int nulo;
};
struct passagem{
int NumPass;
int NumVoo;
DataPassagem Data;
HoraPassagem Horario;
char Portao [11];
struct passagem *Proxima;
};
#include "funcoes.h"
int main()
{
int op =
Passagem
Passagem
Passagem
while(LoopP == 0){
system("cls");
printf("Menu de Opcoes:\n\n");
printf("1 - Adicionar Passagem\n");
printf("2 - Consultar Passagem\n");
printf("3 - Encerrar Aplicacao\n");
printf("\nDigite sua escolha: ");
op = CapturarI(1,6);
switch (op){
case 1:
LoopAux = 1;
while (LoopAux == 1){
system("cls");
ZerarEstrutura(&Auxiliar);
printf("Digite o Numero desta Passagem:
Auxiliar.NumPass = CapturarI(5,0);
");
37
");
38
");
");
");
printf("\n\nInsira a data:");
printf("\nDia ");
Auxiliar.Data.dia = CapturarI(2,0);
printf(" /Mes ");
39
Auxiliar.Data.mes = CapturarI(2,0);
printf(" /Ano ");
Auxiliar.Data.ano = CapturarI(4,0);
Auxiliar.Data.nulo = 0;
}
system("cls");
printf("Usar Horario como Filtro? 1-Sim / 2Nao\n");
printf("\nDigite sua escolha:
op = CapturarI(1,7);
if(op == 1){
");
printf("\n\nInsira o Horario:");
printf("\nHora ");
Auxiliar.Horario.hora = CapturarI(2,0);
printf(" :Minuto ");
Auxiliar.Horario.minuto = CapturarI(2,0);
printf(" :Segundo ");
Auxiliar.Horario.segundo = CapturarI(2,0);
Auxiliar.Horario.nulo = 0;
}
system("cls");
printf("Usar Portao de Embarque como Filtro?
1-Sim / 2-Nao\n");
printf("\nDigite sua escolha:
op = CapturarI(1,7);
if(op == 1){
");
system("cls");
Resultados =
ConsultaQTD(ListaPassagem,Auxiliar);
system("cls");
printf("Resultados encontrados:
%d\n\n",Resultados);
printf("_____________________________________________\n");
printf("Num
|Voo
|Data
|Horario
|Portao
|\n");
printf("______|______|___________|________|__________|\n");
for(i=0;i<Resultados;i++){
ResultadoPass =
ConsultarEnd(ListaPassagem,Auxiliar,i);
printf("%-5d |",ResultadoPass->NumPass);
printf("%-5d |",ResultadoPass->NumVoo);
printf("%02d/%02d/%04d |",ResultadoPass>Data.dia,ResultadoPass->Data.mes,ResultadoPass->Data.ano);
40
printf("%02d:%02d
|", ResultadoPass>Horario.hora,ResultadoPass->Horario.minuto);
printf("%-10s|\n",ResultadoPass->Portao);
printf("______|______|___________|________|__________|\n");
}
break;
}
printf("\n\n");
system("pause");
break;
case 3:
LoopP = 1;
break;
}
}
return 0;
}
41