Progetto c++ dell'aereo

di il
3 risposte

Progetto c++ dell'aereo

CIAO LO SO SONO ROMPI..... ma volevo risolvere quest'altro problema.
Si devono gestire le prenotazioni dei posti in un aereo. le informazioni sono contenute in un record con i seguenti componenti: codice volo, citta di partenza, ora di partenza, citta di arrivo, data arrivo ora di arrivo, numero posti venduti, numero posti disponibili, prezzo. si deve costruire le funzioni di inserimento , cancellazione e di aggiornamento di un record. inoltre si deve costruire la funzione prenota e cancella .
io ho scritto questo ma gia mi da un errore dove ho sbagliato??


/*
Name: Es. 3.1
Author: Dechiara Paolo
Date: 26/11/07 14.04
Description:
*/

#include <stdio.h> //direttive
#include <stdlib.h> //direttive
#include <string.h> //direttive
#define numpostMax 100 // numero massimo di passeggeri

/*DEFINIZIONI RECORD*/
typedef struct {
char giorno[10];
int giornoNumero;
char mese;
int anno;
} dataPartenza;

typedef struct {
char giorno1[10];
int giornoNumero1;
char mese1;
int anno1;
} dataArrivo;


typedef struct {
char codiceVolo[30];
char cittaPartenza[50];
float oraPartenza;
char cittaArrivo[50];
float oraArrivo;
int postiVenduti;
int postidisponibili;
float prezzo;
dataPartenza dPartenza;
dataArrivo dArrivo;
} prenotazioneAereo;


void dativolo (dativolo *volo);
void dataarrivo (dataarrivo *arrivo);
void datapartenza (datapartenza *partenza);

