Advertisement
ojoakua

DBUserReport.java

Dec 14th, 2017
210
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 15.69 KB | None | 0 0
  1. /*
  2.  * To change this license header, choose License Headers in Project Properties.
  3.  * To change this template file, choose Tools | Templates
  4.  * and open the template in the editor.
  5.  */
  6. package db.kursus;
  7. import java.sql.*;
  8. import java.util.*;
  9. import javax.swing.*;
  10. import java.text.*;
  11. import java.awt.event.*;
  12.  
  13. /**
  14.  *
  15.  * @author Aditya Pramana
  16.  */
  17. public class DBUserReport {
  18.     private String url;
  19.     private String username;
  20.     private String password;
  21.     private String dataSiswa;
  22.     private String[][] dataPast;
  23.     private String[][] dataCurrent;
  24.     private String[][] overallAverage;
  25.     private String[][] overallFavorite;
  26.     private String[][] topPengajar;
  27.    
  28.     private JFrame frame;
  29.     private JLabel lblSearch;
  30.     private ButtonGroup group;
  31.     private JRadioButton byNama;
  32.     private JRadioButton byID;
  33.     private JTextField txtInput;
  34.     private JButton btnReport;
  35.     private JButton btnGenerate;
  36.     private DBGenerateReport s;
  37.     private DBOverallReport t;
  38.    
  39.     public DBUserReport(String url, String username, String password){
  40.         this.url = url;
  41.         this.username = username;
  42.         this.password = password;
  43.         s = null;
  44.         t = null;
  45.         initializeComponent();
  46.     }
  47.    
  48.     private void initializeComponent(){
  49.         frame = new JFrame("[Guest] Search Mode");
  50.         lblSearch = new JLabel("Cari Siswa");
  51.         byNama = new JRadioButton("by Nama");
  52.         byID = new JRadioButton("by ID");
  53.         group = new ButtonGroup();
  54.         txtInput = new JTextField();
  55.         btnReport = new JButton("Overall Report");
  56.         btnGenerate = new JButton("Generate");
  57.        
  58.         btnReport.addActionListener(new btnReportListener());
  59.         btnGenerate.addActionListener(new btnGenerateListener());
  60.         group.add(byNama);
  61.         group.add(byID);
  62.         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  63.         frame.setSize(300, 160);
  64.         frame.setResizable(false);
  65.        
  66.         //<editor-fold defaultstate="collapsed" desc=" A very long auto-generated code ">
  67.         GroupLayout layout = new GroupLayout(frame.getContentPane());
  68.         frame.getContentPane().setLayout(layout);
  69.         layout.setHorizontalGroup(
  70.             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  71.             .addGroup(layout.createSequentialGroup()
  72.                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  73.                     .addGroup(layout.createSequentialGroup()
  74.                         .addGap(16, 16, 16)
  75.                         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  76.                             .addComponent(txtInput)
  77.                             .addGroup(layout.createSequentialGroup()
  78.                                 .addComponent(lblSearch)
  79.                                 .addGap(18, 18, 18)
  80.                                 .addComponent(byNama)
  81.                                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  82.                                 .addComponent(byID)
  83.                                 .addGap(0, 0, Short.MAX_VALUE))))
  84.                     .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
  85.                         .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
  86.                         .addComponent(btnReport)
  87.                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  88.                         .addComponent(btnGenerate)))
  89.                 .addContainerGap())
  90.         );
  91.         layout.setVerticalGroup(
  92.             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  93.             .addGroup(layout.createSequentialGroup()
  94.                 .addGap(10, 10, 10)
  95.                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
  96.                     .addComponent(lblSearch)
  97.                     .addComponent(byNama)
  98.                     .addComponent(byID))
  99.                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  100.                 .addComponent(txtInput, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
  101.                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  102.                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
  103.                     .addComponent(btnReport)
  104.                     .addComponent(btnGenerate))
  105.                 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
  106.         );
  107.         //</editor-fold>
  108.        
  109.         frame.setVisible(true);
  110.     }
  111.    
  112.     public class btnGenerateListener implements ActionListener{
  113.         @Override
  114.         public void actionPerformed(ActionEvent e) {
  115.             boolean isByNama = byNama.isSelected();
  116.             boolean isByID = byID.isSelected();
  117.             String input = txtInput.getText();
  118.             if (!isByNama && !isByID){
  119.                 JOptionPane.showMessageDialog(null, "Please determine if search by Nama or ID");
  120.                 return;
  121.             }
  122.            
  123.             try (Connection connection = DriverManager.getConnection(url, username, password)){
  124.                 Statement stmt = connection.createStatement();
  125.                 ResultSet rs;
  126.                 if (isByID){
  127.                     rs = stmt.executeQuery("SELECT NO_SISWA, S_NAMA, S_ALAMAT, S_TELP \n"
  128.                             + "FROM SISWA\n"
  129.                             + "WHERE NO_SISWA = '"+ input +"';");
  130.                     if (!rs.next()){
  131.                         JOptionPane.showMessageDialog(null, "ID " + input + " not found");
  132.                         connection.close();
  133.                         return;
  134.                     }
  135.                     String tmp = String.format("ID\t: %s\nNama\t: %s\nAlamat\t: %s\nTelepon\t: %s",
  136.                             rs.getString(1), rs.getString(2), rs.getString(3), rs.getString(4));
  137.                     if (tmp.equals(dataSiswa)) return;
  138.                     dataSiswa = tmp;
  139.                    
  140.                     rs = stmt.executeQuery("select pk.PK_TGLMULAI, c.C_NAMA, l.LV_NAMA, p.P_NAMA, pk.PK_NAMA\n"
  141.                             + "from siswa s, detil_kursus d, kelas_kursus kk, paket_kursus pk, cabang c, pengajar p, level_table l\n"
  142.                             + "where s.NO_SISWA = d.NO_SISWA\n"
  143.                             + "and d.ID_KELAS = kk.ID_KELAS\n"
  144.                             + "and kk.ID_CABANG = c.ID_CABANG\n"
  145.                             + "and kk.ID_PK = pk.ID_PK\n"
  146.                             + "and kk.ID_PENGAJAR = p.ID_PENGAJAR\n"
  147.                             + "and pk.LV_ID = l.LV_ID\n"
  148.                             + "and s.NO_SISWA = '" + input + "'\n"
  149.                             + "and d.STATUS_KURSUS = false;");
  150.                     List<String[]> temp = new ArrayList<>();
  151.                     SimpleDateFormat fr = new SimpleDateFormat("dd-MM-yyyy");
  152.                     if (!rs.next()) dataCurrent = null;
  153.                     else{
  154.                         do temp.add(new String[]{fr.format(rs.getDate(1)), rs.getString(2),
  155.                             rs.getString(3), rs.getString(4), rs.getString(5)});
  156.                         while (rs.next());
  157.                         dataCurrent = temp.toArray(new String[temp.size()][5]);
  158.                     }
  159.                    
  160.                     rs = stmt.executeQuery("select d.TGL_SELESAI, c.C_NAMA, l.LV_NAMA, pk.PK_NAMA, d.NILAI, \n"
  161.                             + "(case when d.NILAI < 70 then 'TIDAK LULUS' else 'LULUS' end) D_STATUS\n"
  162.                             + "from siswa s, detil_kursus d, kelas_kursus kk, paket_kursus pk, cabang c, level_table l\n"
  163.                             + "where s.NO_SISWA = d.NO_SISWA\n"
  164.                             + "and d.ID_KELAS = kk.ID_KELAS\n"
  165.                             + "and kk.ID_CABANG = c.ID_CABANG\n"
  166.                             + "and kk.ID_PK = pk.ID_PK\n"
  167.                             + "and pk.LV_ID = l.LV_ID\n"
  168.                             + "and s.NO_SISWA = '"+ input +"'\n"
  169.                             + "and d.STATUS_KURSUS = true\n"
  170.                             + "order by d.TGL_SELESAI;");
  171.                     temp = new ArrayList<>();
  172.                     if (!rs.next()) dataPast = null;
  173.                     else{
  174.                         do temp.add(new String[]{fr.format(rs.getDate(1)), rs.getString(2),
  175.                             rs.getString(3), rs.getString(4), rs.getString(5), rs.getString(6)});
  176.                         while (rs.next());
  177.                         dataPast = temp.toArray(new String[temp.size()][6]);
  178.                     }
  179.                 }
  180.                 if (isByNama){
  181.                     rs = stmt.executeQuery("SELECT NO_SISWA, S_NAMA, S_ALAMAT, S_TELP \n"
  182.                             + "FROM SISWA\n"
  183.                             + "WHERE S_NAMA = '"+ input +"';");
  184.                     if (!rs.next()){
  185.                         JOptionPane.showMessageDialog(null, "Nama " + input + " not found");
  186.                         connection.close();
  187.                         return;
  188.                     }
  189.                     String tmp = String.format("ID\t: %s\nNama\t: %s\nAlamat\t: %s\nTelepon\t: %s",
  190.                             rs.getString(1), rs.getString(2), rs.getString(3), rs.getString(4));
  191.                     if (tmp.equals(dataSiswa)) return;
  192.                     dataSiswa = tmp;
  193.                    
  194.                     rs = stmt.executeQuery("select pk.PK_TGLMULAI, c.C_NAMA, l.LV_NAMA, p.P_NAMA, pk.PK_NAMA\n"
  195.                             + "from siswa s, detil_kursus d, kelas_kursus kk, paket_kursus pk, cabang c, pengajar p, level_table l\n"
  196.                             + "where s.NO_SISWA = d.NO_SISWA\n"
  197.                             + "and d.ID_KELAS = kk.ID_KELAS\n"
  198.                             + "and kk.ID_CABANG = c.ID_CABANG\n"
  199.                             + "and kk.ID_PK = pk.ID_PK\n"
  200.                             + "and kk.ID_PENGAJAR = p.ID_PENGAJAR\n"
  201.                             + "and pk.LV_ID = l.LV_ID\n"
  202.                             + "and s.S_NAMA = '" + input + "'\n"
  203.                             + "and d.STATUS_KURSUS = false;");
  204.                     List<String[]> temp = new ArrayList<>();
  205.                     SimpleDateFormat fr = new SimpleDateFormat("dd-MM-yyyy");
  206.                     if (!rs.next()) dataCurrent = null;
  207.                     else{
  208.                         do temp.add(new String[]{fr.format(rs.getDate(1)), rs.getString(2),
  209.                             rs.getString(3), rs.getString(4), rs.getString(5)});
  210.                         while (rs.next());
  211.                         dataCurrent = temp.toArray(new String[temp.size()][5]);
  212.                     }
  213.                    
  214.                     rs = stmt.executeQuery("select d.TGL_SELESAI, c.C_NAMA, l.LV_NAMA, pk.PK_NAMA, d.NILAI, \n"
  215.                             + "(case when d.NILAI < 70 then 'TIDAK LULUS' else 'LULUS' end) D_STATUS\n"
  216.                             + "from siswa s, detil_kursus d, kelas_kursus kk, paket_kursus pk, cabang c, level_table l\n"
  217.                             + "where s.NO_SISWA = d.NO_SISWA\n"
  218.                             + "and d.ID_KELAS = kk.ID_KELAS\n"
  219.                             + "and kk.ID_CABANG = c.ID_CABANG\n"
  220.                             + "and kk.ID_PK = pk.ID_PK\n"
  221.                             + "and pk.LV_ID = l.LV_ID\n"
  222.                             + "and s.S_NAMA = '" + input + "'\n"
  223.                             + "and d.STATUS_KURSUS = true\n"
  224.                             + "order by d.TGL_SELESAI;");
  225.                     temp = new ArrayList<>();
  226.                     if (!rs.next()) dataPast = null;
  227.                     else{
  228.                         do temp.add(new String[]{fr.format(rs.getDate(1)), rs.getString(2),
  229.                             rs.getString(3), rs.getString(4), rs.getString(5), rs.getString(6)});
  230.                         while (rs.next());
  231.                         dataPast = temp.toArray(new String[temp.size()][6]);
  232.                     }
  233.                 }
  234.                
  235.                 connection.close();
  236.                 s = new DBGenerateReport(dataSiswa, dataCurrent, dataPast);
  237.             }
  238.             catch (SQLException ex){
  239.                 JOptionPane.showMessageDialog(null, "A database-related error has occured");
  240.             }
  241.         }
  242.     }
  243.    
  244.     public class btnReportListener implements ActionListener{
  245.         @Override
  246.         public void actionPerformed(ActionEvent e) {
  247.             try (Connection connection = DriverManager.getConnection(url, username, password)){
  248.                 Statement stmt = connection.createStatement();
  249.                 ResultSet rs;
  250.                 List<String[]> temp = new ArrayList<>();
  251.                 rs = stmt.executeQuery("select l.LV_NAMA, round(avg(d.NILAI),2)\n"
  252.                         + "from detil_kursus d, kelas_kursus kk, paket_kursus pk, level_table l\n"
  253.                         + "where d.ID_KELAS = kk.ID_KELAS\n"
  254.                         + "and kk.ID_PK = pk.ID_PK\n"
  255.                         + "and pk.LV_ID = l.LV_ID\n"
  256.                         + "and d.NILAI >= 70\n"
  257.                         + "group by l.LV_NAMA\n"
  258.                         + "order by l.LV_ID;");
  259.                 if (!rs.next()) overallAverage = null;
  260.                 else {
  261.                     do temp.add(new String[]{rs.getString(1), ((Float)rs.getFloat(2)).toString()});
  262.                     while (rs.next());
  263.                     overallAverage = temp.toArray(new String[temp.size()][2]);
  264.                 }
  265.                
  266.                 temp = new ArrayList<>();
  267.                 rs = stmt.executeQuery("select pk.PK_NAMA, count(d.ID_KELAS)\n"
  268.                         + "from detil_kursus d, kelas_kursus kk, paket_kursus pk\n"
  269.                         + "where d.ID_KELAS = kk.ID_KELAS\n"
  270.                         + "and kk.ID_PK = pk.ID_PK\n"
  271.                         + "group by pk.PK_NAMA\n"
  272.                         + "order by count(d.ID_KELAS) desc limit 5;");
  273.                 if (!rs.next()) overallFavorite = null;
  274.                 else {
  275.                     do temp.add(new String[]{rs.getString(1), ((Integer)rs.getInt(2)).toString()});
  276.                     while (rs.next());
  277.                     overallFavorite = temp.toArray(new String[temp.size()][2]);
  278.                 }
  279.                
  280.                 temp = new ArrayList<>();
  281.                 rs = stmt.executeQuery("select p.P_NAMA, pk.PK_NAMA, round(avg(d.NILAI), 1), pk.PK_TGLMULAI, pk.PK_TGLSELESAI\n"
  282.                         + "from detil_kursus d, kelas_kursus kk, paket_kursus pk, cabang c, pengajar p\n"
  283.                         + "where d.ID_KELAS = kk.ID_KELAS\n"
  284.                         + "and kk.ID_PK = pk.ID_PK\n"
  285.                         + "and kk.ID_PENGAJAR = p.ID_PENGAJAR\n"
  286.                         + "and d.NILAI is not null\n"
  287.                         + "group by p.P_NAMA, pk.PK_NAMA\n"
  288.                         + "order by avg(d.NILAI) desc limit 10;");
  289.                 if (!rs.next()) topPengajar = null;
  290.                 else {
  291.                     do temp.add(new String[]{rs.getString(1), rs.getString(2), ((Float)rs.getFloat(3)).toString()});
  292.                     while (rs.next());
  293.                     topPengajar = temp.toArray(new String[temp.size()][3]);
  294.                 }
  295.                 connection.close();
  296.                
  297.                 if (t == null) t = new DBOverallReport(overallAverage, overallFavorite, topPengajar);
  298.                 else t.setVisible(true);
  299.             }
  300.             catch (SQLException ex){
  301.                 JOptionPane.showMessageDialog(null, "A database-related error has occured");
  302.             }
  303.         }
  304.     }
  305. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement