Escolar Documentos
Profissional Documentos
Cultura Documentos
02
02
Programa 1.0
Descrio
03
Arquivo funcoes.h 04
Arquivo main.c
06
09
Funes
09
ScreenShots
10
Arquivo funcoes.h 11
Arquivo main.c
21
Programa 3.0
Descrio
30
ScreenShots
30
Arquivo funcoes.h 31
Arquivo main.c
37
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
//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();
}
}
}
}else{
Tempo[i] = Teste;
}
Tempo[Final] = 0;
strcpy(Variavel,Tempo);
}
}else{
Tempo[i] = Teste;
printf(" ");
printf("%c",Teste);
i = i - 2 ;
}
}
Tempo[Final] = 0;
return atoi(Tempo);
44)){
}
}else{
if((Teste > 47 && Teste < 58) || (Teste == 46 || Teste ==
if(Teste == 44){
Teste = 46;
}
Tempo[i] = Teste;
}else{
}
}
}
printf("%c",8);
printf(" ");
printf("%c",8);
i--;
Tempo[Final] = 0;
return atof(Tempo);
printf("_");
}
#endif // FUNCOES_H_INCLUDED
Arquivo - main.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LIM 25
#include "funcoes.h"
struct aviao{
};
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");
system("cls");
printf("Digite Modelo do Aviao: ");
CapturarS(VoebemAvioes[indice].modelo,14);
");
CapturarS(VoebemAvioes[indice].fabricante,14);
printf("\n\nDigite o numero maximo de
Passageiros do Aviao: ");
VoebemAvioes[indice].passageiros =
CapturarI(4);
printf("\n\nDigite o comprimento do Aviao:
");
VoebemAvioes[indice].comprimento =
CapturarF(6);
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");
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
// 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();
}
}else{
Tempo[i] = Teste;
}
if( i < -1){
i = -1;
printf(" ");
11
Tempo[Final] = 0;
strcpy(Variavel,Tempo);
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--;
}
}
printf(" ");
Tempo[Final] = 0;
return atoi(Tempo);
12
}
}else{
if((Teste > 47 && Teste < 58) || (Teste == 46 || Teste ==
44)){
if(Teste == 44){
Teste = 46;
}
Tempo[i] = Teste;
}else{
printf("%c",8);
printf(" ");
printf("%c",8);
i--;
printf(" ");
}
}
Tempo[Final] = 0;
return atof(Tempo);
Estrutura->Data.dia = 0;
Estrutura->Data.mes = 0;
Estrutura->Data.ano = 0;
Estrutura->Data.nulo = 1;
Estrutura->Hora.hora = 0;
Estrutura->Hora.minuto = 0;
Estrutura->Hora.segundo = 0;
Estrutura->Hora.nulo = 1;
Estrutura->AeroportoSaida[0] = '\0';
Estrutura->AeroportoChegada[0] = '\0';
Estrutura->Rota[0] = '\0';
Estrutura->Tempo.hora = 0;
Estrutura->Tempo.minuto = 0;
Estrutura->Tempo.segundo = 0;
Estrutura->Tempo.nulo = 1;
Estrutura->Passageiros = 0;
}
13
voo* Iniciar(void){
return 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++;
Erros++;
}else if(Parametros.Data.mes == 2 && Parametros.Data.dia > 29){
Erros++;
Erros++;
}else if(Parametros.Hora.minuto > 59){
14
Erros++;
Erros++;
Erros++;
Erros++;
Erros++;
}
Auxiliar = Parametros;
Auxiliar.NumVoo = 0;
Teste = ConsultaQTD(Atual,Auxiliar);
if ( Teste > 0){
printf("\nForam encontrados %d voos com as mesmas
informacoes.\n",Teste);
}
return Erros;
}
voo* AdicinoarVoo(voo *Atual, voo Auxiliar){
voo *novo = (voo*) malloc(sizeof(voo));
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->Hora.hora = Auxiliar.Hora.hora; novo>Hora.minuto = Auxiliar.Hora.minuto; novo>Hora.segundo = Auxiliar.Hora.segundo; novo>Hora.nulo = Auxiliar.Hora.nulo;
strcpy(novo->AeroportoSaida,Auxiliar.AeroportoSaida);
strcpy(novo->AeroportoChegada,Auxiliar.AeroportoChegada);
strcpy(novo->Rota,Auxiliar.Rota);
novo->Tempo.hora = Auxiliar.Tempo.hora; novo>Tempo.minuto = Auxiliar.Tempo.minuto;
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");
>AeroportoChegada);
printf(" |
________________________________________|\n");
%27d:%02d:%02d|\n",Atual->Tempo.hora,Atual->Tempo.minuto,Atual>Tempo.segundo);
printf(" |
________________________________________|\n");
Teste = 1;
Atual = Atual->Proxima;
}
if (Teste == 0){
18
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 (Auxiliar == Atual){
Atual = Auxiliar->Proxima;
Temp = Auxiliar->Proxima;
free(Auxiliar);
Auxiliar = Temp;
}else{
Ant->Proxima = Auxiliar->Proxima;
Temp = Auxiliar->Proxima;
free(Auxiliar);
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{ in
t NumVoo; DataVoo
Data; HoraVoo
Hora;
char AeroportoSaida[30];
char AeroportoChegada [30];
char Rota [30];
HoraVoo Tempo;
int Passageiros;
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);
________________________________________\n");
printf(" |Numero:
%32d|\n",Auxiliar.NumVoo);
printf(" |
________________________________________|\n");
printf(" |Data: %26d/%02d/
%4d|\n",Auxiliar.Data.dia,Auxiliar.Data.mes,Auxiliar.Data.an o);
printf(" |
________________________________________|\n");
22
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");
informados...\n\n");
system("pause");
}else{
if(LoopAux == 0)
LoopAux = 1;
}
ListaVoos = AdicinoarVoo(ListaVoos,Auxiliar);
break;
case 2:
23
2-Nao\n");
system("cls");
printf("Usar Data do Voo como Filtro? 1-Sim /
printf("\nDigite sua escolha: ");
op = CapturarI(1,7);
if(op == 1){
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 ");
}
/ 2-Nao\n");
Auxiliar.Data.ano = CapturarI(4,0);
Auxiliar.Data.nulo = 0;
system("cls");
printf("Usar Horario do Voo como Filtro? 1-Sim
printf("\nDigite sua escolha: ");
op = CapturarI(1,7);
if(op == 1){
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){
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");
24
Chegada: ");
CapturarS(Auxiliar.AeroportoChegada,29);
}
2-Nao\n");
system("cls");
printf("Usar Rota do Voo como Filtro? 1-Sim /
printf("\nDigite sua escolha: ");
op = CapturarI(1,7);
if(op == 1){
system("cls");
printf("Usar Tempo Previsto do Voo como
Filtro? 1-Sim / 2-Nao\n");
printf("\nDigite sua escolha: ");
op = CapturarI(1,7);
if(op == 1){
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){
printf("\n\nInforme o numero de
passageiros : ");
}
Auxiliar.Passageiros = CapturarI(4,0);
system("cls");
Resultados = ConsultaQTD(ListaVoos,Auxiliar);
%d\n\n",Resultados);
system("cls");
printf("Resultados encontrados:
printf("______________________________________________________________
_________________\n");
printf("Num
|Data
|Horario |Saida
|Destino\n");
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;
}
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");
Nao\n");
printf("Usar Numero do Voo como Filtro? 1-Sim / 2printf("\nDigite sua escolha: ");
op = CapturarI(1,7);
if(op == 1){
LoopP++;
26
Auxiliar.NumVoo = CapturarI(5,0);
}
Nao\n");
system("cls");
printf("Usar Data do Voo como Filtro? 1-Sim / 2printf("\nDigite sua escolha: ");
op = CapturarI(1,7);
if(op == 1){
LoopP++;
2-Nao\n");
Auxiliar.Data.ano = CapturarI(4,0);
Auxiliar.Data.nulo = 0;
system("cls");
printf("Usar Horario do Voo como Filtro? 1-Sim /
printf("\nDigite sua escolha: ");
op = CapturarI(1,7);
if(op == 1){
LoopP++;
}
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++;
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++;
");
}
CapturarS(Auxiliar.AeroportoChegada,29);
27
system("cls");
printf("Usar Rota do Voo como Filtro? 1-Sim / 2-
Nao\n");
system("cls");
printf("Usar Tempo Previsto do Voo como Filtro? 1-
Sim / 2-Nao\n");
}
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++;
");
Auxiliar.Passageiros = CapturarI(4,0);
}
if(LoopP == 1){
system("cls");
a exclusao!\n\n");
}
system("pause");
}
LoopP = 0;
Resultados = ConsultaQTD(ListaVoos,Auxiliar);
system("cls");
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
//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();
}
}else{
Tempo[i] = Teste;
}
if( i < -1){
i = -1;
printf(" ");
}
}
31
Tempo[Final] = 0;
strcpy(Variavel,Tempo);
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--;
}
}
printf(" ");
Tempo[Final] = 0;
return atoi(Tempo);
32
}
}else{
if((Teste > 47 && Teste < 58) || (Teste == 46 || Teste ==
44)){
if(Teste == 44){
Teste = 46;
}
Tempo[i] = Teste;
}else{
printf("%c",8);
printf(" ");
printf("%c",8);
i--;
printf(" ");
}
}
Tempo[Final] = 0;
return atof(Tempo);
return 1;
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++;
Erros++;
}else if(Parametros.Data.mes == 2 && Parametros.Data.dia > 29){
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++;
Erros++;
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];
};
#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);
37
printf(" |Portao:
%31s|\n",Auxiliar.Portao);
printf(" |
________________________________________|\n\n");
informados...\n\n");
system("pause");
}else{
38
if(LoopAux == 0)
LoopAux = 1;
}
ListaPassagem = Adicinoar(ListaPassagem,Auxiliar);
break;
case 2:
ZerarEstrutura(&Auxiliar);
1-Sim / 2-Nao\n");
system("cls");
printf("Usar Numero da Passagem como Filtro?
printf("\nDigite sua escolha: ");
op = CapturarI(1,7);
if(op == 1){
printf("\n\nDigite o Numero da Passagem:
");
}
/ 2-Nao\n");
Auxiliar.NumPass = CapturarI(5,0);
system("cls");
printf("Usar Numero do Voo como Filtro? 1-Sim
printf("\nDigite sua escolha: ");
op = CapturarI(1,7);
if(op == 1){
Nao\n");
system("cls");
printf("Usar Data como Filtro? 1-Sim / 2printf("\nDigite sua escolha: ");
op = CapturarI(1,7);
if(op == 1){
printf("\n\nInsira a data:");
printf("\nDia ");
Auxiliar.Data.dia = CapturarI(2,0);
printf(" /Mes ");
39
Auxiliar.Data.mes = CapturarI(2,0);
printf(" /Ano ");
}
Nao\n");
Auxiliar.Data.ano = CapturarI(4,0);
Auxiliar.Data.nulo = 0;
system("cls");
printf("Usar Horario como Filtro? 1-Sim / 2printf("\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 ");
1-Sim / 2-Nao\n");
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?
printf("\nDigite sua escolha: ");
op = CapturarI(1,7);
if(op == 1){
system("cls");
Resultados =
ConsultaQTD(ListaPassagem,Auxiliar);
%d\n\n",Resultados);
system("cls");
printf("Resultados encontrados:
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
break;
}
printf("\n\n");
system("pause");
break;
case 3:
LoopP = 1;
break;
}
return 0;
}
41