ΕΦΑΡΜΟΓΗ 1

ΠΕΡΙΓΡΑΦΗ 
Ένας Συνδρομητής μπορεί  να είναι ένα Άτομο ή μία Εταιρεία. Ο συνδρομητής μπορεί να έχει μία ή περισσότερες Συνδέσεις, με διαφορετικό αριθμό τηλεφώνου η κάθε μια.

Η κάθε σύνδεση αναφέρεται σε συγκεκριμένο Πρόγραμμα, το οποίο μπορεί  να είναι πρόγραμμα Ομιλίας, πρόγραμμα Internet, ή Συνδυασμός των δύο προγραμμάτων. Ο συνδρομητής πραγματοποιεί κλήσεις (KinisiKlisis) οι οποίες χρεώνονται μόνο όταν υπερβεί το προκαθορισμένο όριο χρόνου ομιλίας. Η χρέωση σ’ αυτή την περίπτωση είναι 0,20€ για κάθε επιπλέον λεπτό συνομιλίας και από το πρώτο δευτερόλεπτο της συνομιλίας.

ΚΛΑΣΗ Syndromitis

// Κλάση: Syndromitis. Η κλάση αυτή κληρονομείται από τις κλάσεις Atomo και
// Etaireia και είναι abstract επειδή δεν χρειάζεται να δημιουργηθούν
// στιγμιότυπα της.

import java.util.ArrayList;

public abstract class Syndromitis {
    
    // Πεδία
    private int kodikos;
    private String AFM;
    // Το παρακάτω πεδίο υπάρχει λόγω τις σχέσης της κλάσης Syndromitis με την
    // κλάση Syndesi
    private ArrayList<Syndesi> syndeseis;
   
    // Constructor
    public Syndromitis(int kodikos, String AFM) {
        this.kodikos = kodikos;
        this.AFM = AFM;
        syndeseis = new ArrayList<Syndesi>();
    }
   
    // Getters
    public int getKodikos() { return kodikos; }
    public String getAFM() { return AFM; }
   
    // Η παρακάτω μέθοδος προσθέτει στο ArrayList syndeseis μία νέα σύνδεση.
    public void neaSyndesi(Syndesi si) {
        syndeseis.add(si);
    }
   
    // Η παρακάτω μέθοδος προσθέτει μία νέα κλήση, σε έναν αριθμό τηλεφώνου.
   
    public void addKlisi(String arithmosTilefonou, String hmerominia, int ora, int diarkeia) {
       
        // Συνθήκη for που αφορά μία σύνδεση ενός συνδρομητή.
        for (int i = 0; i < syndeseis.size(); i++) {
            // Με την if εντοπίζεται ο αριθμός της σύνδεσης.
            if (syndeseis.get(i).getArithmosTilefonou().equals(arithmosTilefonou)) {
                // Κλήση  της μεθόδου addKlisi.
                syndeseis.get(i).addKlisi(hmerominia, ora, diarkeia);
                // Τέλος αναζήτησης.
                break;
            }
        } 
    }  
}
ΚΛΑΣΗ Atomo

// Κλάση: Atomo. Η κλάση αυτή κληρονομεί την abstract κλάση Syndromitis και
//έχει ως πεδίο το onomatEponymo.

public class Atomo extends Syndromitis {
   
    // Πεδία
    private String onomatEponymo;

    // Constructor
    public Atomo(int kodikos, String AFM, String onomatEponymo) {
        super(kodikos,AFM);
        this.onomatEponymo = onomatEponymo;
    }

    // Getter
    public String getOnometEponymo() { return onomatEponymo; }
   
}
ΚΛΑΣΗ Etaireia

// Κλάση: Etaireia. Η κλάση αυτή κληρονομεί την abstract κλάση Syndromitis και
// έχει ως πεδίο την eponymia.

public class Etaireia extends Syndromitis {
   
    // Πεδία
    private String eponymia;
   
    // Constructor
    public Etaireia(int kodikos, String AFM, String eponymia) {
        super(kodikos,AFM);
        this.eponymia = eponymia;
    }
   
    // Getter
    public String getEponymia() { return eponymia; }
   
}
ΚΛΑΣΗ Syndesi

// Κλάση: Syndesi.

import java.util.ArrayList;

public class Syndesi {
   
    // Πεδία
    private String arithmosTilefonou;
    private String hmeromSyndesis;
    private String hmeromDiakopis;
    private boolean katastasi;
    // Το επόμενο πεδίο προκύπτει από την σχέση aggregation της κλάσης Syndesi
    // με την κλάση Programma.
    private ArrayList<Programma> programmata;
   
