Lập trình Java Swing với ứng dụng quản lý học viên phần 7

Phần hướng dẫn lập trình Java Swing với ứng dụng quản lý học viên do đội ngũ Team Việt Dev biên soạn. Nội dung phần 7 nhằm hướng dẫn các bạn xây dựng thống kê, báo cáo dữ liệu.

Java Swing là một phần của JFC (Java Foundation Classes) được sử dụng để tạo các ứng dụng Window-Based. Java Swing được xây dựng ở trên cùng của AWT (Abstract Windowing Toolkit) và được viết bằng ngôn ngữ lập trình Java.

Nhằm giúp các bạn sinh viên, học viên hay một số bạn đang có nhu cầu tìm hiểu về lập trình Java Swing thì đội ngũ Team Việt Dev biên soạn một số tài liệu Java Swing và phần hướng dẫn lập trình Java Swing với ứng dụng quản lý học viên.

Lập trình Java Swing với ứng dụng quản lý học viên

Sau khi đã cài đặt đầy đủ các công cụ lập trình, hệ quản trị cơ sở dữ liệu… thì tiếp theo chúng ta sẽ khởi tạo dự án ứng dụng quản lý học viên trên Netbeans IDE với ngôn ngữ lập trình Java Swing.

Bước 1: Phần thống kê dữ liệu thì mình sẽ sử dụng thư viện JFreeChart để tạo các dạng biểu đồ như hình tròn, hình cột… Bạn truy cập http://www.jfree.org/jfreechart/download/ để tải thư viện mới nhất, thêm thư viện jfreechart-1.5.0.jarjcommon-1.0.23.jar vào dự án.

Lập trình Java Swing với ứng dụng quản lý học viên

 

Bây giờ bạn thiết kế giao diện trong ThongKePanel.java, mình sẽ tạo mẫu biểu đồ BarChartGanttChart để hiển thị thống kê dữ liệu.

Lập trình Java Swing với ứng dụng quản lý học viên

Bước 2: Trong ví dụ mình sẽ thống kê số lượng học viên đăng ký và thống kê theo dõi tình trạng các khóa học. Bạn cần viết một số phương thức truy vấn dữ liệu như sau:

Lớp KhoaHocBean.java

package com.teamvietdev.bean;

import java.util.Date;

public class KhoaHocBean {

    private String ten_khoa_hoc;
    private Date ngay_bat_dau;
    private Date ngay_ket_thuc;

    public String getTen_khoa_hoc() {
        return ten_khoa_hoc;
    }

    public void setTen_khoa_hoc(String ten_khoa_hoc) {
        this.ten_khoa_hoc = ten_khoa_hoc;
    }

    public Date getNgay_bat_dau() {
        return ngay_bat_dau;
    }

    public void setNgay_bat_dau(Date ngay_bat_dau) {
        this.ngay_bat_dau = ngay_bat_dau;
    }

    public Date getNgay_ket_thuc() {
        return ngay_ket_thuc;
    }

    public void setNgay_ket_thuc(Date ngay_ket_thuc) {
        this.ngay_ket_thuc = ngay_ket_thuc;
    }

}

Lớp LopHocBean.java

package com.teamvietdev.bean;

public class LopHocBean {

    private String ngay_dang_ky;
    private int so_luong_hoc_vien;

    public String getNgay_dang_ky() {
        return ngay_dang_ky;
    }

    public void setNgay_dang_ky(String ngay_dang_ky) {
        this.ngay_dang_ky = ngay_dang_ky;
    }

    public int getSo_luong_hoc_vien() {
        return so_luong_hoc_vien;
    }

    public void setSo_luong_hoc_vien(int so_luong_hoc_vien) {
        this.so_luong_hoc_vien = so_luong_hoc_vien;
    }

}

Lớp ThongKeDAO.java

package com.teamvietdev.dao;

import com.teamvietdev.bean.KhoaHocBean;
import com.teamvietdev.bean.LopHocBean;
import java.util.List;

