Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    [C++] Permettere all'utente di inserire dati all'interno di una classe

    Ho creato un programma utilizzando le classi per permettere l'inserimento e la stampa di una lista di persone.

    Il mio problema è che non riesco a creare un main che mi permetta di far scegliere all'utente il numero di entry e poi farle inserire una ad una. mi sapreste aiutare?

    File iscrizione.h

    codice:
    #ifndef ISCRIZIONE_H_
    #define ISCRIZIONE_H_
    
    class iscritto{
    public:
    	iscritto(const char*,const char*,const int*); //Costruttore
    	~iscritto(); //Distruttore
    	const char *getnome() const; //Legge il nome
    	const char *getcognome() const; //Legge il cognome
    	const int *getmatricola() const; //Legge la matricola
    	static int getconta(); //Conta il numero di iscritti
    	
    private:
    	char* nome;
    	char* cognome;
    	int* matricola;
    	static int contatore;
    };
    
    
    #endif /*ISCRIZIONE_H_*/
    file funzioniiscrizione.cpp

    codice:
    #include <iostream>
    #include <cstdlib>
    #include <string>
    #include "iscrizione.h"
    
    using namespace std;
    
    //Inizializzo il contatore
    int iscritto::contatore=0;
    
    //Richiamo la funzione contatore
    int iscritto::getconta(){return contatore;}
    
    //Richiamo il costruttore della classe
    
    iscritto::iscritto(const char* name, const char* surname,const int* matric){
    	
    	nome=new char[strlen(name) + 1 ];
    	strcpy(nome,name);
    	
    	cognome=new char[strlen(surname) + 1 ];
    	strcpy(cognome,surname);
    	
    	matricola=new int[9];
    	
    	++contatore; //Incremento il contatore
    	
    }
    
    //Richiamo il distruttore della classe iscritto
    
    iscritto::~iscritto(){
    	
    	delete nome;
    	delete cognome;
    	delete matricola;
    }
    
    //Implemento la funzione che riceve il nome
    
    const char *iscritto::getnome() const{
    	
    	cin>>nome;
    	return nome;
    }
    
    
    //Implemento la funzione che riceve il cognome
    
    const char *iscritto::getcognome() const{
    	return cognome;
    }
    
    //Implemento la funzione che riceve la matricola
    
    const int *iscritto::getmatricola() const{
    	return matricola;
    }
    File mainiscrizione.cpp

    codice:
    #include <iostream>
    #include <cstdlib>
    #include "iscrizione.h"
    
    using namespace std;
    
    int main(){
    	
    
    	//BHO
    	
    }
    Grazie dell'aiuto
    MondoLibero: Informazione Libera, Varia ed Eventuale
    Sito di informazione varia ed eventuale. Quando ho voglia scrivo di ciò che mi pare. Pubblico guide, recensioni, notizie, critiche e tutto ciò che mi passa sotto mano e che penso sia interessante.

  2. #2
    Nessuno mi sa aiutare?
    MondoLibero: Informazione Libera, Varia ed Eventuale
    Sito di informazione varia ed eventuale. Quando ho voglia scrivo di ciò che mi pare. Pubblico guide, recensioni, notizie, critiche e tutto ciò che mi passa sotto mano e che penso sia interessante.

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    A cosa serve questo argomento

    const int* matric

    ?

    Comunque ... a prima vista, nel main potresti creare un vettore di oggetti della classe iscritto ... o una lista concatenata ... decidi tu ...

  4. #4
    Originariamente inviato da oregon
    A cosa serve questo argomento

    const int* matric

    ?

    Comunque ... a prima vista, nel main potresti creare un vettore di oggetti della classe iscritto ... o una lista concatenata ... decidi tu ...
    Serve per riservare spazio per la matricola.

    Ho provato a realizzare già un vettore ma non sono riuscito a farlo utilizzando le classi.
    MondoLibero: Informazione Libera, Varia ed Eventuale
    Sito di informazione varia ed eventuale. Quando ho voglia scrivo di ciò che mi pare. Pubblico guide, recensioni, notizie, critiche e tutto ciò che mi passa sotto mano e che penso sia interessante.

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Gia' ... ma scrivi matric e usi matricola ... dovresti gia' avere un errore in compilazione ...

    Come hai realizzato il vettore ?

  6. #6
    Originariamente inviato da oregon
    Gia' ... ma scrivi matric e usi matricola ... dovresti gia' avere un errore in compilazione ...

    Come hai realizzato il vettore ?
    No,perchè ho dichiarato matricola nella classe e la richiamo da li.

    Per il vettore ho fatto una cosa del genere:


    codice:
    int nuovo=0;
    
    cout<<"Inserisci il numero di iscritti da inserire"<<endl;
    cin>>nuovo;
    
    for(int=0;i<nuovo;i++){
    
    Ora non so il codice da utilizzare per creare un oggetto per ogni nuovo iscritto richiamando le funzioni che ho creato e salvando tutto in modo da poterlo poi richiamare per la stampa
    
    }
    MondoLibero: Informazione Libera, Varia ed Eventuale
    Sito di informazione varia ed eventuale. Quando ho voglia scrivo di ciò che mi pare. Pubblico guide, recensioni, notizie, critiche e tutto ciò che mi passa sotto mano e che penso sia interessante.

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Aggiungi nella tua classe un costruttore di default (senza parametri) e nel main scrivi

    codice:
    iscritto *visc = new iscritto[nuovo];
    Poi esegui una for per la post-costruzione degli oggetti utilizzando, ad esempio, un metodo SetData che accetti i parametri del costruttore con parametri e lo richiami passando gli stessi parametri ...

    codice:
    for(int i=0; i<nuovo; i++)
       visc[i].SetData( ... );
    Alla fine libera la memoria

    codice:
    delete[] visc;

  8. #8
    Continuo ad avere problemi, ho modificato il programma in questo modo ma nel mail mi fa inserire solo il nome la prima volta, come posso modificare tutto in modo che funzioni, grazie.

    iscrizione.h
    codice:
    #ifndef ISCRIZIONE_H_
    #define ISCRIZIONE_H_
    
    class iscrizione{
    public:
    	iscrizione(char n=0,char c=0,int m=000000000); //Costruttore
    	~iscrizione(); //Distruttore
    
    	//Funzione specifiche set
    	void setname(char); //Imposta il nome
    	void setsurname(char); //Imposta il cognome
    	void setmatricola(int); //Imposta la matricola
    	void setiscrizione(char,char,int); //Imposta Classe
    	
    	//Funzioni specifiche get
    	char getnome() const;
    	char getsurname() const;
    	int getmatricola() const;
    	
    	//Funzioni membro statiche
    	static int getcount(); //Contatore Iscritti
    	
    	//Funzione Stampa
    	void print() const; //Stampa i valori
    	
    private:
    	char nome;
    	char cognome;
    	int matric;
    	static int count;
    };
    
    
    #endif /*ISCRIZIONE_H_*/
    funzioniiscrizione.cpp
    codice:
    #include <iostream>
    #include <cstdlib>
    #include <string>
    #include "iscrizione.h"
    
    using namespace std;
    
    //Inizializzo il contatore
    int iscrizione::count=0;
    
    //Richiamo la funzione contatore
    int iscrizione::getcount(){return count;}
    
    //Richiamo il costruttore della classe
    
    iscrizione::iscrizione(char name,char surname,int matric){
    	
    	setiscrizione(name,surname,matric);
    	
    }
    
    //Richiamo il distruttore della classe
    
    iscrizione::~iscrizione(){
    	
    }
    
    //Imposta Nome, Cognome e Matricola
    void iscrizione::setiscrizione(char n,char c,int m){
    	
    	setname(n);
    	setsurname(c);
    	setmatricola(m);
    	
    }
    
    //Imposta Il Nome
    void iscrizione::setname(char n){
    	
    	nome=n;
    }
    //Imposta Il Cognome
    void iscrizione::setsurname(char c){
    	
    	cognome=c;
    }
    //Imposta la Matricola
    void iscrizione::setmatricola(int m){
    	
    	matric=m;
    }
    
    //Restituisce Il Nome
    char iscrizione::getnome() const{
    	
    	return nome;
    }
    //Restituisce Il Cognome
    char iscrizione::getsurname() const{
    	
    	return cognome;
    }
    //Imposta la Matricola
    int iscrizione::getmatricola() const{
    	
    	return matric;
    }
    
    //Funzione stampa
    void iscrizione::print() const{
    	
    	cout<<"NOME \t COGNOME \t MATRICOLA"<<endl;
    	cout<<nome<<"\t"<<cognome<<"\t"<<matric<<endl;
    }
    mainiscrizione.cpp
    codice:
    #include <iostream>
    #include <cstdlib>
    #include "iscrizione.h"
    
    using namespace std;
    
    int main(){
    	
    	iscrizione iscritto(0,0,000000000);
    	int nuovo=0;
    	cout<<"Inserisci il numero di iscritti da aggiungere"<<endl;
    	cin>>nuovo;
    	iscrizione *visc=new iscrizione[nuovo];
    	char n,c;
    	int m;
    	
    	for(int i=1;i<=nuovo;i++){
    		
    		cout<<"Inserisci il nome dell\' iscritto numero "<<i<<endl;
    		cin>>n;
    		visc[i].setname(n);
    		cout<<"Inserisci il cognome dell\' iscritto numero "<<i<<endl;
    		cin>>c;
    		visc[i].setsurname(c);
    		cout<<"Inserisci la matricola dell\' iscritto numero "<<i<<endl;
    		cin>>m;
    		visc[i].setmatricola(m);
    		
    	}
    	
    	delete [] visc;
    	
    	return 0;
    }

    Grazie.
    MondoLibero: Informazione Libera, Varia ed Eventuale
    Sito di informazione varia ed eventuale. Quando ho voglia scrivo di ciò che mi pare. Pubblico guide, recensioni, notizie, critiche e tutto ciò che mi passa sotto mano e che penso sia interessante.

  9. #9
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    Perchè parti da i=1? i vettori partono da 0 a dimensione-1...

    che valore inserisci come numero degli iscritti? Fai una prova con un numero di default senza chiederlo da cin, tipo un 5.. Se continua a non ciclare vuol dire che il problema è un altro..

    codice:
    for(int i=0;i<nuovo;i++)
    In più quando ti chiede nome, matricola ecc.. cosa scrivi da tastiera? Tanti caratteri o uno ogni richiesta? Perchè tu chiedi e passi un char cioè un carattere.. se scrivi "pippo" lo valuta come 5 caratteri.. attento..

  10. #10
    Originariamente inviato da Stoicenko
    Perchè parti da i=1? i vettori partono da 0 a dimensione-1...

    che valore inserisci come numero degli iscritti? Fai una prova con un numero di default senza chiederlo da cin, tipo un 5.. Se continua a non ciclare vuol dire che il problema è un altro..

    codice:
    for(int i=0;i<nuovo;i++)
    In più quando ti chiede nome, matricola ecc.. cosa scrivi da tastiera? Tanti caratteri o uno ogni richiesta? Perchè tu chiedi e passi un char cioè un carattere.. se scrivi "pippo" lo valuta come 5 caratteri.. attento..
    Ho modificato il codice settando la partenza del vettore da 0 ed aggiungendo +1 ad i nella visualizzazione del numero di iscritto che si sta inserendo.

    Ho testato il programma per quanto riguarda l'inserimento di una sola lettere e funziona, ora però vorrei sapere se per inserire invece il nome completo devo usare le stringhe moficando le funzioni getnome e getsurname.

    Grazie dell'aiuto.
    MondoLibero: Informazione Libera, Varia ed Eventuale
    Sito di informazione varia ed eventuale. Quando ho voglia scrivo di ciò che mi pare. Pubblico guide, recensioni, notizie, critiche e tutto ciò che mi passa sotto mano e che penso sia interessante.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.