Share Pastebin
Guest
Public paste!

Untitled

By: a guest | Mar 21st, 2010 | Syntax: Java | Size: 12.38 KB | Hits: 47 | Expires: Never
Copy text to clipboard
  1. package jpp.marketanalysis.exploration;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.IOException;
  5.  
  6. import java.io.InputStreamReader;
  7. import java.util.ArrayList;
  8. import java.util.Collections;
  9. import java.util.Date;
  10. import java.util.Iterator;
  11. import java.util.Vector;
  12.  
  13. import java.util.Set;
  14.  
  15. import jpp.marketanalysis.data.DataStorage;
  16. import jpp.marketanalysis.data.Dataset;
  17.  
  18. public class CLShareExploration {
  19.  
  20.         private static ShareExploration se;
  21.         public static DataStorage db;
  22.  
  23.         /**
  24.          * Der Konstruktor der Klasse, welcher als Argument ein Objekt der Klasse
  25.          * ShareExploration erhaelt, welches die jeweiligen Datenanfragen auswerten
  26.          * wird.
  27.          *
  28.          * @param s
  29.          */
  30.         public CLShareExploration(ShareExploration s) {
  31.                 this.se = s;
  32.  
  33.         }
  34.  
  35.         /**
  36.          * Diese Methode gibt alle gespeicherten Daten zu einem bestimmten
  37.          * Unternehmen in uebersichtlicher Form aus. Zuerst wird hierfuer eine Liste
  38.          * aller im System gespeicherten Unternehmen ausgegeben und den Namen
  39.          * Nummern zugeordnet. Diese soll folgende Form haben:
  40.          *
  41.          *
  42.          * Zu folgenden Aktien sind Daten gespeichert: [0]: Adidas [1]: Allianz N
  43.          * [2]: BASF Bitte geben Sie die gewuenschte Nummer ein:
  44.          *
  45.          * Wie das Beispiel zeigt, soll die Auflistung dabei alphabetisch geordnet
  46.          * aufsteigend erfolgen! Nach Eingabe der jeweiligen Nummer werden alle
  47.          * gespeicherten Daten zu einer Aktie --- d.h. alle Datasets mit der
  48.          * toString()- Methode --- untereinander ausgegeben. Wird statt einer Nummer
  49.          * der Befehl "EXIT" eingegeben, wird die Methode beendet. Im Falle einer
  50.          * nicht vergebenen Nummer oder Fehleingabe des Benutzers soll
  51.          *
  52.          * Fehler: Diese Nummer ist nicht vergeben.
  53.          *
  54.          * ausgegeben und die Interaktion neu gestartet werden. Nach einem Durchlauf
  55.          * soll die Methode wieder an den Anfang der Interaktion springen, d.h.
  56.          * insbesondere dass die Methode so lange laeuft, bis sie per "EXIT"-Befehl
  57.          * beendet wird.
  58.          */
  59.         public void selectByStockName() {
  60.                 db = se.getDB();
  61.                 String s = "";
  62.                 String name;
  63.                 int number = 0;
  64.  
  65.                 Set<String> keys = db.getAllData().keySet();
  66.                 Iterator<String> it = keys.iterator();
  67.                 ArrayList<String> names = new ArrayList<String>();
  68.  
  69.                 while (it.hasNext()) {
  70.  
  71.                         String share = (String) it.next().toString();
  72.                         names.add(share);
  73.                 }
  74.  
  75.                 Collections.sort(names);
  76.                 System.out.println("Zu folgenden Aktien sind Daten gespeichert:");
  77.                 System.out.println();
  78.                 for (int j = 0; j < names.size(); j++) {
  79.                         System.out.println("[" + j + "]: " + names.get(j));
  80.                 }
  81.                 System.out.println();
  82.                 System.out.println("Bitte geben Sie die gewuenschte Nummer ein:");
  83.  
  84.                 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  85.                 try {
  86.  
  87.                         s = br.readLine();
  88.  
  89.                 } catch (IOException e) {
  90.                         // TODO Auto-generated catch block
  91.                         e.printStackTrace();
  92.                 }
  93.                 if (s.equals("")) {
  94.                         this.selectByStockName();
  95.                 }
  96.                 if (s.equals("EXIT")) {
  97.                         return;
  98.                 }
  99.                 try {
  100.  
  101.                         int x = Integer.parseInt(s);
  102.                         if (x < 0 || x > names.size()) {
  103.                                 System.out.println("Fehler: Diese Nummer ist nicht vergeben.");
  104.                                 this.selectByStockName();
  105.                         }
  106.                 } catch (Exception t) {
  107.                         System.out.println("Fehler: Diese Nummer ist nicht vergeben.");
  108.                         this.selectByStockName();
  109.                 }
  110.                 name = names.get(number);
  111.  
  112.                 for (int i = 0; i < db.getAllData().get(name).size(); i++) {
  113.                         System.out.println(db.getEntry(name).get(i));
  114.                 }
  115.                 this.selectByStockName();
  116.         }
  117.  
  118.         /**
  119.          * Diese Methode nimmt auf der Konsole Befehle entgegen und gibt die
  120.          * angeforderten Berechnungsergebnisse zurueck. Die Eingaben sollen ueber
  121.          * die Konsole durchgefuehrt werden, auch hierfuer dient ein
  122.          * BufferedStreamReader, welchem der InputStreamReader System.in uebergeben
  123.          * wird. Die Interaktion soll dabei wie folgt ablaufen:
  124.          *
  125.          * 1. Der Benutzer wird gefragt, WAS berechnet werden soll
  126.          * ("Was moechten Sie berechnen?"). Moegliche Eingaben sind "MIN", "MAX",
  127.          * "AVG" und "EXIT". Fehleingaben werden dabei folgendermassen quittiert:
  128.          *
  129.          * Unbekannter Befehl - moegliche Befehle sind MIN, MAX und AVG.
  130.          *
  131.          * 2. Der Benutzer wird gefragt, WO dies berechnet werden soll, also ob
  132.          * lokal fuer eine einzelne Aktie oder global ueber alle vorhandenen Daten
  133.          * ("Lokal oder global?"). Erlaubte Eingaben sind daher "LOK", "GLOB" und
  134.          * "EXIT". Fehleingaben sollen dabei folgendermassen quittiert werden:
  135.          *
  136.          * Unbekannter Befehl - moegliche Befehle sind GLOB und LOK.
  137.          *
  138.          * 3. Wurde "GLOB" gewaehlt, wird das Ergebnis der Berechnung ausgegeben.
  139.          * Das Format der Ausgabe muss im globalen Fall wie folgt aussehen:
  140.          *
  141.          * < Name > erzielte am < Datum > das global [beste|schlechteste] Ergebnis:
  142.          * < Wert >. oder: Der globale Durchschnitt aller Werte ist < Wert >.
  143.          *
  144.          * 4. Wurde eine lokale Berechnung ausgewaehlt, wird nun nach dem Namen der
  145.          * Aktie gefragt ("Wie ist der Name der Aktie?"). Auch hier kann als Befehl
  146.          * "EXIT" eingegeben werden. Dann wird das Ergebnis der lokalen Berechnung
  147.          * ausgegeben. Das Format der Ausgabe muss dabei wie folgt aussehen:
  148.          *
  149.          * Ergebnis: Das Unternehmen < Name > erzielte am < Datum > ein
  150.          * [Maximum|Minimum] von < Wert >. oder: Ergebnis: < Name > erzielte ein
  151.          * durchschnittliches Ergebnis von < Wert >.
  152.          *
  153.          * Werden zu einer Aktie keine Daten gefunden, soll
  154.          *
  155.          * Entschuldigung, aber zu einer solchen Aktie liegen keine Daten vor.
  156.          *
  157.          * ausgegeben werden.
  158.          *
  159.          * Sollte bei einer der voranstehenden Punkte eine Fehleingabe gemacht und
  160.          * die entsprechende (oben beschriebene) Programmausgabe gemacht worden
  161.          * sein, so ist zum Anfang der Methode zurueckzuspringen, d.h. die
  162.          * Interaktion beginnt von vorne!
  163.          *
  164.          * Die Methode soll durch den Befehl "EXIT" beendet werden, ungeachtet davon
  165.          * an welchem Punkt der Interaktion sie sich befindet.
  166.          *
  167.          * Nach einem Durchlauf soll die Methode wieder an den Anfang der
  168.          * Interaktion springen, d.h. insbesondere dass die Methode so lange laeuft,
  169.          * bis sie per "EXIT"-Befehl beendet wird.
  170.          */
  171.         public void interactiveExploration() {
  172.  
  173.                 String what = null;
  174.                 String where = null;
  175.                 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  176.  
  177.                 System.out.println("Was moechten Sie berechnen?");
  178.  
  179.                 try {
  180.                         what = br.readLine();
  181.                 } catch (Exception tE) {
  182.                         // TODO: handle exception
  183.                 }
  184.                 if (!"MAX".equals(what) && !"MIN".equals(what) && !"AVG".equals(what)
  185.                                 && !"EXIT".equals(what)) {
  186.                         System.out
  187.                                         .println("Unbekannter Befehl - moegliche Befehle sind MIN, MAX und AVG.");
  188.                         this.interactiveExploration();
  189.                 }
  190.                 if (what.equals("EXIT")) {
  191.                         return;
  192.                 } else {
  193.                         System.out.println("Lokal oder global?");
  194.                         try {
  195.                                 where = br.readLine();
  196.                         } catch (Exception tE) {
  197.                                 // TODO: handle exception
  198.                         }
  199.                         if (!(where.equals("LOK")) && !(where.equals("GLOB"))
  200.                                         && !(where.equals("EXIT"))) {
  201.                                 System.out
  202.                                                 .println("Unbekannter Befehl - moegliche Befehle sind GLOB und LOK.");
  203.                                 this.interactiveExploration();
  204.                         }
  205.                         if (where.equals("EXIT")) {
  206.                                 return;
  207.                         }
  208.                         if (where.equals("GLOB") && what.equals("MAX")) {
  209.  
  210.                                 Vector<Object> max = se.getGlobalMaximum();
  211.                                 Dataset da = (Dataset) max.get(1);
  212.                                 String name = (String) max.get(0);
  213.                                 Date d = da.getDate();
  214.                                 double value = da.getHigh();
  215.                                 System.out.println(name + " erzielte am " + d
  216.                                                 + " das global beste Ergebnis: " + value + ".");
  217.                                 this.interactiveExploration();
  218.                         } else if (where.equals("GLOB") && what.equals("MIN")) {
  219.  
  220.                                 Vector<Object> max = se.getGlobalMinimum();
  221.                                 Dataset da = (Dataset) max.get(1);
  222.                                 String name = (String) max.get(0);
  223.                                 Date d = da.getDate();
  224.                                 double value = da.getLow();
  225.  
  226.                                 System.out.println(name + " erzielte am " + d
  227.                                                 + " das global schlechteste Ergebnis: " + value + ".");
  228.                                 this.interactiveExploration();
  229.                         } else if (where.equals("GLOB") && what.equals("AVG")) {
  230.                                 double value = se.getGlobalAverage();
  231.                                 System.out.println("Der globale Durchschnitt aller Werte ist "
  232.                                                 + value + ".");
  233.                                 this.interactiveExploration();
  234.                         } else if (where.equals("LOK") && what.equals("MAX")) {
  235.                                 System.out.println("Wie ist der Name der Aktie?");
  236.                                 String name = null;
  237.                                 try {
  238.                                         name = br.readLine();
  239.                                 } catch (Exception tE) {
  240.                                         // TODO: handle exception
  241.                                 }
  242.                                 if (name.equals("EXIT")) {
  243.                                         System.out.println("2");
  244.                                         return;
  245.                                 } else {
  246.                                         ArrayList<String> keys = new ArrayList<String>();
  247.                                         Set<String> keyset = se.getDB().getAllData().keySet();
  248.                                         Iterator<String> it = keyset.iterator();
  249.  
  250.                                         while (it.hasNext()) {
  251.  
  252.                                                 String share = (String) it.next().toString();
  253.                                                 keys.add(share);
  254.  
  255.                                         }
  256.  
  257.                                         if (keys.contains(name)) {
  258.  
  259.                                                 double value = se.getLocalMaximum(name).getHigh();
  260.                                                 Date d = se.getLocalMaximum(name).getDate();
  261.                                                 System.out.println("Ergebnis: Das Unternehmen " + name
  262.                                                                 + " erzielte am " + d + " ein Maximum von "
  263.                                                                 + value + ".");
  264.                                                 this.interactiveExploration();
  265.                                         } else {
  266.                                                 System.out
  267.                                                                 .println("Entschuldigung, aber zu einer solchen Aktie liegen keine Daten vor.");
  268.                                                 this.interactiveExploration();
  269.  
  270.                                         }
  271.  
  272.                                 }
  273.  
  274.                         } else if (where.equals("LOK") && what.equals("MIN")) {
  275.                                 System.out.println("Wie ist der Name der Aktie?");
  276.                                 String name = null;
  277.                                 try {
  278.                                         name = br.readLine();
  279.                                 } catch (Exception tE) {
  280.                                         // TODO: handle exception
  281.                                 }
  282.                                 if (name.equals("EXIT")) {
  283.                                         return;
  284.                                 } else {
  285.                                         ArrayList<String> keys = new ArrayList<String>();
  286.                                         Set<String> keyset = se.getDB().getAllData().keySet();
  287.                                         Iterator<String> it = keyset.iterator();
  288.  
  289.                                         while (it.hasNext()) {
  290.  
  291.                                                 String share = (String) it.next().toString();
  292.                                                 keys.add(share);
  293.  
  294.                                         }
  295.  
  296.                                         if (keys.contains(name)) {
  297.  
  298.                                                 double value = se.getLocalMinimum(name).getHigh();
  299.                                                 Date d = se.getLocalMinimum(name).getDate();
  300.                                                 System.out.println("Ergebnis: Das Unternehmen " + name
  301.                                                                 + " erzielte am " + d + " ein Minimum von "
  302.                                                                 + value + ".");
  303.                                                 this.interactiveExploration();
  304.                                         } else {
  305.                                                 System.out
  306.                                                                 .println("Entschuldigung, aber zu einer solchen Aktie liegen keine Daten vor.");
  307.                                                 this.interactiveExploration();
  308.  
  309.                                         }
  310.  
  311.                                 }
  312.  
  313.                         } else if (where.equals("LOK") && what.equals("AVG")) {
  314.                                 System.out.println("Wie ist der Name der Aktie?");
  315.                                 String name = null;
  316.                                 try {
  317.                                         name = br.readLine();
  318.                                 } catch (Exception tE) {
  319.                                         // TODO: handle exception
  320.                                 }
  321.                                 if (name.equals("EXIT")) {
  322.                                         return;
  323.                                 } else {
  324.                                         ArrayList<String> keys = new ArrayList<String>();
  325.                                         Set<String> keyset = se.getDB().getAllData().keySet();
  326.                                         Iterator<String> it = keyset.iterator();
  327.  
  328.                                         while (it.hasNext()) {
  329.  
  330.                                                 String share = (String) it.next().toString();
  331.                                                 keys.add(share);
  332.  
  333.                                         }
  334.  
  335.                                         if (keys.contains(name)) {
  336.  
  337.                                                 double value = se.getLocalAverage(name);
  338.                                                 System.out
  339.                                                                 .println("Ergebnis: " + name +" erzielte ein durchschnittliches Ergebnis von "
  340.                                                                                 + value + ".");
  341.                                                 this.interactiveExploration();
  342.                                         } else {
  343.                                                 System.out
  344.                                                                 .println("Entschuldigung, aber zu einer solchen Aktie liegen keine Daten vor.");
  345.                                                 this.interactiveExploration();
  346.  
  347.                                         }
  348.  
  349.                                 }
  350.  
  351.                         }
  352.  
  353.                 }
  354.                 // this.interactiveExploration();
  355.         }
  356.  
  357.         /**
  358.          * Eine main-Methode zum testen Ihrer Implementierung. Zunaechst prueft die
  359.          * Methode, ob genau 2 Parameter als Argumente uebergeben wurden. Ist dies
  360.          * nicht der Fall, wird die Meldung Das Programm erwartet genau 2 Parameter:
  361.          * den Modus, sowie die Angabe der Daten-Datei. ausgegeben. Andernfalls wird
  362.          * abgefragt, welcher der Explorationsmodi (byName oder interactive)
  363.          * durchgefuehrt werden soll und die entsprechende Methode (s.o.) startet
  364.          * die Exploration. Wurde kein gueltiger Modus als Argument uebergeben, soll
  365.          * das Programm die Meldung Fehlerhafter Parameter. ausgegeben werden.
  366.          *
  367.          * @param args
  368.          */
  369.         public static void main(String[] args) {
  370.  
  371.                 if (args.length != 2) {
  372.                         System.out
  373.                                         .println("Das Programm erwartet genau 2 Parameter: den Modus, sowie die Angabe der Daten-Datei.");
  374.                 } else {
  375.                         ShareExploration s = new ShareExploration((String) args[1]);
  376.                         CLShareExploration cls = new CLShareExploration(s);
  377.                         if (args[0].equals("byName")) {
  378.                                 cls.selectByStockName();
  379.                         } else if (args[0].equals("interactive")) {
  380.                                 cls.interactiveExploration();
  381.                         } else {
  382.                                 System.out.println("Fehlerhafter Parameter.");
  383.                         }
  384.                 }
  385.         }
  386. }