Advertisement
Gigli-0neiric

EinAusgabe

Dec 3rd, 2014
432
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 10.68 KB | None | 0 0
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4.  
  5. /**
  6.  * Die Klasse ''EinAusgabe'' dient für die Bewerkstelligung der Ein- und
  7.  * Ausgabe. Die Methoden lesen etwas ein und geben das Eingelesene über return
  8.  * zurück. Falls ein Fehler auftritt, wird die dementsprechende Fehlermeldung
  9.  * ausgegeben.
  10.  *
  11.  * @author Tobias Stelter, Kai Nortmann
  12.  *
  13.  */
  14.  
  15. public class EinAusgabe {
  16.  
  17.     BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  18.  
  19.     /**
  20.      * Die Methode "leseDoubleZahlEin()" dient zum Einlesen einer Double-Zahl.
  21.      * Die Methode versucht einen String einzulesen und umzuwandeln. Falls ein
  22.      * Fehler beim Einlesen oder bei der Umwandlung geschieht, wird er durch die
  23.      * Exception ''IOExeption'' oder ''NumberFormatException'' behandelt und die
  24.      * dementsprechende Fehlermeldung ausgegeben.
  25.      *
  26.      * @return zahl
  27.      */
  28.  
  29.     public double leseDoubleZahlEin() {
  30.         boolean fehler = true;
  31.         double zahl = 0;
  32.  
  33.         while (fehler == true) {
  34.             try {
  35.                 // Falls ein "," eingegeben wird, wandelt er dies in einen Punkt
  36.                 // um!
  37.                 zahl = Double.parseDouble(br.readLine().replace(",", "."));
  38.                 fehler = false;
  39.             } catch (NumberFormatException e) {
  40.                 System.out
  41.                         .print("Die Eingabe war keine Zahl! Bitte erneut eingeben:");
  42.             } catch (IOException e) {
  43.                 System.out.print("Einlesen fehlgeschlagen!");
  44.             }
  45.         }
  46.         return zahl;
  47.     }
  48.  
  49.     /**
  50.      * Die Methode "leseIntZahlEin()" dient zum Einlesen einer Int-Zahl. Die
  51.      * Methode versucht einen String einzulesen und umzuwandeln. Falls ein
  52.      * Fehler beim Einlesen oder bei der Umwandlung geschieht, wird er durch die
  53.      * Exception ''IOExeption'' oder ''NumberFormatException'' behandelt und die
  54.      * dementsprechende Fehlermeldung ausgegeben.
  55.      *
  56.      * @return zahl
  57.      */
  58.  
  59.     public int leseIntZahlEin() {
  60.         boolean fehler = true;
  61.         int zahl = 0;
  62.         while (fehler == true) {
  63.             try {
  64.                 zahl = Integer.parseInt(br.readLine());
  65.                 fehler = false;
  66.             } catch (NumberFormatException e) {
  67.                 System.out
  68.                         .print("Die Eingabe war keine Zahl! Bitte erneut eingeben:");
  69.             } catch (IOException e) {
  70.                 System.out.print("Einlesen fehlgeschlagen!");
  71.             }
  72.         }
  73.         return zahl;
  74.     }
  75.  
  76.     /**
  77.      * Die Methode "kredithoeheEinlesen()" dient zum Einlesen der Kredithöhe.
  78.      * Die Kredithöhe wird über die Methode ''leseDoubleZahlEin()'' eingelesen.
  79.      * KreditBetragEinlesen() prüft zudem, ob die Kredithöhe größer als 0 ist.
  80.      * Andernfalls wird dazu aufgefordert die Eingabe nochmals zu Tätigen.
  81.      *
  82.      * @return anfangsVerschuldung
  83.      */
  84.  
  85.     public double kreditBetragEinlesen() {
  86.         double zahl = 0.0;
  87.  
  88.         do {
  89.             System.out.print("Geben Sie die Hoehe des Kredites ein: ");
  90.             zahl = leseDoubleZahlEin();
  91.             if (zahl <= 0) {
  92.                 System.out.print("Sie muessen die Kredithoehe angeben!");
  93.             }
  94.         } while (zahl <= 0);
  95.  
  96.         return zahl;
  97.     }
  98.  
  99.     /**
  100.      * Die Methode "zinssatzEinlesen" dient zum Einlesen eines Zinssatzes. Der
  101.      * Zinssatz wird über die Methode ''leseDoubleZahlEin()'' eingelesen.
  102.      * zinssatzEinlesen() prüft zudem, ob der Zinssatz größer als 0 ist.
  103.      * Andernfalls wird dazu aufgefordert die Eingabe nochmals zu Tätigen.
  104.      *
  105.      * @return zinssatz
  106.      */
  107.  
  108.     public double zinssatzEinlesen() {
  109.  
  110.         double zahl = 0.0;
  111.  
  112.         do {
  113.             System.out.print("Geben Sie den Zinssatz in % ein: ");
  114.             zahl = leseDoubleZahlEin();
  115.             if (zahl <= 0) {
  116.                 System.out.print("Der Zinssatz muss groesser als 0 sein.");
  117.             }
  118.         } while (zahl <= 0);
  119.  
  120.         return zahl;
  121.     }
  122.  
  123.     /**
  124.      * Die Methode "laufzeitEinlesen()" dient zur Abfrage, ob eine
  125.      * Vertragslaufzeit festgelegt werden soll. Hierfür wird ein String
  126.      * eingelesen und das erste Zeichen in einer Char-Variable gespeichert.
  127.      * Falls die Eingabe nicht die Buchstaben 'j' oder 'n' enthält, wird sie
  128.      * nochmals ausgeführt. Wenn der Benutzer sich für einen Kredit mit vorherig
  129.      * festgelegter Laufzeit entschieden hat, wird die Methode
  130.      * ''laufzeitEinlesenMonate()'' aufgerufen. Eine leere Eingabe oder ein
  131.      * Fehler beim Einlesen werden durch die Exceptions
  132.      * ''StringIndexOutOfBoundsException'' und ''IOException'' behandelt.
  133.      *
  134.      * @return
  135.      *
  136.      * @return laufzeit
  137.      */
  138.  
  139.     public int laufzeitEinlesen() {
  140.         char jaNein = 'e';
  141.         boolean fehler = true;
  142.  
  143.         System.out.print("Mochten Sie die Laufzeit eingeben? j/n");
  144.  
  145.         while (fehler == true) {
  146.             while (jaNein != 'j' && jaNein != 'n') {
  147.                 try {
  148.                     String jaNein2 = br.readLine();
  149.                     jaNein = jaNein2.charAt(0);
  150.                     fehler = false;
  151.  
  152.                     if (jaNein != 'j' && jaNein != 'n') {
  153.                         System.out.print("Geben Sie 'j' oder 'n' ein.");
  154.                     }
  155.                     if (jaNein == 'j') {
  156.  
  157.                         return laufzeitEinlesenMonate();
  158.                     }
  159.  
  160.                 } catch (IOException e) {
  161.                     // TODO Auto-generated catch block
  162.                     e.printStackTrace();
  163.                 } catch (StringIndexOutOfBoundsException e) {
  164.                     System.out.println("Sie muessen etwas eingeben.");
  165.                     System.out.print("Geben Sie 'j' oder 'n' ein.");
  166.                 }
  167.             }
  168.         }
  169.         return 0;
  170.  
  171.     }
  172.  
  173.     /**
  174.      * Die Methode "laufzeitEinlesenMonate" dient zum Einlesen einer
  175.      * Vetragslaufzeit. Die Laufzeit wird über die Methode ''leseIntZahlEin()''
  176.      * eingelesen. laufzeitEinlesenMonate() prüft zudem, ob der Zinssatz größer
  177.      * als 0 und kleiner 3600 Monate (30 Jahre) ist. Andernfalls wird dazu
  178.      * aufgefordert die Eingabe nochmals zu Tätigen.
  179.      *
  180.      * @return
  181.      */
  182.  
  183.     private int laufzeitEinlesenMonate() {
  184.         int laufzeit = 0;
  185.  
  186.         System.out
  187.                 .print("Auf welchen Zeitraum soll die Laufzeit festgesetzt werden?"
  188.                         + "\n" + "Geben Sie die Monate ein: ");
  189.         do {
  190.             laufzeit = leseIntZahlEin();
  191.  
  192.             if (laufzeit > 3600) {
  193.                 System.out.println("Die maximale Laufzeit betraegt 30 Jahre!");
  194.                 System.out.println("Geben Sie die Laufzeit ein: ");
  195.             }
  196.             if (laufzeit < 1) {
  197.                 System.out
  198.                         .println("Die minimale Vertragslaufzeit betraegt mindestens ein Jahr.");
  199.                 System.out.println("Geben Sie die Laufzeit ein: ");
  200.             }
  201.         } while (laufzeit > 3600 || laufzeit < 1);
  202.         return laufzeit;
  203.     }
  204.  
  205.     /**
  206.      * Die Methode "monatlicheRateEinlesen()" dient zum Einlesen einer
  207.      * monatlichen Rate. Die Rate wird über die Methode ''leseDoubleZahlEin()''
  208.      * eingelesen. monatlicheRateEinlesen() prüft zudem, ob die Rate größer als
  209.      * 0 ist. Andernfalls wird dazu aufgefordert die Eingabe nochmals zu
  210.      * Tätigen.
  211.      *
  212.      * @return tilgungsrate
  213.      */
  214.  
  215.     public double monatlicheRateEinlesen() {
  216.  
  217.         double zahl = 0;
  218.  
  219.         do {
  220.             System.out.print("Geben Sie die Tilgungsrate: ");
  221.             zahl = leseDoubleZahlEin();
  222.             if (zahl <= 0) {
  223.                 System.out
  224.                         .print("Die Rate muss mindestens einen Euro betragen.");
  225.             }
  226.         } while (zahl <= 0);
  227.  
  228.         return zahl;
  229.     }
  230.  
  231.     /**
  232.      * Die "anfangsMonatEinlesen" dient zum Einlesen eines Monates. Der Monat
  233.      * wird über die Methode ''leseIntZahlEin()'' eingelesen.
  234.      * monatlicheRateEinlesen() prüft zudem, ob der Monat größer als 0 und
  235.      * kleiner als 13 ist. Andernfalls wird dazu aufgefordert die Eingabe
  236.      * nochmals zu Tätigen.
  237.      *
  238.      * @return anfangsmonat
  239.      */
  240.  
  241.     public int anfangsMonatEinlesen() {
  242.         int anfangsmonat = 0;
  243.  
  244.         do {
  245.             System.out.print("Geben Sie einen Anfangsmonat ein: ");
  246.             anfangsmonat = leseIntZahlEin();
  247.             if (anfangsmonat > 12 || anfangsmonat < 1) {
  248.                 System.out
  249.                         .print("Geben Sie einen Monat zwischen 1 und 12 ein: ");
  250.             }
  251.         } while (anfangsmonat > 12 || anfangsmonat < 1);
  252.         return anfangsmonat;
  253.     }
  254.  
  255.     /**
  256.      * Die Methode "anfangsJahrEinlesen" dient zum Einlesen eines Jahres. Das
  257.      * Jahr wird über die Methode ''leseIntZahlEin()'' eingelesen.
  258.      *
  259.      * @return anfangsjahr
  260.      */
  261.  
  262.     public int anfangsJahrEinlesen() {
  263.         System.out.print("Geben Sie einen Anfangsjahr ein: ");
  264.         return leseIntZahlEin();
  265.     }
  266.    
  267.     /**
  268.      * Die Methode "rateKleinerZinssatz" gibt eine Fehlermeldung aus, wenn die Rate kleiner als die zu zahlenden Zinsen ist.
  269.      */
  270.    
  271.     public void rateKleinerZinsatzFehlerAusgeben(double rate, double zinsen) {
  272.         System.out.print("Die Rate ("+rate+") muss höher sein als die Zinsen ("+zinsen+").");
  273.     }
  274.  
  275.     /**
  276.      * Die Methode " tilgungsPlanAusgeben" gibt den Tilgungsplan für gesamten
  277.      * Zeitraum aus. Der Tilgungsplan enthält den Zahlmonat, die Rate, die
  278.      * Zinsen, die Tilgung und den Rest. Durch "printf" und den entsprechenden
  279.      * Paramtern, wird die Ausgabe wie gewünscht formatiert.
  280.      *
  281.      * @param tilgungsplan
  282.      */
  283.  
  284.     public void tilgungsPlanAusgeben(String tilgungsplan) {
  285.         String[] splitArray = tilgungsplan.split(";");
  286.  
  287.         for (int i = 0; i < splitArray.length - 5; i += 5) {
  288.             System.out.printf("%-15s%-15s%-15s%-15s%-30s", splitArray[i],
  289.                     splitArray[i + 1], splitArray[i + 2], splitArray[i + 3],
  290.                     splitArray[i + 4]);
  291.             System.out.println("");
  292.         }
  293.     }
  294.  
  295.     /**
  296.      * Datumspruefung: Die auskommentierten Methoden dienen für eine Eingabe
  297.      * eines Datums, das nicht in der Vergangenheit liegen darf. Hierfür wird
  298.      * das Systemdatum ermittelt und mit dem eingegebenen Datum verglichen.
  299.      * Diese Methoden sind nicht Bestanteil des Programms, könnten allerdings zu
  300.      * einem späteren Zeitpunkt implementiert werden.
  301.      */
  302.  
  303.     // import java.util.Calendar;
  304.     // import java.util.GregorianCalendar;
  305.     // private int anfangsmonat = 0; // Für eine Implemenation mit
  306.     // Datumspruefung
  307.     // private int anfangsjahr = 0; // Für eine Implemenation mit Datumspruefung
  308.  
  309.     // public void monatJahrEinlesenKeineVergangenheit() throws IOException {
  310.     // Calendar cal = new GregorianCalendar();
  311.     // int aktuellesJahr = cal.get(Calendar.YEAR);
  312.     // int aktuellerMonat = cal.get(Calendar.MONTH);
  313.     //
  314.     // anfangsMonatEinlesen();
  315.     // if (this.anfangsmonat < aktuellerMonat) {
  316.     // do {
  317.     // anfangsJahrKeineVergangenheitEinlesen();
  318.     //
  319.     // } while (this.anfangsjahr <= aktuellesJahr);
  320.     // }
  321.     // if (this.anfangsmonat >= aktuellerMonat) {
  322.     // anfangsJahrKeineVergangenheitEinlesen();
  323.     // }
  324.     // }
  325.  
  326.     // public int anfangsMonatEinlesen() throws IOException {
  327.     //
  328.     // do {
  329.     // System.out.print("Geben Sie einen Anfangsmonat ein: ");
  330.     // this.anfangsmonat = Integer.parseInt(br.readLine());
  331.     // } while (this.anfangsmonat > 12);
  332.     // return anfangsjahr;
  333.     // }
  334.  
  335.     // public int anfangsJahrKeineVergangenheitEinlesen() throws IOException {
  336.     // Calendar cal = new GregorianCalendar();
  337.     // int aktuellesJahr = cal.get(Calendar.YEAR);
  338.     //
  339.     // do {
  340.     // System.out.println("Geben Sie einen Anfangsjahr ein: ");
  341.     // this.anfangsjahr = Integer.parseInt(br.readLine());
  342.     // if (this.anfangsjahr < aktuellesJahr) {
  343.     // System.out
  344.     // .println("Das Anfangsjahr liegt in der Vergangenheit!");
  345.     // }
  346.     // } while (this.anfangsjahr < aktuellesJahr);
  347.     // return aktuellesJahr;
  348.     //
  349.     // }
  350.  
  351.     // public int getMonat()
  352.     // {
  353.     // return anfangsmonat;
  354.     // }
  355.  
  356.     // public int getJahr()
  357.     // {
  358.     // return anfangsjahr;
  359.     // }
  360.  
  361. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement