Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include "structs.h"
- #include <string.h>
- #define SIZE_STRING 40
- #define SIZE_LONG 32
- #define SIZE_DATE 10
- Cliente procura_listaClientes(listaClientes lista);
- void limpaEcra(){
- int i=0;
- for(i=0;i<100;i++){
- printf("\n");
- }
- }
- listaClientes criaListaClientes(){
- listaClientes aux;
- Cliente no;
- aux = (listaClientes) malloc(sizeof(No_Cliente));
- if(aux!=NULL){
- aux->cliente = no;
- aux->next = NULL;
- }
- return aux;
- }
- listaViagens criaListaViagens(){
- listaViagens aux;
- Viagem no;
- aux = (listaViagens) malloc(sizeof(No_Viagem));
- if(aux!=NULL){
- aux->viagem = no;
- aux->next = NULL;
- }
- return aux;
- }
- int listaClientes_vazia(listaClientes lista)
- {
- return (lista->next == NULL ? 1 : 0);
- }
- int listaViagens_vazia(listaViagens lista)
- {
- return (lista->next == NULL ? 1 : 0);
- }
- void destroi_listaClientes(listaClientes lista){
- listaClientes temp_ptr;
- while(listaClientes_vazia(lista) == 0){
- temp_ptr = lista;
- lista = lista->next;
- free(temp_ptr);
- }
- free(lista);
- }
- void destroi_listaViagens(listaViagens lista){
- listaViagens temp_ptr;
- while(listaViagens_vazia(lista) == 0){
- temp_ptr = lista;
- lista = lista->next;
- free(temp_ptr);
- }
- free(lista);
- }
- void insereListaViagens(listaViagens lista,Viagem viagem){
- listaViagens novo;
- listaViagens ptr =lista;
- novo=(listaViagens)malloc(sizeof(No_Viagem));
- while(ptr->next!=NULL){
- ptr=ptr->next;
- }
- novo->viagem=viagem;
- ptr->next=novo;
- novo->next=NULL;
- }
- void insereListaClientes(listaClientes lista,Cliente cliente){
- listaClientes novo;
- listaClientes ptr =lista;
- novo=(listaClientes)malloc(sizeof(No_Cliente));
- while(ptr->next!=NULL){
- ptr=ptr->next;
- }
- novo->cliente=cliente;
- ptr->next=novo;
- novo->next=NULL;
- }
- int procura_listaClientes3(listaClientes lista,long cc){
- Cliente cliente;
- listaClientes atual = lista->next;
- while (atual!=NULL){
- if(atual->cliente.cc == cc){
- return 1;
- }
- atual = atual->next;
- }
- return 0;
- }
- int confirma_CC(long CC, listaClientes listaclientes){
- int max=9;
- int digitos=0;
- long aux = CC;
- while(aux!=0){
- aux/=10;
- digitos++;
- }
- if (digitos==max){
- if(procura_listaClientes3(listaclientes, CC)==1){
- printf("Cliente ja registado.Por favor insira um CC diferente.\n");
- return 0;
- }
- else
- printf("Cliente registado com sucesso.\n");
- return 1;
- }
- else{
- printf("CC invalido.Por favor insira um CC diferente.\n");
- return 0;
- }
- }
- int confirmaCC_igual(char CC[], listaClientes cliente){
- listaClientes aux;
- aux = cliente->next;
- while(aux!=NULL){
- if(strcmp(aux->cliente.cc, CC)==0){
- printf("O CC introduzido ja se encontra atribuido a um cliente, verifique de novo:\n");
- return 0;
- }
- aux = aux->next;
- }
- return 1;
- }
- //não sei se assim funciona, ou se até está bem escrito ou não, mas acho que a ideia é mais ou menos esta
- int confirma_CC_2(char CC[] , listaClientes cliente){
- int i;
- fflush(stdin);
- for(i=0; i < 8; i++){/* CC tem obrigatoriamente 8 digitos*/
- if((CC[i]<48) || (CC[i]>=58)){ /* detetar simbolos e numeros */
- printf("Caracteres nao sao validos.");
- return 0;
- }
- else if((strlen(CC))!=8){ /*verificar se tem 8 digitos EDIT: só precisas de verificar uma vez, escusas de verificar sempre que corre o ciclos*/
- printf("Por favor introduza outro CC");
- return 0;
- }
- }
- confirmaCC_igual(CC, cliente);
- }
- int confirma_nome(char nome[]){
- int i;
- fflush(stdin);
- for(i=0; i < strlen(nome); i++){
- if((nome[i]>=48) && (nome[i]<=58)){
- printf("Numeros nao sao validos.Introduza uma nome valido por favor.\n");
- return 0;
- }
- }
- return 1;
- }
- Cliente criaCliente(listaClientes listaclientes){
- Cliente cliente;
- gets(cliente.nome);
- do{
- printf("Nome:");
- gets(cliente.nome);
- }while(confirma_nome(cliente.nome)!=1);
- do{
- printf("\nCC:");
- scanf("%ld",&cliente.cc);
- //scanf("%ld",&cliente.cc);
- }while(confirma_CC(cliente.cc, listaclientes)!=1);
- //while(confirma_CC(cliente.cc,listaclientes)!= 1);
- return cliente;
- }
- listaClientes init_listaClientes(){
- FILE *ficheiro;
- Cliente cliente;
- listaClientes novo=criaListaClientes();
- ficheiro=fopen("/Users/Goncalopinto/Desktop/ProjetoPPP/ProjetoPPP/AgenciaViagens/clientes.txt", "r");
- while(fscanf(ficheiro,"%[^*]*%ld\n",cliente.nome,&cliente.cc)==2){
- insereListaClientes(novo,cliente);
- }
- fclose(ficheiro);
- return novo;
- }
- Cliente procura_listaClientes2(listaClientes lista,long cc){
- Cliente cliente;
- listaClientes atual = lista->next;
- while (atual!=NULL){
- if(atual->cliente.cc == cc){
- return atual->cliente;
- }
- atual = atual->next;
- }
- printf("Cliente nao existente!\n");
- return cliente;
- }
- listaViagens init_listaViagens(listaClientes listaclientes){
- FILE *ficheiro;
- Viagem viagem;
- Cliente cliente,cliente2;
- int i,j;
- listaViagens novo = criaListaViagens();
- ficheiro = fopen("/Users/Goncalopinto/Desktop/ProjetoPPP/ProjetoPPP/AgenciaViagens/viagens.txt","r");
- while(fscanf(ficheiro,"%d*%[^*]*%[^*]*%d-%d-%d*%d:%d*%d*%d*%f*%d*%d*",&viagem.codigo,viagem.origem,viagem.destino,&viagem.data.dia,&viagem.data.mes,&viagem.data.ano,&viagem.data.hora,&viagem.data.minuto,&viagem.duracao,&viagem.capacidade,&viagem.preco,&viagem.numListaReservas,&viagem.numListaEspera)==13){
- viagem.listaReservas = criaListaClientes();
- viagem.listaEspera = criaListaClientes();
- for(i=0;i<viagem.numListaReservas;i++){
- if(fscanf(ficheiro,"%ld:",&cliente.cc)==1){
- cliente2 = procura_listaClientes2(listaclientes,cliente.cc);
- insereListaClientes(viagem.listaReservas,cliente2);
- }
- }
- if(fprintf(ficheiro,"*")){
- for(j=0;j<viagem.numListaEspera;j++){
- if(fscanf(ficheiro,"%ld:",&cliente.cc)==1){
- cliente2 = procura_listaClientes2(listaclientes,cliente.cc);
- insereListaClientes(viagem.listaEspera,cliente2);
- }
- }
- }
- insereListaViagens(novo,viagem);
- fscanf(ficheiro,"\n");
- }
- fclose(ficheiro);
- return novo;
- }
- void savelistaClientes(listaClientes listaclientes){
- FILE *ficheiro;
- listaClientes p = listaclientes->next;
- ficheiro = fopen("/Users/Goncalopinto/Desktop/ProjetoPPP/ProjetoPPP/AgenciaViagens/clientes.txt","w");
- while(p!=NULL){
- fprintf(ficheiro,"%s*%ld\n",p->cliente.nome,p->cliente.cc);
- p = p->next;
- }
- fclose(ficheiro);
- }
- void savelistaViagens(listaViagens listaviagens){
- FILE *ficheiro;
- listaViagens p = listaviagens->next;
- listaClientes reservas;
- listaClientes espera;
- ficheiro = fopen("/Users/Goncalopinto/Desktop/ProjetoPPP/ProjetoPPP/AgenciaViagens/viagens.txt","w");
- while(p!=NULL){
- reservas = p->viagem.listaReservas;
- reservas = reservas->next;
- espera = p->viagem.listaEspera;
- espera = espera->next;
- fprintf(ficheiro,"%d*%s*%s*%d-%d-%d*%d:%d*%d*%d*%.2f*%d*%d*",p->viagem.codigo,p->viagem.origem,p->viagem.destino,p->viagem.data.dia,p->viagem.data.mes,p->viagem.data.ano,p->viagem.data.hora,p->viagem.data.minuto,p->viagem.duracao,p->viagem.capacidade,p->viagem.preco,p->viagem.numListaReservas,p->viagem.numListaEspera);
- while(reservas!=NULL){
- fprintf(ficheiro,"%ld:",reservas->cliente.cc);
- reservas= reservas->next;
- }
- fprintf(ficheiro,"*");
- while(espera!=NULL){
- fprintf(ficheiro,"%ld:",espera->cliente.cc);
- espera = espera->next;
- }
- fprintf(ficheiro,"\n");
- p=p->next;
- }
- fclose(ficheiro);
- }
- void imprimeLista_viagens(listaViagens listaviagens){
- listaViagens p;
- p=listaviagens->next;
- while(p!=NULL){
- printf("Codigo: %d\nOrigem: %s\nDestino: %s\nCapacidade: %d\nDuracao: %d\nPreco: %.2f\nData: %d-%d-%d\nHoras: %d:%d\nListaReservas:%d\nListaEspera:%d\n\n\n",p->viagem.codigo,p->viagem.origem,p->viagem.destino,p->viagem.capacidade,p->viagem.duracao,p->viagem.preco,p->viagem.data.dia,p->viagem.data.mes,p->viagem.data.ano,p->viagem.data.hora,p->viagem.data.minuto,p->viagem.numListaReservas,p->viagem.numListaEspera);
- p=p->next;
- }
- }
- void imprimeListaClientes(listaClientes listaclientes){
- listaClientes p;
- p=listaclientes->next;
- while(p!=NULL){
- printf("%s %ld\n",p->cliente.nome,p->cliente.cc);
- p=p->next;
- }
- }
- int confirma_cidades(char cidade[]){
- int i;
- fflush(stdin);
- for(i=0; i < strlen(cidade); i++){
- if((cidade[i]>=48) && (cidade[i]<=58)){
- printf("Numeros nao sao validos.Introduza uma cidade valida por favor.\n");
- return 0;
- }
- }
- return 1;
- }
- Viagem criaViagem(){
- Viagem viagem;
- printf("Introduza o codigo da viagem:");
- scanf("%d",&viagem.codigo);
- fflush(stdin);
- do{
- printf("Introduzir origem:");
- scanf("%s",viagem.origem);
- }while(confirma_cidades(viagem.origem)!=1);
- do{
- printf("Introduzir destino:");
- scanf("%s",viagem.destino);
- }while(confirma_cidades(viagem.destino)!=1);
- printf("\nData(dd-mm-aa):");
- scanf("%d-%d-%d",&viagem.data.dia,&viagem.data.mes,&viagem.data.ano);
- printf("\nHora(hh:mm):");
- scanf("%d:%d",&viagem.data.hora,&viagem.data.minuto);
- printf("\nCapacidade:");
- scanf("%d",&viagem.capacidade);
- printf("\nDuracao(minutos):");
- scanf("%d",&viagem.duracao);
- printf("\nPreco:");
- scanf("%f",&viagem.preco);
- viagem.numListaEspera = 0;
- viagem.numListaReservas = 0;
- viagem.listaEspera = criaListaClientes();
- viagem.listaReservas = criaListaClientes();
- return viagem;
- }
- int confirma_codigo(char codigo[]){
- int i;
- fflush(stdin);
- for(i=0; i < strlen(codigo); i++){
- if((codigo[i]<48) || (codigo[i]>=58)){
- printf("Caracteres nao sao validos.Introduza um numero por favor.\n");
- return 0;
- }
- }
- return 1;
- }
- void reservaViagem(listaClientes listaclientes, listaViagens listaviagens){
- char codigo[20];
- Cliente cliente = procura_listaClientes(listaclientes);
- listaViagens p;
- do{
- printf("Codigo:");
- scanf("%s",codigo);
- }while(confirma_codigo(codigo)!=1);
- p=listaviagens->next;
- while(p!=NULL){
- if(p->viagem.codigo==atoi(codigo) && p->viagem.capacidade>0){
- p->viagem.capacidade--;
- p->viagem.numListaReservas++;
- insereListaClientes(p->viagem.listaReservas,cliente);
- }
- else if(p->viagem.codigo==atoi(codigo) && p->viagem.capacidade==0){
- p->viagem.numListaEspera++;
- insereListaClientes(p->viagem.listaEspera,cliente);
- }
- p=p->next;
- }
- }
- void imprimeReservasViagem(listaViagens listaviagens){
- char codigo[20];
- listaViagens p;
- do{
- printf("Codigo:");
- scanf("%s",codigo);
- }while(confirma_codigo(codigo)!=1);
- p=listaviagens->next;
- while(p!=NULL){
- if(p->viagem.codigo==atoi(codigo)){
- imprimeListaClientes(p->viagem.listaReservas);
- }
- p=p->next;
- }
- }
- void imprimeEsperaViagem(listaViagens listaviagens){
- char codigo[20];
- listaViagens p;
- do{
- printf("Codigo:");
- scanf("%s",codigo);
- }while(confirma_codigo(codigo)!=1);
- p=listaviagens->next;
- while(p!=NULL){
- if(p->viagem.codigo==atoi(codigo)){
- imprimeListaClientes(p->viagem.listaEspera);
- }
- p=p->next;
- }
- }
- Cliente procura_listaClientes(listaClientes lista){
- long cc;
- Cliente cliente;
- listaClientes atual = lista->next;
- printf("Introduza o seu CC:");
- scanf("%ld",&cc);
- while (atual!=NULL){
- if(atual->cliente.cc == cc){
- return atual->cliente;
- }
- atual = atual->next;
- }
- printf("Cliente nao existente!\n");
- return cliente;
- }
- listaViagens procuraDestinto(listaViagens lista){
- char destino[40];
- int i =0;
- listaViagens atual = lista->next;
- listaViagens aux = criaListaViagens();
- do{
- printf("Introduzir destino:");
- scanf("%s",destino);
- }while(confirma_cidades(destino)!=1);
- while (atual!=NULL){
- if(strcmp(atual->viagem.destino,destino)==0){
- insereListaViagens(aux,atual->viagem);
- i=1;
- }
- atual = atual->next;
- }
- if(!i){
- printf("Viagem nao existente!\n\n");
- }
- return aux;
- }
- int comparadata(Data *data1,Data *data2){
- if (data1->ano>data2->ano){
- return 1;
- }
- else if(data1->ano<data2->ano){
- return -1;
- }
- else{
- if (data1->mes>data2->mes){
- return 1;
- }
- else if (data1->mes<data2->mes){
- return -1;
- }
- else if (data1->dia>data2->dia){
- return 1;
- }
- else if(data1->dia<data2->dia){
- return -1;
- }
- else if(data1->hora>data2->hora){
- return 1;
- }
- else if(data2->hora<data2->hora){
- return -1;
- }
- else if(data1->minuto>data2->minuto){
- return 1;
- }
- else if(data2->minuto<data2->minuto){
- return -1;
- }
- else{
- return 0;
- }
- }
- }
- void inserirViagemOrdenado(listaViagens lista,Viagem viagem){
- listaViagens novo;
- listaViagens ant,act;
- act = lista->next;
- novo=(listaViagens)malloc(sizeof(No_Viagem));
- novo->viagem=viagem;
- ant=lista;
- act=lista->next;
- while(act!=NULL && comparadata(&(act->viagem.data),&(novo->viagem.data))==-1){
- ant=ant->next;
- act=act->next;
- }
- ant->next=novo;
- novo->next=act;
- }
- listaViagens vigensDoCliente(listaViagens lista,listaClientes listaclientes){
- Cliente cliente=procura_listaClientes(listaclientes);
- listaViagens atual = lista->next;
- listaViagens aux =criaListaViagens();
- listaClientes reservas;
- while (atual!=NULL){
- reservas = atual->viagem.listaReservas;
- reservas = reservas->next;
- while(reservas!=NULL){
- if(reservas->cliente.cc == cliente.cc){
- inserirViagemOrdenado(aux,atual->viagem);
- }
- reservas = reservas->next;
- }
- atual = atual->next;
- }
- return aux;
- }
- void cancelaEspera(listaViagens listaviagens,int codigo,Cliente cliente){
- listaViagens p = listaviagens->next;
- listaClientes ant,atual;
- while(p!=NULL){
- if(p->viagem.codigo == codigo){
- ant = p->viagem.listaEspera;
- atual = ant->next;
- while(atual!=NULL&&atual->cliente.cc!=cliente.cc){
- atual=atual->next;
- ant=ant->next;
- }
- if(atual!=NULL){
- ant->next=atual->next;
- free(atual);
- }
- }
- p = p->next;
- }
- }
- void colocaReserva(int codigo, listaViagens listaviagens){
- listaViagens p = listaviagens->next;
- listaClientes reservas,espera;
- while(p!=NULL){
- if(p-> viagem.codigo == codigo){
- reservas = p->viagem.listaReservas;
- espera = p->viagem.listaEspera;
- espera = espera->next;
- insereListaClientes(reservas,espera->cliente);
- cancelaEspera(listaviagens,p->viagem.codigo,espera->cliente);
- p->viagem.numListaEspera--;
- p->viagem.numListaReservas++;
- }
- p=p->next;
- }
- }
- void cancelaReserva(listaClientes lista,listaViagens lista2){
- char codigo[20];
- Cliente cliente=procura_listaClientes(lista);
- listaViagens atual = lista2->next;
- listaClientes ant;
- listaClientes atual2;
- listaClientes espera;
- do{
- printf("Codigo da viagem que pretende cancelar:");
- scanf("%s",codigo);
- }while(confirma_codigo(codigo)!=1);
- while (atual!=NULL){
- if(atual->viagem.codigo == atoi(codigo)){
- ant = atual->viagem.listaReservas;
- atual2=ant->next;
- espera = atual->viagem.listaEspera->next;
- while(atual2!=NULL&&atual2->cliente.cc!=cliente.cc){
- atual2=atual2->next;
- ant=ant->next;
- }
- if(atual2!=NULL){
- ant->next=atual2->next;
- free(atual2);
- if(espera == NULL){
- atual->viagem.capacidade++;
- atual->viagem.numListaReservas--;
- }
- else{
- colocaReserva(atual->viagem.codigo,lista2);
- }
- }
- }
- atual=atual->next;
- }
- }
- void menu(listaClientes listaclientes, listaViagens listaviagens){
- char escolha[2],escolha2[2];
- printf("\t\t\tPrincipios Programacao Procedimental\n\t\t\t\t Agencia Viagens\n");
- printf("\t\t\t Copyright© Martins&Pinto\n\n\n\n");
- printf(" \tMenu Inicial: \n\n\t1)Criar Cliente\n \t2)Criar Viagem\n \t3)Reservar Viagem\n \t4)Listar Clientes\n \t5)Listar Viagens\n \t6)Listar Reservas\n \t7)Salvar\n \t8)Viagens do cliente\n \t9)Cancelar reserva\n \t10)Listar Esperas\n \t11)Sair\n\n\tEscolha: ");
- scanf("%s",escolha);
- switch(atoi(escolha)){
- case 1:
- limpaEcra();
- insereListaClientes(listaclientes,criaCliente(listaclientes));
- limpaEcra();
- menu(listaclientes,listaviagens);
- break;
- case 2: limpaEcra();
- insereListaViagens(listaviagens,criaViagem());
- limpaEcra();
- menu(listaclientes,listaviagens);
- break;
- case 3:
- reservaViagem(listaclientes,listaviagens);
- menu(listaclientes,listaviagens);
- break;
- case 4:
- imprimeListaClientes(listaclientes);
- menu(listaclientes,listaviagens);
- break;
- case 5:
- limpaEcra();
- printf("\n\n\tListar Viagens:\n\n\t1)Todas\n\t2)Por destino\n\n\tEscolha:");
- scanf("%s",escolha2);
- switch(atoi(escolha2)){
- case 1: imprimeLista_viagens(listaviagens);
- break;
- case 2:
- imprimeLista_viagens(procuraDestinto(listaviagens));
- break;
- default: printf("Escolha invalida. Tente Novamente.\n");
- }
- menu(listaclientes,listaviagens);
- break;
- case 6:
- imprimeReservasViagem(listaviagens);
- menu(listaclientes,listaviagens);
- break;
- case 7:
- savelistaClientes(listaclientes);
- savelistaViagens(listaviagens);
- menu(listaclientes,listaviagens);
- break;
- case 8:
- imprimeLista_viagens(vigensDoCliente(listaviagens,listaclientes));
- menu(listaclientes,listaviagens);
- break;
- case 9:
- cancelaReserva(listaclientes,listaviagens);
- menu(listaclientes,listaviagens);
- break;
- case 10:
- imprimeEsperaViagem(listaviagens);
- menu(listaclientes,listaviagens);
- break;
- case 11:
- exit(0);
- default:
- printf("\tEscolha invalida.Tente Novamente.\n\n");
- menu(listaclientes,listaviagens);
- break;
- }
- }
- int main()
- {
- listaClientes listaclientes = init_listaClientes();
- listaViagens listaviagens = init_listaViagens(listaclientes);
- menu(listaclientes,listaviagens);
- destroi_listaClientes(listaclientes);
- destroi_listaViagens(listaviagens);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement