Đây là lúc bạn biến kiến thức thành ứng dụng thực tế. Mini Project hôm nay sẽ giúp bạn luyện tập tất cả kỹ năng đã học: từ class
, file
, try-except
, cho đến module
và menu
.
✅ Mục tiêu
Xây dựng một chương trình đơn giản cho phép:
- Thêm liên hệ mới (tên + số điện thoại)
- Xem danh sách liên hệ
- Tìm kiếm theo tên
- Xóa liên hệ
- Lưu và đọc dữ liệu từ file
- Chia nhỏ thành module rõ ràng
📁 Cấu trúc project
danhba/
├── main.py
├── contact.py ← class LienHe
├── db.py ← lưu, đọc file
1. Bước 1 – Tạo class LienHe
(📄 contact.py)
class LienHe:
def __init__(self, ten, sdt):
self.ten = ten
self.sdt = sdt
def hien_thi(self):
print(f"{self.ten} - {self.sdt}")
def to_line(self):
return f"{self.ten},{self.sdt}"
@staticmethod
def from_line(line):
parts = line.strip().split(",")
return LienHe(parts[0], parts[1])
2. Bước 2 – Xử lý file (📄 db.py)
from contact import LienHe
def doc_danh_ba(ten_file):
danh_sach = []
try:
with open(ten_file, "r") as f:
for dong in f:
lh = LienHe.from_line(dong)
danh_sach.append(lh)
except FileNotFoundError:
pass
return danh_sach
def ghi_danh_ba(ten_file, danh_sach):
with open(ten_file, "w") as f:
for lh in danh_sach:
f.write(lh.to_line() + "\n")
3. Bước 3 – Giao diện người dùng (📄 main.py)
from contact import LienHe
import db
TEN_FILE = "danhba.txt"
def menu():
print("\n====== QUẢN LÝ DANH BẠ ======")
print("1. Xem danh sách")
print("2. Thêm liên hệ")
print("3. Tìm kiếm")
print("4. Xóa liên hệ")
print("0. Thoát")
def tim_kiem(danh_sach, tu_khoa):
return [lh for lh in danh_sach if tu_khoa.lower() in lh.ten.lower()]
def main():
danh_sach = db.doc_danh_ba(TEN_FILE)
while True:
menu()
chon = input("Chọn chức năng: ")
if chon == "1":
print("\n--- Danh bạ ---")
if not danh_sach:
print("Danh bạ trống.")
for lh in danh_sach:
lh.hien_thi()
elif chon == "2":
ten = input("Nhập tên: ")
sdt = input("Nhập số điện thoại: ")
lh = LienHe(ten, sdt)
danh_sach.append(lh)
db.ghi_danh_ba(TEN_FILE, danh_sach)
print("✅ Đã thêm liên hệ.")
elif chon == "3":
kw = input("Nhập từ khóa tìm: ")
ket_qua = tim_kiem(danh_sach, kw)
print(f"\n🔎 Kết quả ({len(ket_qua)}):")
for lh in ket_qua:
lh.hien_thi()
elif chon == "4":
ten_xoa = input("Nhập tên liên hệ cần xóa: ")
moi = [lh for lh in danh_sach if lh.ten != ten_xoa]
if len(moi) < len(danh_sach):
danh_sach = moi
db.ghi_danh_ba(TEN_FILE, danh_sach)
print("🗑️ Đã xóa.")
else:
print("❗ Không tìm thấy.")
elif chon == "0":
print("Tạm biệt!")
break
else:
print("❌ Không hợp lệ.")
if __name__ == "__main__":
main()
Kỹ năng bạn đã luyện tập:
- Tạo class và object
- Làm việc với file
.txt
- Dùng
try-except
để xử lý lỗi - Dùng
import
module riêng - Tổ chức project theo kiểu chuyên nghiệp
- Tạo menu và lặp thao tác với người dùng
Gợi ý nâng cao
Nếu bạn muốn thử thách thêm:
- Sắp xếp danh bạ theo tên
- Thêm xác thực số điện thoại
- Ghi log thao tác người dùng vào
log.txt
- Dùng
tabulate
để in bảng đẹp - Xây giao diện với
Tkinter
(bài sau!)
Bài tiếp theo: Mini Project – Máy tính giao diện (GUI với Tkinter)
Bạn sẽ làm ứng dụng có giao diện thật, với nút bấm, ô nhập, hiển thị kết quả – giống một app mini!
Thảo luận