Dự Án Thực Tế: Xây Dựng Ứng Dụng Quản Lý Sinh Viên Console Hoàn Chỉnh

Chúc mừng bạn đã đi đến bài viết cuối cùng trong chuỗi hành trình tự học Java! Ở các bài học trước, bạn đã trang bị đầy đủ các khối kiến thức từ căn bản (biến, vòng lặp, phương thức) đến nâng cao (OOP, Exception, Collections Framework và I/O File). Bài viết này sẽ giúp bạn hệ thống hóa toàn bộ kiến thức bằng cách bắt tay vào xây dựng một Ứng dụng Quản lý Sinh viên trên Console hoàn chỉnh với đầy đủ các tính năng CRUD (Create, Read, Update, Delete).

Xây Dựng Ứng Dụng Quản Lý Sinh Viên Console Hoàn Chỉnh Bằng Java

1. Mổ Xẻ Kiến Kiến Trúc Và Yêu Cầu Dự Án

Ứng dụng của chúng ta được thiết kế theo hướng đối tượng (OOP) nhằm đảm bảo mã nguồn rõ ràng, dễ bảo trì và mở rộng. Dự án bao gồm các thành phần chính:

  • Model (Lớp Student): Đại diện cho đối tượng sinh viên với các thuộc tính như Mã SV, Họ tên, Điểm trung bình (GPA) và các hàm getter/setter, constructor.
  • Service (Lớp StudentManager): Chứa toàn bộ logic xử lý nghiệp vụ quản lý danh sách sinh viên bằng ArrayList (Thêm, Xóa, Cập nhật, Tìm kiếm, Đọc/Ghi File).
  • View/Main (Lớp Main): Điểm khởi chạy chương trình, hiển thị menu tương tác trên Console thông qua Scanner và xử lý ngoại lệ nhập liệu từ người dùng.

2. Bắt Tay Vào Lập Trình Từng Bước

Bước 1: Định Nghĩa Lớp Đối Tượng Student

Áp dụng tính đóng gói (Encapsulation) để bảo vệ dữ liệu sinh viên:

public class Student {    private String id;    private String name;    private double gpa;    public Student(String id, String name, double gpa) {        this.id = id;        this.name = name;        this.gpa = gpa;    }    public String getId() { return id; }    public void setId(String id) { this.id = id; }    public String getName() { return name; }    public void setName(String name) { this.name = name; }    public double getGpa() { return gpa; }    public void setGpa(double gpa) { this.gpa = gpa; }    @Override    public String toString() {        return String.format("Mã SV: %-8s | Họ tên: %-20s | GPA: %.2f", id, name, gpa);    }}

Bước 2: Xây Dựng Lớp Quản Lý StudentManager (CRUD)

Lớp này đóng vai trò quản lý danh sách sinh viên sử dụng ArrayList<Student> để xử lý các thao tác dữ liệu linh hoạt:

