Advertisement
Gigli-0neiric

IO

Dec 8th, 2014
440
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 11.64 KB | None | 0 0
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. import java.util.Calendar;
  5. import java.util.GregorianCalendar;
  6.  
  7. /**
  8.  * Die Klasse "EinAusgabe" dient zum Einlesen der Variablen und zum Ausgeben des
  9.  * Tilgungsplans.
  10.  *
  11.  * @author Tobias Stelter, Kai Nortmann
  12.  *
  13.  */
  14.  
  15. public class EinAusgabe {
  16.     private int anfangsmonat = 0; // Fuer eine Implemenation mit
  17.     private int anfangsjahr = 0; // F�r eine Implemenation mit Datumspruefung
  18.     Calendar cal = new GregorianCalendar();
  19.     int aktuellesJahr = cal.get(Calendar.YEAR);
  20.     int aktuellerMonat = cal.get(Calendar.MONTH) + 1;
  21.  
  22.     BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  23.  
  24.     /**
  25.      * Die Methode "leseDoubleZahlEin()" dient zum Einlesen einer Double-Zahl.
  26.      * Die IOExeption und NumberFormatException werden abgefangen. Bei einer
  27.      * Fehlermeldung wird die Methode nochmals ausgefuehrt.
  28.      *
  29.      * @return zahl
  30.      */
  31.  
  32.     public double leseDoubleZahlEin() {
  33.         boolean fehler = true;
  34.         double zahl = 0;
  35.  
  36.         while (fehler == true) {
  37.             try {
  38.                 // Falls ein "," eingegeben wird, wandelt er dies in einen Punkt
  39.                 // um!
  40.                 zahl = Double.parseDouble(br.readLine().replace(",", "."));
  41.                 fehler = false;
  42.             } catch (NumberFormatException e) {
  43.                 System.out
  44.                         .print("Die Eingabe war keine Zahl! Bitte erneut eingeben:");
  45.             } catch (IOException e) {
  46.                 System.out.print("Einlesen fehlgeschlagen!");
  47.             }
  48.         }
  49.         return zahl;
  50.     }
  51.  
  52.     /**
  53.      * Die Methode "leseIntZahlEin()" dient zum Einlesen einer Int-Zahl. Die
  54.      * IOExeption und NumberFormatException werden abgefangen. Bei einer
  55.      * Fehlermeldung wird die Methode nochmals ausgef�hrt.
  56.      *
  57.      * @return zahl
  58.      */
  59.  
  60.     public int leseIntZahlEin() {
  61.         boolean fehler = true;
  62.         int zahl = 0;
  63.         while (fehler == true) {
  64.             try {
  65.                 zahl = Integer.parseInt(br.readLine());
  66.                 fehler = false;
  67.             } catch (NumberFormatException e) {
  68.                 System.out
  69.                         .print("Die Eingabe war keine Zahl! Bitte erneut eingeben:");
  70.             } catch (IOException e) {
  71.                 System.out.print("Einlesen fehlgeschlagen!");
  72.             }
  73.         }
  74.         return zahl;
  75.     }
  76.  
  77.     /**
  78.      * Die Methode "kredithoeheEinlesen()" dient zum Einlesen einer
  79.      * anfaenlglichen Verschuldung. Die IOExeption und NumberFormatException
  80.      * werden abgefangen. Bei einer Fehlermeldung wird die Methode nochmals
  81.      * ausgefuehrt.Falls die Kredithoehe kleiner als 1 ist, wird darauf
  82.      * hingewisen, dass die Eingabe nochmals getaetigt werden soll.
  83.      *
  84.      * @return anfangsVerschuldung
  85.      */
  86.  
  87.     public double kreditBetragEinlesen() {
  88.         double zahl = 0.0;
  89.  
  90.         do {
  91.             System.out.print("Geben Sie die Hoehe des Kredites ein: ");
  92.             zahl = leseDoubleZahlEin();
  93.             if (zahl <= 0) {
  94.                 System.out.print("Sie muessen die Kredithoehe angeben!");
  95.             }
  96.         } while (zahl <= 0);
  97.  
  98.         return zahl;
  99.     }
  100.  
  101.     /**
  102.      * Die Methode "zinssatzEinlesen" liest einen Zinsatz ein. Die IOExeption
  103.      * und NumberFormatException werden abgefangen. Bei einer Fehlermeldung wird
  104.      * die Methode nochmals ausgef�hrt. Desweiteren muss der Zinssatz groesser
  105.      * als Null sein.
  106.      *
  107.      * @return zinssatz
  108.      */
  109.  
  110.     public double zinssatzEinlesen() {
  111.  
  112.         double zahl = 0.0;
  113.  
  114.         do {
  115.             System.out.print("Geben Sie den Zinssatz in % ein: ");
  116.             zahl = leseDoubleZahlEin() / 100;
  117.             if (zahl <= 0) {
  118.                 System.out.print("Der Zinssatz muss groesser als 0 sein.");
  119.             }
  120.         } while (zahl <= 0);
  121.  
  122.         return zahl;
  123.     }
  124.  
  125.     /**
  126.      * Die Methode "laufzeitEinlesen" liest die Laufzeit in Jahren ein. Die
  127.      * minimale Laufzeit betraegt ein Jahr und darf nicht laenger als 30 Jahre
  128.      * sein. Die IOExeption und NumberFormatException werden abgefangen. Bei
  129.      * einer Fehlermeldung wird die Methode nochmals ausgef�hrt.
  130.      *
  131.      * @return laufzeit
  132.      */
  133.  
  134.     public int laufzeitEinlesen() {
  135.         int laufzeit = 0;
  136.         char jaNein = 'e';
  137.         boolean fehler = true;
  138.  
  139.         System.out.print("Mochten Sie die Laufzeit eingeben? j/n");
  140.  
  141.         while (fehler == true) {
  142.             while (jaNein != 'j' && jaNein != 'n') {
  143.                 try {
  144.                     String jaNein2 = br.readLine();
  145.                     jaNein = jaNein2.charAt(0);
  146.                     fehler = false;
  147.  
  148.                     if (jaNein != 'j' && jaNein != 'n') {
  149.                         System.out.print("Geben Sie 'j' oder 'n' ein.");
  150.                     }
  151.                     if (jaNein == 'j') {
  152.                         System.out
  153.                                 .print("Auf welchen Zeitraum soll die Laufzeit festgesetzt werden?\nGeben Sie die Monate ein: ");
  154.                         do {
  155.                             laufzeit = leseIntZahlEin();
  156.  
  157.                             if (laufzeit > 3600) {
  158.                                 System.out
  159.                                         .println("Die maximale Laufzeit betraegt 30 Jahre!");
  160.                                 System.out
  161.                                         .println("Geben Sie die Laufzeit ein: ");
  162.                             }
  163.                             if (laufzeit < 1) {
  164.                                 System.out
  165.                                         .println("Die minimale Vertragslaufzeit betraegt mindestens ein Jahr.");
  166.                                 System.out
  167.                                         .println("Geben Sie die Laufzeit ein: ");
  168.                             }
  169.                         } while (laufzeit > 3600 || laufzeit < 1);
  170.                     }
  171.  
  172.                 } catch (IOException e) {
  173.                     e.printStackTrace();
  174.                 } catch (StringIndexOutOfBoundsException e) {
  175.                     System.out.println("Sie muessen etwas eingeben.");
  176.                 }
  177.             }
  178.         }
  179.         return laufzeit;
  180.     }
  181.  
  182.     /**
  183.      * Die Methode "tilgungsRateEinlesen" dient zum Einlesen einer Tilgungsrate.
  184.      * Die IOExeption und NumberFormatException werden abgefangen. Bei einer
  185.      * Fehlermeldung wird die Methode nochmals ausgef�hrt.
  186.      *
  187.      * @return tilgungsrate
  188.      */
  189.  
  190.     public double monatlicheRateEinlesen() {
  191.  
  192.         double zahl = 0;
  193.  
  194.         do {
  195.             System.out.print("Geben Sie die Tilgungsrate: ");
  196.             zahl = leseDoubleZahlEin();
  197.             if (zahl <= 0) {
  198.                 System.out
  199.                         .print("Die Rate muss mindestens einen Euro betragen.");
  200.             }
  201.         } while (zahl <= 0);
  202.  
  203.         return zahl;
  204.     }
  205.  
  206.     /**
  207.      * Die "anfangsMonatEinlesen" liest einen Anfangsmonat ein und gibt ihn
  208.      * zurueck. Die IOExeption und NumberFormatException werden abgefangen. Bei
  209.      * einer Fehlermeldung wird die Methode nochmals ausgef�hrt. Der eingelesene
  210.      * Monat muss groesser sein als 0 und kleiner als 13.
  211.      *
  212.      * @return anfangsmonat
  213.      */
  214.  
  215.     public int anfangsMonatEinlesen() {
  216.         do {
  217.             System.out.print("Geben Sie einen Anfangsmonat ein: ");
  218.             this.anfangsmonat = leseIntZahlEin();
  219.             if (this.anfangsmonat > 12 || this.anfangsmonat < 1) {
  220.                 System.out
  221.                         .print("Geben Sie einen Monat zwischen 1 und 12 ein: ");
  222.             }
  223.         } while (this.anfangsmonat > 12 || this.anfangsmonat < 1);
  224.         return this.anfangsmonat;
  225.     }
  226.  
  227.     /**
  228.      * Die Methode " tilgungsPlanAusgeben" gibt den Tilgungsplan f�r gesamten
  229.      * Zeitraum aus. Der Tilgungsplan enth�lt den Zahlmonat, die Rate, die
  230.      * Zinsen, die Tilgung und den Rest. Durch "printf" und den entsprechenden
  231.      * Paramtern, wird die Ausgabe wie gewuenscht formatiert.
  232.      *
  233.      * @param tilgungsplan
  234.      */
  235.  
  236.     public void tilgungsPlanAusgeben(String tilgungsplan) {
  237.         String[] splitArray = tilgungsplan.split(";");
  238.  
  239.         for (int i = 0; i < splitArray.length; i++) {
  240.             System.out.printf("%-25s", splitArray[i]);
  241.             if ((i + 1) % 5 == 0)
  242.                 System.out.println("");
  243.         }
  244.     }
  245.  
  246.     /**
  247.      * Die Methode ''generiereKreditNichtGueltigNachricht()'' dient Ausgeben
  248.      * einer Fehlermeldung, falls die Rate geringer ist, als die Zinsen.
  249.      *
  250.      * @return
  251.      */
  252.  
  253.     public String generiereKreditNichtGueltigNachricht() {
  254.         return "Der Kredit ist nicht gueltig, da die Zinsen groesser sind als die Rate!";
  255.     }
  256.  
  257.     /**
  258.      * Die Methode "meldungAusgeben()" dient Ausgeben einer Meldung.
  259.      *
  260.      * @param meldung
  261.      */
  262.  
  263.     public void meldungAusgeben(String meldung) {
  264.         System.out.println(meldung);
  265.     }
  266.  
  267.     /**
  268.      * Die Methode ''generiereAbschlagSummenZahlungsforderung()'' dient Ausgeben
  269.      * der Abschlagssumme.
  270.      *
  271.      * @param betrag
  272.      * @return
  273.      */
  274.  
  275.     public String generiereAbschlagSummenZahlungsforderung(String betrag) {
  276.         return "Die restliche Summe muss mit einer Abschlagsumme in Hoehe von "
  277.                 + betrag + " beglichen werden!;;;;;";
  278.     }
  279.  
  280.     /**
  281.      * Die Methode ''generiereTabellenkopf()'' dient zur Generierung des
  282.      * Tabellenkopfes mit den Werten
  283.      * "Zahlmonat, Rate, Zinsen, Tilgung und dem Rest".
  284.      *
  285.      * @return
  286.      */
  287.  
  288.     public String generiereTabellenkopf() {
  289.         return "Zahlmonat;Rate;Zinsen;Tilgung;Rest;";
  290.     }
  291.  
  292.     /**
  293.      * Die Methode ''generiereJahresAbrechnungZeile()'' dient Ausgeben der
  294.      * Jahresabrechnung.
  295.      *
  296.      * @param jahresSummeRaten
  297.      * @param jahresSummeZinsen
  298.      * @param jahresSummeTilgung
  299.      * @return
  300.      */
  301.  
  302.     public String generiereJahresAbrechnungZeile(String jahresSummeRaten,
  303.             String jahresSummeZinsen, String jahresSummeTilgung) {
  304.         return "Summen" + ";" + jahresSummeRaten + ";" + jahresSummeZinsen
  305.                 + ";" + jahresSummeTilgung + ";" + "p.a" + "\n;";
  306.     }
  307.  
  308.     /**
  309.      * Die Methode "generiereLaufZeitZuLangZeile()" dient Ausgeben einer
  310.      * Fehlermeldung, falls die Laufzeit zu lang ist.
  311.      *
  312.      * @param eingegebeneLaufzeit
  313.      * @param echteLaufzeit
  314.      * @return
  315.      */
  316.  
  317.     public String generiereLaufZeitZuLangZeile(int eingegebeneLaufzeit,
  318.             int echteLaufzeit) {
  319.         if (eingegebeneLaufzeit > echteLaufzeit) {
  320.             return "Die Laufzeit war zu lang! Sie wurde von "
  321.                     + eingegebeneLaufzeit + " auf " + echteLaufzeit
  322.                     + " Monate gekuerzt!;;;;;";
  323.         }
  324.         return "";
  325.     }
  326.  
  327.     /**
  328.      * Die Methode "monatJahrEinlesenKeineVergangenheit()" liest einen
  329.      * Anfangsmonat ein. Wenn der Anfangsmonat kleiner oder gleich dem aktuellen
  330.      * Monat ist, wird die Methode so lange wiederholt bis das aktuelle Jahr
  331.      * größer als das eingegebene Jahr ist.
  332.      */
  333.  
  334.     public void monatJahrEinlesenKeineVergangenheit() {
  335.         System.out.println(this.aktuellerMonat);
  336.  
  337.         boolean fehler = true;
  338.  
  339.         anfangsMonatEinlesen();
  340.  
  341.         if (this.anfangsmonat <= aktuellerMonat) {
  342.             do {
  343.                 this.anfangsjahr = anfangsJahrKeineVergangenheitEinlesen();
  344.             } while (this.anfangsjahr < aktuellesJahr);
  345.         }
  346.         if (this.anfangsmonat > aktuellerMonat) {
  347.             this.anfangsjahr = anfangsJahrKeineVergangenheitEinlesen();
  348.         }
  349.  
  350.     }
  351.    
  352.     /**
  353.      * Die Methode "anfangsJahrEinlesen()" liest einen Jahr ein. Die IOExeption
  354.      * und NumberFormatException werden abgefangen. Bei einer Fehlermeldung wird
  355.      * die Methode nochmals ausgefuehrt.
  356.      */
  357.    
  358.     private void anfangsJahrEinlesen()
  359.     {
  360.         System.out.println("Geben Sie ein Anfangsjahr ein: ");
  361.  
  362.         boolean fehler = true;
  363.  
  364.         while (fehler == true) {
  365.             try {
  366.                 this.anfangsjahr = Integer.parseInt(br.readLine());
  367.                 fehler = false;
  368.             } catch (NumberFormatException e) {
  369.                 System.out
  370.                         .print("Die Eingabe war keine Zahl! Bitte erneut eingeben:");
  371.             } catch (IOException e) {
  372.                 System.out.print("Einlesen fehlgeschlagen!");
  373.             }
  374.         }
  375.     }
  376.    
  377.    
  378.     /**
  379.      * Die Methode ''anfangsJahrKeineVergangenheitEinlesen()'' liest ein
  380.      * Anfangsjahr ein. Die Methode wird solange wiederholt bis das Anfangsjahr
  381.      * größer als das aktuelle Jahr ist.
  382.      *
  383.      * @return
  384.      * @throws IOException
  385.      */
  386.  
  387.     private int anfangsJahrKeineVergangenheitEinlesen() {
  388.  
  389.         anfangsJahrEinlesen();
  390.  
  391.         if (this.anfangsjahr < this.aktuellesJahr) {
  392.             System.out.println("Das Anfangsdatum liegt in der Vergangenheit!");
  393.             anfangsJahrKeineVergangenheitEinlesen();
  394.         }
  395.         if (this.anfangsjahr == this.aktuellesJahr
  396.                 && this.anfangsmonat == this.aktuellerMonat) {
  397.             System.out
  398.                     .println("Der Vetrag kann für diesen Monat nicht mehr abgeschlossen werden!");
  399.             anfangsJahrKeineVergangenheitEinlesen();
  400.         }
  401.         if (this.anfangsjahr == this.aktuellesJahr
  402.                 && this.anfangsmonat < this.aktuellerMonat) {
  403.             System.out.println("Der Anfangsmonat liegt in der Vergangenheit!");
  404.             anfangsJahrKeineVergangenheitEinlesen();
  405.         }
  406.         return anfangsjahr;
  407.  
  408.     }
  409.  
  410.     /**
  411.      * Die Methode ''getMonat()'' gibt den anfangsmonat zurueck.
  412.      * @return
  413.      */
  414.  
  415.     public int getMonat() {
  416.         return anfangsmonat;
  417.     }
  418.  
  419.     /**
  420.      * Die Methode ''getJahr()'' gibt das anfangsjahr zurueck.
  421.      * @return
  422.      */
  423.  
  424.     public int getJahr() {
  425.         return anfangsjahr;
  426.     }
  427.  
  428. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement