ΠΕΡΙΓΡΑΦΗ
Ένας Συνδρομητής μπορεί να είναι ένα Άτομο ή μία Εταιρεία.
Ο συνδρομητής μπορεί να έχει μία ή περισσότερες Συνδέσεις, με διαφορετικό
αριθμό τηλεφώνου η κάθε μια.
Η κάθε σύνδεση αναφέρεται σε συγκεκριμένο Πρόγραμμα,
το οποίο μπορεί να είναι πρόγραμμα Ομιλίας,
πρόγραμμα 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>

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