    // Constructor
    public Syndesi(String arithmosTilefonou, String hmeromSyndesis) {
        this.arithmosTilefonou = arithmosTilefonou;
        this.hmeromSyndesis = hmeromSyndesis;
        katastasi = true;
        programmata = new ArrayList<Programma>();
    }
   
    // Getters
    public String getArithmosTilefonou() { return arithmosTilefonou; }
    public String getHmeromSyndesis() { return hmeromSyndesis; }
    public String getHmeromDiakopis() { return hmeromDiakopis; }
    public boolean getKatastasi() { return katastasi; }
   
    // Οι επόμενες μέθοδοι προκύπτουν από το πεδίο katastasi.
   
    // Μέθοδος διακοπής σύνδεσης.
    public void diakopi(String hmeromDiakopis) {
        this.hmeromDiakopis = hmeromDiakopis;
        katastasi = false;
    }
   
    // Μέθοδος επανασύνδεσης της σύνδεσης.
    public void epanasyndesi() {
        hmeromDiakopis = null;
        katastasi = true;
    }
   
    // Μέθοδος που προσθέτει ένα νέο πρόγραμμα στο ArrayList programs.
    public void addProgram(Programma pr) {
        programmata.add(pr);
    }
   
    // Η επόμενη μέθοδος προσθέτει μία κλήση σε ένα τηλεφωνικό πρόγραμμα της
    // σύνδεσης. Επίσης εντοπίζει τα υπάρχοντα προγράμματα ομιλίας
    // χρησιμοποιώντας τον τελεστή instanceOf.
    public void addKlisi(String hmerominia, int ora, int diarkeia) {
       
        // Χωρίς σύνδεση δεν υπάρχει δυνατότητα κλήσης.
        if (katastasi == false)
            return;
       
        // Ακολουθεί η εύρεση του προγράμματος Omilias ή Syndiasmeno.
        Programma pr = null;
        for (int i = 0; i < programmata.size(); i++) {
            if (programmata.get(i) instanceof Omilias ||
                programmata.get(i) instanceof Syndiasmeno) {
                // Η αναφορά p παίρνει ως τιμή της το πρόγραμμα  που βρέθηκε.
                pr = programmata.get(i);
                // Τέλος επανάληψης.
                break;
            }
        }
       
        // Αν δεν βρεθεί πρόγραμμα Omilias.
        if (pr == null)
            return;
       
        // Στην παρακάτω συνθήκη εξετάζεται αν το πρόγραμμα που βρεθηκε
        // είναι πρόγραμμα omilias. Αν ναι, τότε γίνεται cast στον τύπο
        // του προγράμματος και καλείται η μέθοδος addKlisi της κλάσης Omilias.
        // Αν δεν είναι τότε γίνεται cast στον τύπο Syndiasmeno και καλείται η
        // μέθοδος  addKlisi του αντικειμένου Omilias της κλάσης Syndiasmeno.
        if (pr instanceof Omilias)
            ((Omilias) pr).addKlisi(hmerominia, ora, diarkeia);
        else if (pr instanceof Syndiasmeno)
            ((Syndiasmeno) pr).getPrOmilias().addKlisi(hmerominia, ora, diarkeia);   
    } 
}
ΚΛΑΣΗ Programma

// Κλάση: Programma. Μπορεί να είναι πρόγραμμα ομιλίας, Internet, συνδυασμένο.

public abstract class Programma {
   
    // Πεδία
    private String hmeromEnarxis;
    private boolean katastasi;
   
    // Constructor
    public Programma(String hmeromEnarxis) {
        this.hmeromEnarxis = hmeromEnarxis;
        katastasi = true;
    }
   
    // Getters
    public String getHmeromEnarxis() { return hmeromEnarxis; }
    public boolean getKatastasi() { return katastasi; }
   
    // Οι παρακάτω Μέθοδοι προκύπτουν από το πεδίο katastasi.
  
    // Μέθοδος διακοπής προγράμματος.
    public void diakopi() {
        katastasi = false;
    }
   
    // Μέθοδος ενεργοποίησης προγράμματος.
    public void epanasyndesi() {
        katastasi = true;
    }  
}
ΚΛΑΣΗ internet

// Κλάση: internet. Η κλάση αυτή κληρονομεί την κλάση Programma.

public class Internet extends Programma {
   
    // Πεδία
    private int Mbps;
   
    // Constructor
    public Internet(String hmeromEnarxis, int Mbps) {
        super(hmeromEnarxis);
        this.Mbps = Mbps;
    }
   
    // Getter
    public int getMbps() { return Mbps; }
   
}
ΚΛΑΣΗ Omilias

// Κλάση: Omilias. Η κλάση αυτή κληρονομεί την κλάση Programma.

import java.util.ArrayList;

