Problema dei Contratti Telefonici Corso di Programmazione in Java – Esercizio n° 007 Esercizio n° 7 Problema dei Contratti Telefonici Istituto Statale di Istruzione Superiore “F. Enriques”
Gli attributi che devono essere per forza presenti sono i seguenti: Corso di Programmazione in Java – Esercizio n° 007 Una nota compagnia telefonica vi richiede di fornirgli un programma per stampare le bollette da inviare ai propri utenti comprensive di altre informazioni quale ad esempio il numero di telefonate effettuate. La compagnia fornisce ai propri clienti due tipi di contratti: quello per la telefonia fissa e quello per la telefonia mobile. I due contratti non sono proprio identici: per quanto riguarda il costo delle telefonate, il contratto di telefonia mobile prevede sempre un costo fisso alla risposta, mentre il contratto di telefonia fissa ne è esente. Per quanto riguarda i dati identificativi del contratto, in quello di telefonia fissa deve essere specificato anche l’indirizzo in cui viene erogato il servizio. Capite bene quindi che ci sono caratteristiche in comune tra i due contratti ma anche alcune differenze… Gli attributi che devono essere per forza presenti sono i seguenti: Numero telefonico, Nome Utente, Costo telefonate, Numero telefonate effettuate. Si deve inoltre fissare una costante Costo_al_secondo che indica il costo delle telefonate per secondo di conversazione. Istituto Statale di Istruzione Superiore “F. Enriques”
dammiBolletta(): che restituisce il costo delle telefonate. Corso di Programmazione in Java – Esercizio n° 007 Per ogni tipo di contratto devono essere implementati i seguenti metodi: datiUtenza() : che restituisce una stringa da stampare contenente i dati dell’utenza telefonica. aggiornaBolletta(int numSecondi): che prende in input un numero di secondi ed aggiorna il costo totale della bolletta in base ai secondi di conversazione. aggiungiCostiFissi(float importo): che prende in input un importo e lo aggiunge al totale della bolletta. dammiBolletta(): che restituisce il costo delle telefonate. dammiNumTelefonate(): che restituisce il numero di telefonate effettuate. In seguito creare un semplice programmino che dati due utenti di tipologie di contratti diversi ne stampa l’importo della bolletta ed il numero di telefonate effettuate, Utilizzare la classe Random di Java.util.Random per impostare i numeri di secondi di durata delle conversazioni. Consiglio: fare una classe generica da cui far derivare due classi, una per tipologia di contratto, e poi fare overriding e overloading dove necessario… Istituto Statale di Istruzione Superiore “F. Enriques”
public class ContrattoTelefonico { Corso di Programmazione in Java – Esercizio n° 007 public class ContrattoTelefonico { private int numeroTel; private String utente; private float costoTelefonate; private int numTelefonate; private static final double COSTO_AL_SECONDO = 0.05; public ContrattoTelefonico(String nomeUt, int numero) { utente = nomeUt; numeroTel = numero; costoTelefonate = 0; numTelefonate = 0; } public String datiUtenza() { return "Utente: " + utente + "; numero tel.: " + numeroTel; } public void aggiornaBolletta(int numSecondi) { costoTelefonate += COSTO_AL_SECONDO * numSecondi; numTelefonate++; } public void aggiungiCostiFissi(float importo) { costoTelefonate += importo; } public float dammiBolletta() { return costoTelefonate; } public int dammiNumTelefonate() { return numTelefonate; } Istituto Statale di Istruzione Superiore “F. Enriques”
public class ContrattoFisso extends ContrattoTelefonico { Corso di Programmazione in Java – Esercizio n° 007 public class ContrattoFisso extends ContrattoTelefonico { private String indirizzo; // indirizzo dell'utente. public ContrattoFisso(String nome, int numero, String datiIndir) { super(nome, numero); // chiama il costruttore della superclasse. indirizzo = datiIndir; } public String datiUtenza() { return super.datiUtenza() + "\nindirizzo: " + indirizzo; } } //Overriding del metodo datiUtenza() definito nella classe genitrice. public class ContrattoMobile extends ContrattoTelefonico { private static final double COSTO_RISPOSTA = 5.10; // costo alla risposta. public ContrattoMobile(String nome, int numero) { super(nome, numero); } public void aggiornaBolletta(int nSecondi) { super.aggiornaBolletta(nSecondi); super.aggiungiCosti(COSTO_RISPOSTA); } } //Overriding del metodo aggiornaBolletta() definito nella classe genitrice. Istituto Statale di Istruzione Superiore “F. Enriques”
import java.util.Random; // per generare numeri casuali Corso di Programmazione in Java – Esercizio n° 007 import java.util.Random; // per generare numeri casuali public class Main { public static void main(String[] arg) { Random generatoreRandom = new Random(); ContrattoFisso utente1 = new ContrattoFisso("Ugo", 12345, "via Dotto 1"); ContrattoMobile utente2 = new ContrattoMobile("Ada", 6789123); // i due utenti fanno 10 telefonate di durata casuale (tra 1 e 100 sec) for (int i = 1; i <= 10; i++) { int tempoConversazione = generatoreRandom.nextInt(100) + 1; utente1.aggiornaBolletta(tempoConversazione); tempoConversazione = generatoreRandom.nextInt(100) + 1; utente2.aggiornaBolletta(tempoConversazione); } … Istituto Statale di Istruzione Superiore “F. Enriques”
System.out.println("* * * * * * * * * * * * * * * * * * * * *"); Corso di Programmazione in Java – Esercizio n° 007 System.out.println("* * * * * * * * * * * * * * * * * * * * *"); System.out.println("Bolletta del primo utente:"); System.out.println(utente1.datiUtenza() + "\nnum. telefonate: " + utente1.dammiNumTelefonate() + "\ncosto telefonate: " + utente1.dammiBolletta()); System.out.println(); System.out.println("Bolletta del secondo utente:"); System.out.println(utente2.datiUtenza() + "\nnum. telefonate: " + utente2.dammiNumTelefonate() + "\ncosto telefonate: " + utente2.dammiBolletta()); System.out.println(); } Istituto Statale di Istruzione Superiore “F. Enriques”