edutecnica

Esercizio 11       

E' necessario scrivere una applicazione che simula il funzionamento di un frammento del sistema informativo di un operatore di telefonia cellulare. Si devono quindi rappresentare i dati relativi ad una carta SIM ed in particolare;
● Il numero di telefono.
● Il credito disponibile in euro.
● La lista dielle telefonate effettuate.
Per ciascuna telefonata deve essere rappresentata la durata in minuti.
La classe SIM dovrà fornire le seguenti funzionalità
● Un metodo per l'inserimento di una telefonata con i dati forniti dall'utente
● Una funzione per il calcolo dei minuti totali di conversazione.
● Una funzione per il calcolo delle telefonate effettuate verso un certo numero
● Una procedura per la stampa dei dati della SIM e l'elenco delle telefonate. .


#include <stdio.h>
class Telefonata{
private:
int durata; //durata in secondi
int nChiamato;
public:
//Costruttore vuoto
Telefonata(){
}
//Costruttore con solo numero di telefono
Telefonata(int n)
{
nChiamato=n;
durata=0;
}
//Costruttore con entrambi i valori
Telefonata(int n, int d)
{
nChiamato=n;
durata=d;
}
//Metodi get e set
void setNumChiamato(int n){
nChiamato=n;
}
void setDurata(int d){
durata=d;
}
int getNumChiamato(){
return nChiamato;
}
int getDurata(){
return durata;
}
};
class SIM{
private:
int nTelefono;
float credito;
int chiamateEffettuate; //tengo traccia del numero di chiamate effettuate
Telefonata listaChiamate[100];
public:
//Costruttore vuoto
SIM(){
credito=0;
chiamateEffettuate=0;
}
//Costruttore con parametri telefono e credito
SIM(int num, float cre){
nTelefono=num;
credito=cre;
chiamateEffettuate=0;
}
//Metodi Get e set
void setNumTelefono(int n){
nTelefono=n;
}
void setCredito(float c){
credito=c;
}
int getNumTelefono(){
return nTelefono;
}
float getCredito(){
return credito;
}
//METODI RICHIESTI DALL'ESERCIZIO (oltre al costruttore)
//metodo per l'nserimento di una telefonata con i dati forniti dall'utente

void inserisciChiamata(int nchiamato, int durata)
{
//controllo prima che la lista delle chiamate non sia piena
if(chiamateEffettuate>=100)
printf("Non si possono inserire chiamate. La lista è piena");
else
{ //creo una nuova Telefonata
Telefonata tel=Telefonata(nchiamato,durata);
//inserisco la telefonata nella lista
listaChiamate[chiamateEffettuate]=tel;
//incremento le chiamate effettuate
chiamateEffettuate++;
}
}
//una funzione per il calcolo dei minuti totali di conversazione
int minutiTotali(){
//scorro la lista delle chiamate effettuate e sommo solo le durate
int i,somma;
Telefonata t;
somma=0;
for (i=0; i<=chiamateEffettuate;i++)
{
t=listaChiamate[i]; //estraggo la chiamata
somma=somma+t.getDurata();
}
return somma;
}
//una funzione per il calcolo delle telefonate effettuate verso un certo numero
int NumChiamateA(int numero){
//scorro la lista delle chiamate effettuate e sommo solo le durate
int i,k;
Telefonata t;
k=0; //contatore delle chiamate
for (i=0; i<=chiamateEffettuate;i++)
{
t=listaChiamate[i]; //estraggo la chiamata
//controllo se il numero chiamato corrisponde a quello che cercavo
if (t.getNumChiamato()==numero)
k++;
}
return k;
}

//una procedura per la stampa dei dati della SIM e l'elenco delle telefonate
void stampaDati(){
int i;
Telefonata t;
printf("NUMERO SIM : %d\n",nTelefono);
printf("CREDITO : %f\n",credito);
printf("NUMERO CHIAMATE EFFETTUATE : %d\n",chiamateEffettuate);
printf("LISTA CHIAMATE :\n");
for (i=0; i<chiamateEffettuate;i++)
{
printf("CHIAMATA %d :\n",i+1);
t=listaChiamate[i]; //estraggo la chiamata
printf("NUMERO CHIAMATO : %d\t",t.getNumChiamato());
printf("DURATA(in sec)) : %d\n",t.getDurata());
}
}
};
main()
{
//ADESSO CHE HO LE CLASSI LE PROVO AD USARE
SIM miaSim;
int n,c,d,i;
//uso per crearla il costruttore con i parametri
printf("Quale è il tuo numero di telefono?");
scanf("%d",&n);
printf("Quale è il tuo numero credito iniziale?");
scanf("%d",&c);

//creo la sim con i dati appena inseriti dall'utente
miaSim=SIM(n,c);

//inserisco 5 chiamate (per provare)
for (i=0;i<5;i++)
{
printf("Che numero hai chiamato?");
scanf("%d",&n);
printf("quanti secondi è durata la chiamata?");
scanf("%d",&d);

miaSim.inserisciChiamata(n,d);
}

//Adesso restituisco la durata totale
printf("La durata totale delle tue chiamate vale %d\n", miaSim.minutiTotali());

//Cerco se ci sono chiamate verso un numero di telefono
printf("Inserisci un numero di telefono, ti dirò quante volte lo hai chiamato\n");
scanf("%d",&c);
printf("Hai chiamato quel numero %d volte\n",miaSim.NumChiamateA(c));

//Ora stampo tutti i dati della mia SIM
miaSim.stampaDati();
}


Il programma è costituito da due classi di oggetti che interagiscono tra loro attraverso un array di oggetti Telefonata contenuto nella classe SIM.