com.nitdlibrary.EditViewStudent.java Source code

Java tutorial

Introduction

Here is the source code for com.nitdlibrary.EditViewStudent.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package com.nitdlibrary;

import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.event.WindowAdapter;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.SpinnerNumberModel;
import managers.Config;
import managers.PrintUtilities;
import net.proteanit.sql.DbUtils;
import org.joda.time.DateTime;
import org.joda.time.Days;
import org.joda.time.LocalDate;

/**
 *
 * @author MAYANK
 */
public class EditViewStudent extends javax.swing.JFrame {
    Connection library;
    String picLoc = null;
    ResultSet loadViewResultSet;
    ResultSet issueResultSet, issueFilteredResultSet;
    int currentRollNo;

    /**
     * Creates new form EDITVIEWStudent
     * @param library
     */
    public EditViewStudent(Connection library, int currentRollNo) {
        setVisible(true);
        initComponents();
        setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
        this.library = library;
        this.currentRollNo = currentRollNo;
        try {
            loadViewData(new Integer(currentRollNo));
        } catch (SQLException ex) {
            successFailure(false, ex.getMessage());
            Logger.getLogger(EditViewStudent.class.getName()).log(Level.SEVERE, null, ex);
        }
        addWindowListener(new WindowAdapter() {
            public void windowClosing() {
                setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
                dispose();

            }
        });
    }

    /**
     * THIS METHOD CONTROLS THE SUCCESS AND FAILURE LABELS
     */
    private void successFailure(boolean test, String message) {
        if (test == true) {
            try {
                statusPic.setIcon(new ImageIcon(ImageIO.read(new File("add_book_success.png"))));
            } catch (IOException ex) {
                Logger.getLogger(EditViewStudent.class.getName()).log(Level.SEVERE, null, ex);
            }
            statusMessage.setText(message);
        } else {
            try {
                statusPic.setIcon(new ImageIcon(ImageIO.read(new File("add_book_failure.png"))));
            } catch (IOException ex) {
                Logger.getLogger(EditViewStudent.class.getName()).log(Level.SEVERE, null, ex);
            }
            statusMessage.setText(message);
        }
    }

    /**
     * THIS METHOD MAPS category from loadviewResultSet info
     */
    private void categoryMap() throws SQLException {
        switch (loadViewResultSet.getString("Category")) {
        case "GEN":
            category.setSelectedIndex(0);
            break;
        case "OBC":
            category.setSelectedIndex(1);
            break;
        case "SC":
            category.setSelectedIndex(2);
            break;
        case "ST":
            category.setSelectedIndex(3);
            break;
        }
    }

    /**
     * THIS METHOD LOADS VIEW DATA INTO FIELDS AFTER RECIEVING ROLL NO. ALSO CHECKS IF STUDENT IS PASSED OUT OR NOT
     * @param rollNoForLoad
     */
    public void loadViewData(int rollNoForLoad) throws SQLException {
        currentRollNo = rollNoForLoad;
        try {
            PreparedStatement query = library.prepareStatement("select * from student where roll_no = ?");
            query.setInt(1, rollNoForLoad);
            System.out.println(query.toString());
            loadViewResultSet = query.executeQuery();
            loadViewResultSet.next();
        } catch (SQLException ex) {
            successFailure(false, ex.getMessage());
            Logger.getLogger(EditViewStudent.class.getName()).log(Level.SEVERE, null, ex);
        }
        /**
         * RESULTSET OBTAINED, UPDATING FIELDS
         */
        fname.setText(loadViewResultSet.getString("First Name"));
        mname.setText(loadViewResultSet.getString("Middle Name"));
        lname.setText(loadViewResultSet.getString("Last Name"));
        fathername.setText(loadViewResultSet.getString("Fathers Name"));
        categoryMap();
        if (loadViewResultSet.getString("Gender").compareTo("Male") == 0)
            male.setSelected(true);
        else
            female.setSelected(true);

        primary.setText(loadViewResultSet.getString("Primary Address"));
        mailing.setText(loadViewResultSet.getString("Mailing Address"));
        contactnumber.setText(loadViewResultSet.getString("Contact Number"));
        email.setText(loadViewResultSet.getString("E-Mail"));
        rollno.setText(loadViewResultSet.getString("roll_no"));
        cardno.setText(loadViewResultSet.getString("Card Numbers"));
        /**
         * CHECKING IF STUDENT IS PASSED OUT
         */
        String programme = loadViewResultSet.getString("Programme");
        if (Config.isPassed(programme, loadViewResultSet.getInt("Year"))) {
            year.setVisible(false);
            sem.setVisible(false);
            year.setValue(loadViewResultSet.getInt("Year"));
            sem.setValue(loadViewResultSet.getInt("Semester"));
            yearLabel.setVisible(false);
            semLabel.setVisible(false);
            /**
            * take care of passing year based on programme
            */

            if (programme.compareTo("B.Tech") == 0) {
                int passingYear = (new LocalDate(new Date()).getYear() - loadViewResultSet.getInt("Year") + 4);
                passOutLabel.setText("Passed out in " + passingYear);
            } else {
                int passingYear = (new LocalDate(new Date()).getYear() - loadViewResultSet.getInt("Year") + 2);
                passOutLabel.setText("Passed out in " + passingYear);
            }
        } else {

            year.setValue(loadViewResultSet.getInt("Year")); // so that when changes are saved data is not lost
            sem.setValue(loadViewResultSet.getInt("Semester"));
            passOutLabel.setText("Pass Out : No");
        }
        cardsissued.setValue(loadViewResultSet.getInt("Cards Issued"));
        Date date = null;
        try {
            date = new SimpleDateFormat("yyyy-mm-d", Locale.ENGLISH)
                    .parse(loadViewResultSet.getString("Date Of Birth"));
        } catch (ParseException ex) {
            Logger.getLogger(EditViewStudent.class.getName()).log(Level.SEVERE, null, ex);
        }
        dob.setDate(date);
        Image image = null;
        try {
            image = ImageIO.read(new File(loadViewResultSet.getString("pic_path")));

        } catch (IOException ex) {
            Logger.getLogger(EditViewStudent.class.getName()).log(Level.SEVERE, null, ex);
        }
        Image scaledImage = getScaledImage(image, 168, 130);
        picLabel.setIcon(new ImageIcon(scaledImage));
        picLoc = loadViewResultSet.getString("pic_path");

        loadIssueData();
        calculateStudentPerformance();
    }

