Skip to main content

Bài tập: Thiết kế lớp MatHang & Giao diện Quản Lý Bằng guizero

🎯 Mục tiêu

  • Ôn lại kiến thức Encapsulation (đóng gói dữ liệu).
  • Thực hành viết class trong Python với public / protected / private.
  • Ứng dụng lớp vào GUI bằng thư viện guizero.

1️⃣ Thiết kế lớp MatHang

Thuộc tính

Tên thuộc tínhKiểu truy cậpÝ nghĩa
tenPublicTên mặt hàng
_so_luongProtectedSố lượng trong kho
__giaPrivateGiá bán mỗi đơn vị
__ma_vachPrivateMã vạch sản phẩm

Phương thức chính

  • hien_thi_thong_tin() → in tên mặt hàng.
  • hien_thi_so_luong() → in số lượng.
  • lay_gia() → lấy giá bán.
  • cap_nhat_gia(gia_moi) → cập nhật giá (nếu hợp lệ).
  • kiem_tra_kho() → trả về "Hàng nhiều", "Hàng ổn định", "Sắp hết hàng".
  • ban(so_luong_ban) → xử lý bán hàng.
  • cap_nhat_ma_vach(ma_moi) → cập nhật mã vạch (chỉ 8 hoặc 12 ký tự).
  • __str__() → hiển thị thông tin mặt hàng.

Luồng xử lý: Cập nhật giá


Luồng xử lý: Bán hàng


Minh họa Encapsulation trong lớp


2️⃣ Bài tập GUI với guizero

Ứng dụng GUI sẽ cho phép:

  • Xem thông tin mặt hàng.
  • Bán hàng.
  • Cập nhật giá.
  • Cập nhật mã vạch.
  • Kiểm tra kho.

Sơ đồ tổng quan giao diện


Gợi ý code khung GUI

from guizero import App, Text, TextBox, PushButton

# Khởi tạo app
app = App("Quản Lý Mặt Hàng", width=400, height=400)

# Các widget hiển thị thông tin
Text(app, "Tên mặt hàng: Gạo thơm")
Text(app, "Số lượng: 120")
Text(app, "Giá: 15000")
Text(app, "Trạng thái kho: Hàng nhiều")

# TextBox nhập liệu + nút
Text(app, "Nhập số lượng bán:")
so_luong_ban = TextBox(app)
PushButton(app, text="Bán hàng", command=lambda: print("Xử lý bán"))

# Cập nhật giá
Text(app, "Nhập giá mới:")
gia_moi = TextBox(app)
PushButton(app, text="Cập nhật giá", command=lambda: print("Cập nhật giá"))

# Cập nhật mã vạch
Text(app, "Nhập mã vạch mới:")
ma_vach = TextBox(app)
PushButton(app, text="Cập nhật mã vạch", command=lambda: print("Cập nhật mã"))

# Kiểm tra kho
PushButton(app, text="Kiểm tra kho", command=lambda: print("Kiểm tra kho"))

app.display()

📌 Tổng kết

  • Bài tập giúp luyện cả Encapsulation (public / protected / private).
  • Biết cách dùng name mangling để truy cập private khi cần.
  • Thực hành xây dựng ứng dụng GUI để quản lý mặt hàng trong thực tế.