Advertisement
Guest User

Untitled

a guest
Sep 24th, 2017
463
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 16.43 KB | None | 0 0
  1. import oracle.jdbc.pool.OracleDataSource;
  2. import java.sql.*;
  3. import java.awt.*;
  4. import java.awt.Container;
  5. import java.awt.Font;
  6. import java.awt.event.ActionEvent;
  7. import java.awt.event.ActionListener;
  8. import java.awt.Color;
  9. import java.awt.Graphics;
  10. import java.text.DecimalFormat;
  11. import java.util.ArrayList;
  12. import java.util.Collections;
  13. import java.util.List;
  14. import java.util.Set;
  15. import java.util.HashMap;
  16. import javax.swing.*;
  17. import javax.swing.JPanel;
  18. import javax.swing.JLabel;
  19. import javax.swing.JFrame;
  20. import java.util.Arrays;
  21.  
  22. class floz {
  23.  
  24.     public static void main(String[] args) {
  25.         datenbank.gebieteholen();
  26.         new Oberflaeche();
  27.     }
  28.  
  29. }
  30.  
  31. class datenbank {
  32.  
  33.     public static Verbindung datenbankverbindung;
  34.        
  35.     private String gebietscode;
  36.     private int jahr;
  37.     private int[] altersgruppe;
  38.        
  39.     private static HashMap<String, Gebiet> gebiete;
  40.  
  41.     public static HashMap<String, Gebiet> gebieteholen() {
  42.    
  43.         if (gebiete == null) {
  44.             gebiete = new HashMap<String, Gebiet>();
  45.  
  46.             if (datenbankverbindung == null)
  47.                 datenbankverbindung = new Verbindung();
  48.             if (datenbankverbindung == null)
  49.                 JOptionPane.showMessageDialog(null, "Es konnte keine Verbindung zur Datenbank hergestellt werden!");
  50.             else {
  51.                 try {
  52.                     Connection conn = datenbankverbindung.getConnection();
  53.                     Statement stmt = conn.createStatement();
  54.                     ResultSet erg = stmt.executeQuery("select * from GEBIET");
  55.                     while (erg.next()) {
  56.                         gebiete.put(erg.getString(2), new Gebiet(erg.getString(2),erg.getString(1)));
  57.                     }
  58.                     erg.close();
  59.                     stmt.close();
  60.                 } catch (SQLException sqle) {
  61.                     System.out.println(sqle.toString());
  62.                 }
  63.             }
  64.         }
  65.  
  66.         return gebiete;
  67.     }
  68.    
  69. //GESAMTBEVÖLKERUNG
  70.  
  71.     public static Integer[] getBevoelkerung(String gebietscode, int zeitVon, int zeitBis, String sexkode) {
  72.         int wahrheit = 0;
  73.         String wer = "Gesamtsumme";
  74.         int laenge = zeitBis - zeitVon + 1;
  75.         Integer[] bevoelkerung = new Integer[laenge];
  76.         boolean fehlerhaft = false;
  77.  
  78.         for (int i = 0; i < laenge; i++) {
  79.             bevoelkerung[i] = getBevoelkerungJahr(gebietscode, zeitVon + i, sexkode);
  80.             if (bevoelkerung[i] == 0)
  81.                 fehlerhaft = true;
  82.         }
  83.  
  84.         if (fehlerhaft) {
  85.             JOptionPane.showMessageDialog(null, "Für die folgende Altersgruppe sind keine Daten vorhanden: "+ wer +".");
  86.         }
  87.         return bevoelkerung;
  88.     }
  89.  
  90.     private static int getBevoelkerungJahr(String gebietscode, int jahr, String sexkode) {
  91.         int bevoelkerung = 0;
  92.                
  93.         if (datenbankverbindung == null)
  94.             datenbankverbindung = new Verbindung();
  95.         if (datenbankverbindung == null)
  96.             JOptionPane.showMessageDialog(null, "Es konnte keine Verbindung zur Datenbank hergestellt werden!");
  97.         else {
  98.             try {
  99.                 Connection conn = datenbankverbindung.getConnection();
  100.                 Statement stmt = conn.createStatement();
  101.                 if (sexkode.equals("m+w")) {
  102.                     ResultSet erg = stmt.executeQuery("select * from BEVOELKERUNG where (GEBIET='" + gebietscode + "') AND (JAHR='" + jahr + "')");
  103.                     while(erg.next()) {
  104.                         bevoelkerung += erg.getInt(5);
  105.                     }
  106.                     erg.close();
  107.                 } else {
  108.                     ResultSet erg = stmt.executeQuery("select * from BEVOELKERUNG where (GEBIET='" + gebietscode + "') AND (JAHR='" + jahr + "') AND (GESCHLECHT='" + sexkode + "')");
  109.                     if (erg.next()) {
  110.                         bevoelkerung = erg.getInt(5);
  111.                     }
  112.                     erg.close();
  113.                 }
  114.                 stmt.close();
  115.             } catch (SQLException sqle) {
  116.                 System.out.println(sqle.toString());
  117.             }
  118.         }
  119.         return bevoelkerung;
  120.     }
  121. }
  122.  
  123. class Verbindung{
  124.    private OracleDataSource ods;
  125.    
  126.    private Connection conn;
  127.  
  128.    public Verbindung()
  129.    {
  130.       try
  131.       {
  132.          ods = new OracleDataSource();
  133.          ods.setURL("jdbc:oracle:thin:hr/hr@oracle2.ik.fh-hannover.de:1521/XE");
  134.          conn = ods.getConnection("student","volksdaten");
  135.       }
  136.       catch (SQLException sqle) { System.out.println(sqle.toString()); }
  137.    }
  138.    public Connection getConnection() { return conn; }
  139. }
  140.  
  141. class Gebiet {
  142.  
  143.     private String name, gebiet;
  144.  
  145.     public Gebiet(String name, String gebiet) {
  146.         this.name = name;
  147.         this.gebiet = gebiet;
  148.         System.out.println(name + " (Gebiet: " + gebiet + ")" );
  149.     }
  150.     public String getName() {
  151.     return name;
  152.     }
  153.     public void setName(String name) {
  154.         this.name = name;
  155.     }
  156.     public String getGebiet() {
  157.         return gebiet;
  158.     }
  159.     public void setGebiet(String gebiet) {
  160.         this.gebiet = gebiet;
  161.     }
  162. }
  163.  
  164. class Oberflaeche extends JFrame implements ActionListener {
  165.  
  166.     private JComboBox gebieteDropdown;
  167.     private JComboBox agegroupDropdown;
  168.     private JSpinner eingabeZeitraumVon, eingabeZeitraumBis;
  169.     private JLabel ueberschrift, labelGebiet, labelZeitraum, labelZeitraumVon, labelZeitraumBis, labelSex, labelaltersgruppe, labelAuswertung, labelProgrammer;
  170.     private JRadioButton sexM, sexW, sexBeides, auswertungB, auswertungL, altersgruppeA, altersgruppeB, altersgruppeC, altersgruppeD, altersgruppeE, altersgruppeF, altersgruppeG, altersgruppeH, altersgruppeI, altersgruppeJ, altersgruppeK, altersgruppeL, altersgruppeM, altersgruppeN, altersgruppeO, altersgruppeP, altersgruppeQ, altersgruppeR, altersgruppeS, altersgruppeT;
  171.     private JButton senden;
  172.     private Container contentPane;
  173.  
  174.     public Oberflaeche() {
  175.         getContentPane().setLayout(null);
  176.         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  177.         initWindow();
  178.         setSize(625, 285);
  179.         setTitle("Bevölkerungsdaten-Auswertungstool");
  180.         setVisible(true);
  181.     }
  182.  
  183.     private void initWindow() {
  184.  
  185.         int rahmenLinks = 10;
  186.         int rahmenOben = 10;
  187.         int gebietLabelBreite = 25;
  188.         int gebietBreite = 75;
  189.         int gebietPuffer = 30;
  190.  
  191.         labelGebiet = new JLabel("Auswahl des Gebietes");
  192.         labelGebiet.setBounds(rahmenLinks, 10, 200, 25);
  193.         Set<String> dropdownGebieteFestlegen = datenbank.gebieteholen().keySet();
  194.         List<String> dropdownGebieteAuflisten = new ArrayList<String>();
  195.         dropdownGebieteAuflisten.addAll(dropdownGebieteFestlegen);
  196.         Collections.sort(dropdownGebieteAuflisten);
  197.         String[] Gebietsliste = new String[dropdownGebieteAuflisten.size()];
  198.         Gebietsliste = dropdownGebieteAuflisten.toArray(Gebietsliste);
  199.         gebieteDropdown = new JComboBox(Gebietsliste);
  200.         gebieteDropdown.setBounds(rahmenLinks, 35, 575, 25);
  201.         gebieteDropdown.setBackground(new Color(240,240,240));
  202.  
  203.         labelZeitraum = new JLabel("Auswahl des Zeitraumes");
  204.         labelZeitraum.setBounds(rahmenLinks, 85, 400, 25);
  205.         labelZeitraumVon = new JLabel("von");
  206.         labelZeitraumVon.setBounds(rahmenLinks, 110, gebietLabelBreite, 25);
  207.         labelZeitraumBis = new JLabel("bis");
  208.         labelZeitraumBis.setBounds(rahmenLinks, 135, gebietLabelBreite, 25);
  209.         eingabeZeitraumVon = new JSpinner();
  210.         JComponent editor = eingabeZeitraumVon.getEditor();
  211.         SpinnerNumberModel model = (SpinnerNumberModel) eingabeZeitraumVon.getModel();
  212.         JSpinner.NumberEditor numberEditor = (JSpinner.NumberEditor)editor;
  213.         DecimalFormat format = numberEditor.getFormat();
  214.         String pattern = "####";
  215.         format.applyPattern(pattern);
  216.         model.setValue(1970);
  217.         eingabeZeitraumVon.setBounds(rahmenLinks + gebietLabelBreite, 110 , gebietBreite, 25);
  218.         eingabeZeitraumBis = new JSpinner();
  219.         editor = eingabeZeitraumBis.getEditor();
  220.         model = (SpinnerNumberModel) eingabeZeitraumBis.getModel();
  221.         numberEditor = (JSpinner.NumberEditor)editor;
  222.         format = numberEditor.getFormat() ;
  223.         format.applyPattern(pattern);
  224.         model.setValue(1980);
  225.         eingabeZeitraumBis.setBounds(rahmenLinks + gebietLabelBreite, 135, gebietBreite,25);
  226.  
  227.         labelSex = new JLabel("Auswahl des Geschlechts");
  228.         labelSex.setBounds(rahmenLinks+200, 85, 200, 25);
  229.         sexM = new JRadioButton("Männlich", true);
  230.         sexM.setBounds(rahmenLinks+200, 110, 100, 25);
  231.         sexM.setBackground(new Color(200,200,200));
  232.         sexW = new JRadioButton("Weiblich");
  233.         sexW.setBounds(rahmenLinks+200, 135, 100, 25);
  234.         sexW.setBackground(new Color(200,200,200));
  235.         sexBeides = new JRadioButton("Männlich und Weiblich");
  236.         sexBeides.setBounds(rahmenLinks+200, 160, 200, 25);
  237.         sexBeides.setBackground(new Color(200,200,200));
  238.         ButtonGroup sexGroup = new ButtonGroup();
  239.         sexGroup.add(sexM);
  240.         sexGroup.add(sexW);
  241.         sexGroup.add(sexBeides);
  242.  
  243.         labelAuswertung = new JLabel("Auswahl der Darstellung");
  244.         labelAuswertung.setBounds(rahmenLinks+400, 85, 300, 25);
  245.         auswertungB = new JRadioButton("Balkendiagramm");
  246.         auswertungB.setBounds(rahmenLinks+400, 110, 150, 25);
  247.         auswertungB.setBackground(new Color(200,200,200));
  248.         auswertungL = new JRadioButton("Liniendiagramm", true);
  249.         auswertungL.setBounds(rahmenLinks+400, 135, 150, 25);
  250.         auswertungL.setBackground(new Color(200,200,200));
  251.         ButtonGroup auswertungGroup = new ButtonGroup();
  252.         auswertungGroup.add(auswertungB);
  253.         auswertungGroup.add(auswertungL);
  254.  
  255.         senden = new JButton("Senden");
  256.         senden.setBounds(rahmenLinks, 210, 575, 25);
  257.         senden.addActionListener(this);
  258.  
  259.         contentPane = getContentPane();
  260.         contentPane.setBackground(new Color(248,248,255));
  261.         contentPane.setBackground(new Color(200,200,200));
  262.         // contentPane.add(ueberschrift);
  263.         contentPane.add(labelGebiet);
  264.         contentPane.add(gebieteDropdown);
  265.         contentPane.add(labelZeitraum);
  266.         contentPane.add(labelZeitraumVon);
  267.         contentPane.add(eingabeZeitraumVon);
  268.         contentPane.add(labelZeitraumBis);
  269.         contentPane.add(eingabeZeitraumBis);
  270.         contentPane.add(labelSex);
  271.         contentPane.add(sexM);
  272.         contentPane.add(sexW);
  273.         contentPane.add(sexBeides);
  274.         contentPane.add(labelAuswertung);
  275.         contentPane.add(auswertungB);
  276.         contentPane.add(auswertungL);
  277.         contentPane.add(senden);
  278.         pack();
  279.     }
  280.  
  281.     public void actionPerformed(ActionEvent e)
  282.     {
  283.         String ort = (String) gebieteDropdown.getSelectedItem();
  284.         int zeitVon = (Integer) (eingabeZeitraumVon.getValue());
  285.         int zeitBis = (Integer) (eingabeZeitraumBis.getValue());
  286.         String geschlecht;
  287.        
  288.         if(sexM.isSelected())
  289.             geschlecht = "m";
  290.         else if(sexW.isSelected())
  291.             geschlecht = "w";
  292.         else
  293.             geschlecht = "m+w";
  294.         Diagramm diagramm;
  295.         if(auswertungB.isSelected()) {
  296.             diagramm = new BalkenDiagramm(ort, zeitVon, zeitBis, geschlecht);
  297.         } else {
  298.             diagramm = new LinienDiagramm(ort, zeitVon, zeitBis, geschlecht);
  299.         }
  300.         diagramm.auswerten();
  301.     }
  302. }
  303.  
  304. abstract class Diagramm extends JFrame {
  305.  
  306.     protected String ort, geschlecht, geschlechtCode;
  307.     protected int zeitVon, zeitBis;
  308.     protected Container contentPane;
  309.     protected JLabel labelGebiet, labelZeitraum, labelSex, labelDiagramm;
  310.     protected JPanel zeichenFlaeche;
  311.  
  312.     public Diagramm(String ort, int zeitVon, int zeitBis, String geschlecht) {
  313.         this.ort = ort;
  314.         this.zeitVon = zeitVon;
  315.         this.zeitBis = zeitBis;
  316.         this.geschlechtCode = geschlecht;
  317.         if(geschlecht.equals("m"))
  318.             this.geschlecht = "männlich";
  319.         else if(geschlecht.equals("w"))
  320.             this.geschlecht = "weiblich";
  321.         else
  322.             this.geschlecht = "beides";
  323.     }
  324.  
  325.     public abstract void auswerten();
  326. }
  327.  
  328. class Linie extends JPanel {
  329.  
  330.     private ArrayList<Integer> x, y, breite, hoehe;
  331.    
  332.     public Linie() {
  333.    
  334.         x = new ArrayList<Integer>();
  335.         y = new ArrayList<Integer>();
  336.         breite = new ArrayList<Integer>();
  337.         hoehe = new ArrayList<Integer>();
  338.     }
  339.  
  340.     public void addPunkt(int x, int y, int breite, int hoehe) {
  341.  
  342.         this.x.add(x);
  343.         this.y.add(y);
  344.         this.breite.add(breite);
  345.         this.hoehe.add(hoehe);
  346.     }
  347.  
  348.     public void paintComponent(Graphics g) {
  349.    
  350.         g.setColor(Color.BLACK);
  351.         int startX = 0;
  352.         int startY = 0;
  353.         int endeX = 0;
  354.         int endeY = 0;
  355.  
  356.         for(int i = 0; i < x.size(); i++) {
  357.             if (i > 0) {
  358.                 if (i == 1) {
  359.                     startX = x.get(i-1);
  360.                     startY = y.get(i-1);
  361.                 } else {
  362.                     startX = endeX;
  363.                     startY = endeY;
  364.                 }
  365.                 endeX = x.get(i);
  366.                 endeY = y.get(i);
  367.                 g.drawLine(startX, startY, endeX, endeY);
  368.                 g.drawLine(startX, startY + 1, endeX, endeY + 1);
  369.                 g.drawLine(startX, startY + 1, endeX, endeY + 1);
  370.                 g.drawLine(startX, startY - 1, endeX, endeY - 1);
  371.                 g.drawLine(startX, startY - 1, endeX, endeY - 1);
  372.             }
  373.             g.fillOval(x.get(i) - breite.get(i)/2, y.get(i) - hoehe.get(i)/2, breite.get(i), hoehe.get(i));
  374.         }
  375.     }
  376. }
  377.  
  378. class LinienDiagramm extends Diagramm  {
  379.  
  380.     private int rahmenLinks = 10;
  381.     private int rahmenOben = 10;
  382.     private int height = 25;
  383.     private int width = 200;
  384.  
  385.     public LinienDiagramm(String ort, int zeitVon, int zeitBis, String geschlecht) {
  386.         super(ort, zeitVon, zeitBis, geschlecht);
  387.     }
  388.  
  389.     public void initWindow() {
  390.    
  391.         contentPane = getContentPane();
  392.         contentPane.setLayout(null);
  393.         contentPane.setBackground(new Color(200,200,200));
  394.  
  395.         setTitle("Liniendiagramm: " + ort + " - " + zeitVon + "-" + zeitBis + " - " + geschlecht + " - ");
  396.         contentPane = getContentPane();
  397.         pack();
  398.     }
  399.  
  400.     public void auswerten() {
  401.  
  402.         initWindow();
  403.         setSize(800, 750);
  404.  
  405.         Integer[] bevoelkerung = datenbank.getBevoelkerung(datenbank.gebieteholen().get(ort).getGebiet(), zeitVon, zeitBis, geschlechtCode);
  406.  
  407.         float maximalWert = max(bevoelkerung);
  408.         float minimalWert = min(bevoelkerung);
  409.         float diff = maximalWert - minimalWert;
  410.         float faktor = 300;
  411.         int hoeheT;
  412.         Linie linie = new Linie();
  413.         linie.setBounds(rahmenLinks, 75, 600 + (bevoelkerung.length - 5)*100 , 400);
  414.        
  415.         for(int i = 0; i < bevoelkerung.length; i++) {
  416.             hoeheT = (int) ((faktor / diff) * (maximalWert - bevoelkerung[i]));
  417.             linie.addPunkt(50 + 75*i, 5 + hoeheT, 5, 5);
  418.         }
  419.         contentPane.add(linie);
  420.         for(int i = 0; i < bevoelkerung.length; i++) {
  421.             JLabel jahr = new JLabel("<html><body><b>" + String.valueOf(zeitVon + i) + "</b><br><i><small>(" + bevoelkerung[i] + ")</small></i></body></html>");
  422.             jahr.setBounds(30 + 75*i, 3*height + 345, 90, height);
  423.             contentPane.add(jahr);
  424.         }
  425.         setSize(100+ (zeitBis - zeitVon) * 75, 500);
  426.         setVisible(true);
  427.     }
  428.  
  429.     private int max(Integer[] arr) {
  430.         int max = 0;
  431.         for(int i = 0; i < arr.length; i++) {
  432.             if(arr[i] > max)
  433.                 max = arr[i];
  434.         }
  435.         return max;
  436.     }
  437.  
  438.     private int min(Integer[] arr) {
  439.         int min = Integer.MAX_VALUE;
  440.         for(int i = 0; i < arr.length; i++) {
  441.             if(arr[i] < min)
  442.                 min = arr[i];
  443.         }
  444.         return min;
  445.     }
  446.  
  447. }
  448.  
  449. class Balken extends JPanel {
  450.  
  451.     private ArrayList<Integer> x, y, breite, hoehe;
  452.  
  453.     public Balken() {
  454.         x = new ArrayList<Integer>();
  455.         y = new ArrayList<Integer>();
  456.         breite = new ArrayList<Integer>();
  457.         hoehe = new ArrayList<Integer>();
  458.     }
  459.  
  460.     public void addBalken(int x, int y, int breite, int hoehe) {
  461.         this.x.add(x);
  462.         this.y.add(y);
  463.         this.breite.add(breite);
  464.         this.hoehe.add(hoehe);
  465.     }
  466.  
  467.     public void paintComponent(Graphics g) {
  468.         g.setColor(Color.BLACK);
  469.         for(int i = 0; i < x.size(); i++) {
  470.             g.drawRect(x.get(i), y.get(i), breite.get(i), hoehe.get(i));
  471.             g.fillRect(x.get(i), y.get(i), breite.get(i), hoehe.get(i));
  472.         }
  473.     }
  474. }
  475.  
  476. class BalkenDiagramm extends Diagramm {
  477.  
  478.     private int rahmenLinks = 10;
  479.     private int rahmenOben = 10;
  480.     private int height = 25;
  481.     private int width = 200;
  482.  
  483.     public BalkenDiagramm(String ort, int zeitVon, int zeitBis, String geschlecht) {
  484.         super(ort, zeitVon, zeitBis, geschlecht);
  485.     }
  486.  
  487.     public void initWindow() {
  488.         contentPane = getContentPane();
  489.         contentPane.setLayout(null);
  490.         contentPane.setBackground(new Color(248,248,255));
  491.  
  492.         setTitle("Liniendiagramm: " + ort + " - " + zeitVon + "-" + zeitBis + " - " + geschlecht + " - ");
  493.         contentPane = getContentPane();
  494.         pack();
  495.     }
  496.  
  497.     public void auswerten() {
  498.  
  499.         initWindow();
  500.         setSize(800, 750);
  501.         Integer[] bevoelkerung = datenbank.getBevoelkerung(datenbank.gebieteholen().get(ort).getGebiet(), zeitVon, zeitBis, geschlechtCode);
  502.  
  503.         int maximalWert = max(bevoelkerung);
  504.         int minimalWert = min(bevoelkerung);
  505.         float faktor = (float) 300/(maximalWert-minimalWert);
  506.         int hoeheT;
  507.  
  508.         Balken rechteck = new Balken();
  509.         rechteck.setBounds(rahmenLinks, 2*height + 5, 600 + (bevoelkerung.length - 5)*100 , 330);
  510.  
  511.         for(int i = 0; i < bevoelkerung.length; i++) {
  512.             hoeheT = (int) (faktor * (float) bevoelkerung[i]);
  513.             rechteck.addBalken(10 + 75*i, rahmenOben + (int) ((maximalWert - bevoelkerung[i])*faktor), 25, hoeheT);
  514.         }
  515.         contentPane.add(rechteck);
  516.  
  517.             for(int i = 0; i < bevoelkerung.length; i++) {
  518.             JLabel jahr = new JLabel("<html><body><b>" + String.valueOf(zeitVon + i) + "</b><br><i><small>(" + bevoelkerung[i] + ")</small></i></body></html>");
  519.             jahr.setBounds(20 + 75*i, 3*height + 345, 90, height);
  520.             contentPane.add(jahr);
  521.         }
  522.         setSize(75+ (zeitBis - zeitVon) * 75, 500);
  523.         setVisible(true);
  524.     }
  525.  
  526.     private int max(Integer[] arr) {
  527.         int max = 0;
  528.         for(int i = 0; i < arr.length; i++) {
  529.             if(arr[i] > max)
  530.                 max = arr[i];
  531.         }
  532.         return max;
  533.     }
  534.  
  535.     private int min(Integer[] arr) {
  536.         int min = Integer.MAX_VALUE;
  537.         for(int i = 0; i < arr.length; i++) {
  538.             if(arr[i] < min)
  539.                 min = arr[i];
  540.         }
  541.         return min;
  542.     }
  543.  
  544. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement