Progetto sviluppato in Turbo C++ non gira su Dev C++

di il
5 risposte

Progetto sviluppato in Turbo C++ non gira su Dev C++

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]='_';
	}
}

5 Risposte

  • Re: Progetto sviluppato in Turbo C++ non gira su Dev C++

    Modifica l'inizio del tuo codice in questo modo:
        #include<iostream>
        #include<conio.h>
        #include<stdlib.h>
        #include<string.h>
        #include<fstream>
        #include<iomanip>
        #include<stdio.h>
    using namespace std;
    Poi, trova una alternativa alla funzione che hai usato per pulire lo schermo: clrscr()
    La cosa strana è che dovrebbe funzionare dal momento che hai usato conio.h

    Io per adesso non ne conosco nessuna ma se dovessi trovarla te la posto.
  • Re: Progetto sviluppato in Turbo C++ non gira su Dev C++

    Forse puoi provare in questo modo:
    #define CLRSCR {cout << "\x1B[2J"}    // il ; non ci vuole
    ...
    int main()
    {
    
        ....
    
        // pulisce lo schermo
        CLRSCR; // qui il ; ci vuole
        ....
        return 0;
    }
    
    Intanto prova.
    Ferò il testing anch'io.
    Ciao
  • Re: Progetto sviluppato in Turbo C++ non gira su Dev C++

    Sicuramente conio.h sarà da cancellare... roba antica di MS-DOS...
  • Re: Progetto sviluppato in Turbo C++ non gira su Dev C++

    Le ricerche hanno dato buon esito:

    allora... fai conto che il secondo post che ti ho inviato non te lo abbia mai inviato.

    poi, nel tuo codice sostituisci clrscr(); con system("CLS");

    in questo modo freghi qualsiasi ambiente di sviluppo utilizzano i cari vechhi comandi DOS.

    L'ho provato il tuo codice e funziona.
  • Re: Progetto sviluppato in Turbo C++ non gira su Dev C++

    Grazie mille gi@nluk@ !
    Risolto tutto grazie alle tue indicazioni!!!
    Buona serata
Devi accedere o registrarti per scrivere nel forum
5 risposte