    /**
     * This Method loads data from issue table and sets the issue history table model
     */
    private void loadIssueData() {
        try {
            PreparedStatement query = library.prepareStatement(
                    "select issue.issue_id,issue.acc_no,books.title,books.author,issue.issue_date,issue.return_date,issue.due_date from issue,books where issue.issuer_id = ? and books.acc_no = issue.acc_no");
            query.setInt(1, currentRollNo);
            issueResultSet = query.executeQuery();
            issueHistoryTable.setModel(DbUtils.resultSetToTableModel(issueResultSet));
            issueResultSet.beforeFirst();
            Integer[] fields = new Integer[3];
            fields[0] = 4;
            fields[1] = 5;
            fields[2] = 6;
            issueHistoryTable.setModel(
                    Config.changeResultSetDateFormat(issueResultSet, issueHistoryTable.getModel(), fields));
        } catch (SQLException ex) {
            Logger.getLogger(EditViewStudent.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

    /**
     * load result set for filtered data and apply model to table
     */
    private void loadFilteredIssueData(LocalDate from, LocalDate to) throws SQLException {

        PreparedStatement query = library.prepareStatement(
                "select issue.issue_id,issue.acc_no,books.title,books.author,issue.issue_date,issue.return_date,issue.due_date from issue,books where issue.issuer_id = ? and books.acc_no = issue.acc_no and (issue.issue_date between ? and ?)");
        query.setInt(1, currentRollNo);
        query.setString(2, from.toString("yyyy-MM-dd"));
        query.setString(3, to.toString("yyyy-MM-dd"));
        System.out.println(query.toString());
        issueFilteredResultSet = query.executeQuery();
        issueHistoryTable.setModel(DbUtils.resultSetToTableModel(issueFilteredResultSet));
    }

    /**
     * THIS FUNCTION CALCULATES STUDENT PERFORMCE AND UPDATES FIELDS
     */
    private void calculateStudentPerformance() throws SQLException {
        issueResultSet.beforeFirst();
        Date returnDate = null, dueDate = null;
        LocalDate returnDateJoda = null, dueDateJoda = null;
        int totalIssued = 0, returned = 0, fine = 0, currentIssue = 0;
        int flag = 0; //incremented when today is > due date and return_date  is null. it means that some books are not returned and fine calc is shown wrt today
        while (issueResultSet.next()) {
            totalIssued++;
            if (issueResultSet.getString("return_date") != null)
                returned++;

            DateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);

            try {
                dueDate = format.parse(issueResultSet.getString("due_date"));
                /**
                 * IF BOOK HAS NOT BEEN RETURNED AND TODAY>DUEDATE .. FINE TO BE PAID IS SHOWN
                 */
                if (issueResultSet.getString("return_date") != null
                        && (issueResultSet.getString("return_date").compareTo("") != 0)) {
                    returnDate = format.parse(issueResultSet.getString("return_date"));
                } else {
                    String tempDate = format.format(new Date());
                    returnDate = format.parse(tempDate);
                    if (dueDate.before(returnDate)) // i.e due date before today and book is not returned.
                        flag++;
                }

                returnDateJoda = new LocalDate(returnDate);
                dueDateJoda = new LocalDate(dueDate);
            } catch (ParseException ex) {
                Logger.getLogger(EditViewStudent.class.getName()).log(Level.SEVERE, null, ex);
            }
            System.out.println(
                    "DUE DATE : " + dueDateJoda.toString() + " RETURN DATE : " + returnDateJoda.toString());
            if (dueDate.before(returnDate)) {
                Days d = Days.daysBetween(dueDateJoda, returnDateJoda);
                fine += d.getDays();
                System.out.println("Calculting fine");
            }
            if (issueResultSet.getString("return_date") == null
                    || (issueResultSet.getString("return_date").compareTo("") == 0)) {
                currentIssue++;
            }

        }
        /**
         * setting values in Labels
         */
        issued.setText("Total Books Issued : " + totalIssued);
        returnedLabel.setText("Total Books Returned : " + returned);
        if (fine < 0)
            fine = 0;
        fineLabel.setText("Total Fine : " + fine);

        currentLabel.setText("Currently issued book count : " + currentIssue);
        if (flag != 0)
            exceedLabel.setText("* " + flag
                    + " books have exceeded due date and are not returned. Assuming they are retuned today, total fine is being shown.");
    }

    /**
     * THIS FUNCTION CALCULATES DATA FOR FILTERED RESULTSET AND UPDATES THE LABELS
     * @param from
     * @param to 
     */
    private void calculateFilteredPerformance(LocalDate from, LocalDate to) throws SQLException {
        issueFilteredResultSet.beforeFirst();
        Date returnDate = null, dueDate = null;
        LocalDate returnDateJoda = null, dueDateJoda = null;
        int totalIssued = 0, returned = 0, fine = 0, currentIssue = 0;
        int flag = 0; //incremented when today is > due date and return_date  is null. it means that some books are not returned and fine calc is shown wrt today
        while (issueFilteredResultSet.next()) {
            totalIssued++;
            if (issueFilteredResultSet.getString("return_date") != null)
                returned++;

            DateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);

            try {
                dueDate = format.parse(issueFilteredResultSet.getString("due_date"));
                /**
                 * IF BOOK HAS NOT BEEN RETURNED AND TODAY>DUEDATE .. FINE TO BE PAID IS SHOWN
                 */
                if (issueFilteredResultSet.getString("return_date") != null
                        && (issueFilteredResultSet.getString("return_date").compareTo("") != 0)) {
                    returnDate = format.parse(issueFilteredResultSet.getString("return_date"));
                } else {
                    String tempDate = format.format(new Date());
                    returnDate = format.parse(tempDate);
                    if (dueDate.before(returnDate)) // i.e due date before today and book is not returned.
                        flag++;
                }

                returnDateJoda = new LocalDate(returnDate);
                dueDateJoda = new LocalDate(dueDate);
            } catch (ParseException ex) {
                Logger.getLogger(EditViewStudent.class.getName()).log(Level.SEVERE, null, ex);
            }
            if (dueDate.before(returnDate)) {
                Days d = Days.daysBetween(dueDateJoda, returnDateJoda);
                fine += d.getDays();

            }
            if (issueFilteredResultSet.getString("return_date") == null
                    || (issueFilteredResultSet.getString("return_date").compareTo("") == 0)) {
                currentIssue++;
            }
        }
        /**
         * setting values in Labels
         */
        issuedFiltered.setText("Total Books Issued : " + totalIssued);
        returnedFiltered.setText("Total Books Returned : " + returned);
        if (fine < 0)
            fine = 0;
        fineFiltered.setText("Total Fine : " + fine);
        currentFiltered.setText("Currently issued book count : " + currentIssue);
        if (flag != 0) {
            //exceedLabel.setText("* "+ flag +" books have exceeded due date and are not returned. Assuming they are retuned today, total fine is being shown.");
        }
    }

    /**
     * RESETS THE LABELS IN FILTERED PANEL AND RELOADS THE ISSUE DATA TABLE WITH COMPLETE ENTRIES
     */
    private void resetFilter() {
        loadIssueData();
        exceedLabel.setText("*");
        try {
            calculateStudentPerformance();
        } catch (SQLException ex) {
            Logger.getLogger(EditViewStudent.class.getName()).log(Level.SEVERE, null, ex);
        }
        /**
         * reseting the labels
         */
        issuedFiltered.setText("Total Books Issued : ");
        returnedFiltered.setText("Total Books Returned : ");
        fineFiltered.setText("Total Fine : ");
        currentFiltered.setText("Currently issued book count : ");
        from.setDate(null);
        to.setDate(null);
    }

    /**
     * This Method Resized the Image
     * @param srcImg
     * @param w
     * @param h
     * @return 
     */
    private Image getScaledImage(Image srcImg, int w, int h) {
        BufferedImage resizedImg = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
        Graphics2D g2 = resizedImg.createGraphics();
        g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
        g2.drawImage(srcImg, 0, 0, w, h, null);
        g2.dispose();
        return resizedImg;
    }

    public static BufferedImage resize(BufferedImage image, int width, int height) {
        BufferedImage bi = new BufferedImage(width, height, BufferedImage.TRANSLUCENT);
        Graphics2D g2d = (Graphics2D) bi.createGraphics();
        g2d.addRenderingHints(
                new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY));
        g2d.drawImage(image, 0, 0, width, height, null);
        g2d.dispose();
        return bi;
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        gender = new javax.swing.ButtonGroup();
        picLabel = new javax.swing.JLabel();
        uploadButton = new javax.swing.JButton();
        jLabel1 = new javax.swing.JLabel();
        jPanel1 = new javax.swing.JPanel();
        jLabel3 = new javax.swing.JLabel();
        fname = new javax.swing.JTextField();
        mname = new javax.swing.JTextField();
        lname = new javax.swing.JTextField();
        jLabel4 = new javax.swing.JLabel();
        male = new javax.swing.JRadioButton();
        female = new javax.swing.JRadioButton();
        jLabel7 = new javax.swing.JLabel();
        fathername = new javax.swing.JTextField();
        jLabel9 = new javax.swing.JLabel();
        dob = new com.toedter.calendar.JDateChooser();
        jLabel10 = new javax.swing.JLabel();
        jLabel11 = new javax.swing.JLabel();
        jLabel15 = new javax.swing.JLabel();
        category = new javax.swing.JComboBox();
        jPanel2 = new javax.swing.JPanel();
        jScrollPane1 = new javax.swing.JScrollPane();
        primary = new javax.swing.JTextArea();
        jLabel8 = new javax.swing.JLabel();
        jLabel12 = new javax.swing.JLabel();
        jScrollPane2 = new javax.swing.JScrollPane();
        mailing = new javax.swing.JTextArea();
        contactnumber = new javax.swing.JTextField();
        jLabel13 = new javax.swing.JLabel();
        jLabel14 = new javax.swing.JLabel();
        email = new javax.swing.JTextField();
        sameAsPrimary = new javax.swing.JButton();
        jPanel3 = new javax.swing.JPanel();
        jLabel2 = new javax.swing.JLabel();
        jLabel5 = new javax.swing.JLabel();
        yearLabel = new javax.swing.JLabel();
        year = new javax.swing.JSpinner();
        sem = new javax.swing.JSpinner();
        semLabel = new javax.swing.JLabel();
        rollno = new javax.swing.JTextField();
        jLabel17 = new javax.swing.JLabel();
        jLabel18 = new javax.swing.JLabel();
        cardno = new javax.swing.JTextField();
        jLabel19 = new javax.swing.JLabel();
        cardsissued = new javax.swing.JSpinner();
        programme = new javax.swing.JComboBox();
        branch = new javax.swing.JComboBox();
        jLabel22 = new javax.swing.JLabel();
        passOutLabel = new javax.swing.JLabel();
        jToolBar1 = new javax.swing.JToolBar();
        prevNavButton = new javax.swing.JButton();
        nextNavButton = new javax.swing.JButton();
        gotoNavButton = new javax.swing.JButton();
        navPrintStudent = new javax.swing.JButton();
        addStudentButton = new javax.swing.JButton();
        jSeparator1 = new javax.swing.JSeparator();
        jScrollPane4 = new javax.swing.JScrollPane();
        issueHistoryTable = new javax.swing.JTable();
        jLabel20 = new javax.swing.JLabel();
        jPanel4 = new javax.swing.JPanel();
        from = new com.toedter.calendar.JDateChooser();
        to = new com.toedter.calendar.JDateChooser();
        jLabel21 = new javax.swing.JLabel();
        jLabel23 = new javax.swing.JLabel();
        applyFilterButton = new javax.swing.JButton();
        resetFilter = new javax.swing.JButton();
        jPanel5 = new javax.swing.JPanel();
        issuedFiltered = new javax.swing.JLabel();
        returnedFiltered = new javax.swing.JLabel();
        fineFiltered = new javax.swing.JLabel();
        currentFiltered = new javax.swing.JLabel();
        jPanel6 = new javax.swing.JPanel();
        issued = new javax.swing.JLabel();
        returnedLabel = new javax.swing.JLabel();
        fineLabel = new javax.swing.JLabel();
        currentLabel = new javax.swing.JLabel();
        statusPic = new javax.swing.JLabel();
        statusMessage = new javax.swing.JLabel();
        deleteStudent = new javax.swing.JButton();
        exceedLabel = new javax.swing.JLabel();
        jLabel24 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

        picLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/profile_pic.jpg"))); // NOI18N
        picLabel.setText("jLabel1");
        picLabel.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));

        uploadButton.setText("Upload");
        uploadButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                uploadButtonActionPerformed(evt);
            }
        });

        jLabel1.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        jLabel1.setText("EDIT/VIEW STUDENT");

        jPanel1.setBorder(javax.swing.BorderFactory
                .createTitledBorder(javax.swing.BorderFactory.createEtchedBorder(), "Basic Information"));

        jLabel3.setText("First Name ");

        jLabel4.setText("Middle Name");

        gender.add(male);
        male.setSelected(true);
        male.setText("Male");

        gender.add(female);
        female.setText("Female");

        jLabel7.setText("Gender");

        jLabel9.setText("Father's Name");

        dob.setDateFormatString("dd-MM-yyyy");

        jLabel10.setText("Date Of Birth");

        jLabel11.setText("Last Name");

        jLabel15.setText("Category");

        category.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "GEN", "OBC", "SC", "ST" }));

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(jPanel1Layout
                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(jPanel1Layout.createSequentialGroup().addContainerGap().addGroup(jPanel1Layout
                        .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(jPanel1Layout.createSequentialGroup().addGap(1, 1, 1).addGroup(jPanel1Layout
                                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addComponent(jLabel7, javax.swing.GroupLayout.PREFERRED_SIZE, 50,
                                        javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addGroup(jPanel1Layout.createSequentialGroup().addGap(67, 67, 67)
                                        .addComponent(male)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                        .addComponent(female))))
                        .addGroup(jPanel1Layout
                                .createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                                .addGroup(javax.swing.GroupLayout.Alignment.LEADING,
                                        jPanel1Layout.createSequentialGroup().addComponent(jLabel3)
                                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED,
                                                        javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                                .addComponent(
                                                        fname, javax.swing.GroupLayout.PREFERRED_SIZE, 179,
                                                        javax.swing.GroupLayout.PREFERRED_SIZE))
                                .addGroup(javax.swing.GroupLayout.Alignment.LEADING,
                                        jPanel1Layout.createSequentialGroup().addComponent(jLabel4)
                                                .addGap(30, 30, 30).addComponent(mname,
                                                        javax.swing.GroupLayout.PREFERRED_SIZE, 179,
                                                        javax.swing.GroupLayout.PREFERRED_SIZE))
                                .addGroup(jPanel1Layout.createSequentialGroup().addGroup(jPanel1Layout
                                        .createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                                        .addGroup(jPanel1Layout.createSequentialGroup().addComponent(jLabel9)
                                                .addGap(21, 21, 21))
                                        .addGroup(jPanel1Layout.createSequentialGroup()
                                                .addComponent(jLabel11, javax.swing.GroupLayout.DEFAULT_SIZE,
                                                        javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                                .addGap(30, 30, 30)))
                                        .addGroup(jPanel1Layout
                                                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING,
                                                        false)
                                                .addComponent(fathername, javax.swing.GroupLayout.DEFAULT_SIZE, 179,
                                                        Short.MAX_VALUE)
                                                .addComponent(lname))))
                        .addGroup(jPanel1Layout.createSequentialGroup()
                                .addGroup(jPanel1Layout
                                        .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                        .addComponent(jLabel10, javax.swing.GroupLayout.PREFERRED_SIZE, 77,
                                                javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addComponent(jLabel15))
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addGroup(
                                        jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                                .addComponent(category, javax.swing.GroupLayout.PREFERRED_SIZE, 68,
                                                        javax.swing.GroupLayout.PREFERRED_SIZE)
                                                .addComponent(dob, javax.swing.GroupLayout.PREFERRED_SIZE, 121,
                                                        javax.swing.GroupLayout.PREFERRED_SIZE))))
                        .addContainerGap(20, Short.MAX_VALUE)));
        jPanel1Layout.setVerticalGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                        .addContainerGap()
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                .addComponent(jLabel3).addComponent(fname, javax.swing.GroupLayout.PREFERRED_SIZE,
                                        javax.swing.GroupLayout.DEFAULT_SIZE,
                                        javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                .addComponent(mname, javax.swing.GroupLayout.PREFERRED_SIZE,
                                        javax.swing.GroupLayout.DEFAULT_SIZE,
                                        javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addComponent(jLabel4))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                .addComponent(lname, javax.swing.GroupLayout.PREFERRED_SIZE,
                                        javax.swing.GroupLayout.DEFAULT_SIZE,
                                        javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addComponent(jLabel11))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                .addComponent(jLabel9)
                                .addComponent(fathername, javax.swing.GroupLayout.PREFERRED_SIZE,
                                        javax.swing.GroupLayout.DEFAULT_SIZE,
                                        javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(11, 11, 11)
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                .addComponent(jLabel7).addComponent(male).addComponent(female))
                        .addGap(8, 8, 8)
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addComponent(jLabel10).addComponent(dob, javax.swing.GroupLayout.PREFERRED_SIZE,
                                        javax.swing.GroupLayout.DEFAULT_SIZE,
                                        javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addComponent(jLabel15).addComponent(category,
                                        javax.swing.GroupLayout.PREFERRED_SIZE,
                                        javax.swing.GroupLayout.DEFAULT_SIZE,
                                        javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)));

        jPanel2.setBorder(javax.swing.BorderFactory
                .createTitledBorder(javax.swing.BorderFactory.createEtchedBorder(), "Contact Information"));

        primary.setColumns(20);
        primary.setRows(5);
        jScrollPane1.setViewportView(primary);

        jLabel8.setText("Primary Address ");

        jLabel12.setText("Mailing Address");

        mailing.setColumns(20);
        mailing.setRows(5);
        jScrollPane2.setViewportView(mailing);

        jLabel13.setText("Contact Number");

        jLabel14.setText("Email ID ");

        sameAsPrimary.setText("Same as Primary");
        sameAsPrimary.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                sameAsPrimaryActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
        jPanel2.setLayout(jPanel2Layout);
        jPanel2Layout.setHorizontalGroup(jPanel2Layout
                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(jPanel2Layout.createSequentialGroup().addGroup(jPanel2Layout
                        .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(jPanel2Layout.createSequentialGroup().addContainerGap().addComponent(jLabel13)
                                .addGap(18, 18, 18)
                                .addComponent(contactnumber, javax.swing.GroupLayout.PREFERRED_SIZE, 129,
                                        javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addGap(18, 18, 18).addComponent(jLabel14)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                .addComponent(email, javax.swing.GroupLayout.PREFERRED_SIZE, 174,
                                        javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGroup(jPanel2Layout.createSequentialGroup().addGroup(jPanel2Layout
                                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addGroup(jPanel2Layout.createSequentialGroup().addContainerGap().addComponent(
                                        jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 225,
                                        javax.swing.GroupLayout.PREFERRED_SIZE))
                                .addGroup(jPanel2Layout
                                        .createSequentialGroup().addGap(92, 92, 92).addComponent(jLabel8)))
                                .addGap(18, 18, 18)
                                .addGroup(jPanel2Layout
                                        .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                        .addGroup(jPanel2Layout.createSequentialGroup()
                                                .addComponent(jLabel12, javax.swing.GroupLayout.PREFERRED_SIZE, 96,
                                                        javax.swing.GroupLayout.PREFERRED_SIZE)
                                                .addGap(18, 18, 18).addComponent(sameAsPrimary))
                                        .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 225,
                                                javax.swing.GroupLayout.PREFERRED_SIZE))))
                        .addContainerGap(90, Short.MAX_VALUE)));
        jPanel2Layout.setVerticalGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(jPanel2Layout.createSequentialGroup().addContainerGap().addGroup(jPanel2Layout
                        .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(jLabel8, javax.swing.GroupLayout.Alignment.TRAILING,
                                javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE,
                                Short.MAX_VALUE)
                        .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                .addComponent(jLabel12).addComponent(sameAsPrimary)))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 71,
                                        javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 71,
                                        javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(18, 18, 18)
                        .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                .addComponent(jLabel13)
                                .addComponent(contactnumber, javax.swing.GroupLayout.PREFERRED_SIZE,
                                        javax.swing.GroupLayout.DEFAULT_SIZE,
                                        javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addComponent(jLabel14).addComponent(email, javax.swing.GroupLayout.PREFERRED_SIZE,
                                        javax.swing.GroupLayout.DEFAULT_SIZE,
                                        javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(25, 25, 25)));

        jPanel3.setBorder(javax.swing.BorderFactory
                .createTitledBorder(javax.swing.BorderFactory.createEtchedBorder(), "Student Information"));

        jLabel2.setText("Programme");

        jLabel5.setText("Branch");

        yearLabel.setText("Year");

        year.setModel(new javax.swing.SpinnerNumberModel(1, 1, 4, 1));

        sem.setModel(new javax.swing.SpinnerNumberModel(1, 1, 8, 1));

        semLabel.setText("Semester");

        jLabel17.setText("Roll No");

        jLabel18.setText("Card Nos *");

        jLabel19.setText("No of Cards Issued");

        cardsissued.setModel(new SpinnerNumberModel(2, 0, Config.MAXCARDS, 1));

        programme.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "B.Tech", "M.Tech" }));
        programme.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                programmeItemStateChanged(evt);
            }
        });

        branch.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "CSE", "ECE", "EEE" }));

        jLabel22.setText("* Separate using ',' (comma)");

        passOutLabel.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
        passOutLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        passOutLabel.setText("Pass Out : No");

        javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
        jPanel3.setLayout(jPanel3Layout);
        jPanel3Layout.setHorizontalGroup(jPanel3Layout
                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(jPanel3Layout.createSequentialGroup().addContainerGap().addGroup(jPanel3Layout
                        .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(jPanel3Layout.createSequentialGroup().addGroup(jPanel3Layout
                                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addGroup(jPanel3Layout.createSequentialGroup().addGroup(jPanel3Layout
                                        .createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                                        .addComponent(yearLabel, javax.swing.GroupLayout.DEFAULT_SIZE,
                                                javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                        .addComponent(jLabel5, javax.swing.GroupLayout.DEFAULT_SIZE,
                                                javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                                        .addGap(12, 12, 12))
                                .addComponent(semLabel, javax.swing.GroupLayout.Alignment.TRAILING))
                                .addGap(31, 31, 31)
                                .addGroup(jPanel3Layout
                                        .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                        .addComponent(year, javax.swing.GroupLayout.PREFERRED_SIZE,
                                                javax.swing.GroupLayout.DEFAULT_SIZE,
                                                javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addComponent(branch, javax.swing.GroupLayout.PREFERRED_SIZE, 66,
                                                javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addComponent(sem, javax.swing.GroupLayout.PREFERRED_SIZE,
                                                javax.swing.GroupLayout.DEFAULT_SIZE,
                                                javax.swing.GroupLayout.PREFERRED_SIZE)))
                        .addGroup(jPanel3Layout.createSequentialGroup()
                                .addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 72,
                                        javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(programme, javax.swing.GroupLayout.PREFERRED_SIZE, 93,
                                        javax.swing.GroupLayout.PREFERRED_SIZE)))
                        .addGap(0, 4, Short.MAX_VALUE)
                        .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout
                                        .createSequentialGroup().addComponent(jLabel19)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                        .addComponent(cardsissued, javax.swing.GroupLayout.PREFERRED_SIZE,
                                                javax.swing.GroupLayout.DEFAULT_SIZE,
                                                javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addGap(86, 86, 86))
                                .addGroup(jPanel3Layout.createSequentialGroup().addGap(12, 12, 12)
                                        .addGroup(jPanel3Layout
                                                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                                .addComponent(jLabel18)
                                                .addGroup(jPanel3Layout.createSequentialGroup().addGap(2, 2, 2)
                                                        .addComponent(jLabel17)))
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                        .addGroup(jPanel3Layout
                                                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING,
                                                        false)
                                                .addGroup(jPanel3Layout.createSequentialGroup()
                                                        .addComponent(rollno, javax.swing.GroupLayout.DEFAULT_SIZE,
                                                                64, Short.MAX_VALUE)
                                                        .addGap(87, 87, 87))
                                                .addGroup(jPanel3Layout.createSequentialGroup().addComponent(cardno)
                                                        .addGap(19, 19, 19))))
                                .addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
                                        jPanel3Layout.createSequentialGroup()
                                                .addComponent(jLabel22, javax.swing.GroupLayout.PREFERRED_SIZE, 189,
                                                        javax.swing.GroupLayout.PREFERRED_SIZE)
                                                .addGap(19, 19, 19))))
                .addGroup(jPanel3Layout.createSequentialGroup().addGap(20, 20, 20).addComponent(passOutLabel,
                        javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addContainerGap()));
        jPanel3Layout.setVerticalGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(jPanel3Layout.createSequentialGroup().addContainerGap().addGroup(jPanel3Layout
                        .createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(jLabel2)
                        .addComponent(rollno, javax.swing.GroupLayout.PREFERRED_SIZE,
                                javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(jLabel17).addComponent(programme, javax.swing.GroupLayout.PREFERRED_SIZE,
                                javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(18, 18, 18)
                        .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                .addComponent(jLabel5).addComponent(jLabel18)
                                .addComponent(cardno, javax.swing.GroupLayout.PREFERRED_SIZE,
                                        javax.swing.GroupLayout.DEFAULT_SIZE,
                                        javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addComponent(branch, javax.swing.GroupLayout.PREFERRED_SIZE,
                                        javax.swing.GroupLayout.DEFAULT_SIZE,
                                        javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                .addComponent(jLabel22)
                                .addComponent(year, javax.swing.GroupLayout.PREFERRED_SIZE,
                                        javax.swing.GroupLayout.DEFAULT_SIZE,
                                        javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addComponent(yearLabel))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                .addComponent(cardsissued, javax.swing.GroupLayout.PREFERRED_SIZE,
                                        javax.swing.GroupLayout.DEFAULT_SIZE,
                                        javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addComponent(jLabel19)
                                .addComponent(sem, javax.swing.GroupLayout.PREFERRED_SIZE,
                                        javax.swing.GroupLayout.DEFAULT_SIZE,
                                        javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addComponent(semLabel))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(passOutLabel)
                        .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)));

        jToolBar1.setToolTipText("Navigation Bar");
        jToolBar1.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
        jToolBar1.setName("Navigation Bar"); // NOI18N

        prevNavButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/navigation_previous.png"))); // NOI18N
        prevNavButton.setFocusable(false);
        prevNavButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        prevNavButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        prevNavButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                prevNavButtonActionPerformed(evt);
            }
        });
        jToolBar1.add(prevNavButton);

        nextNavButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/navigation_next.png"))); // NOI18N
        nextNavButton.setFocusable(false);
        nextNavButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        nextNavButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        nextNavButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                nextNavButtonActionPerformed(evt);
            }
        });
        jToolBar1.add(nextNavButton);

        gotoNavButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/navigation_goto.png"))); // NOI18N
        gotoNavButton.setFocusable(false);
        gotoNavButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        gotoNavButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        gotoNavButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                gotoNavButtonActionPerformed(evt);
            }
        });
        jToolBar1.add(gotoNavButton);

        navPrintStudent.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/print.png"))); // NOI18N
        navPrintStudent.setFocusable(false);
        navPrintStudent.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        navPrintStudent.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        navPrintStudent.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                navPrintStudentActionPerformed(evt);
            }
        });
        jToolBar1.add(navPrintStudent);

        addStudentButton.setText("Save Changes");
        addStudentButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                addStudentButtonActionPerformed(evt);
            }
        });

        jSeparator1.setOrientation(javax.swing.SwingConstants.VERTICAL);

        issueHistoryTable.setModel(new javax.swing.table.DefaultTableModel(
                new Object[][] { { null, null, null, null, null, null, null },
                        { null, null, null, null, null, null, null }, { null, null, null, null, null, null, null },
                        { null, null, null, null, null, null, null } },
                new String[] { "Issue_Id", "acc_no", "Book Title", "Author", "Issue Date", "Return Date",
                        "Due Date" }));
        issueHistoryTable.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mousePressed(java.awt.event.MouseEvent evt) {
                issueHistoryTableMousePressed(evt);
            }
        });
        jScrollPane4.setViewportView(issueHistoryTable);

        jLabel20.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        jLabel20.setText("ISSUE HISTORY");

        jPanel4.setBorder(
                javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder(),
                        "Add Filters : View issue history for a specific period"));

        from.setDateFormatString("dd-MM-yyyy");

        to.setDateFormatString("dd-MM-yyyy");

        jLabel21.setText("From :");

        jLabel23.setText("To:");

        applyFilterButton.setText("Apply Filter");
        applyFilterButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                applyFilterButtonActionPerformed(evt);
            }
        });

        resetFilter.setText("Reset");
        resetFilter.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                resetFilterActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4);
        jPanel4.setLayout(jPanel4Layout);
        jPanel4Layout.setHorizontalGroup(jPanel4Layout
                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(jPanel4Layout.createSequentialGroup().addGap(22, 22, 22).addComponent(jLabel21)
                        .addGap(18, 18, 18)
                        .addComponent(from, javax.swing.GroupLayout.PREFERRED_SIZE, 105,
                                javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(18, 18, 18).addComponent(jLabel23).addGap(18, 18, 18)
                        .addComponent(to, javax.swing.GroupLayout.PREFERRED_SIZE, 99,
                                javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(applyFilterButton)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(resetFilter, javax.swing.GroupLayout.DEFAULT_SIZE, 71, Short.MAX_VALUE)
                        .addGap(4, 4, 4)));
        jPanel4Layout.setVerticalGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(jPanel4Layout.createSequentialGroup().addGap(21, 21, 21).addGroup(jPanel4Layout
                        .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                .addComponent(applyFilterButton).addComponent(resetFilter))
                        .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                                .addComponent(from, javax.swing.GroupLayout.PREFERRED_SIZE,
                                        javax.swing.GroupLayout.DEFAULT_SIZE,
                                        javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addComponent(jLabel21, javax.swing.GroupLayout.Alignment.LEADING)
                                .addGroup(jPanel4Layout
                                        .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                        .addComponent(to, javax.swing.GroupLayout.PREFERRED_SIZE,
                                                javax.swing.GroupLayout.DEFAULT_SIZE,
                                                javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addComponent(jLabel23))))
                        .addContainerGap(21, Short.MAX_VALUE)));

        jPanel5.setBorder(javax.swing.BorderFactory.createTitledBorder(
                javax.swing.BorderFactory.createEtchedBorder(), "Student Performance : Filtered"));

        issuedFiltered.setText("Total Books Issued :");

        returnedFiltered.setText("Total Books Returned :");

        fineFiltered.setText("Total Fine :");

        currentFiltered.setText("Currently issued book count :");

        javax.swing.GroupLayout jPanel5Layout = new javax.swing.GroupLayout(jPanel5);
        jPanel5.setLayout(jPanel5Layout);
        jPanel5Layout
                .setHorizontalGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(jPanel5Layout.createSequentialGroup().addGap(23, 23, 23)
                                .addGroup(jPanel5Layout
                                        .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                                        .addComponent(issuedFiltered, javax.swing.GroupLayout.DEFAULT_SIZE,
                                                javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                        .addComponent(returnedFiltered, javax.swing.GroupLayout.DEFAULT_SIZE,
                                                javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                        .addComponent(fineFiltered, javax.swing.GroupLayout.DEFAULT_SIZE,
                                                javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                        .addComponent(currentFiltered, javax.swing.GroupLayout.DEFAULT_SIZE,
                                                javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                                .addContainerGap(20, Short.MAX_VALUE)));
        jPanel5Layout.setVerticalGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(jPanel5Layout.createSequentialGroup()
                        .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(issuedFiltered)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(returnedFiltered)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(fineFiltered)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(currentFiltered)));

        jPanel6.setBorder(javax.swing.BorderFactory.createTitledBorder(
                javax.swing.BorderFactory.createEtchedBorder(), "Student Performance : Overall"));

        issued.setText("Total Books Issued :");

        returnedLabel.setText("Total Books Returned :");

        fineLabel.setText("Total Fine :");

        currentLabel.setText("Currently issued book count :");

        javax.swing.GroupLayout jPanel6Layout = new javax.swing.GroupLayout(jPanel6);
        jPanel6.setLayout(jPanel6Layout);
        jPanel6Layout
                .setHorizontalGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(jPanel6Layout.createSequentialGroup().addGap(23, 23, 23)
                                .addGroup(jPanel6Layout
                                        .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                                        .addComponent(issued, javax.swing.GroupLayout.DEFAULT_SIZE,
                                                javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                        .addComponent(returnedLabel, javax.swing.GroupLayout.DEFAULT_SIZE,
                                                javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                        .addComponent(fineLabel, javax.swing.GroupLayout.DEFAULT_SIZE,
                                                javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                        .addComponent(currentLabel, javax.swing.GroupLayout.DEFAULT_SIZE,
                                                javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                                .addContainerGap(24, Short.MAX_VALUE)));
        jPanel6Layout.setVerticalGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(jPanel6Layout.createSequentialGroup()
                        .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addComponent(issued)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(returnedLabel)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(fineLabel)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(currentLabel)));

        statusMessage.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);

        deleteStudent.setText("Delete");
        deleteStudent.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                deleteStudentActionPerformed(evt);
            }
        });

        exceedLabel.setFont(new java.awt.Font("Tahoma", 0, 10)); // NOI18N
        exceedLabel.setText("*");

        jLabel24.setText("* double click to open report for selected record");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup().addGroup(layout
                        .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(layout.createSequentialGroup().addGap(18, 18, 18).addGroup(layout
                                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addGroup(layout.createSequentialGroup()
                                        .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE,
                                                javax.swing.GroupLayout.DEFAULT_SIZE,
                                                javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                        .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE,
                                                javax.swing.GroupLayout.DEFAULT_SIZE,
                                                javax.swing.GroupLayout.PREFERRED_SIZE))
                                .addGroup(layout.createSequentialGroup().addGap(321, 321, 321)
                                        .addGroup(layout
                                                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                                .addComponent(jToolBar1, javax.swing.GroupLayout.PREFERRED_SIZE,
                                                        javax.swing.GroupLayout.DEFAULT_SIZE,
                                                        javax.swing.GroupLayout.PREFERRED_SIZE)
                                                .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 163,
                                                        javax.swing.GroupLayout.PREFERRED_SIZE)))))
                        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                                .addContainerGap()
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
                                                layout.createSequentialGroup().addGroup(layout
                                                        .createParallelGroup(
                                                                javax.swing.GroupLayout.Alignment.LEADING)
                                                        .addGroup(layout.createSequentialGroup()
                                                                .addComponent(jPanel2,
                                                                        javax.swing.GroupLayout.PREFERRED_SIZE,
                                                                        javax.swing.GroupLayout.DEFAULT_SIZE,
                                                                        javax.swing.GroupLayout.PREFERRED_SIZE)
                                                                .addGroup(layout.createParallelGroup(
                                                                        javax.swing.GroupLayout.Alignment.LEADING)
                                                                        .addGroup(layout.createSequentialGroup()
                                                                                .addGap(32, 32, 32)
                                                                                .addComponent(uploadButton,
                                                                                        javax.swing.GroupLayout.PREFERRED_SIZE,
                                                                                        100,
                                                                                        javax.swing.GroupLayout.PREFERRED_SIZE))
                                                                        .addGroup(layout.createSequentialGroup()
                                                                                .addGap(20, 20, 20)
                                                                                .addComponent(picLabel,
                                                                                        javax.swing.GroupLayout.PREFERRED_SIZE,
                                                                                        130,
                                                                                        javax.swing.GroupLayout.PREFERRED_SIZE))))
                                                        .addGroup(layout.createSequentialGroup()
                                                                .addGap(220, 220, 220)
                                                                .addComponent(addStudentButton).addGap(27, 27, 27)
                                                                .addComponent(statusPic,
                                                                        javax.swing.GroupLayout.PREFERRED_SIZE, 63,
                                                                        javax.swing.GroupLayout.PREFERRED_SIZE)
                                                                .addPreferredGap(
                                                                        javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                                                .addComponent(deleteStudent,
                                                                        javax.swing.GroupLayout.PREFERRED_SIZE, 92,
                                                                        javax.swing.GroupLayout.PREFERRED_SIZE)))
                                                        .addGap(14, 14, 14))
                                        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout
                                                .createSequentialGroup()
                                                .addComponent(statusMessage, javax.swing.GroupLayout.PREFERRED_SIZE,
                                                        731, javax.swing.GroupLayout.PREFERRED_SIZE)
                                                .addPreferredGap(
                                                        javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)))))
                        .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 12,
                                javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addGroup(layout.createSequentialGroup().addGroup(layout
                                        .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                        .addGroup(layout.createSequentialGroup().addGap(215, 215, 215)
                                                .addComponent(jLabel20))
                                        .addGroup(layout.createSequentialGroup().addGap(18, 18, 18).addComponent(
                                                jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE,
                                                javax.swing.GroupLayout.DEFAULT_SIZE,
                                                javax.swing.GroupLayout.PREFERRED_SIZE))
                                        .addGroup(layout.createSequentialGroup()
                                                .addPreferredGap(
                                                        javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                                .addComponent(exceedLabel, javax.swing.GroupLayout.PREFERRED_SIZE,
                                                        566, javax.swing.GroupLayout.PREFERRED_SIZE)))
                                        .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                                .addGroup(layout.createSequentialGroup()
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 194,
                                                Short.MAX_VALUE)
                                        .addGroup(layout
                                                .createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                                                .addComponent(jPanel6, javax.swing.GroupLayout.PREFERRED_SIZE,
                                                        javax.swing.GroupLayout.DEFAULT_SIZE,
                                                        javax.swing.GroupLayout.PREFERRED_SIZE)
                                                .addComponent(jPanel5, javax.swing.GroupLayout.PREFERRED_SIZE,
                                                        javax.swing.GroupLayout.DEFAULT_SIZE,
                                                        javax.swing.GroupLayout.PREFERRED_SIZE))
                                        .addContainerGap(202, Short.MAX_VALUE))
                                .addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
                                        layout.createSequentialGroup()
                                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED,
                                                        javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                                .addComponent(jLabel24).addGap(80, 80, 80))
                                .addGroup(layout.createSequentialGroup()
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                        .addComponent(jScrollPane4, javax.swing.GroupLayout.PREFERRED_SIZE, 513,
                                                javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))));
        layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup().addGroup(layout
                        .createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                        .addGroup(layout.createSequentialGroup()
                                .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 29,
                                        javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(jToolBar1, javax.swing.GroupLayout.PREFERRED_SIZE,
                                        javax.swing.GroupLayout.DEFAULT_SIZE,
                                        javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                        .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE,
                                                javax.swing.GroupLayout.DEFAULT_SIZE,
                                                javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE,
                                                javax.swing.GroupLayout.DEFAULT_SIZE,
                                                javax.swing.GroupLayout.PREFERRED_SIZE))
                                .addGap(18, 18, 18)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
                                                layout.createSequentialGroup().addComponent(picLabel)
                                                        .addGap(23, 23, 23).addComponent(uploadButton))
                                        .addComponent(jPanel2, javax.swing.GroupLayout.Alignment.TRAILING,
                                                javax.swing.GroupLayout.PREFERRED_SIZE,
                                                javax.swing.GroupLayout.DEFAULT_SIZE,
                                                javax.swing.GroupLayout.PREFERRED_SIZE))
                                .addGap(18, 18, 18)
                                .addGroup(
                                        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                                                .addComponent(addStudentButton,
                                                        javax.swing.GroupLayout.DEFAULT_SIZE, 76, Short.MAX_VALUE)
                                                .addComponent(deleteStudent, javax.swing.GroupLayout.DEFAULT_SIZE,
                                                        76, Short.MAX_VALUE)
                                                .addComponent(statusPic, javax.swing.GroupLayout.DEFAULT_SIZE,
                                                        javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                .addComponent(statusMessage, javax.swing.GroupLayout.PREFERRED_SIZE, 12,
                                        javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGroup(layout.createSequentialGroup()
                                .addComponent(jLabel20, javax.swing.GroupLayout.PREFERRED_SIZE, 26,
                                        javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(jScrollPane4, javax.swing.GroupLayout.PREFERRED_SIZE, 196,
                                        javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addGap(43, 43, 43).addComponent(jLabel24)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE,
                                        javax.swing.GroupLayout.DEFAULT_SIZE,
                                        javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                .addComponent(jPanel5, javax.swing.GroupLayout.PREFERRED_SIZE,
                                        javax.swing.GroupLayout.DEFAULT_SIZE,
                                        javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(jPanel6, javax.swing.GroupLayout.PREFERRED_SIZE,
                                        javax.swing.GroupLayout.DEFAULT_SIZE,
                                        javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(exceedLabel)))
                        .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
                        layout.createSequentialGroup().addComponent(jSeparator1,
                                javax.swing.GroupLayout.PREFERRED_SIZE, 703, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addGap(24, 24, 24)));

        jPanel5.getAccessibleContext().setAccessibleName("Student Performance during Filter Period");

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void uploadButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_uploadButtonActionPerformed
        JFileChooser pic = new JFileChooser();
        pic.setFileFilter(Config.filter);
        int returnVal = pic.showDialog(null, "Choose Pic");
        if (returnVal == JFileChooser.APPROVE_OPTION) {
            try {
                Image image, scaledImage;
                File f = pic.getSelectedFile();
                image = ImageIO.read(f);
                scaledImage = getScaledImage(image, 168, 130);
                picLabel.setIcon(new ImageIcon(scaledImage));
                this.picLoc = f.getAbsolutePath();
            } catch (IOException ex) {
                Error.errorDialog("Cannot upload pic");
                Logger.getLogger(EditViewStudent.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }//GEN-LAST:event_uploadButtonActionPerformed

    /**
     * THIS FUNCTION RESETS FIELDS AFTER ADD QUERY IS EXECUTED. DOES NOT CHANGE JSpinners
     */
    private void reset() {
        fname.setText("");
        mname.setText("");
        lname.setText("");
        fathername.setText("");
        fname.setText("");
        category.setSelectedIndex(0);
        male.setSelected(true);
        primary.setText("");
        mailing.setText("");
        contactnumber.setText("");
        email.setText("");
        rollno.setText("");
        cardno.setText("");
        /**
         * this is to undo is next student is not passed out
         */
        year.setVisible(true);
        sem.setVisible(true);
        yearLabel.setVisible(true);
        semLabel.setVisible(true);
        passOutLabel.setText("Pass Out : No");

        statusPic.setIcon(null);
        statusMessage.setText("");
        exceedLabel.setText("*");

        try {
            picLabel.setIcon(new ImageIcon(ImageIO.read(new File("profile_pic.jpg"))));
        } catch (IOException ex) {
            Logger.getLogger(EditViewStudent.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * If Btech is selected give 4 yrs, if Mtech 2 yrs fromthe Combo Box
     * @param evt 
     */
    private void programmeItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_programmeItemStateChanged
        int selected = programme.getSelectedIndex();
        switch (selected) {
        case 0:
            year.setModel(new SpinnerNumberModel(1, 1, 4, 1));
            sem.setModel(new SpinnerNumberModel(1, 1, 8, 1));
            break;
        case 1:
            year.setModel(new SpinnerNumberModel(1, 1, 2, 1));
            sem.setModel(new SpinnerNumberModel(1, 1, 4, 1));
            break;
        }
    }//GEN-LAST:event_programmeItemStateChanged

    public void addStudent() throws SQLException, ParseException, IOException, Exception {
        PreparedStatement query = library.prepareStatement(
                "update student set `roll_no` = ?,`First Name` = ?,`Middle Name` = ?,`Last Name` = ?,`Fathers Name` = ?,`Gender` = ?,`Date Of Birth` = ?,`Category` = ?,`Primary Address` = ?,`Mailing Address` = ?,`Contact Number` = ?,`E-Mail` = ?,`Programme` = ?,`Branch` = ?,`Year` = ?,`Semester` = ?,`Card Numbers` = ?,`Cards Issued` = ?,`pic_path` = ? where roll_no = ?");
        query.setInt(1, Integer.parseInt(rollno.getText()));
        query.setString(2, fname.getText());
        query.setString(3, mname.getText());
        query.setString(4, lname.getText());
        query.setString(5, fathername.getText());
        if (female.isSelected())
            query.setString(6, "Female");
        else
            query.setString(6, "Male");
        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);
        String date = dateFormat.format(dob.getDate());
        query.setString(7, date);
        query.setString(8, category.getSelectedItem().toString());
        query.setString(9, primary.getText());
        query.setString(10, mailing.getText());
        query.setString(11, contactnumber.getText());
        String[] mail = email.getText().split("[@.]+");
        try {
            if (mail[2] == null) {
                statusPic.setIcon(new ImageIcon(ImageIO.read(new File("add_book_failure.png"))));
                statusMessage.setText("wrong email");
            }

            else {
                query.setString(12, email.getText());
                query.setString(13, programme.getSelectedItem().toString());
                query.setString(14, branch.getSelectedItem().toString());
                query.setInt(15, Integer.parseInt(year.getModel().getValue().toString()));
                query.setInt(16, Integer.parseInt(sem.getModel().getValue().toString()));
                query.setString(17, cardno.getText()); //TODO add validation
                query.setInt(18, Integer.parseInt(cardsissued.getModel().getValue().toString()));
                query.setString(19, this.picLoc);
                query.setInt(20, currentRollNo);
                System.out.println("Add Student query" + query.toString());
                int update = query.executeUpdate();
                PreparedStatement query1 = library
                        .prepareStatement("update issue set issuer_id = ? where issuer_id=?");
                query1.setInt(1, new Integer(rollno.getText()));
                query1.setInt(2, currentRollNo);
                int executeUpdate1 = query1.executeUpdate();
                if (update == 1) {
                    statusPic.setIcon(new ImageIcon(ImageIO.read(new File("add_book_success.png"))));
                    statusMessage.setText(
                            "Student " + fname.getText() + " updated successfully and issue history refactored");
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            statusPic.setIcon(new ImageIcon(ImageIO.read(new File("add_book_failure.png"))));
            statusMessage.setText(e.getMessage());
        }
        /**
         * Refactoring issue database
         */

    }

    /**
     * DELETE STUDENT PERMANENTLY FROM DATABASE. ISSUE AND STUDENT TABLES ARE AFFECTED
     */
    private void deleteStudent() {
        int sure = JOptionPane.showConfirmDialog(null, "Are you sure you want to remove this Student permanently ?",
                "Confirm Delete", JOptionPane.YES_NO_OPTION);
        if (sure == JOptionPane.YES_OPTION) {
            if (Config.showDeleteDialog() == true) {
                try {

                    PreparedStatement query = library.prepareStatement("delete from student where roll_no = ?");
                    PreparedStatement query1 = library.prepareStatement("delete from issue where issuer_id = ?");
                    query.setInt(1, currentRollNo);
                    query1.setInt(1, currentRollNo);
                    int executeUpdate = query.executeUpdate();
                    int executeUpdate1 = query1.executeUpdate();
                    if (executeUpdate != 0)
                        JOptionPane.showMessageDialog(null,
                                "1 Student successfully removed and issue history refactored.Loading next student",
                                "Student Deleted", JOptionPane.OK_OPTION);
                    /*
                    Load next student
                    */
                    nextNavButtonActionPerformed(null);
                } catch (SQLException ex) {
                    Logger.getLogger(EditBook.class.getName()).log(Level.SEVERE, null, ex);
                }
            } else {
                JOptionPane.showMessageDialog(null, "Passwords do not match", "Wrong Password",
                        JOptionPane.ERROR_MESSAGE);
            }
        }
    }

    /**
     * REGEX matcher
     * 
     * @param cardNoString
     * @param cardNoSpinner
     * @return finalString with incremented card nos.
     */
    public String regexMatch(String cardNoString, int cardNoSpinner) {
        /**
         * max no of cards han can be issued = 10 as array limit is 10
         */
        Integer[] incDigit = new Integer[10];
        String finalString = "";
        Pattern digitPattern = Pattern.compile("(\\d{1,})");
        Matcher digitMatcher = digitPattern.matcher(cardNoString);
        /*
         INCREMENTING THE FOUND INTEGERS
         */
        for (int i = 0; i < cardNoSpinner; i++) {
            /*
            movies cursor to first find
            */
            if (digitMatcher.find()) {
                System.out.println("ye lo" + digitMatcher.group(0));
                incDigit[i] = (new Integer(digitMatcher.group(0)) + cardNoSpinner);
            }
        }
        Pattern nonDigitPattern = Pattern.compile("(\\D{1,})");
        Matcher nonDigitMatcher = nonDigitPattern.matcher(cardNoString);
        /*
         MAKING FINAL STRING WITH INCREMENTED VALUES
         */
        for (int i = 0; i < cardNoSpinner; i++) {
            if (nonDigitMatcher.find()) {

                finalString += nonDigitMatcher.group(i) + incDigit[i].toString();
                System.out.println("finalString : " + finalString);
            }
        }
        return finalString;
    }

    private void addStudentButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addStudentButtonActionPerformed

        try {
            addStudent();
        } catch (SQLException ex) {
            Logger.getLogger(EditViewStudent.class.getName()).log(Level.SEVERE, null, ex);
            try {
                statusPic.setIcon(new ImageIcon(ImageIO.read(new File("add_book_failure.png"))));
            } catch (IOException ex1) {
                Logger.getLogger(EditViewStudent.class.getName()).log(Level.SEVERE, null, ex1);
            }
            statusMessage.setText(ex.getMessage());
        } catch (ParseException | IOException ex) {
            Logger.getLogger(EditViewStudent.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception ex) {
            Logger.getLogger(EditViewStudent.class.getName()).log(Level.SEVERE, null, ex);
            try {
                statusPic.setIcon(new ImageIcon(ImageIO.read(new File("add_book_failure.png"))));
            } catch (IOException ex1) {
                Logger.getLogger(EditViewStudent.class.getName()).log(Level.SEVERE, null, ex1);
            }
            statusMessage.setText(ex.getMessage());
        }

        /**
         * SMART ADD FEATURES
         */
        /* if(smartAdd.isSelected())
         {
        int pro = programme.getSelectedIndex();
        int bra = branch.getSelectedIndex();
        int yea = Integer.parseInt(year.getModel().getValue().toString());
        int seme = Integer.parseInt(sem.getModel().getValue().toString());
        int rol = Integer.parseInt(rollno.getText())+1; 
        int ciss = Integer.parseInt(cardsissued.getModel().getValue().toString());
        String cnos = cardno.getText();
        try {
            picLabel.setIcon(new ImageIcon(ImageIO.read(new File("profile_pic.jpg"))));
        } catch (IOException ex) {
            Logger.getLogger(EditViewStudent.class.getName()).log(Level.SEVERE, null, ex);
        }
         addWindowListener(new WindowAdapter(){
        public void windowClosing()
        {
            setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
            dispose();
        }
        });
            
        programme.setSelectedIndex(pro);
        branch.setSelectedIndex(bra);
        year.setValue(yea);
        sem.setValue(seme);
        rollno.setText(new Integer(rol).toString());
        cardsissued.setValue(ciss);
        cardno.setText(regexMatch(cnos,ciss));
         }
         else
         {
        //reset();
        try {
            picLabel.setIcon(new ImageIcon(ImageIO.read(new File("profile_pic.jpg"))));
        } catch (IOException ex) {
            Logger.getLogger(EditViewStudent.class.getName()).log(Level.SEVERE, null, ex);
        }
        addWindowListener(new WindowAdapter(){
        public void windowClosing()
        {
           setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
            dispose();
                
        }
        });
            
         } */
    }//GEN-LAST:event_addStudentButtonActionPerformed

    private void sameAsPrimaryActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_sameAsPrimaryActionPerformed
        mailing.setText(primary.getText());
    }//GEN-LAST:event_sameAsPrimaryActionPerformed

    private void prevNavButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_prevNavButtonActionPerformed

        reset();

        try {
            PreparedStatement st = library.prepareStatement("select * from student where roll_no < ?");
            st.setInt(1, currentRollNo);
            loadViewResultSet = st.executeQuery();
            loadViewResultSet.last();
            currentRollNo = loadViewResultSet.getInt("roll_no");
            loadViewData(currentRollNo);
        } catch (SQLException ex) {
            successFailure(false, "No Data found");
            Logger.getLogger(EditViewStudent.class.getName()).log(Level.SEVERE, null, ex);
        }

    }//GEN-LAST:event_prevNavButtonActionPerformed

    private void nextNavButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_nextNavButtonActionPerformed
        reset();

        try {
            PreparedStatement st = library.prepareStatement("select * from student where roll_no > ?");
            st.setInt(1, currentRollNo);
            loadViewResultSet = st.executeQuery();
            loadViewResultSet.first();
            currentRollNo = loadViewResultSet.getInt("roll_no");
            loadViewData(currentRollNo);
        } catch (SQLException ex) {
            successFailure(false, "No Data found");
            Logger.getLogger(EditViewStudent.class.getName()).log(Level.SEVERE, null, ex);

        }

    }//GEN-LAST:event_nextNavButtonActionPerformed

    private void gotoNavButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_gotoNavButtonActionPerformed
        reset();

        String gotoRollNo = JOptionPane.showInputDialog(null, "Enter Roll No", "Goto a specific record",
                JOptionPane.QUESTION_MESSAGE);
        try {
            loadViewData(new Integer(gotoRollNo));
        } catch (SQLException ex) {
            successFailure(false, "No Data found");
            Logger.getLogger(EditViewStudent.class.getName()).log(Level.SEVERE, null, ex);
        }
    }//GEN-LAST:event_gotoNavButtonActionPerformed

    private void applyFilterButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_applyFilterButtonActionPerformed
        if (from.getDate().after(to.getDate()))
            JOptionPane.showMessageDialog(null, "The 'to' date should be after the 'from' date");
        else {
            DateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);
            String fromDate = format.format(from.getDate());
            String toDate = format.format(to.getDate());
            LocalDate fromDateJoda = new LocalDate(fromDate);
            LocalDate toDateJoda = new LocalDate(toDate);
            try {
                loadFilteredIssueData(fromDateJoda, toDateJoda);
                calculateFilteredPerformance(fromDateJoda, toDateJoda);
            } catch (SQLException ex) {
                Logger.getLogger(EditViewStudent.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }//GEN-LAST:event_applyFilterButtonActionPerformed

    private void resetFilterActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_resetFilterActionPerformed
        resetFilter();
    }//GEN-LAST:event_resetFilterActionPerformed

    private void deleteStudentActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteStudentActionPerformed
        deleteStudent();
    }//GEN-LAST:event_deleteStudentActionPerformed

    private void issueHistoryTableMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_issueHistoryTableMousePressed
        if (evt.getClickCount() == 2) {
            new ReportGenerator(new Integer(
                    issueHistoryTable.getModel().getValueAt(issueHistoryTable.getSelectedRow(), 0).toString()))
                            .setVisible(true);
        }
    }//GEN-LAST:event_issueHistoryTableMousePressed

    private void navPrintStudentActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_navPrintStudentActionPerformed
        PrintUtilities.printComponent(this);
    }//GEN-LAST:event_navPrintStudentActionPerformed

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(EditViewStudent.class.getName()).log(java.util.logging.Level.SEVERE,
                    null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(EditViewStudent.class.getName()).log(java.util.logging.Level.SEVERE,
                    null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(EditViewStudent.class.getName()).log(java.util.logging.Level.SEVERE,
                    null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(EditViewStudent.class.getName()).log(java.util.logging.Level.SEVERE,
                    null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                //new EditViewStudent().setVisible(true);

            }
        });
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton addStudentButton;
    private javax.swing.JButton applyFilterButton;
    private javax.swing.JComboBox branch;
    private javax.swing.JTextField cardno;
    private javax.swing.JSpinner cardsissued;
    private javax.swing.JComboBox category;
    private javax.swing.JTextField contactnumber;
    private javax.swing.JLabel currentFiltered;
    private javax.swing.JLabel currentLabel;
    private javax.swing.JButton deleteStudent;
    private com.toedter.calendar.JDateChooser dob;
    private javax.swing.JTextField email;
    private javax.swing.JLabel exceedLabel;
    private javax.swing.JTextField fathername;
    private javax.swing.JRadioButton female;
    private javax.swing.JLabel fineFiltered;
    private javax.swing.JLabel fineLabel;
    private javax.swing.JTextField fname;
    private com.toedter.calendar.JDateChooser from;
    private javax.swing.ButtonGroup gender;
    private javax.swing.JButton gotoNavButton;
    private javax.swing.JTable issueHistoryTable;
    private javax.swing.JLabel issued;
    private javax.swing.JLabel issuedFiltered;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel10;
    private javax.swing.JLabel jLabel11;
    private javax.swing.JLabel jLabel12;
    private javax.swing.JLabel jLabel13;
    private javax.swing.JLabel jLabel14;
    private javax.swing.JLabel jLabel15;
    private javax.swing.JLabel jLabel17;
    private javax.swing.JLabel jLabel18;
    private javax.swing.JLabel jLabel19;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel20;
    private javax.swing.JLabel jLabel21;
    private javax.swing.JLabel jLabel22;
    private javax.swing.JLabel jLabel23;
    private javax.swing.JLabel jLabel24;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel7;
    private javax.swing.JLabel jLabel8;
    private javax.swing.JLabel jLabel9;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JPanel jPanel3;
    private javax.swing.JPanel jPanel4;
    private javax.swing.JPanel jPanel5;
    private javax.swing.JPanel jPanel6;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JScrollPane jScrollPane4;
    private javax.swing.JSeparator jSeparator1;
    private javax.swing.JToolBar jToolBar1;
    private javax.swing.JTextField lname;
    private javax.swing.JTextArea mailing;
    private javax.swing.JRadioButton male;
    private javax.swing.JTextField mname;
    private javax.swing.JButton navPrintStudent;
    private javax.swing.JButton nextNavButton;
    private javax.swing.JLabel passOutLabel;
    private javax.swing.JLabel picLabel;
    private javax.swing.JButton prevNavButton;
    private javax.swing.JTextArea primary;
    private javax.swing.JComboBox programme;
    private javax.swing.JButton resetFilter;
    private javax.swing.JLabel returnedFiltered;
    private javax.swing.JLabel returnedLabel;
    private javax.swing.JTextField rollno;
    private javax.swing.JButton sameAsPrimary;
    private javax.swing.JSpinner sem;
    private javax.swing.JLabel semLabel;
    private javax.swing.JLabel statusMessage;
    private javax.swing.JLabel statusPic;
    private com.toedter.calendar.JDateChooser to;
    private javax.swing.JButton uploadButton;
    private javax.swing.JSpinner year;
    private javax.swing.JLabel yearLabel;
    // End of variables declaration//GEN-END:variables
}