public class Omilias extends Programma {
   
    // Πεδία
    private double xrewsi;
    private int orioXronouOmilias;
    // Το επόμενο πεδίο προκύπτει από την σχέση composition της κλάσης Omilias
    // με την κλάση KinisiKlisis.
    private ArrayList<KinisiKlisis> kliseis;
    // Το επόμενο πεδίο αποθηκεύει τον διαθέσιμο δωρεάν χρόνο ομιλίας που
    // απομένει.
    private int diathesimosDwreanXronos;
    // Το επόμενο πεδίο αποθηκεύει την πληροφορία για το αν ένα πακέτο
    // ομιλίας έχει απεριόριστο χρόνο.
    private boolean aperioristoPaketo;
   
    // Constructor
    public Omilias(String hmeromEnarxis, int orioXronouOmilias) {
        super(hmeromEnarxis);
        this.orioXronouOmilias = orioXronouOmilias;
        // Η αρχική χρέωση του πακέτου είναι ίση με 0,0 €.
        xrewsi = 0.0;
        // Πιο κάτω θέτουμε ότι: Διαθέσιμος δωρεάν χρόνος = Όριο χρόνου ομιλίας.
        diathesimosDwreanXronos = orioXronouOmilias;
        kliseis = new ArrayList<KinisiKlisis>();
        // Παρακάτω έχουμε την εξής συνθήκη: Αν το όριο χρόνου ομιλίας = 0 λεπτά
        // τότε έχουμε απεριόριστο πακέτο ομιλίας.
        if (orioXronouOmilias == 0)
            aperioristoPaketo = true;
        else
            aperioristoPaketo = false;
    }
   
    // Getters
    public double getXreosi() { return xrewsi; }
    public int getOrioXronouOmilias() { return orioXronouOmilias; }
   
    // Η παρακάτω μέθοδος δημιουργεί και προσθέτει μία νέα κίνηση κλήσης  στο
    // ArrayList kliseis. Αυτό ισοδυναμεί με την δημιουργία της σχέσης
    // composition. Αυτό  συμβαίνει διότι το αντικείμενο τύπου KinisiKlisis
    // θα πρέπει να  δημιουργείται μέσα στην κλάση Omilias.
   
    public void addKlisi(String hmerominia, int ora, int diarkeia) {
       
        // Η παρακάτω μέθοδος δημιουργεί ένα νέο αντικειμένου τύπου KinisiKlisis
        // και παράλληλα υλοποιείται η σχέση composition.
       
        KinisiKlisis neaKlisi = new KinisiKlisis(hmerominia,ora,diarkeia);
       
        // Η παρακάτω μέθοδος προσθέτει μία νέα κλήση στο ArrayList kliseis.
        kliseis.add(neaKlisi);
        // Ακολουθεί συνθήκη για πρόγραμμα με όριο χρόνου ομιλίας και
        // υπολογισμός της σχετικής χρέωσης.
        if (aperioristoPaketo == false) {
            // Στο if  εχουμε μείωση του διαθέσιμου δωρεάν χρόνου.
            if (diathesimosDwreanXronos > diarkeia)
                diathesimosDwreanXronos -= diarkeia;
            // Στο 1ο else έχουμε τον δωρεάν χρόνο ομιλίας < διάρκεια κλήσης
            // οπότε  τα λεπτά χρέωσης είναι ίσα με: Διάρκεια κλήσης  - Δωρεάν
            // χρόνος ομιλίας και φυσικά ο δωρεάν χρόνος μηδενίζεται.
            // Στο 2 ο else έχουμε τον δωρεάν χρόνο ομιλίας ίσο με  μηδέν
            // και την  κλήση  να χρεώνεται σε όλη την διάρκειά της.
            // Σε κάθε περίπτωση γίνεται η κλήση της μεθόδου ypologXrewsi.
            else if (diathesimosDwreanXronos > 0) {
                neaKlisi.ypologXrewsi(diarkeia - diathesimosDwreanXronos);
                diathesimosDwreanXronos = 0;
            } else
                neaKlisi.ypologXrewsi(diarkeia);
           
            // Προσθέτουμε στην χρέωση του προγράμματος  το ποσό που προκύπτει
            // από κάθε κλήση, εφόσον χρεώθηκε.
            xrewsi += neaKlisi.getXrewsiOmilias();
        }    
    }  
}
ΚΛΑΣΗ Syndiasmeno

// Κλάση: Syndiasmeno. Η κλάση αυτή κληρονομεί την κλάση Programma. Τα πεδία
// της προκύπτουν από την σχέση της με την κλάση Programma.

public class Syndiasmeno extends Programma {
   
    // Πεδία
    private Programma prOmilias;
    private Programma prInternet;
   
