Share Pastebin
Guest
Public paste!

Untitled

By: a guest | Mar 21st, 2010 | Syntax: Java | Size: 12.41 KB | Hits: 55 | 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 erhält, 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 übersichtlicher Form aus. Zuerst wird hierfür 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 läuft, 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("EXIT")) {
  94.                         return;
  95.                 }
  96.                 try {
  97.  
  98.                         int x = Integer.parseInt(s);
  99.                         if (x < 0 || x > names.size()) {
  100.                                 System.out.println("Fehler: Diese Nummer ist nicht vergeben.");
  101.                                 this.selectByStockName();
  102.                         }
  103.                 } catch (Exception t) {
  104.                         System.out.println("Fehler: Diese Nummer ist nicht vergeben.");
  105.                         this.selectByStockName();
  106.                 }
  107.                 name = names.get(number);
  108.  
  109.                 for (int i = 0; i < db.getAllData().get(name).size(); i++) {
  110.                         System.out.println(db.getEntry(name).get(i));
  111.                 }
  112.                 this.selectByStockName();
  113.         }
  114.  
  115.         /**
  116.          * Diese Methode nimmt auf der Konsole Befehle entgegen und gibt die
  117.          * angeforderten Berechnungsergebnisse zurück. Die Eingaben sollen über die
  118.          * Konsole durchgeführt werden, auch hierfür dient ein BufferedStreamReader,
  119.          * welchem der InputStreamReader System.in übergeben wird. Die Interaktion
  120.          * soll dabei wie folgt ablaufen:
  121.          *
  122.          * 1. Der Benutzer wird gefragt, WAS berechnet werden soll
  123.          * ("Was moechten Sie berechnen?"). Mögliche Eingaben sind "MIN", "MAX",
  124.          * "AVG" und "EXIT". Fehleingaben werden dabei folgendermaßen quittiert:
  125.          *
  126.          * Unbekannter Befehl - moegliche Befehle sind MIN, MAX und AVG.
  127.          *
  128.          * 2. Der Benutzer wird gefragt, WO dies berechnet werden soll, also ob
  129.          * lokal für eine einzelne Aktie oder global über alle vorhandenen Daten
  130.          * ("Lokal oder global?"). Erlaubte Eingaben sind daher "LOK", "GLOB" und
  131.          * "EXIT". Fehleingaben sollen dabei folgendermaßen quittiert werden:
  132.          *
  133.          * Unbekannter Befehl - moegliche Befehle sind GLOB und LOK.
  134.          *
  135.          * 3. Wurde "GLOB" gewählt, wird das Ergebnis der Berechnung ausgegeben. Das
  136.          * Format der Ausgabe muss im globalen Fall wie folgt aussehen:
  137.          *
  138.          * < Name > erzielte am < Datum > das global [beste|schlechteste] Ergebnis:
  139.          * < Wert >. oder: Der globale Durchschnitt aller Werte ist < Wert >.
  140.          *
  141.          * 4. Wurde eine lokale Berechnung ausgewählt, wird nun nach dem Namen der
  142.          * Aktie gefragt ("Wie ist der Name der Aktie?"). Auch hier kann als Befehl
  143.          * "EXIT" eingegeben werden. Dann wird das Ergebnis der lokalen Berechnung
  144.          * ausgegeben. Das Format der Ausgabe muss dabei wie folgt aussehen:
  145.          *
  146.          * Ergebnis: Das Unternehmen < Name > erzielte am < Datum > ein
  147.          * [Maximum|Minimum] von < Wert >. oder: Ergebnis: < Name > erzielte ein
  148.          * durchschnittliches Ergebnis von < Wert >.
  149.          *
  150.          * Werden zu einer Aktie keine Daten gefunden, soll
  151.          *
  152.          * Entschuldigung, aber zu einer solchen Aktie liegen keine Daten vor.
  153.          *
  154.          * ausgegeben werden.
  155.          *
  156.          * Sollte bei einer der voranstehenden Punkte eine Fehleingabe gemacht und
  157.          * die entsprechende (oben beschriebene) Programmausgabe gemacht worden
  158.          * sein, so ist zum Anfang der Methode zurückzuspringen, d.h. die
  159.          * Interaktion beginnt von vorne!
  160.          *
  161.          * Die Methode soll durch den Befehl "EXIT" beendet werden, ungeachtet davon
  162.          * an welchem Punkt der Interaktion sie sich befindet.
  163.          *
  164.          * Nach einem Durchlauf soll die Methode wieder an den Anfang der
  165.          * Interaktion springen, d.h. insbesondere dass die Methode so lange läuft,
  166.          * bis sie per "EXIT"-Befehl beendet wird.
  167.          */
  168.         public void interactiveExploration() {
  169.  
  170.                 String what = null;
  171.                 String where = null;
  172.                 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  173.  
  174.                 System.out.println("Was moechten Sie berechnen?");
  175.  
  176.                 try {
  177.                         what = br.readLine();
  178.                 } catch (Exception tE) {
  179.                         // TODO: handle exception
  180.                 }
  181.                 if (!"MAX".equals(what) && !"MIN".equals(what) && !"AVG".equals(what)
  182.                                 && !"EXIT".equals(what)) {
  183.                         System.out
  184.                                         .println("Unbekannter Befehl - moegliche Befehle sind MIN, MAX und AVG.");
  185.                         this.interactiveExploration();
  186.                 }
  187.                 if (what.equals("EXIT")) {
  188.                         return;
  189.                 } else {
  190.                         System.out.println("Lokal oder global?");
  191.                         try {
  192.                                 where = br.readLine();
  193.                         } catch (Exception tE) {
  194.                                 // TODO: handle exception
  195.                         }
  196.                         if (!(where.equals("LOK")) && !(where.equals("GLOB"))
  197.                                         && !(where.equals("EXIT"))) {
  198.                                 System.out
  199.                                                 .println("Unbekannter Befehl - moegliche Befehle sind GLOB und LOK.");
  200.                                 this.interactiveExploration();
  201.                         }
  202.                         if (where.equals("EXIT")) {
  203.                                 return;
  204.                         }
  205.                         if (where.equals("GLOB") && what.equals("MAX")) {
  206.  
  207.                                 Vector<Object> max = se.getGlobalMaximum();
  208.                                 Dataset da = (Dataset) max.get(1);
  209.                                 String name = (String) max.get(0);
  210.                                 Date d = da.getDate();
  211.                                 double value = da.getHigh();
  212.                                 System.out.println(name + " erzielte am " + d
  213.                                                 + " das global beste Ergebnis: " + value + ".");
  214.                                 this.interactiveExploration();
  215.                         } else if (where.equals("GLOB") && what.equals("MIN")) {
  216.  
  217.                                 Vector<Object> max = se.getGlobalMinimum();
  218.                                 Dataset da = (Dataset) max.get(1);
  219.                                 String name = (String) max.get(0);
  220.                                 Date d = da.getDate();
  221.                                 double value = da.getLow();
  222.  
  223.                                 System.out
  224.                                                 .println(name + " erzielte am " + d
  225.                                                                 + " das global schlechteste Ergebnis: "
  226.                                                                 + value + ".");
  227.                                 this.interactiveExploration();
  228.                         } else if (where.equals("GLOB") && what.equals("AVG")) {
  229.                                 double value = se.getGlobalAverage();
  230.                                 System.out.println("Der globale Durchschnitt aller Werte ist "
  231.                                                 + value + ".");
  232.                                 this.interactiveExploration();
  233.                         }
  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.println("Der globale Durchschnitt aller Werte ist " +  value+ ".");
  339.                                                 this.interactiveExploration();
  340.                                         } else {
  341.                                                 System.out
  342.                                                                 .println("Entschuldigung, aber zu einer solchen Aktie liegen keine Daten vor.");
  343.                                                 this.interactiveExploration();
  344.  
  345.                                         }
  346.  
  347.                                 }
  348.  
  349.                         }
  350.  
  351.                 }
  352. //              this.interactiveExploration();
  353.         }
  354.  
  355.         /**
  356.          * Eine main-Methode zum testen Ihrer Implementierung. Zunächst prüft die
  357.          * Methode, ob genau 2 Parameter als Argumente übergeben wurden. Ist dies
  358.          * nicht der Fall, wird die Meldung Das Programm erwartet genau 2 Parameter:
  359.          * den Modus, sowie die Angabe der Daten-Datei. ausgegeben. Andernfalls wird
  360.          * abgefragt, welcher der Explorationsmodi (byName oder interactive)
  361.          * durchgeführt werden soll und die entsprechende Methode (s.o.) startet die
  362.          * Exploration. Wurde kein gültiger Modus als Argument übergeben, soll das
  363.          * Programm die Meldung Fehlerhafter Parameter. ausgegeben werden.
  364.          *
  365.          * @param args
  366.          */
  367.         public static void main(String[] args) {
  368.                
  369.                 if(args.length != 2) {
  370.                         System.out.println("Das Programm erwartet genau 2 Parameter: den Modus, sowie die Angabe der Daten-Datei.");
  371.                 }
  372.                 ShareExploration s = new ShareExploration(args[1]);
  373.                 CLShareExploration cls = new CLShareExploration(s);
  374.                 if(args[0].equals("byName")) {
  375.                         cls.selectByStockName();
  376.                 } else if (args[0].equals("interactive")) {
  377.                         cls.interactiveExploration();
  378.                 } else {
  379.                         System.out.println("Fehlerhafter Parameter.");
  380.                 }
  381. //              ShareExploration s = new ShareExploration("example1.csv");
  382. //              CLShareExploration c = new CLShareExploration(s);
  383. //              c.interactiveExploration();
  384.         }
  385.  
  386. }