Università degli Studi di Brescia
Fondamenti di Programmazione
Docente: Alessandro Saetti
A.A. 2012/2013
ESERCITAZIONE SULLE CLASSI
Università degli Studi di Brescia
A.A. 2012/2013
Definire la classe studente (matricola, nome, cognome) con:
• Un metodo che inizializza i dati dello studente (matricola, nome e cognome) con dati
acquisiti da tastiera;
• Un metodo che visualizzi i dati dello studente.
Sfruttando la classe precedente, definire la classe aula (gruppo di studenti) con
• Un costruttore che azzera in numero di studenti nel gruppo;
• Un metodo che visualizza i dati degli studenti nel gruppo;
• Un metodo che rimuove dal gruppo lo studente avente un numero di matricola pari ad
un intero acquisito da tastiera;
• Un metodo che inserisce un nuovo studente nel gruppo.
Scrivere un programma C++ che, sfruttando le classi precedentemente definite, supporti
(tramite un menù di opzioni) l’aggiunta, la rimozione e la visualizzazione dei dati di studenti
da un’aula
Definire la classe studente (matricola, nome, cognome) con:
• Un metodo che inizializza i dati dello studente (matricola, nome e
cognome) con dati acquisiti da tastiera;
• Un metodo che visualizzi i dati dello studente.
Sfruttando la classe precedente, definire la classe aula (gruppo di
studenti) con
• Un costruttore che azzera in numero di studenti nel gruppo;
• Un metodo che visualizza i dati degli studenti nel gruppo;
• Un metodo che rimuove dal gruppo lo studente avente un
numero di matricola pari ad un intero acquisito da tastiera;
• Un metodo che inserisce un nuovo studente nel gruppo.
Scrivere un programma C++ che, sfruttando le classi
precedentemente definite, supporti (tramite un menù di opzioni)
l’aggiunta, la rimozione e la visualizzazione dei dati di studenti
da un’aula
#include <iostream>
using namespace std;
#define NCHAR 30
class Studente
{
public:
void Leggi();
void Stampa();
private:
int Matricola;
char Cognome[NCHAR];
char Nome[NCHAR];
};
I costruttori non sono obbligatori: se una classe non possiede
alcun costruttore, il C++ fornisce un costruttore di default con
"corpo nullo" {}.
Se ci fosse la necessità possiamo fornire un costruttore di default.
Ecco due esempi:
Studente::Studente()
{
Matricola=0;
Cognome[0]='\0';
Nome[0]='\0';
}
#define <string.h>
Studente::Studente()
{
Matricola=0;
strcpy(Cognome,"");
strcpy(Nome,"");
}
Definire la classe studente (matricola, nome, cognome) con:
• Un metodo che inizializza i dati dello studente (matricola, nome
e cognome) con dati acquisiti da tastiera;
• Un metodo che visualizzi i dati dello studente.
Sfruttando la classe precedente, definire la classe aula (gruppo di
studenti) con
• Un costruttore che azzera in numero di studenti nel gruppo;
• Un metodo che visualizza i dati degli studenti nel gruppo;
• Un metodo che rimuove dal gruppo lo studente avente un
numero di matricola pari ad un intero acquisito da tastiera;
• Un metodo che inserisce un nuovo studente nel gruppo.
Scrivere un programma C++ che, sfruttando le classi
precedentemente definite, supporti (tramite un menù di opzioni)
l’aggiunta, la rimozione e la visualizzazione dei dati di studenti
da un’aula
Mi invento un main() per testare le
funzionalità fino a questo punto
implementate
int main()
{
Studente S;
S.Leggi();
S.Stampa();
}
void Studente::Leggi()
{
cout << "Matricola: ";
cin >> Matricola;
cout << "Cognome: ";
cin >> Cognome;
cout << "Nome: ";
cin >> Nome;
}
void Studente::Stampa()
{
cout << "Matricola: ";
cout << Matricola << endl;;
cout << "Cognome: ";
cout << Cognome << endl;;
cout << "Nome: ";
cout << Nome << endl;
}
Definire la classe studente (matricola, nome, cognome) con:
• Un metodo che inizializza i dati dello studente (matricola, nome e cognome) con
dati acquisiti da tastiera;
• Un metodo che visualizzi i dati dello studente.
Sfruttando la classe precedente, definire la classe aula (gruppo di studenti) con
• Un costruttore che azzera in numero di studenti nel gruppo;
• Un metodo che visualizza i dati degli studenti nel gruppo;
• Un metodo che rimuove dal gruppo lo studente avente un numero di matricola pari
ad un intero acquisito da tastiera;
• Un metodo che inserisce un nuovo studente nel gruppo.
Scrivere un programma C++ che, sfruttando le classi precedentemente definite,
supporti (tramite un menù di opzioni) l’aggiunta, la rimozione e la visualizzazione dei
dati di studenti da un’aula
#define NSTUD 30
class Aula
{
public:
Aula();
void Stampa();
void EliminaStudente();
void InserisciStudente();
private:
Studente Elenco[NSTUD];
int NrStud;
};
class Aula
{
public:
Aula();
void Stampa();
bool EliminaStudente(int);
bool Inserisci(Studente);
private:
Studente Dati[NSTUD];
int NrStud;
};
Nella definizione della classe posso considerare che la sezione di input sia esterna (2°
definizione) oppure implementata al suo interno (1° definizione). Scegliamo quest’ultima.
Definire la classe studente (matricola, nome, cognome) con:
• Un metodo che inizializza i dati dello studente (matricola, nome e
cognome) con dati acquisiti da tastiera;
• Un metodo che visualizzi i dati dello studente.
Sfruttando la classe precedente, definire la classe aula (gruppo di
studenti) con
• Un costruttore che azzera in numero di studenti nel gruppo;
• Un metodo che visualizza i dati degli studenti nel gruppo;
• Un metodo che rimuove dal gruppo lo studente avente un
numero di matricola pari ad un intero acquisito da tastiera;
• Un metodo che inserisce un nuovo studente nel gruppo.
Scrivere un programma C++ che, sfruttando le classi
precedentemente definite, supporti (tramite un menù di opzioni)
l’aggiunta, la rimozione e la visualizzazione dei dati di studenti
da un’aula
void Aula::InserisciStudente()
{
if (NrStud < NSTUD)
Elenco[NrStud++].Leggi();
}
Aula::Aula()
{
NrStud=0;
}
Costruttore di default
Definire la classe studente (matricola, nome, cognome) con:
• Un metodo che inizializza i dati dello studente (matricola, nome e
cognome) con dati acquisiti da tastiera;
• Un metodo che visualizzi i dati dello studente.
Sfruttando la classe precedente, definire la classe aula (gruppo di
studenti) con
• Un costruttore che azzera in numero di studenti nel gruppo;
• Un metodo che visualizza i dati degli studenti nel gruppo;
• Un metodo che rimuove dal gruppo lo studente avente un
numero di matricola pari ad un intero acquisito da tastiera;
• Un metodo che inserisce un nuovo studente nel gruppo.
Scrivere un programma C++ che, sfruttando le classi
precedentemente definite, supporti (tramite un menù di opzioni)
l’aggiunta, la rimozione e la visualizzazione dei dati di studenti
da un’aula
Definire la classe studente (matricola, nome, cognome) con:
• Un metodo che inizializza i dati dello studente (matricola, nome e
cognome) con dati acquisiti da tastiera;
• Un metodo che visualizzi i dati dello studente.
Sfruttando la classe precedente, definire la classe aula (gruppo di
studenti) con
• Un costruttore che azzera in numero di studenti nel gruppo;
• Un metodo che visualizza i dati degli studenti nel gruppo;
• Un metodo che rimuove dal gruppo lo studente avente un
numero di matricola pari ad un intero acquisito da tastiera;
• Un metodo che inserisce un nuovo studente nel gruppo.
Scrivere un programma C++ che, sfruttando le classi
precedentemente definite, supporti (tramite un menù di opzioni)
l’aggiunta, la rimozione e la visualizzazione dei dati di studenti
da un’aula
Mi invento un main() per testare le
funzionalità fino a questo punto
implementate
int main()
{
Aula A;
A.InserisciStudente();
A.InserisciStudente();
A.Stampa();
}
Funzione-membro che stampa gli
studenti del gruppo
void Aula::Stampa()
{
for (int i=0; i <NrStud ; i++)
Elenco[i].Stampa();
}
Definire la classe studente (matricola, nome, cognome) con:
• Un metodo che inizializza i dati dello studente (matricola, nome e cognome) con
dati acquisiti da tastiera;
• Un metodo che visualizzi i dati dello studente.
INIZIO: sia A il
gruppo di studenti
Leggo la matricola m dello
studente da eliminare
Sfruttando la classe precedente, definire la classe aula (gruppo di studenti) con
• Un costruttore che azzera in numero di studenti nel gruppo;
• Un metodo che visualizza i dati degli studenti nel gruppo;
• Un metodo che rimuove dal gruppo lo studente avente un numero di matricola
pari ad un intero acquisito da tastiera;
• Un metodo che inserisce un nuovo studente nel gruppo.
Scrivere un programma C++ che, sfruttando le classi precedentemente definite,
supporti (tramite un menù di opzioni) l’aggiunta, la rimozione e la visualizzazione
dei dati di studenti da un’aula
Ricerco, nel gruppo di
studenti A, lo studente
con matricola m
NO
Per ricercare lo studente da eliminare all’interno del
gruppo devo poter leggere il contenuto della variabile
membro «Matricola» che però è privata. Per aver accesso
a tale valore creo una funzione membro getMatricola();
class Studente
{
public:
void Leggi();
void Stampa();
int getMatricola();
private:
int Matricola;
char Cognome[NCHAR];
char Nome[NCHAR];
};
int
{
SI
Elimino lo studente
ricopiandoci sopra quello
che è in fondo all’elenco A
Decremento il numero di
studenti NrStud in A
Studente::getMatricola()
return (Matricola);
}
esiste
FINE
Decodifica in C++ del «metodo che rimuove dal gruppo lo studente avente un numero di
matricola pari ad un intero acquisito da tastiera»;
INIZIO: sia A il
gruppo di studenti
void Aula::EliminaStudente()
{
int m;
cout << "Matricola Studente da Eliminare: ";
cin >> m;
Leggo la matricola m dello
studente da eliminare
Ricerco, nel gruppo di
studenti A, lo studente
con matricola m
NO
for (int i=0 ; i<NrStud; i++)
if (Elenco[i].getMatricola()==m)
esiste
SI
Elimino lo studente
ricopiandoci sopra quello
che è in fondo all’elenco A
{
Elenco[i]=Elenco[NrStud-1];
NrStud--;
return;
Decremento il numero di
studenti NrStud in A
FINE
}
}
Definire la classe studente (matricola, nome, cognome) con:
• Un metodo che inizializza i dati dello studente (matricola,
nome e cognome) con dati acquisiti da tastiera;
• Un metodo che visualizzi i dati dello studente.
void Aula::EliminaStudente()
{
int m;
cout << "Matr. Studente da eliminare:";
Sfruttando la classe precedente, definire la classe aula (gruppo di
cin >> m;
studenti) con
• Un costruttore che azzera in numero di studenti nel gruppo;
for (int i=0 ; i<NrStud; i++)
• Un metodo che visualizza i dati degli studenti nel gruppo;
if (Elenco[i].getMatricola()==m)
• Un metodo che rimuove dal gruppo lo studente avente un
{
numero di matricola pari ad un intero acquisito da tastiera;
Elenco[i]=Elenco[NrStud-1];
• Un metodo che inserisce un nuovo studente nel gruppo.
NrStud--;
return;
Scrivere un programma C++ che, sfruttando le classi
precedentemente definite, supporti (tramite un menù di opzioni)
}
l’aggiunta, la rimozione e la visualizzazione dei dati di studenti da }
un’aula
Un main() di prova potrebbe essere
il seguente:
int main()
{
Aula A;
A.InserisciStudente();
A.InserisciStudente();
A.InserisciStudente();
A.Stampa();
A.EliminaStudente();
A.Stampa();
}
int main()
Definire la classe studente (matricola, nome, cognome) con:
• Un metodo che inizializza i dati dello studente (matricola, nome e {
cognome) con dati acquisiti da tastiera;
Aula A;
• Un metodo che visualizzi i dati dello studente.
int Scelta;
do {
// Stampo il menu:
cout << "1. Aggiungi\n";
cout << "2. Rimuovi\n";
cout << "3. Stampa\n";
cout << "0. Esci\n--> ";
// Leggo l'opzione scelta:
cin >> Scelta;
// Eseguo azione richiesta
// o avviso errore
if (Scelta==1)
A.InserisciStudente();
else if (Scelta==2)
A.EliminaStudente();
else if (Scelta==3)
A.Stampa();
else if (Scelta!=0)
cout << "Opzione errata!\n";
} while (Scelta !=0);
Sfruttando la classe precedente, definire la classe aula (gruppo di
studenti) con
• Un costruttore che azzera in numero di studenti nel gruppo;
• Un metodo che visualizza i dati degli studenti nel gruppo;
• Un metodo che rimuove dal gruppo lo studente avente un
numero di matricola pari ad un intero acquisito da tastiera;
• Un metodo che inserisce un nuovo studente nel gruppo.
Scrivere un programma C++ che, sfruttando le classi
precedentemente definite, supporti (tramite un menù di opzioni)
l’aggiunta, la rimozione e la visualizzazione dei dati di studenti
da un’aula
INIZIO
Stampo Menu
Leggo scelta
Eseguo azione se è
tra quelle previste
SI
Scelta!=0
NO
FINE
}
Scarica

Eser 7.3