import java.util.ArrayList;import java.util.List;public class StudentManager {    private List<Student> list = new ArrayList<>();    // Thêm sinh viên mới    public void addStudent(Student student) {        list.add(student);        System.out.println("=> Thêm sinh viên thành công!");    }    // Hiển thị danh sách    public void displayAll() {        if (list.isEmpty()) {            System.out.println("Danh sách sinh viên đang trống.");            return;        }        System.out.println("--- DANH SÁCH SINH VIÊN ---");        for (Student s : list) {            System.out.println(s);        }    }    // Tìm kiếm theo Mã SV    public Student findById(String id) {        for (Student s : list) {            if (s.getId().equalsIgnoreCase(id)) {                return s;            }        }        return null;    }    // Cập nhật thông tin    public boolean updateStudent(String id, String newName, double newGpa) {        Student s = findById(id);        if (s != null) {            s.setName(newName);            s.setGpa(newGpa);            return true;        }        return false;    }    // Xóa sinh viên    public boolean deleteStudent(String id) {        Student s = findById(id);        if (s != null) {            list.remove(s);            return true;        }        return false;    }}

Bước 3: Xây Dựng Giao Diện Console Tương Tác Trong Lớp Main

Sử dụng Scanner kết hợp vòng lặp while và cấu trúc switch-case để tạo menu lựa chọn cho người dùng. Đừng quên bọc các đoạn nhập liệu trong khối try-catch để ứng dụng hoạt động ổn định và không bị gián đoạn đột ngột khi xảy ra lỗi nhập liệu:

import java.util.Scanner;public class Main {    public static void main(String[] args) {        StudentManager manager = new StudentManager();        Scanner scanner = new Scanner(System.in);        while (true) {            System.out.println("\n===== QUẢN LÝ SINH VIÊN =====");            System.out.println("1. Thêm sinh viên");            System.out.println("2. Xem danh sách sinh viên");            System.out.println("3. Tìm kiếm sinh viên theo Mã");            System.out.println("4. Cập nhật thông tin sinh viên");            System.out.println("5. Xóa sinh viên");            System.out.println("0. Thoát chương trình");            System.out.print("Chọn chức năng (0-5): ");            try {                int choice = Integer.parseInt(scanner.nextLine());                switch (choice) {                    case 1:                        System.out.print("Nhập mã SV: ");                        String id = scanner.nextLine();                        System.out.print("Nhập họ tên: ");                        String name = scanner.nextLine();                        System.out.print("Nhập GPA: ");                        double gpa = Double.parseDouble(scanner.nextLine());                        manager.addStudent(new Student(id, name, gpa));                        break;                    case 2:                        manager.displayAll();                        break;                    case 3:                        System.out.print("Nhập mã SV cần tìm: ");                        String searchId = scanner.nextLine();                        Student found = manager.findById(searchId);                        if (found != null) {                            System.out.println("Kết quả: " + found);                        } else {                            System.out.println("Không tìm thấy sinh viên có mã: " + searchId);                        }                        break;                    case 4:                        System.out.print("Nhập mã SV cần sửa: ");                        String updateId = scanner.nextLine();                        if (manager.findById(updateId) != null) {                            System.out.print("Nhập tên mới: ");                            String newName = scanner.nextLine();                            System.out.print("Nhập GPA mới: ");                            double newGpa = Double.parseDouble(scanner.nextLine());                            manager.updateStudent(updateId, newName, newGpa);                            System.out.println("=> Cập nhật thành công!");                        } else {                            System.out.println("Mã sinh viên không tồn tại.");                        }                        break;                    case 5:                        System.out.print("Nhập mã SV cần xóa: ");                        String delId = scanner.nextLine();                        if (manager.deleteStudent(delId)) {                            System.out.println("=> Xóa sinh viên thành công!");                        } else {                            System.out.println("Không tìm thấy mã sinh viên để xóa.");                        }                        break;                    case 0:                        System.out.println("Cảm ơn bạn đã sử dụng chương trình!");                        return;                    default:                        System.out.println("Lựa chọn không hợp lệ, vui lòng chọn lại.");                }            } catch (Exception e) {                System.out.println("Đã xảy ra lỗi nhập liệu! Vui lòng kiểm tra lại kiểu dữ liệu.");            }        }    }}

3. Kết Luận Chuỗi Bài Học

Dự án Console Quản Lý Sinh Viên tuy đơn giản nhưng đã tập hợp đầy đủ các tư duy cốt lõi của việc lập trình phần mềm thực tế: tổ chức dữ liệu, xây dựng hàm xử lý nghiệp vụ, quản lý luồng tương tác và xử lý ngoại lệ an toàn.

Hy vọng qua 20 bài học trong lộ trình này, bạn đã tự tin nắm vững nền tảng ngôn ngữ Java. Từ đây, bạn có thể dễ dàng tiếp tục mở rộng kỹ năng hướng tới việc kết nối cơ sở dữ liệu (JDBC), xây dựng giao diện ứng dụng hoặc học các framework nâng cao như Spring Boot hay Android Development trong tương lai!


Nguồn tham khảo


📚 Chuỗi bài: Lộ Trình Tự Học Java Từ Con Số 0 Đến Ứng Dụng Thực Tế

Chuỗi 20 bài viết thiết kế dạng 'cầm tay chỉ việc' dành riêng cho người mới bắt đầu học lập trình Java. Lộ trình đi từ tư duy nền tảng, cú pháp cơ bản, lập trình hướng đối tượng (OOP) cho đến hoàn thiện một dự án thực tế nhỏ.

  1. 1. Java Là Giống Gì? Cài Đặt Environment (JDK & IntelliJ IDEA) Cực Nhanh
  2. 2. Giải Mã Chương Trình 'Hello World' Và Cấu Trúc Cơ Bản Của Bài Code Java
  3. 3. Biến Và Kiểu Dữ Liệu Trong Java: Cách Lưu Trữ Thông Tin Đúng Chuẩn
  4. 4. Toán Tử Trong Java: Hướng Dẫn Tính Toán Và So Sánh Chi Tiết
  5. 5. Nhập Xuất Dữ Liệu Với Scanner: Làm Cho Chương Trình Biết Tương Tác
  6. 6. Cấu Trúc Điều Kiện If-Else Và Switch-Case: Dạy Máy Tính Rẽ Nhánh Tư Duy
  7. 7. Vòng Lặp For, While Và Do-While Trong Java: Tự Động Hóa Công Việc Lặp Lại
  8. 8. Phương Thức (Method) Trong Java: Tái Sử Dụng Code Một Cách Thông Minh
  9. 9. Mảng Một Chiều (Array) Trong Java: Quản Lý Danh Sách Dữ Liệu Đơn Giản
  10. 10. Bài 10: Xử Lý Chuỗi Dữ Liệu Với String Và StringBuilder Trong Java
  11. 11. Lập Trình Hướng Đối Tượng (OOP): Lớp (Class) Và Đối Tượng (Object) Là Đâu?
  12. 12. Tính Đóng Gói (Encapsulation) Và Access Modifiers: Bảo Vệ Dữ Liệu Safe 100%
  13. 13. Tính Kế Thừa (Inheritance): Tái Sử Dụng Mã Nguồn Với Từ Khóa Extends
  14. 14. Tính Đa Hình (Polymorphism): Nạp Chồng (Overloading) Và Ghi Đè (Overriding)
  15. 15. Lộ Trình Tự Học Java: Tính Trừu Tượng (Abstraction) - Abstract Class Hay Interface?
  16. 16. Xử Lý Ngoại Lệ (Exception Handling): Giúp Chương Trình Không Bị 'Sập' Đột Ngột
  17. 17. Java Collections Framework: Làm Quen Mảng Cố Định Với ArrayList
  18. 18. Lưu Trữ Cặp Dữ Liệu Key-Value Cực Kỳ Nhanh Với HashMap
  19. 19. Đọc Và Ghi File Trong Java: Lưu Trữ Dữ Liệu Lâu Dài Vào Ổ Cứng
  20. 20. Dự Án Thực Tế: Xây Dựng Ứng Dụng Quản Lý Sinh Viên Console Hoàn Chỉnh ← Bạn đang đọc

← Bài trước: Đọc Và Ghi File Trong Java: Lưu Trữ Dữ Liệu Lâu Dài Vào Ổ Cứng

Nhận xét