Buonasera a tutti!
Ho sviluppato, utilizzando Turbo C++, un progetto riguardante la gestione di un campeggio.
Il programma funziona senza problemi.
A giorni devo consegnarlo al mio professore, che pero' utilizza solo Dev C++.
Ho scaricato cosi' Dev C++, ma quando compilo mi compaiono molti errori.
Non so proprio cosa fare, inquanto non ho mai utilizzato Dev C++.
Vi allego il codice del progetto:
// GESTIONE CAMPEGGIO
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#include<fstream.h>
#include<iomanip.h>
#include<stdio.h>
struct PRENOTATION
{
char nome[20];
char cognome[20];
char codice[17];
char carta[30];
char data_arrivo[7];
char data_partenza[7];
char piazzola[7];
char tipo[7];
int n;
PRENOTATION *next;
};
int menu();
void carica_dati(PRENOTATION *&,char[]);
int nuova_prenotazione(PRENOTATION *&);
int modifica_prenotazione(PRENOTATION *&);
int elimina_prenotazione(PRENOTATION *&);
void visualizza_prenotazioni(PRENOTATION *);
void salva_prenotazione(PRENOTATION *&,char []);
void riempi_stringa(char []);
// int contatore = 0; // VALIDA PER TERZA OPZIONE
int main() //funzione principale
{
char f_ind[100]="C:\\prog\\pren.dat"; //creazione variabile f_ind di tipo char contenente l'indirizzo del file in cui salvare le prenotazioni
PRENOTATION *head = (PRENOTATION *) NULL; //inizializzo la head della lista di prenotazioni (ancora vuota) al vuoto
carica_dati(head,f_ind); //carico la lista di prenotazioni salvata in f_ind e gli passo la head della lista
int scelta; //creo la variabile scelta che corrisponderà a ciò che digita l'utente nel menù principale
do //inizio del do-while
{
scelta=menu(); //alla variabile scelta dò il valore tornato dalla funzione menù
switch (scelta) //segue l'elenco delle possibili alternative di valori che può assumere la variabile scelta, dopo ogni caso seguono le azioni
{
case 2:
nuova_prenotazione(head); //passo head (testa della lista di abbonati) alla funzione per creare un abbonato in coda
salva_prenotazione(head,f_ind); //passo la head alla funzione per salvare la lista delle prenotazioni nell'indirizzo f_ind
break; //fine delle istruzioni
case 3:
modifica_prenotazione(head); //passo head (testa della lista abbonati) alla funzione per modificare la lista di prenotazioni nell'indirizzo f_ind
salva_prenotazione(head,f_ind);
break; //fine delle istruzioni
case 4:
elimina_prenotazione(head); //passo head (testa della lista abbonati) alla funzione per eliminare una prenotazione
salva_prenotazione(head,f_ind); //passo la head alla funzione per salvare la lista delle prenotazioni nell'indirizzo f_ind
break; //fine delle istruzioni
case 5:
visualizza_prenotazioni(head);//passo head (testa della lista abbonati) alla funzione per visualizzare la lista delle prenotazioni
break; //fine delle istruzioni
}
}
while(scelta != 1); //continuo a far funzionare il programma finchè la scelta dell'utente è 1
return 0; //valore standard di ritorno del main
}
int menu()
{
char buffer[100]; //creo variabile buffer di appoggio, di 100 caratteri
int valore; //creo variabile valore
do //inizia do-while
{
clrscr(); //cancella lo schermo
cout<<"GESTIONE PRENOTAZIONI :\n\n"; //scrivo sullo schermo il menù principale con le possibili scelte, associate ognuna a un numero
cout<<" 2) Nuovo Cliente / Prenotazione\n";
cout<<" 3) Modifica prenotazione\n";
cout<<" 4) Elimina prenotazione / Check Out\n";
cout<<" 5) Visualizza prenotazioni\n\n\n";
cout<<" 1) Esci\n\n -> ";
cin.getline(buffer,99); //legge da tastiera l'inserimento dell'utente e lo copia in buffer (massimo 99 caratteri)
valore=atoi(buffer); //copia nella variabile valore il corrispondente intero della serie di caratteri in buffer, metodo usato per evitare problemi quando l'utente inserisce caratteri invece di numeri richiesti
}
while((valore<1) || (valore>10)); //controllo che la variabile valore corrisponda a un numero tra 1 e 10
return valore; //ritorno ciò che contiene la variabile valore
}
void carica_dati(PRENOTATION *&head,char f_ind[])
{
ifstream f_in; //crea variabile f_in di lettura da file
char buffer[100],nome[20],cognome[20],cod_fiscale[20],codice[17],data_arrivo[7],data_partenza[7],piazzola[7],tipo[7]; //crea variabili d'appoggio per la lettura da file, per poi copiare il valore nella lista (ora vuota)
char appoggio[30]; //crea variabile appoggio per evitare errori nel caso di inserimento del numero in caratteri
int n;
PRENOTATION *p, *t; //crea due puntatori per permettere di scorrere la lista delle prenotazioni nella creazione di essa inserendo i dati nel file
f_in.open(f_ind); //apre il file con indirizzo f_ind
if (!f_in.fail()) //controlla che l'apertura file non abbia fallito
{
while(!f_in.eof()) //scorre il file fino alla fine, ogni riga che legge ripete il procedimento seguente
{
p=new PRENOTATION(); //p punta a una nuova struttura
f_in>>nome; //leggo dal file tutti i campi della struttura e li copio nelle variabili di appoggio
f_in>>cognome;
f_in>>codice;
f_in>>data_arrivo;
f_in>>data_partenza;
f_in>>piazzola;
f_in>>tipo;
f_in>>appoggio;
n=atoi(appoggio);
strcpy(p->nome,nome); //copio nella nuova struttura abbonato tutti i dati presi da una riga del file
strcpy(p->cognome,cognome);
strcpy(p->codice,codice);
strcpy(p->data_arrivo,data_arrivo);
strcpy(p->data_partenza,data_partenza);
strcpy(p->piazzola,piazzola);
strcpy(p->tipo,tipo);
p->n=n;
p->next=(PRENOTATION *)NULL; //faccio puntare a vuoto il p->next della struttura appena creata
if(head==(PRENOTATION *)NULL) //controllo se la head è vuota, quindi sono nel caso iniziale, ho appena iniziato a formare la lista
{
p->next=(PRENOTATION *)NULL;
head=p; //la head punta a p, l'inizio della lista
}
else //se esiste già la lista (almeno un elemento)
{
t=head; //t punta alla head della lista
while (t->next!=(PRENOTATION *)NULL) //scorro la lista con t fino a raggiungere l'ultimo elemento
t=t->next;
t->next=p; //p diventa l'elemento successivo, il primo vuoto
p->next=((PRENOTATION *)NULL); //p->next punta a null, quindi p (per ora) è l'ultimo elemento della lista
}
}
}
f_in.close(); //chiude il file
}
int nuova_prenotazione(PRENOTATION *&head)
{
int cont=0; //creo una variabile contatore inizializzata a zero
int n;
PRENOTATION *t,*p; //crea due puntatori per permettere di scorrere la lista delle prenotazioni nella creazione di essa inserendo i dati nel file
char buffer[100]; //crea una variabile buffer di appoggio di 100 caratteri
t = new PRENOTATION(); //t punta a una nuova struttura
if (t==(PRENOTATION *)NULL) //controllo che non sia finito lo spazio disponibile nella memoria
{
cout<<"\n\nATTENZIONE! memoria esaurita!";
getch(); //aspetta la digitazione di un qualsiasi tasto
return 1; //ritorna al main il numero "1"
}
clrscr(); //cancella lo schermo
cout<<"INSERIMENTO NUOVO CLIENTE / PRENOTAZIONE\n\n";
cout<<"Nome cliente : ";
cin.getline(buffer,99); //prendo da tastiera il nome del prenotante, lo copio nella variabile buffer
cont=strlen(buffer); //la variabile cont prende come valore il numero corrispondente alla lunghezza in caratteri di buffer
buffer[cont]='\0'; //metto il terminatore al termine della variabile buffer
strcpy(t->nome, buffer); //copio la variabile buffer nel campo nome della struttura t
cont=0; //la variabile cont torna a zero per essere nuovamente utilizzata
cout<<"\nCognome cliente : ";
cin.getline(buffer,99);
cont=strlen(buffer);
buffer[cont]='\0';
strcpy(t->cognome, buffer);
cont=0;
cout<<"\nCodice Fiscale cliente : ";
cin.getline(buffer,99);
cont=strlen(buffer);
buffer[cont]='\0';
strcpy(t->codice, buffer);
cont=0;
cout<<"\nCarta Identita' cliente : ";
cin.getline(buffer,99);
cont=strlen(buffer);
buffer[cont]='\0';
strcpy(t->carta, buffer);
cont=0;
cout<<"\nData Arrivo cliente (ggmmaa) : ";
cin.getline(buffer,99);
cont=strlen(buffer);
buffer[cont]='\0';
strcpy(t->data_arrivo, buffer);
cont=0;
cout<<"\nData Partenza cliente (ggmmaa) : ";
cin.getline(buffer,99);
cont=strlen(buffer);
buffer[cont]='\0';
strcpy(t->data_partenza, buffer);
cont=0;
cout<<"\nTipologia Piazzola : t = Tenda , c = Camper\n\n-> ";
cin.getline(buffer,99);
cont=strlen(buffer);
buffer[cont]='\0';
strcpy(t->piazzola, buffer);
cont=0;
if(strcmp("c",t->piazzola)!=0) //Controllo che tipo di piazzola sia per mostrare a schermo le relative opzioni
{
cout<<"\nDimensioni Piazzola: p = 2x2 metri, m = 4x4 metri, g = 10x10 metri \n\n-> ";
cin.getline(buffer,99);
cont=strlen(buffer);
buffer[cont]='\0';
strcpy(t->tipo, buffer);
cont=0;
}
else
{
cout<<"\nAttacco Corrente Elettrica: s = Si , n = No\n\n-> ";
cin.getline(buffer,99);
cont=strlen(buffer);
buffer[cont]='\0';
strcpy(t->tipo, buffer);
cont=0;
}
cout<<"\nPiazzola Numero: ";
cin.getline(buffer,99);
n=atoi(buffer); //trasformo i caratteri presi, in un numero intero
t->n=n;
cont=0;
/* SECONDA OPZIONE
int casuale;
do
{
casuale = rand();
} while ((casuale < 0) || (casuale > 100)) // genera un numero casuale finche' non si ottiene un numero compreso tra 0 e 100
t->n=casuale;
*/
/* TERZA OPZIONE
contatore = contatore + 1;
t->n=contatore;
*/
if (head==(PRENOTATION *)NULL)
{
t->next=(PRENOTATION *)NULL;
head=t;
cout<<"\nInserimento eseguito!";
getch(); //aspetta la digitazione di un qualsiasi tasto
return 0;
}
p=head;
while (p->next!=(PRENOTATION*)NULL)
p=p->next;
t->next=(PRENOTATION *)NULL;
p->next=t;
cout<<"\nInserimento eseguito!";
getch(); //aspetta la digitazione di un qualsiasi tasto
return 0;
}
int modifica_prenotazione(PRENOTATION *&head)
{
PRENOTATION *p;
char buffer[100],ID[17];
int error=0; //variabile di controllo, se resterà a 0 la prenotazione non è stata trovata
if (head!=(PRENOTATION *)NULL)
{
clrscr();
cout<<"MODIFICA DATI PRENOTAZIONE\n\n";
cout<<"Inserire Codice Fiscale : ";
cin.getline(buffer,99);
buffer[16]='\0';
strcpy(ID,buffer);
p=head;
do
{
if (strcmp(p->codice,ID)==0) //controllo che sia la prenotazione da modificare
{
error=1;
clrscr();
cout<<"MODIFICA DATI PRENOTAZIONE\n\n";
cout<<"Inserire Codice Fiscale:\n";
cout<<"\nNome : "<<p->nome<<endl;
cout<<"\nCognome : "<<p->cognome<<endl;
cout<<"\nCodice Fiscale : "<<p->codice<<endl;
cout<<"\nCarta Identita' : "<<p->carta<<endl;
cout<<"\nData Arrivo : "<<p->data_arrivo<<endl;
cout<<"\nData Partenza : "<<p->data_partenza<<endl;
cout<<"\nTipologia Piazzola : "<<p->piazzola<<endl;
cout<<"\n\nNome : ";
cin.getline(buffer,99);
buffer[19]='\0';
strcpy(p->nome,buffer);
cout<<"\nCognome : ";
cin.getline(buffer,99);
buffer[19]='\0';
strcpy(p->cognome,buffer);
cout<<"\nCodice Fiscale : ";
cin.getline(buffer,99);
buffer[16]='\0';
strcpy(p->codice,buffer);
cout<<"\nCarta Identita' : ";
cin.getline(buffer,99);
buffer[29]='\0';
strcpy(p->carta,buffer);
cout<<"\n\nData Arrivo : ";
cin.getline(buffer,99);
buffer[6]='\0';
strcpy(p->data_arrivo,buffer);
cout<<"\nData Partenza : ";
cin.getline(buffer,99);
buffer[6]='\0';
strcpy(p->data_partenza,buffer);
cout<<"\nTipologia Piazzola : t = Tenda , c = Camper\n\n-> ";
cin.getline(buffer,99);
buffer[6]='\0';
strcpy(p->piazzola,buffer);
if((strcmp(p->piazzola,"t")==0)) //Controllo che tipo di piazzola sia per mostrare a schermo le relative opzioni
{
cout<<"Tipologia Piazzola : per Tenda"<<endl;
}
else
{
cout<<"Tipologia Piazzola : per Camper"<<endl;
}
cout<<"\nSpecifiche piazzola ( Tenda-Dimensioni: p, m, g o Camper-Corrente: s, n )\n\n-> ";
cin.getline(buffer,99);
buffer[6]='\0';
strcpy(p->tipo,buffer);
getch(); //aspetta la digitazione di un qualsiasi tasto
}
p=p->next;
} while (p!=(PRENOTATION *)NULL);
if (error==0)
{
cout<<"\nCodice NON IDENTIFICATO"; //informa di non aver identificato il codice inserito
getch(); //aspetta la digitazione di un qualsiasi tasto
}
}
else
{
clrscr();
cout<<"\n\nATTENZIONE! Non e' presente alcuna prenotazione in memoria !";
getch(); //aspetta la digitazione di un qualsiasi tasto
return 1;
}
return 0;
}
int elimina_prenotazione(PRENOTATION *&head)
{
PRENOTATION *p, *prec;
char buffer[100],ID[17];
int error=0;
if (head!=(PRENOTATION *)NULL)
{
clrscr();
cout<<"RIMOZIONE PRENOTAZIONE DALL' ARCHIVIO / CHECK OUT\n\n";
cout<<"Inserire il codice Fiscale : ";
cin.getline(buffer,99);
buffer[16]='\0';
strcpy(ID,buffer);
if (strcmp(head->codice,ID)==0)
{
p=head;
head=p->next;
delete p;
cout<<"\nPrenotazione eliminata dall'archivio";
getch(); //aspetta la digitazione di un qualsiasi tasto
return 0;
}
prec=head;
p=head->next;
while (p!=(PRENOTATION *)NULL)
{
if (strcmp(p->codice,ID)==0)
{
error=1;
clrscr();
cout<<"Elimina prenotazione dall'archivio\n\n";
cout<<"Codice IDENTIFICATO\n";
cout<<"\nNome : "<<p->nome<<endl;
cout<<"\nCognome : "<<p->cognome<<endl;
cout<<"\nCodice Fiscale : "<<p->codice<<endl;
cout<<"\nCarta Identita' : "<<p->carta<<endl;
cout<<"\nData Arrivo : "<<p->data_arrivo<<endl;
cout<<"\nData Partenza : "<<p->data_partenza<<endl;
cout<<"\nTipologia Piazzola : "<<p->piazzola<<endl;
prec->next=p->next;
delete p;
cout<<"\nPrenotazione eliminata dall'archivio";
getch(); //aspetta la digitazione di un qualsiasi tasto
return 0;
}
p=p->next;
prec=prec->next;
}
if (error==0)
{
cout<<"\nCodice NON IDENTIFICATO";
getch(); //aspetta la digitazione di un qualsiasi tasto
}
}
else
{
clrscr();
cout<<"\n\nATTENZIONE! Non e' presente alcuna prenotazione in memoria !";
getch(); //aspetta la digitazione di un qualsiasi tasto
return 1;
}
return 0;
}
void visualizza_prenotazioni(PRENOTATION *head)
{
PRENOTATION *p;
if (head!=(PRENOTATION *)NULL)
{
clrscr();
p=head;
cout<<"ELENCO PRENOTAZIONI :\n\n";
do
{
cout<<"\nNome : "<<p->nome<<endl;
cout<<"Cognome : "<<p->cognome<<endl;
cout<<"Codice Fiscale : "<<p->codice<<endl;
cout<<"Carta Identita' : "<<p->carta<<endl;
cout<<"Data Arrivo : "<<p->data_arrivo<<endl;
cout<<"Data Partenza : "<<p->data_partenza<<endl;
if((strcmp(p->piazzola,"t")==0))
{
cout<<"Tipologia Piazzola : per Tenda"<<endl;
}
else
{
cout<<"Tipologia Piazzola : per Camper"<<endl;
}
if ((strcmp(p->tipo,"p")==0))
cout<<"Dimensioni : 2x2 metri"<<endl;
if ((strcmp(p->tipo,"m")==0))
cout<<"Dimensioni : 4x4 metri"<<endl;
if ((strcmp(p->tipo,"g")==0))
cout<<"Dimensioni : 10x10 metri"<<endl;
if ((strcmp(p->tipo,"s")==0))
cout<<"Attacco Rete Elettrica : Si"<<endl;
if ((strcmp(p->tipo,"n")==0))
cout<<"Attacco Rete Elettrica : No"<<endl;
cout<<"Numero piazzola :"<<p->n<<endl;
getch(); //aspetta la digitazione di un qualsiasi tasto
p=p->next;
} while (p!=(PRENOTATION *)NULL);
}
else
{
clrscr();
cout<<"\n\nATTENZIONE! Non e' presente nessuna prenotazione!";
getch(); //aspetta la digitazione di un qualsiasi tasto
}
}
void salva_prenotazione(PRENOTATION *&head,char f_ind[])
{
PRENOTATION *a;
ofstream f_out;
f_out.open(f_ind,ios::out);
if (f_out.fail())
{
clrscr();
cout<<"\n\nAttenzione! Errore di accesso al file"<<f_ind;
getch(); //aspetta la digitazione di un qualsiasi tasto
exit(1);
}
a=head;
while (a!=(PRENOTATION *)NULL)
{
riempi_stringa(a->nome);
f_out<<" ";
f_out<<a->nome;
f_out<<" ";
riempi_stringa(a->cognome);
f_out<<a->cognome;
f_out<<" ";
riempi_stringa(a->codice);
f_out<<a->codice;
f_out<<" ";
riempi_stringa(a->carta);
f_out<<a->carta;
f_out<<" ";
riempi_stringa(a->data_arrivo);
f_out<<a->data_arrivo;
f_out<<" ";
riempi_stringa(a->data_partenza);
f_out<<a->data_partenza;
f_out<<" ";
riempi_stringa(a->piazzola);
f_out<<a->piazzola;
f_out<<" ";
riempi_stringa(a->tipo);
f_out<<a->tipo;
f_out<<" ";
f_out<<a->n;
a=a->next;
}
f_out.close();
}
void riempi_stringa(char source[])
{
int cont=0;
int i;
cont=strlen(source);
for(i=0; i<cont; i++)
{
if (source[i]==' ')
source[i]='_';
}
}