int
main(void)
{
dativolo volo;
char risp;
int i;
//descrizione programma

//inserimento caratteristiche di un nuovo libro
printf("\n Inserimento dati: \n");

for (i=0; risp != 'n' && risp != 'N'; ++i)
{
printf("\n Inserisci le informazioni relative al volo %d:\n", i+1);
dativolo(&volo); //chiamata di funzione, inserisce i dati nel record libro
archivio=volo; //copia il record nel vettore di record
printf("\n Inserire un'altro libro? S o N ----> \n"); //se si inserisce N si salta alla stampa a video
scanf(" %c",&risp);
svuotaBuffer();
numLib++; //incrementa il numero totale di libri memorizzati
}


void
dativolo (dativolo *volo) //acquisisce da tastiera i campi di un record
{
printf(" Inserisci il codice del volo --> ");
gets(dativolo->codiceVolo);
printf(" Inserisci la citta di partenza --> ");
gets(dativolo->cittaPartenza);
printf(" Inserisci l'ora di partenza --> ");
scanf("%f", &dativolo->oraPartenza);
printf(" Inserisci la citta di arrivo --> ");
gets(dativolo->cittaArrivo);
printf(" Inserisci l' ora di arrivo --> ");
gets(dativolo->oraArrivo);
printf(" Inserisci i posti venduti --> ");
scanf("%f", dativolo-> postiVenduti);
printf(" Inserisci i posti disponibili --> ");
gets(dativolo->postidisponibili);
printf(" Inserisci il prezzo --> ");
gets(&dativolo-> prezzo);
svuotaBuffer();
printf(" Inserisci il nome dell'editore --> ");
gets(libro->editore);
datapartenza (&volo->partenza);
dataarrivo (&volo->arrivo);
}

void
datapartenza (datapartenza *partenza)
{
printf(" Inserisci il giorno in lettere della partenza --> ");
scanf(caratteristiche->giorno);
printf(" Inserisci il giorno in cifre della partenza --> ");
scanf(" %d", &caratteristiche->giornoNumero);
printf(" Inserisci il mese in lettere della partenza --> ");
scanf(caratteristiche->mese);
svuotaBuffer();
printf(" Inserisci l'anno della partenza --> ");
gets(caratteristiche->anno);
}


void
dataarrivo (dataarrivo *arrivo)
{
printf(" Inserisci il giorno in lettere dell' arrivo --> ");
scanf(caratteristiche->giorno);
printf(" Inserisci il giorno in cifre dell' arrivo --> ");
scanf(" %d", &caratteristiche->giornoNumero);
printf(" Inserisci il mese in lettere dell' arrivo --> ");
scanf(caratteristiche->mese);
svuotaBuffer();
printf(" Inserisci l'anno dell' arrivo --> ");
gets(caratteristiche->anno);
}

PER CORTESIA CORREGGETE TUTTI GLI ERRORI TROVATI E SE NON CONTINUA A FUNZIONARE SE POTETE INSERIRE IL CODICE MANCANTE. grazie 1000 in anticipo

3 Risposte

  • Re: Progetto c++ dell'aereo

    Ci sono diversi errori, ad esempio:
    void dativolo (dativolo *volo);
    void dataarrivo (dataarrivo *arrivo);
    void datapartenza (datapartenza *partenza);

    hai dichiarato queste funzioni con i nomi assegnati alle strutture. Devi rivedere un po
  • Re: Progetto c++ dell'aereo

    Overflow ha scritto:


    ci sono diversi errori, ad esempio:
    void dativolo (dativolo *volo);
    void dataarrivo (dataarrivo *arrivo);
    void datapartenza (datapartenza *partenza);

    hai dichiarato queste funzioni con i nomi assegnati alle strutture. Devi rivedere un po
    Ciao l'ho rivisto il programma ci ho perso 4 giorni ma questo è quello che ho fatto:

    //Dichiarazione delle direttive
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>

    //Dichiarazione delle strutture dei file
    typedef struct
    {
    char giorno1[10];
    int giornoNumero1;
    char mese;
    int anno;
    } dataPartenza;

    typedef struct {
    char giorno1[10];
    int giornoNumero1;
    char mese1;
    int anno1;
    } dataArrivo;

    typedef struct
    {
    char codiceVolo[30];
    char cittaPartenza[50];
    float oraPartenza;
    char cittaArrivo[50];
    float oraArrivo;
    int postiVenduti;
    int postidisponibili;
    float prezzo;
    dataPartenza dPartenza;
    dataArrivo dArrivo;
    int flag;
    } prenotazioneAereo;

    prenotazioneAereo viaggio;
    dataPartenza dPartenza;
    dataArrivo dArrivo;
    FILE *fp;

    //Dichiarazione dei prototipi
    void inserimento();
    void cancellazione();
    void aggiornamento();
    void prenota();
    void cancella();
    void ricerca();
    void visualizza();

    //Dichiarazione delle variabili globali
    int Numero;
    char codiceVolo[20];//Variabile di lavoro , servono per la ricerca di un record nelle funzioni cancellazione , cancella e aggiornamento
    char cittaPartenza[20];//Variabile di lavoro , servono per la ricerca di un record nelle funzioni cancellazione , cancella e aggiornamento
    char cittaArrivo[10];//Variabile di lavoro, servono per la ricerca di un record nelle funzioni cancellazione , cancella e aggiornamento
    int risposta;//Variabile di lavoro , serve per contenere la risposta dell'utente
    long posizione;//Variabile di lavoro , serve per la posizione del record
    int trovato;//Variabile di lavoro , serve per contenere il valore di ricerca
    int i;//Variabile di lavoro , indice
    int ,f2,f3,f4,f5;//Variabili di lavoro , servono nella ricerca di un record da cui viene assegnato il valore dalle funzioni strcmp
    int dimrec;//Variabile di lavoro
    int dimfile;//Variabile di lavoro
    float oraArrivo;
    float oraPartenza;
    int main (void){
    //Inizio File
    //Do-while , con lo switch dentro al do per la scelta della funzione da parte dell'utente
    do
    {
    printf("\n Digita il numero che corrisponde alla operazione da eseguire\n\n");
    printf("\n 1 : Inserimento di un nuovo record");
    printf("\n 2 : Cancellazione di un record");
    printf("\n 3 : Aggiornamento di un record");
    printf("\n 4 : Prenota");
    printf("\n 5 : Cancella");
    printf("\n 6 : per uscire dal programma\n");
    printf("\n\n Inserisci il numero--->");
    scanf("%d", &Numero);
    //Inizio Switch
    switch (Numero)
    {
    case 1:
    inserimento();//Chiamata funzione inserimento per scelta 1
    break;
    case 2:
    cancellazione();//Chiamata funzione cancellazione per scelta 2
    break;
    case 3:
    aggiornamento();//Chiamata funzione aggiornamento per scelta 3
    break;
    case 4:
    prenota();//Chiamata funzione prenota per scelta 4
    break;
    case 5:
    cancella();//Chiamata funzione cancella per scelta 5
    break;
    }// fine switch
    }
    while (Numero !=6) ; //Ripete finchè il valore della variabile numero non è 6 , fine swhile

    system("PAUSE");//System Pause per fermare la schermata di output
    return (0);
    system("cls");//System clear screen per pulire lo schermo
    //Fine File
    }

    //Funzione inserimento
    void inserimento(){
    int risposta;
    do//Inizo do
    {
    //Acquisizione dei dati da tastiera da parte dell'utente
    printf ("inserisci i dati del viaggio:\n");
    printf(" Inserisci il codice del volo --> ");
    scanf("%s",viaggio.codiceVolo);
    printf(" Inserisci la citta di partenza --> ");
    scanf("%s",viaggio.cittaPartenza);
    printf("inserisci la data della Partenza : \n");
    printf("Giorno in caratteri : ");
    scanf("%c",&dPartenza.giorno1);
    printf("Giorno in numeri : ");
    scanf("%d",&dPartenza.giornoNumero1);
    printf("Mese in caratteri : ");
    scanf("%c",&dPartenza.mese);
    printf("Anno : ");
    scanf("%d",&dPartenza.anno);
    printf(" Inserisci l'ora di partenza --> ");
    scanf("%s",viaggio.oraPartenza);
    printf(" Inserisci la citta di arrivo --> ");
    scanf("%s",viaggio.cittaArrivo);
    printf("inserisci la data dell'arrivo: \n");
    printf("Giorno in caratteri : ");
    scanf("%c",&dArrivo.giorno1);
    printf("Giorno in numeri : ");
    scanf("%d",&dArrivo.giornoNumero1);
    printf("Mese in caratteri : ");
    scanf("%c",&dArrivo.mese1);
    printf("Anno : ");
    scanf("%d",&dArrivo.anno1);
    printf(" Inserisci l' ora di arrivo --> ");
    scanf("%s",viaggio.oraArrivo);
    printf(" Inserisci i posti venduti --> ");
    scanf("%s",viaggio.postiVenduti);
    printf(" Inserisci i posti disponibili --> ");
    scanf("%s",viaggio.postidisponibili);
    printf(" Inserisci il prezzo --> ");
    scanf("%s",viaggio.prezzo);
    viaggio.postidisponibili=0;
    viaggio.flag=0;
    fwrite(&viaggio ,sizeof(prenotazioneAereo),1,fp);
    printf("Altri voli da inserire? ( 0=no , 1=Si : ");
    scanf("%d",&risposta);
    }
    while(risposta !=0); //Fine primo do
    fclose(fp);//Chiusura del file
    } //Fine funzione inserimento

    // inzio funzione cancellazione

    void cancellazione()
    {



    fp =fopen("Aereo.dat","r+");// apre il file

    if(fp==NULL) {
    perror("Errore in apertura del file");
    exit(1);
    }

    // determina la dimensione del file
    fseek(fp, 0, SEEK_END);
    dimfile=ftell(fp);

    fclose(fp);//Chiusura del file



    do//Inizio do
    {
    //Acquisizione dati per la ricerca del record da cancellare
    printf("Cancellazione di un record\n");
    printf("Inserisci il codice da eliminare:\n ");
    scanf("%s",codiceVolo);
    printf("inserisci il paese di partenza:\n");
    scanf ("%s", cittaPartenza);
    printf("inserisci il paese di arrivo:\n");
    scanf ("%s", cittaPartenza);
    printf("Orario di partenza: ");
    scanf("%f", oraPartenza);
    printf("orario di arrivo:\n");
    scanf("%f", oraArrivo);

    fp =fopen("Aereo.dat","r+");//Apertura file aereo.dat in modalità r+
    ricerca();//Chiamata funzione ricerca

    if (trovato == 0)//Inizio di un if-else annidato con un altro if
    {
    printf("Volo non trovato! \n\n");
    system("PAUSE");
    }
    else
    {
    if (viaggio.flag == 0)
    {
    visualizza();
    do //Inizio secondo do
    {
    printf("Confermi Cancellazione? ( 0=no , 1=Si : ");
    scanf("%d",&risposta);
    }
    while((risposta !=0) && (risposta !=1)); //Fine secondo do

    if (risposta == 1)
    {
    viaggio.flag = 1;
    fseek(fp,posizione,0);
    fwrite(&viaggio ,sizeof(prenotazioneAereo),1,fp);
    }
    }
    else
    {
    printf("volo già cancellato! \n\n");
    system("PAUSE");//Utilizzo della system pause per fermare lo schermo
    }
    }

    fclose(fp);//Chiusura del file
    printf("Altri voli da cancellare ? ( 0=no , 1=Si : ");
    scanf("%d",&risposta);
    }
    while(risposta !=0); //Fine primo do



    } //Fine funzione Cancellazione

    // Inizio funzione di aggiornamento di un record


    void aggiornamento()

    {


    fp =fopen("Aereo.dat","r+");
    // apre il file aereo.dat in modalità r+

    if(fp==NULL) {
    perror("Errore in apertura del file");
    exit(1);
    }

    // determina la dimensione del file
    fseek(fp, 0, SEEK_END);//Utilizzo della funzione fseek
    dimfile=ftell(fp);


    fclose(fp);//Chiusura del file



    do
    {
    //Acquisizione dei dati per la ricerca del record da aggiornare
    printf("Aggiornamento di un record\n");
    printf("Inserisci il codice da aggiornare:\n ");
    scanf("%s",codiceVolo);
    printf("inserisci il paese di partenza:\n");
    scanf ("%s", cittaPartenza);
    printf("inserisci il paese di arrivo:\n");
    scanf ("%s", cittaPartenza);
    printf("Orario di partenza: ");
    scanf("%f", oraPartenza);
    printf("orario di arrivo:\n");
    scanf("%f", oraArrivo);
    fp =fopen("Aereo.dat","r+");//Apertura del file aereo.dat in modalità r+

    ricerca();//Chiamata della funzione ricerca

    if (trovato == 0)//If per il controllo della ricerca del record , se è 0 visualizza un messaggio di errore altrimenti aggiorna il record
    {
    printf("volo non trovato! \n\n");
    system("PAUSE");
    }
    else
    {
    if (viaggio.flag == 0)
    {
    visualizza();
    printf(" Inserisci il codice del volo --> ");
    scanf("%s",viaggio.codiceVolo);
    printf(" Inserisci la citta di partenza --> ");
    scanf("%s",viaggio.cittaPartenza);
    printf("inserisci la data della Partenza : \n");
    printf("Giorno in caratteri : ");
    scanf("%c",&dPartenza.giorno1);
    printf("Giorno in numeri : ");
    scanf("%d",&dPartenza.giornoNumero1);
    printf("Mese in caratteri : ");
    scanf("%c",&dPartenza.mese);
    printf("Anno : ");
    scanf("%d",&dPartenza.anno);
    printf(" Inserisci l'ora di partenza --> ");
    scanf("%s",viaggio.oraPartenza);
    printf(" Inserisci la citta di arrivo --> ");
    scanf("%s",viaggio.cittaArrivo);
    printf("inserisci la data dell'arrivo: \n");
    printf("Giorno in caratteri : ");
    scanf("%c",&dArrivo.giorno1);
    printf("Giorno in numeri : ");
    scanf("%d",&dArrivo.giornoNumero1);
    printf("Mese in caratteri : ");
    scanf("%c",&dArrivo.mese1);
    printf("Anno : ");
    scanf("%d",&dArrivo.anno1);
    printf(" Inserisci l' ora di arrivo --> ");
    scanf("%s",viaggio.oraArrivo);
    do
    {
    printf("Nr Posti Venduti ");
    scanf("%d",&viaggio.postiVenduti);
    }
    while((viaggio.postiVenduti > viaggio.postidisponibili));
    printf(" Inserisci i posti disponibili --> ");
    scanf("%s",viaggio.postidisponibili);
    printf(" Inserisci il prezzo --> ");
    scanf("%s",viaggio.prezzo);

    printf("Prezzo: ");
    scanf("%f",&viaggio.prezzo);
    do
    {
    printf("Confermi Aggiornamento? ( 0=no , 1=Si : ");
    scanf("%d",&risposta);
    }
    while((risposta !=0) && (risposta !=1));

    if (risposta == 1)
    {
    fseek(fp,posizione,0);
    fwrite(&viaggio ,sizeof(prenotazioneAereo),1,fp);
    }
    }
    else
    {
    printf("Volo cancellato! \n\n");
    system("PAUSE");
    }
    }


    fclose(fp);
    printf("Altri aggiornamenti ? ( 0=no , 1=Si : ");
    scanf("%d",&risposta);
    }
    while(risposta !=0);



    }

    void prenota()
    {

    int posti;
    int postitotali;
    int postiprenotabili;

    fp =fopen("Aereo.dat","r+");
    /* apre il file */

    if(fp==NULL) {
    perror("Errore in apertura del file");
    exit(1);
    }

    /* determina la dimensione del file */
    fseek(fp, 0, SEEK_END);
    dimfile=ftell(fp);


    fclose(fp);



    do
    {
    printf("Prenotazione di un volo\n");
    printf("Inserisci il codice:\n ");
    scanf("%s",codiceVolo);
    printf("inserisci il paese di partenza:\n");
    scanf ("%s", cittaPartenza);
    printf("inserisci il paese di arrivo:\n");
    scanf ("%s", cittaPartenza);
    printf("Orario di partenza: ");
    scanf("%f", oraPartenza);
    printf("orario di arrivo:\n");
    scanf("%f", oraArrivo);
    fp =fopen("Aereo.dat","r+");
    ricerca();

    if (trovato == 0)
    {
    printf("volo non trovato! \n\n");
    system("PAUSE");
    }
    else
    {
    if (viaggio.flag == 0)
    {
    visualizza();
    postiprenotabili = viaggio.postidisponibili - viaggio.postiVenduti;
    printf(" I Posti prenotabili sono : %d \n",postiprenotabili);
    do
    {
    printf("Nr Posti da prenotare ");

    scanf("%d",&posti);



    }
    while((posti > viaggio.postidisponibili));

    viaggio.postiVenduti=viaggio.postiVenduti+posti;
    viaggio.postidisponibili=viaggio.postidisponibili-posti;
    do
    {
    printf("Confermi Prenotazione? ( 0=no , 1=Si : ");
    scanf("%d",&risposta);
    }
    while((risposta !=0) && (risposta !=1));

    if (risposta == 1)
    {
    fseek(fp,posizione,0);
    fwrite(&viaggio ,sizeof(prenotazioneAereo),1,fp);
    }
    }
    else
    {
    printf("Volo cancellato! \n\n");
    system("PAUSE");
    }
    }


    fclose(fp);
    printf("Altre prenotazioni ? ( 0=no , 1=Si : ");
    scanf("%d",&risposta);
    }
    while(risposta !=0);



    }



    void cancella()
    {

    int posti;
    int postitotali;
    int postiprenotabili;

    fp =fopen("Aereo.dat","r+");
    /* apre il file */

    if(fp==NULL) {
    perror("Errore in apertura del file");
    exit(1);
    }

    /* determina la dimensione del file */
    fseek(fp, 0, SEEK_END);
    dimfile=ftell(fp);


    fclose(fp);



    do
    {
    printf("Cancellazione di una Prenotazione \n");
    printf("Inserisci il codice:\n ");
    scanf("%s",codiceVolo);
    printf("inserisci il paese di partenza:\n");
    scanf ("%s", cittaPartenza);
    printf("inserisci il paese di arrivo:\n");
    scanf ("%s", cittaPartenza);
    printf("Orario di partenza: ");
    scanf("%f", oraPartenza);
    printf("orario di arrivo:\n");
    scanf("%f", oraArrivo);
    fp =fopen("Aereo.dat","r+");
    ricerca();
    i=1;

    if (trovato == 0)
    {
    printf("Volo non trovato! \n\n");
    system("PAUSE");
    }
    else
    {
    if (viaggio.flag == 0)
    {
    visualizza();

    do
    {
    printf("Nr Posti da cancellare ");
    scanf("%d",&posti);
    }
    while((posti > viaggio.postiVenduti));

    viaggio.postiVenduti = viaggio.postiVenduti - posti;
    viaggio.postidisponibili =viaggio.postidisponibili+posti;
    do
    {
    printf("Confermi Cancellazione Prenotazione? ( 0=no , 1=Si : ");
    scanf("%d",&risposta);
    }
    while((risposta !=0) && (risposta !=1));

    if (risposta == 1)
    {
    fseek(fp,posizione,0);
    fwrite(&viaggio ,sizeof(prenotazioneAereo),1,fp);
    }
    }
    else
    {
    printf("Cinema cancellato! \n\n");
    system("PAUSE");
    }
    }


    fclose(fp);
    printf("Altre cancellazioni di prenotazioni ? ( 0=no , 1=Si : ");
    scanf("%d",&risposta);
    }
    while(risposta !=0);


    }


    // RICERCA RECORD

    void ricerca()
    {
    i=1;
    posizione = (i-1) * sizeof(prenotazioneAereo);
    fseek(fp,posizione,0);
    fread(&viaggio ,sizeof(prenotazioneAereo),1,fp);
    trovato=0;
    while ((posizione < dimfile) && (trovato == 0))
    {
    =strcmp(viaggio.codiceVolo,codiceVolo);
    f2=strcmp(viaggio.oraArrivo,oraArrivo);
    =strcmp(viaggio.cittaPartenza,cittaPartenza);
    f4=strcmp(viaggio.cittaArrivo,cittaArrivo);
    =strcmp (viaggio.oraPartenza,oraPartenza);
    if ((f1==0) && (f2==0) && (f3==0) && (f4==0)&&(f5==0))
    {
    trovato =1;
    }
    else
    {
    i=i+1;
    posizione=(i-1)* sizeof(prenotazioneAereo);
    fseek(fp,posizione,0);
    fread(&viaggio ,sizeof(prenotazioneAereo),1,fp);
    }
    }
    }


    // VISUALIZZA RECORD LETTO
    void visualizza()
    {
    printf("DATI FILM LETTO \n");
    printf(" %s \n",viaggio.codiceVolo);
    printf("%s \n",viaggio.cittaPartenza);
    printf("%s%d%s%d\n",viaggio.dPartenza.giorno1,viaggio.dPartenza.giornoNumero1,viaggio.dPartenza.mese,viaggio.dPartenza.anno);
    printf(" %f \n",viaggio.oraPartenza);
    printf(" %s \n",viaggio.cittaArrivo);
    printf("%s%d%s%d\n",viaggio.dArrivo.giorno1,viaggio.dArrivo.giornoNumero1,viaggio.dArrivo.mese1,viaggio.dArrivo.anno1);
    printf(" %f \n",viaggio.oraArrivo);
    printf(" %d \n",viaggio.postiVenduti);
    printf(" %d \n",viaggio.postidisponibili);
    printf(" %f \n",viaggio.prezzo);
    printf(" %d \n",viaggio.flag);
    }
    MI PUOI CORREGGERE GLI ERRORI COSI DA FAR FUNZIONARE IL PROGRAMMA GRAZIE 1000
  • Re: Progetto c++ dell'aereo

    Questo è un esempio che ho fatto.
    volo.h
    
    #ifndef __CVOLO__
    #define __CVOLO__
    
    /* Classe per la gestione delle date */
    #define ANNO 2009
    
    class Data
    {
    private:
    	int m_giorno;
    	int m_mese;
    	int m_anno;
    	int m_ora;
    	int m_minuti;
    public:
    	Data();
    	Data(int giorno,int mese,int anno,int ora,int minuti);
    	~Data();
    	int InsertData(int giorno,int mese,int anno,int ora,int minuti);
    	int CompareData(Data data1);
    	int CompareData(Data data1,Data data2);
    	void operator = (Data data1);
    	int operator ==(Data data1);
    	char* toString();
    };
    
    /*Classe per la gestione dei voli*/
    
    #define MAX_VOLI 100 
    #define MAX_PASSEGGERI 70
    
    struct Passeggero
    {
    	char nome[256];
    	char cognome[256];
    	int id;
    };
    
    struct Volo 
    {
    	int		m_codicev;					/*codice del volo*/
    	char*	m_cpartenza;				/*città di partenza*/	
    	Data	m_dpartenza;				/*data partenza*/
    	char*   m_carrivo;					/*città di arrivo*/
    	Data	m_darrivo;					/*data di arrivo*/
    	int		m_npostiv;					/*numero posti venduti*/
    	int		m_npostid;					/*numero posti disponibili*/
    	struct  Passeggero 
    		passeggeri[MAX_PASSEGGERI];		/*passeggeri del volo*/
    };
    
    class Aereoporto
    {
    public:
    	Aereoporto();
    	~Aereoporto();
    
    	/*crea un volo restituendo il codice del volo*/
    	int CreaVolo(char* cpartenza,Data dpartenza,char* carrivo,
    					Data darrivo);
    	/*aggiorna il volo corrispondente al codicevolo*/
    	void UpdateVolo(int codicevolo,char* cpartenza,Data dpartenza,
    					char* carrivo,Data darrivo);
    	/*cancella il volo corrispondente al codice*/
    	void CancellaVolo(int codicevolo);
    	/*prenota il volo restituendo il codice del passeggero*/
    	int PrenotaVolo(int codicevolo, struct Passeggero* passeggero);
    	/*cancella una prenotazione*/
    	void CancellaPrenotaz(int codicevolo,int codice_passeggero);
    	/*stampa tutti i voli*/
    	void tabellone();
    private:
    	struct Volo voli[MAX_VOLI];
    };
    
    #endif
    
    volo.cpp
    
    #include "volo.h"
    #include <cstring>
    #include <stdio.h>
    #include <stdlib.h>
    #include <iostream>
    
    using namespace std;
    
    int numerovoli = 0; /*numeri di voli nell'aereoporto*/
    
    /****************************************************************
    *Implementazione della classe Data.								*
    *Descrizione: La classe Data, disponde dei mezzi per effettuare *
    *le operazioni base sulle date									*
    *****************************************************************/
    
    Data::Data()
    {
    	m_giorno = 0;
    	m_mese = 0;
    	m_anno = 0;
    	m_ora = 0;
    	m_minuti = 0;
    }
    
    Data::~Data()
    {
    }
    
    Data::Data(int giorno, int mese, int anno, int ora, int minuti)
    {
    	m_giorno = 0;
    	m_mese = 0;
    	m_anno = 0;
    	m_ora = 0;
    	m_minuti = 0;
    	InsertData(giorno,mese,anno,ora,minuti);
    }
    
    int Data::InsertData(int giorno, int mese, int anno, int ora, int minuti)
    {
    	/* verifico se la data inserita è corretta */
    	if(anno<ANNO)
    		return 0;
    		
    	if(mese<1 || mese >12)
    		return 0;
    
    	switch(mese)
    	{
    		case 11:
    		case 4:
    		case 6:
    		case 9:
    			if(giorno>=1 && giorno <=30)
    			{
    				m_giorno = giorno;
    				m_mese = mese;
    				m_anno = anno;
    			}
    			else
    				return 0;
    			break;
    		case 2:
    			if(giorno >=1 && giorno<=29)
    			{
    				m_giorno = giorno;
    				m_mese = mese;
    				m_anno = anno;
    			}
    			else
    				return 0;
    			break;
    		case 1:
    		case 3:
    		case 5:
    		case 7:
    		case 8:
    		case 10:
    		case 12:
    			if(giorno>=1 && giorno <=31)
    			{
    				m_giorno = giorno;
    				m_mese = mese;
    				m_anno = anno;
    			}
    			else 
    				return 0;
    			break;
    	}
    
    	/* verifco l'orario */
    	if(ora<0 || ora > 24)
    		return 0;
    	else
    		m_ora = ora;
    		
    	if ( minuti<0 || minuti >59)
    		return 0;
    	else
    		m_minuti = minuti;
    
    	return 1;
    }
    
    void Data::operator =(Data data1)
    {
    	 InsertData(data1.m_giorno,data1.m_mese,
    		data1.m_anno,data1.m_ora,data1.m_minuti);
    }
    
    int Data::operator ==(Data data1)
    {
    	if(CompareData(data1))
    		return 1;
    	return 0;
    }
    
    int Data::CompareData(Data data1)
    {
    	if(data1.m_anno == m_anno && data1.m_giorno == m_giorno && 
    		data1.m_mese == m_mese && data1.m_minuti == m_minuti &&
    		data1.m_ora == m_ora)
    		return 1;
    	return 0;
    }
    
    int Data::CompareData(Data data1, Data data2)
    {
    	if(data1.m_anno == data2.m_anno && data1.m_giorno == data2.m_giorno && 
    		data1.m_mese == data2.m_mese && data1.m_minuti == data2.m_minuti &&
    		data1.m_ora == data2.m_ora)
    		return 1;
    	return 0;
    }
    
    char* Data::toString()
    {
    	char p[10];
    	char buffer[256]={0};
    	
    	itoa(m_giorno,p,10);
    	strcpy(buffer,p);
    	strcat(buffer,"/");
    	
    	itoa(m_mese,p,10);
    	strcat(buffer,p);
    	strcat(buffer,"/");
    	
    	itoa(m_anno,p,10);
    	strcat(buffer,p);
    	strcat(buffer," ");
    	
    	itoa(m_ora,p,10);
    	strcat(buffer,p);
    	strcat(buffer,":");
    
    	itoa(m_minuti,p,10);
    	strcat(buffer,p);
    
    	return buffer;
    }
    
    /****************************************
    *Implementazioe della classe Aereoporto *
    *****************************************/
    
    Aereoporto::Aereoporto()
    {
    	for(int i=0;i<MAX_VOLI;i++)
    	{
    		voli[i].m_npostiv =0;
    		voli[i].m_npostid = MAX_PASSEGGERI;
    	}
    }
    
    Aereoporto::~Aereoporto()
    {
    	for(int i=0;i<numerovoli;i++)
    	{
    		if(voli[i].m_cpartenza)
    		{
    			delete voli[i].m_cpartenza;
    			delete voli[i].m_carrivo;
    		}
    	}
    }
    
    int Aereoporto::CreaVolo(char *cpartenza, Data dpartenza, 
    						 char *carrivo, Data darrivo)
    {
    	if(numerovoli> MAX_VOLI)
    	{
    		cout << "Non è possibile creare il volo" << endl;
    		return 0;
    	}
    	voli[numerovoli].m_cpartenza = new char[strlen(cpartenza)+1];
    	strcpy(voli[numerovoli].m_cpartenza,cpartenza);
    
    	voli[numerovoli].m_carrivo = new char[strlen(carrivo)+1];
    	strcpy(voli[numerovoli].m_carrivo,carrivo);
    
    	voli[numerovoli].m_dpartenza = dpartenza;
    	voli[numerovoli].m_darrivo = darrivo;
    	voli[numerovoli].m_npostid = MAX_PASSEGGERI;
    	voli[numerovoli].m_npostiv = 0;
    	voli[numerovoli].m_codicev = numerovoli;
    	numerovoli++;
    	cout << "Il volo è stato creato correttamente.\n Codice Volo: " << numerovoli << endl;
    	return numerovoli;
    }
    
    void Aereoporto::CancellaVolo(int codicevolo)
    {
    	for(int i=0;i<MAX_VOLI;i++)
    	{
    		if(voli[i].m_codicev == codicevolo-1)
    		{
    			for(int j=i+1;j<=MAX_VOLI;j++,i++)
    			{
    				voli[i] = voli[j];
    			}
    			break;
    		}
    	}
    	cout <<  "Il volo è stato cancellato con successo" << endl;
    	numerovoli--;
    }
    
    int Aereoporto::PrenotaVolo(int codicevolo,struct Passeggero *passeggero)
    {
    	for(int i=0;i<MAX_VOLI;i++)
    	{
    		if (voli[i].m_codicev == codicevolo-1)
    		{
    			if(voli[i].m_npostid >0)
    			{
    				passeggero->id = voli[i].m_npostiv;
    				voli[i].passeggeri[voli[i].m_npostiv++] = *passeggero;
    				voli[i].m_npostid--;
    				cout << "La prenotazione per il volo " << codicevolo << endl 
    					<<" è stata effettuata con successo. Codice passeggero: " << passeggero->id << endl;
    				break;
    			}
    			else
    			{
    				cout << "Non ci sono posti liberi per il volo desiderato" << endl;
    				return 0;
    			}
    		}
    	}
    	return 1;
    }
    
    void Aereoporto::CancellaPrenotaz(int codicevolo, int codice_passeggero)
    {
    	for(int i=0;i<MAX_VOLI;i++)
    	{
    		if(voli[i].m_codicev == codicevolo-1)
    		{
    			for(int j=0;j< MAX_PASSEGGERI;j++)
    			{
    				if(voli[i].passeggeri[j].id == codice_passeggero)
    				{
    					for(int y=j+1;j<MAX_PASSEGGERI;j++,y++)
    					{
    						voli[i].passeggeri[j] = voli[i].passeggeri[y];
    					}
    					cout << "La prenotazione per il volo " << codicevolo << endl 
    						<< "del passeggero " << codice_passeggero << "è stata cancellata con successo" << endl;
    					return ;
    				}
    			}
    		}
    	}
    }
    
    void Aereoporto::UpdateVolo(int codicevolo, char *cpartenza, Data dpartenza, char *carrivo, Data darrivo)
    {
    	for(int i=0;i<MAX_VOLI;i++)
    	{
    		if(voli[i].m_codicev == codicevolo-1)
    		{
    			voli[i].m_cpartenza = new char[strlen(cpartenza)+1];
    			strcpy(voli[i].m_cpartenza,cpartenza);
    
    			voli[i].m_carrivo = new char[strlen(carrivo)+1];
    			strcpy(voli[i].m_carrivo,carrivo);
    
    			voli[i].m_dpartenza = dpartenza;
    			voli[i].m_darrivo = darrivo;
    			voli[i].m_npostid = MAX_PASSEGGERI;
    			voli[i].m_npostiv = 0;
    			voli[i].m_codicev = numerovoli;	
    		}
    	}
    	cout << "Il volo "<<codicevolo<<"è stato aggiornato con successo" << endl;
    }
    
    void Aereoporto::tabellone()
    {
    	cout << "CODICE VOLO| PARTENZA|\t DATA \t| ARRIVO|\t DATA \t| POSTI DISP| POSTI VEND|" << endl;
    	cout << "--------------------------------------------------------------------------------" << endl;
    	for(int i=0;i<numerovoli;i++)
    	{
    		cout << voli[i].m_codicev +1 << "\t\t";
    		cout << voli[i].m_cpartenza << "\t";
    		//cout << voli[i].m_dpartenza.toString()<< "\t";
    		printf("%s\t",voli[i].m_dpartenza.toString());
    		cout << voli[i].m_carrivo << "\t";
    		//cout << voli[i].m_darrivo.toString()<< "\t"; 
    		printf("%s\t",voli[i].m_darrivo.toString());
    		cout << voli[i].m_npostid << "\t";
    		cout << voli[i].m_npostiv << "\t";
    	}
    	cout << "--------------------------------------------------------------------------------" << endl;
    }
    
    main.cpp
    
    #include "volo.h"
    #include <iostream>
    
    using namespace std;
    
    void SetTime(Data* data);
    int menu();
    
    int main()
    {
    	Aereoporto *volo = new Aereoporto();
    	char partenza[256];
    	char arrivo[256];	
    	Data data_partenza;
    	Data data_arrivo;
    	int codice_volo;
    	int scelta = menu();
    
    	while(scelta != 7)
    	{
    		switch(scelta)
    		{
    			case 1:
    				cout << "1. Aggiungi un volo" << endl;
    				cout << "Scegliere aereoporto di partenza" << endl;
    				cin >> partenza;
    				cout << "Scegliere aereoporto di arrivo" << endl;
    				cin >> arrivo;
    				cout << "Scegliere data e ora di partenza:" <<endl;
    				SetTime(&data_partenza);
    				cout << "Scegliere data e ora di arrivo:" <<endl;
    				SetTime(&data_arrivo);
    				volo->CreaVolo(partenza,data_partenza,arrivo,data_arrivo);
    				break;
    			case 2:
    				cout << "2. Cancella un volo" << endl;
    				cout << "Inserire il codice del volo da eliminare: ";
    				cin >> codice_volo;
    				volo->CancellaVolo(codice_volo);
    				break;
    			case 3:
    				cout << "Inserire il codice del volo da aggiornare: ";
    				cin >> codice_volo;
    				cout << "3. Aggiorna volo" << endl;
    				cout << "Scegliere aereoporto di partenza" << endl;
    				cin >> partenza;
    				cout << "Scegliere aereoporto di arrivo" << endl;
    				cin >> arrivo;
    				cout << "Scegliere data e ora di partenza:" << endl;
    				SetTime(&data_partenza);
    				cout << "Scegliere data e ora di arrivo:"<< endl;
    				SetTime(&data_arrivo);
    				volo->UpdateVolo(codice_volo,partenza,
    					data_partenza,arrivo,data_arrivo);
    				break;
    			case 4:
    				Passeggero p;
    				cout << "4. Prenota volo" << endl;
    				cout << "Inserire nome: ";
    				cin >> p.nome;
    				cout << endl << "Inserire cognome: ";
    				cin >> p.cognome;
    				cout << endl << "Inserire il codice del volo: ";
    				cin >> codice_volo;
    				volo->PrenotaVolo(codice_volo,&p);
    				cout << endl;
    				break;
    			case 5:
    				int c_pass;
    				cout << "5. Cancella prenotazione" << endl;
    				cout << "Inserire il codice del passeggero da eliminare:";
    				cin >> c_pass;
    				cout << endl << "Inserire il codice del volo: ";
    				cin >> codice_volo;
    				volo->CancellaPrenotaz(codice_volo,c_pass);
    				break;
    			case 6:
    				cout << "6. Visualizza voli" << endl;
    				volo->tabellone();
    				break;
    			case 7:
    				return 0;
    		}
    		scelta = menu();
    	}
    	delete volo;
    	return 0;
    }
    
    int menu()
    {
    	int scelta;
    	cout << "Gestione dell'aereoporto" << endl;
    	cout << "1. Aggiungi un volo " << endl;
    	cout << "2. Cancella un volo " << endl;
    	cout << "3. Aggiorna volo" << endl;
    	cout << "4. Prenota volo" << endl;
    	cout << "5. Cancella prenotazione" << endl;
    	cout << "6. Visualizza voli" << endl;
    	cout << "7. Esci" << endl;
    	cin >> scelta;
    	return scelta;
    }
    
    void SetTime(Data* data)
    {
     int g,m,a,o,min;
    	cout << "giorno: ";
    	cin >> g;
    	cout << " mese: ";
    	cin >> m;
    	cout << " anno: ";
    	cin >> a;
    	cout << " ora: ";
    	cin >> o;
    	cout << " minuti: ";
    	cin >> min;
    
    	data->InsertData(g,m,a,o,min);
    }
    
    che come al solito va rivista, ci sono cose che ho tralasciato.
Devi accedere o registrarti per scrivere nel forum
3 risposte