public interface ThongKeDAO {
    
    public List<LopHocBean> getListByLopHoc();
    
    public List<KhoaHocBean> getListByKhoaHoc();
    
}

Lớp ThongKeDAOImpl.java

package com.teamvietdev.dao;

import com.teamvietdev.bean.KhoaHocBean;
import com.teamvietdev.bean.LopHocBean;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

public class ThongKeDAOImpl implements ThongKeDAO {

    @Override
    public List<LopHocBean> getListByLopHoc() {
        Connection cons = DBConnect.getConnection();
        String sql = "SELECT ngay_dang_ky, COUNT(*) as so_luong FROM lop_hoc GROUP BY ngay_dang_ky;";
        List<LopHocBean> list = new ArrayList<>();
        try {
            PreparedStatement ps = (PreparedStatement) cons.prepareStatement(sql);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                LopHocBean lopHocBean = new LopHocBean();
                lopHocBean.setNgay_dang_ky(rs.getString("ngay_dang_ky"));
                lopHocBean.setSo_luong_hoc_vien(rs.getInt("so_luong"));
                list.add(lopHocBean);
             }
            ps.close();
            cons.close();
            return list;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    public List<KhoaHocBean> getListByKhoaHoc() {
        Connection cons = DBConnect.getConnection();
        String sql = "SELECT ten_khoa_hoc, ngay_bat_dau, ngay_ket_thuc FROM khoa_hoc WHERE tinh_trang = TRUE ORDER BY ngay_bat_dau ASC;";
        List<KhoaHocBean> list = new ArrayList<>();
        try {
            PreparedStatement ps = (PreparedStatement) cons.prepareStatement(sql);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                KhoaHocBean khoaHocBean = new KhoaHocBean();
                khoaHocBean.setTen_khoa_hoc(rs.getString("ten_khoa_hoc"));
                khoaHocBean.setNgay_bat_dau(rs.getDate("ngay_bat_dau"));
                khoaHocBean.setNgay_ket_thuc(rs.getDate("ngay_ket_thuc"));
                list.add(khoaHocBean);
            }
            ps.close();
            cons.close();
            return list;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

}

Lớp ThongKeService.java

package com.teamvietdev.service;

import com.teamvietdev.bean.KhoaHocBean;
import com.teamvietdev.bean.LopHocBean;
import java.util.List;

public interface ThongKeService {
    
    public List<LopHocBean> getListByLopHoc();
    
    public List<KhoaHocBean> getListByKhoaHoc();
    
}

Lớp ThongKeServiceImpl.java

package com.teamvietdev.service;

import com.teamvietdev.bean.KhoaHocBean;
import com.teamvietdev.bean.LopHocBean;
import com.teamvietdev.dao.ThongKeDAO;
import com.teamvietdev.dao.ThongKeDAOImpl;
import java.util.List;

public class ThongKeServiceImpl implements ThongKeService {

    private ThongKeDAO thongKeDAO = null;

    public ThongKeServiceImpl() {
        this.thongKeDAO = new ThongKeDAOImpl();
    }

    @Override
    public List<LopHocBean> getListByLopHoc() {
        return thongKeDAO.getListByLopHoc();
    }

    @Override
    public List<KhoaHocBean> getListByKhoaHoc() {
        return thongKeDAO.getListByKhoaHoc();
    }

}

Bước 3: Tạo lớp QuanLyThongKeController.java

package com.teamvietdev.controller;

import com.teamvietdev.bean.KhoaHocBean;
import com.teamvietdev.bean.LopHocBean;
import com.teamvietdev.service.ThongKeService;
import com.teamvietdev.service.ThongKeServiceImpl;
import java.awt.CardLayout;
import java.awt.Dimension;
import java.util.List;
import javax.swing.JPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.gantt.Task;
import org.jfree.data.gantt.TaskSeries;
import org.jfree.data.gantt.TaskSeriesCollection;
import org.jfree.data.time.SimpleTimePeriod;

public class QuanLyThongKeController {

    private ThongKeService thongKeService = null;

    public QuanLyThongKeController() {
        this.thongKeService = new ThongKeServiceImpl();
    }

    public void setDataToChart1(JPanel jpnItem) {
        List<LopHocBean> listItem = thongKeService.getListByLopHoc();

        DefaultCategoryDataset dataset = new DefaultCategoryDataset();
        if (listItem != null) {
            for (LopHocBean item : listItem) {
                dataset.addValue(item.getSo_luong_hoc_vien(), "Học viên", item.getNgay_dang_ky());
            }
        }

        JFreeChart barChart = ChartFactory.createBarChart(
                "Biểu đồ thống kê số lượng học viên đăng ký".toUpperCase(),
                "Thời gian", "Số lượng",
                dataset, PlotOrientation.VERTICAL, false, true, false);

        ChartPanel chartPanel = new ChartPanel(barChart);
        chartPanel.setPreferredSize(new Dimension(jpnItem.getWidth(), 321));

        jpnItem.removeAll();
        jpnItem.setLayout(new CardLayout());
        jpnItem.add(chartPanel);
        jpnItem.validate();
        jpnItem.repaint();
    }

    public void setDataToChart2(JPanel jpnItem) {
        List<KhoaHocBean> listItem = thongKeService.getListByKhoaHoc();

        TaskSeriesCollection ds = new TaskSeriesCollection();
        JFreeChart ganttChart = ChartFactory.createGanttChart(
                "BIỂU ĐỒ THEO DÕI TÌNH TRẠNG KHÓA HỌC",
                "Khóa học", "Thời gian", ds, true, false, false
        );

        TaskSeries taskSeries;
        Task task;

        if (listItem != null) {
            for (KhoaHocBean item : listItem) {
                taskSeries = new TaskSeries(item.getTen_khoa_hoc());
                task = new Task(item.getTen_khoa_hoc(), new SimpleTimePeriod(item.getNgay_bat_dau(), item.getNgay_ket_thuc()));
                taskSeries.add(task);
                ds.add(taskSeries);
            }
        }

        ChartPanel chartPanel = new ChartPanel(ganttChart);
        chartPanel.setPreferredSize(new Dimension(jpnItem.getWidth(), 321));

        jpnItem.removeAll();
        jpnItem.setLayout(new CardLayout());
        jpnItem.add(chartPanel);
        jpnItem.validate();
        jpnItem.repaint();
    }

}

Trong ThongKeJPanel.java bạn cần gọi đến QuanLyThongKeController.java

package com.teamvietdev.view;

import com.teamvietdev.controller.QuanLyThongKeController;

public class ThongKeJPanel extends javax.swing.JPanel {

    public ThongKeJPanel() {
        initComponents();
        
        QuanLyThongKeController controller = new QuanLyThongKeController();
        controller.setDataToChart1(jpnChart1);
        controller.setDataToChart2(jpnChart2);
    }

}

Kết quả sau khi chạy đoạn mã chương trình trên có thể như sau:

Lập trình Java Swing với ứng dụng quản lý học viên

Như vậy thông qua những phần hướng dẫn trên mong rằng bạn có thể tìm hiểu dễ dàng và nhanh chóng hơn về lập trình Java Swing, có thể xây dựng một dự án hoàn chỉnh để hoàn thành báo cáo môn học hoặc luận văn tốt nghiệp.

Xem hướng dẫn thực hiện chi tiết tại đây:

Tải mã nguồn hướng dẫn lập trình Java Swing với ứng dụng quản lý học viên phần 7 tại đây:

Lời kết: Trong thời gian tới Team Việt Dev sẽ tiếp tục ra mắt nhiều nội dung khác liên quan đến Java Swing miễn phí đến bạn đọc, các bạn nhớ theo dõi kênh để có được những chia sẻ mới nhất.

(Tác giả: Team Việt Dev)

One Response

  1. Nguyễn Mạnh Hào 16/11/2020 Reply

Bình luận