Advertisement
Guest User

Untitled

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