    // Constructor
    public Syndiasmeno(String hmeromEnarxis, Omilias prOmilias, Internet prInternet) {
        super(hmeromEnarxis);
        this.prOmilias = prOmilias;
        this.prInternet = prInternet;
    }
   
    // Getters
    public Omilias getPrOmilias() {
        return (Omilias) prOmilias;
    }
   
    public Internet getPrInternet() {
        return (Internet) prInternet;
    } 
}
ΚΛΑΣΗ KinisiKlisis

// Κλάση: KinisiKlisis. Δείχνει τις λεπτομέρειες μίας κλήσης που έγινε από
// με την βοήθεια κάποιου προγράμματος ομιλίας από τα υπάρχοντα.

public class KinisiKlisis {
   
    // Πεδία
    private String hmerominia;
    private int ora;
    private int diarkeia;
    private double xrewsiOmilias;
   
    // Constructor
    public KinisiKlisis(String hmerominia, int ora, int diarkeia) {
        this.hmerominia = hmerominia;
        this.ora = ora;
        this.diarkeia = diarkeia;
        // Η αρχική χρέωση είναι ίση με 0,0 €
        xrewsiOmilias = 0.0;
    }
   
    // Getters
    public String getHmerominia() { return hmerominia; }
    public int getOra() { return ora; }
    public int getDiarkeia() { return diarkeia; }
    public double getXrewsiOmilias() { return xrewsiOmilias; }
   
    // Παρακάτω υπολογίζεται η χρέωση μίας κλήσης με την βοήθεια της σχέσης
    // xreosiOmilias = xrewsiLeptou*0.2. Το όρισμα xrewsiLeptou λαμβάνεται
    // από την κλάση Omilias που υπολογίζει τα λεπτά αυτά.
   
    public void ypologXrewsi(int xrewsiLeptou) {
       
        xrewsiOmilias = xrewsiLeptou*0.2;
    
    }
}
ΜΕΘΟΔΟΣ main

public class Main {

    public static void main(String[] args) {
        // Στην συγκεκριμένη άσκηση δεν δημιουργούμε κανένα αντικείμενο στην
        // main.
    }
}




 ARUMOMHXANH
<FORM NAME="Calc">
<TABLE BORDER=4>
<TR>
<TD>
<INPUT TYPE="text"   NAME="Input" Size="16">
<br>
</TD>
</TR>
<TR>
<TD>
<INPUT TYPE="button" NAME="one"   VALUE="  1  " OnClick="Calc.Input.value += '1'">
<INPUT TYPE="button" NAME="two"   VALUE="  2  " OnCLick="Calc.Input.value += '2'">
<INPUT TYPE="button" NAME="three" VALUE="  3  " OnClick="Calc.Input.value += '3'">
<INPUT TYPE="button" NAME="plus"  VALUE="  +  " OnClick="Calc.Input.value += ' + '">
<br>
<INPUT TYPE="button" NAME="four"  VALUE="  4  " OnClick="Calc.Input.value += '4'">
<INPUT TYPE="button" NAME="five"  VALUE="  5  " OnCLick="Calc.Input.value += '5'">
<INPUT TYPE="button" NAME="six"   VALUE="  6  " OnClick="Calc.Input.value += '6'">
<INPUT TYPE="button" NAME="minus" VALUE="  -  " OnClick="Calc.Input.value += ' - '">
<br>
<INPUT TYPE="button" NAME="seven" VALUE="  7  " OnClick="Calc.Input.value += '7'">
<INPUT TYPE="button" NAME="eight" VALUE="  8  " OnCLick="Calc.Input.value += '8'">
<INPUT TYPE="button" NAME="nine"  VALUE="  9  " OnClick="Calc.Input.value += '9'">
<INPUT TYPE="button" NAME="times" VALUE="  x  " OnClick="Calc.Input.value += ' * '">
<br>
<INPUT TYPE="button" NAME="clear" VALUE="  c  " OnClick="Calc.Input.value = ''">
<INPUT TYPE="button" NAME="zero"  VALUE="  0  " OnClick="Calc.Input.value += '0'">
<INPUT TYPE="button" NAME="DoIt"  VALUE="  =  " OnClick="Calc.Input.value = eval(Calc.Input.value)">
<INPUT TYPE="button" NAME="div"   VALUE="  /  " OnClick="Calc.Input.value += ' / '">
<br>
</TD>
</TR>
</TABLE>
</FORM>

<p align="center"><font face="arial" size="-2">This free script provided by</font><br>
<font face="arial, helvetica" size="-2"><a href="http://javascriptkit.com">JavaScript
Kit</a></font></p>


Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου

4o ΜΑΘΗΜΑ  HTML