



















Preview text:
lOMoAR cPSD| 45315597
TRƯỜNG ĐẠI HỌC THƯƠNG MẠI KHOA TOÁN KINH TẾ BÀI THẢO LUẬN
HỌC PHẦN: LẬP TRÌNH VỚI PYTHON ĐỀ TÀI 3
Nhóm thực hiện : Nhóm 8
Lớp học phần : 24 2 _INFO4511_02
Giảng viên : Cù Nguyên Giáp lOMoAR cPSD| 45315597
BẢNG KẾT QUẢ ĐÁNH GIÁ THÀNH VIÊN NHÓM 8 Họ và tên Mã SV Chức vụ Nhiệm vụ Đánh giá 23D400074 Thành viên Nội dung Nguyễn Thị Quỳnh Nhi 23D400029 Thành viên Word Đặng Hà Phương 23D400075 Nhóm trưởng Powerpoint Hoàng Minh Phương 23D400030 Thành viên Nội dung Nguyễn Thị Hà Phương 23D400032 Thành viên Thuyết trình Trần Thị Thanh Tâm lOMoAR cPSD| 45315597 MỤC LỤC
LỜI MỞ ĐẦU ............................................................................................................................... 4
I. MÔ TẢ BÀI TOÁN ................................................................................................................... 4
II. XÂY DỰNG HÀM ................................................................................................................... 7
LỜI KẾT LUẬN..........................................................................................................................30 lOMoAR cPSD| 45315597 LỜI MỞ ĐẦU
Trong thời đại công nghệ số phát triển mạnh mẽ, lập trình không chỉ là kỹ năng
chuyên môn dành riêng cho các kỹ sư phần mềm, mà còn là công cụ hỗ trợ đắc lực trong
nhiều lĩnh vực như tài chính, kinh tế, marketing, quản trị chuỗi cung ứng và phân tích dữ
liệu. Trong số các ngôn ngữ lập trình hiện đại, Python nổi lên như một ngôn ngữ thân thiện
với người học, có cú pháp đơn giản nhưng khả năng ứng dụng rất đa dạng và mạnh mẽ. Từ
việc xử lý dữ liệu, xây dựng thuật toán, đến phát triển web hay trí tuệ nhân tạo, Python đều
có thể đáp ứng hiệu quả.
Môn học “Lập trình Python” đóng vai trò quan trọng trong việc trang bị cho sinh
viên những kiến thức nền tảng về lập trình thông qua một ngôn ngữ hiện đại, dễ tiếp cận.
Đây là bước đệm để sinh viên phát triển kỹ năng tư duy logic, giải quyết vấn đề và làm
quen với tư duy thuật toán – những kỹ năng cốt lõi cần thiết trong môi trường học tập và
làm việc thời đại 4.0.
Bài thảo luận này được thực hiện nhằm tổng hợp, vận dụng và minh họa các kiến
thức cơ bản về ngôn ngữ lập trình Python như: khai báo biến, kiểu dữ liệu, toán tử, vòng
lặp, cấu trúc điều kiện, hàm và xử lý dữ liệu đầu vào. Nhóm chúng em đã cùng nhau phân
tích và giải quyết một số bài toán cụ thể để áp dụng kiến thức đã học, đồng thời rèn luyện
kỹ năng viết mã lệnh chính xác, rõ ràng và logic. Thông qua bài thảo luận, chúng em mong
muốn củng cố kiến thức lập trình, phát triển khả năng làm việc nhóm và xây dựng nền tảng
tư duy để tiếp cận những nội dung chuyên sâu hơn trong học kỳ tiếp theo I. MÔ TẢ BÀI TOÁN
1. Mục tiêu đề tài
Xây dựng một chương trình Python nhằm quản lý danh sách mặt hàng trong cửa
hàng nhỏ với tối đa 100 mặt hàng. Chương trình cho phép: •
Nhập và lưu thông tin các mặt hàng vào tệp văn bản (MATHANG.TXT) •
Tìm kiếm và hiển thị thông tin mặt hàng theo tên • Xóa mặt hàng theo tên •
Bổ sung thêm chức năng mở rộng: sắp xếp danh sách theo tên hàng
Qua đề tài, sinh viên sẽ áp dụng được kiến thức đã học về: • Xử lý tệp tin văn bản lOMoAR cPSD| 45315597 •
Danh sách và từ điển trong Python •
Hàm, vòng lặp và câu lệnh điều kiện
2. Nội dung chương trình
2.1. Mô tả chức năng
Chương trình gồm các chức năng chính như sau:
• Nhập mặt hàng: Cho phép người dùng nhập các thông tin: tên hàng, nhóm hàng,
ngày nhập, đơn vị tính, số lượng. Dữ liệu được lưu bằng kiểu dict, mỗi mặt hàng là
một từ điển, tất cả được lưu trong danh sách.
• Lưu vào tệp MATHANG.TXT: Sau khi nhập, toàn bộ danh sách mặt hàng được ghi
vào tệp MATHANG.TXT dưới dạng chuỗi văn bản để lưu trữ.
• Tìm kiếm mặt hàng: Cho phép người dùng nhập tên mặt hàng cần tìm, chương trình
hiển thị thông tin tương ứng nếu có.
• Xóa mặt hàng: Cho phép nhập tên mặt hàng cần xóa khỏi danh sách. Sau khi xóa,
dữ liệu được cập nhật và ghi lại vào tệp.
• Sắp xếp mặt hàng (chức năng mở rộng): Danh sách mặt hàng có thể được sắp xếp
theo thứ tự tên hàng để dễ quản lý.
• Lọc mặt hàng: giúp người dùng dễ dàng tìm ra các mặt hàng theo tiêu chí cụ thể.
Người dùng có thể chọn lọc theo các thuộc tính.
• Thống kê mặt hàng: Chức năng này trong chương trình thực hiện việc đếm số lượng
mặt hàng theo từng loại.
• Cập nhật thông tin mặt hàng : Khi người dùng chọn chức năng cập nhật, chương
trình sẽ yêu cầu nhập mặt hàng cần cập nhật. Cho phép người dùng nhập lại toàn bộ
thông tin mới như: tên, nhóm, số lượng...
• Tìm kiếm nâng cao: Chương trình hỗ trợ tìm kiếm nâng cao theo khoảng số lượng,
khoảng thời gian,... Sau đó, chương trình sẽ hiển thị tất cả mặt hàng có tên chứa
chuỗi ký tự nhập vào và loại mặt hàng khớp (nếu có). Việc tìm kiếm không phân
biệt chữ hoa/thường, giúp linh hoạt và tiện dụng hơn.
2.2. Cấu trúc dữ liệu •
Mỗi mặt hàng được biểu diễn bằng một dict với các khóa: lOMoAR cPSD| 45315597
"ten": Tên hàng (chuỗi, tối đa 25 ký tự) "nhom": Nhóm mặt hàng
"ngaynhap": Ngày nhập hàng "donvitinh": Đơn vị tính
"soluong": Số lượng (số nguyên) •
Danh sách mặt hàng được lưu trong một biến kiểu list, mỗi phần tử là một từ điển mặt hàng.
2.3. Các kỹ thuật sử dụng •
Vòng lặp while và for: Dùng để nhập danh sách, duyệt qua các mặt hàng, thực hiện tìm/xóa. •
Câu lệnh điều kiện if: Kiểm tra trùng tên khi tìm kiếm, xác nhận tồn tại khi xóa. •
Xử lý tệp tin: Dùng open(), write(), read() để lưu và nạp dữ liệu từ file. •
Hàm và module: Mỗi chức năng được đóng gói trong một hàm riêng để tăng tính
tổ chức và dễ bảo trì.
3. Kết quả và đánh giá
Chương trình chạy ổn định, giao diện đơn giản, dễ sử dụng. Dữ liệu được xử lý linh
hoạt bằng từ điển và danh sách, giúp việc tìm kiếm và sắp xếp trở nên hiệu quả. Việc lưu
vào tệp cũng giúp bảo toàn dữ liệu lâu dài. Ngoài các yêu cầu cơ bản, chương trình còn có
thêm chức năng sắp xếp để hỗ trợ người dùng dễ dàng quản lý hơn 4. Kết luận
Đề tài thể hiện khả năng ứng dụng Python để giải quyết một bài toán quản lý dữ
liệu đơn giản nhưng thực tế. Qua đó, sinh viên rèn luyện được kỹ năng làm việc với: •
Kiểu dữ liệu phức hợp (list, dict) • Xử lý tệp văn bản •
Tổ chức chương trình bằng hàm •
Lập trình hướng chức năng, phục vụ giải quyết vấn đề thực tế lOMoAR cPSD| 45315597 II. XÂY DỰNG HÀM
import os import datetime # Hàm
nhập danh sách mặt hàng def nhap_danh_sach_mat_hang(): danh_sach_ten = [] danh_sach_nhom = [] danh_sach_ngay_nhap = [] danh_sach_don_vi = [] danh_sach_so_luong = [] lOMoAR cPSD| 45315597
print("\n===== NHẬP THÔNG TIN MẶT HÀNG =====")
for i in range(100): # Nhập tối đa 100 mặt hàng
print(f"\nNhập mặt hàng thứ {i+1}:") # Nhập tên mặt hàng while True:
ten = input("Tên mặt hàng (tối đa 25 ký tự): ")
if len(ten) <= 25 and len(ten) > 0:
break print("Tên mặt hàng không hợp
lệ. Vui lòng nhập lại.") # Nhập nhóm mặt hàng
nhom = input("Nhóm mặt hàng: ") # Nhập ngày nhập while True: try:
ngay_str = input("Ngày nhập (YYYY-MM-DD): ")
year, month, day = map(int, ngay_str.split('-'))
ngay_nhap = datetime.date(year, month, day) break
except: print("Định dạng ngày không hợp lệ. Vui lòng nhập lại.") # Nhập đơn vị tính
don_vi = input("Đơn vị tính: ") # Nhập số lượng while True: try:
so_luong = int(input("Số lượng: ")) if so_luong >= 0:
break print("Số lượng không
được âm. Vui lòng nhập lại.") lOMoAR cPSD| 45315597
except: print("Số lượng phải là số nguyên. Vui lòng nhập lại.")
# Thêm thông tin vào các danh sách danh_sach_ten.append(ten) danh_sach_nhom.append(nhom)
danh_sach_ngay_nhap.append(ngay_nhap)
danh_sach_don_vi.append(don_vi)
danh_sach_so_luong.append(so_luong)
# Hỏi người dùng có muốn tiếp tục nhập không if i
< 99: # Nếu chưa đủ 100 mặt hàng choice =
input("\nBạn có muốn tiếp tục nhập? (Y/N): ") if choice.upper() != 'Y': break
return (danh_sach_ten, danh_sach_nhom, danh_sach_ngay_nhap,
danh_sach_don_vi, danh_sach_so_luong)
# Hàm lưu danh sách mặt hàng vào file def
luu_vao_file(danh_sach_ten, danh_sach_nhom, danh_sach_ngay_nhap,
danh_sach_don_vi, danh_sach_so_luong): try: with
open("MATHANG.TXT", 'w', encoding='utf-8') as f: for i in range(len(danh_sach_ten)):
line = f"{danh_sach_ten[i]},{danh_sach_nhom[i]},
{danh_sach_ngay_nhap[i]},{danh_sach_don_vi[i]},{danh_sach_so_luong[i]}\n"
f.write(line) print("\nĐã lưu danh sách vào file MATHANG.TXT")
except Exception as e: print(f"Lỗi khi lưu file: {e}")
# Hàm đọc danh sách mặt hàng từ file def doc_tu_file(): danh_sach_ten = [] danh_sach_nhom = [] lOMoAR cPSD| 45315597 danh_sach_ngay_nhap = [] danh_sach_don_vi = [] danh_sach_so_luong = []
try: if os.path.exists("MATHANG.TXT"):
with open("MATHANG.TXT", 'r', encoding='utf-8') as f: for line in f: parts = line.strip().split(',') if len(parts) == 5: try:
ten, nhom, ngay_nhap_str, don_vi, so_luong_str = parts
# Chuyển đổi ngày từ chuỗi
year, month, day = map(int, ngay_nhap_str.split('-'))
ngay_nhap = datetime.date(year, month, day)
# Chuyển đổi số lượng thành số nguyên so_luong = int(so_luong_str) # Thêm vào các danh sách danh_sach_ten.append(ten) danh_sach_nhom.append(nhom)
danh_sach_ngay_nhap.append(ngay_nhap)
danh_sach_don_vi.append(don_vi)
danh_sach_so_luong.append(so_luong) except: continue
print(f"\nĐã đọc {len(danh_sach_ten)} mặt hàng từ file MATHANG.TXT") else:
print("\nFile MATHANG.TXT không tồn tại.") except Exception as e: lOMoAR cPSD| 45315597
print(f"Lỗi khi đọc file: {e}")
return (danh_sach_ten, danh_sach_nhom, danh_sach_ngay_nhap,
danh_sach_don_vi, danh_sach_so_luong)
# Hàm hiển thị danh sách mặt hàng def hien_thi_danh_sach(danh_sach_ten,
danh_sach_nhom, danh_sach_ngay_nhap, danh_sach_don_vi,
danh_sach_so_luong, indexes=None): if not danh_sach_ten:
print("Danh sách mặt hàng trống.") return
if indexes is None: indexes =
list(range(len(danh_sach_ten))) if not indexes:
print("Không tìm thấy mặt hàng nào.") return
print("\n===== DANH SÁCH MẶT HÀNG =====") print(f"{'Tên mặt
hàng':<25} {'Nhóm':<15} {'Ngày nhập':<12} {'Đơn vị':<10} {'Số
lượng':<10}") print("-" * 75) for i in indexes:
print(f"{danh_sach_ten[i]:<25} {danh_sach_nhom[i]:<15}
{danh_sach_ngay_nhap[i]!s:<12} {danh_sach_don_vi[i]:<10}
{danh_sach_so_luong[i]:<10}")
# Hàm tìm kiếm mặt hàng def tim_kiem(danh_sach_ten,
danh_sach_nhom, danh_sach_ngay_nhap, danh_sach_don_vi,
danh_sach_so_luong): if not danh_sach_ten:
print("Danh sách mặt hàng trống.") return lOMoAR cPSD| 45315597
print("\n===== TÌM KIẾM MẶT HÀNG
=====") print("1. Tìm theo tên mặt
hàng") print("2. Tìm theo nhóm mặt
hàng") print("3. Tìm theo ngày nhập")
option = input("Chọn cách tìm kiếm: ") ket_qua = [] if option == '1':
ten_can_tim = input("Nhập tên mặt hàng cần tìm:
").lower() for i in range(len(danh_sach_ten)):
if ten_can_tim in danh_sach_ten[i].lower(): ket_qua.append(i) elif option == '2':
nhom_can_tim = input("Nhập nhóm mặt hàng cần tìm:
").lower() for i in range(len(danh_sach_nhom)):
if nhom_can_tim in danh_sach_nhom[i].lower(): ket_qua.append(i) elif option == '3': try:
ngay_str = input("Nhập ngày cần tìm (YYYY-MM-DD): ")
year, month, day = map(int, ngay_str.split('-'))
ngay_can_tim = datetime.date(year, month, day)
for i in range(len(danh_sach_ngay_nhap)):
if danh_sach_ngay_nhap[i] == ngay_can_tim: ket_qua.append(i) except:
print("Định dạng ngày không hợp lệ.") return else:
print("Lựa chọn không hợp lệ.") return lOMoAR cPSD| 45315597
hien_thi_danh_sach(danh_sach_ten, danh_sach_nhom,
danh_sach_ngay_nhap, danh_sach_don_vi, danh_sach_so_luong, ket_qua)
# Hàm xóa mặt hàng def xoa_mat_hang(danh_sach_ten, danh_sach_nhom,
danh_sach_ngay_nhap, danh_sach_don_vi, danh_sach_so_luong): if not danh_sach_ten:
print("Danh sách mặt hàng trống.") return
(danh_sach_ten, danh_sach_nhom, danh_sach_ngay_nhap,
danh_sach_don_vi, danh_sach_so_luong) ten_can_xoa =
input("\nNhập tên mặt hàng cần xóa: ")
# Tìm các vị trí của mặt hàng có tên cần xóa
indexes = [] for i in range(len(danh_sach_ten)):
if danh_sach_ten[i].lower() == ten_can_xoa.lower(): indexes.append(i) if not indexes:
print(f"Không tìm thấy mặt hàng có tên '{ten_can_xoa}'.")
return (danh_sach_ten, danh_sach_nhom, danh_sach_ngay_nhap,
danh_sach_don_vi, danh_sach_so_luong)
if len(indexes) > 1: print(f"Tìm thấy {len(indexes)} mặt
hàng có tên '{ten_can_xoa}'. Vui lòng chọn:") for idx, i in
enumerate(indexes): print(f"{idx+1}. {danh_sach_ten[i]}
(Nhóm: {danh_sach_nhom[i]}, Ngày nhập: {danh_sach_ngay_nhap[i]})") try:
choice = int(input("Chọn mặt hàng cần xóa:
")) if 1 <= choice <= len(indexes):
vitri_xoa = indexes[choice-1] else: lOMoAR cPSD| 45315597
print("Lựa chọn không hợp lệ.")
return (danh_sach_ten, danh_sach_nhom,
danh_sach_ngay_nhap, danh_sach_don_vi, danh_sach_so_luong) except:
print("Lựa chọn không hợp lệ.") return
(danh_sach_ten, danh_sach_nhom, danh_sach_ngay_nhap, danh_sach_don_vi,
danh_sach_so_luong) else: vitri_xoa = indexes[0]
# Xóa mặt hàng khỏi các danh sách danh_sach_ten.pop(vitri_xoa) danh_sach_nhom.pop(vitri_xoa)
danh_sach_ngay_nhap.pop(vitri_xoa)
danh_sach_don_vi.pop(vitri_xoa)
danh_sach_so_luong.pop(vitri_xoa)
print(f"Đã xóa mặt hàng '{ten_can_xoa}'.")
return (danh_sach_ten, danh_sach_nhom, danh_sach_ngay_nhap,
danh_sach_don_vi, danh_sach_so_luong)
# Hàm lọc mặt hàng def loc_mat_hang(danh_sach_ten, danh_sach_nhom,
danh_sach_ngay_nhap, danh_sach_don_vi, danh_sach_so_luong): if not danh_sach_ten:
print("Danh sách mặt hàng trống.") return
print("\n===== LỌC MẶT HÀNG =====")
print("1. Lọc theo nhóm mặt hàng")
print("2. Lọc theo số lượng tối thiểu")
option = input("Chọn cách lọc: ") ket_qua = [] lOMoAR cPSD| 45315597 if option == '1':
nhom_can_loc = input("Nhập nhóm mặt hàng cần lọc:
").lower() for i in range(len(danh_sach_nhom)):
if danh_sach_nhom[i].lower() == nhom_can_loc: ket_qua.append(i) elif option == '2': try:
so_luong_min = int(input("Nhập số lượng tối thiểu:
")) for i in range(len(danh_sach_so_luong)):
if danh_sach_so_luong[i] >= so_luong_min: ket_qua.append(i) except:
print("Số lượng phải là số nguyên.") return else:
print("Lựa chọn không hợp lệ.") return
hien_thi_danh_sach(danh_sach_ten, danh_sach_nhom,
danh_sach_ngay_nhap, danh_sach_don_vi, danh_sach_so_luong, ket_qua)
# Hàm sắp xếp mặt hàng def sap_xep_mat_hang(danh_sach_ten,
danh_sach_nhom, danh_sach_ngay_nhap, danh_sach_don_vi,
danh_sach_so_luong): if not danh_sach_ten:
print("Danh sách mặt hàng trống.") return
(danh_sach_ten, danh_sach_nhom, danh_sach_ngay_nhap,
danh_sach_don_vi, danh_sach_so_luong)
print("\n===== SẮP XẾP MẶT HÀNG
=====") print("1. Sắp xếp theo tên")
print("2. Sắp xếp theo nhóm")
print("3. Sắp xếp theo ngày nhập")
print("4. Sắp xếp theo số lượng") lOMoAR cPSD| 45315597
option = input("Chọn cách sắp xếp: ")
# Tạo một danh sách chỉ mục để sắp xếp
indexes = list(range(len(danh_sach_ten))) if option == '1':
indexes.sort(key=lambda i: danh_sach_ten[i]) elif option == '2':
indexes.sort(key=lambda i: danh_sach_nhom[i]) elif option == '3':
indexes.sort(key=lambda i: danh_sach_ngay_nhap[i]) elif option == '4':
indexes.sort(key=lambda i: danh_sach_so_luong[i]) else:
print("Lựa chọn không hợp lệ.") return
(danh_sach_ten, danh_sach_nhom, danh_sach_ngay_nhap,
danh_sach_don_vi, danh_sach_so_luong)
# Tạo các danh sách mới đã sắp xếp danh_sach_ten_new =
[danh_sach_ten[i] for i in indexes] danh_sach_nhom_new =
[danh_sach_nhom[i] for i in indexes] danh_sach_ngay_nhap_new =
[danh_sach_ngay_nhap[i] for i in indexes] danh_sach_don_vi_new =
[danh_sach_don_vi[i] for i in indexes] danh_sach_so_luong_new =
[danh_sach_so_luong[i] for i in indexes]
print("Đã sắp xếp danh sách mặt hàng.")
hien_thi_danh_sach(danh_sach_ten_new, danh_sach_nhom_new, danh_sach_ngay_nhap_new,
danh_sach_don_vi_new, danh_sach_so_luong_new)
return (danh_sach_ten_new, danh_sach_nhom_new, danh_sach_ngay_nhap_new,
danh_sach_don_vi_new, danh_sach_so_luong_new)
# Hàm thống kê mặt hàng lOMoAR cPSD| 45315597
def thong_ke_mat_hang(danh_sach_ten, danh_sach_nhom,
danh_sach_ngay_nhap, danh_sach_don_vi, danh_sach_so_luong): if not danh_sach_ten:
print("Danh sách mặt hàng trống.")
return print("\n===== THỐNG KÊ MẶT HÀNG =====") # Thống kê theo nhóm nhom_dict = {} for nhom in danh_sach_nhom: if nhom in nhom_dict: nhom_dict[nhom] += 1 else: nhom_dict[nhom] = 1
print("Thống kê theo nhóm mặt hàng:")
for nhom, count in nhom_dict.items():
print(f"{nhom}: {count} mặt hàng")
# Thống kê tổng số lượng
tong_so_luong = sum(danh_sach_so_luong)
print(f"\nTổng số lượng: {tong_so_luong}")
# Thống kê mặt hàng có số lượng nhiều nhất if danh_sach_so_luong:
max_so_luong = max(danh_sach_so_luong)
vi_tri_max = danh_sach_so_luong.index(max_so_luong)
print(f"\nMặt hàng có số lượng nhiều nhất:
{danh_sach_ten[vi_tri_max]} ({max_so_luong})")
# Hàm cập nhật thông tin mặt hàng def cap_nhat_mat_hang(danh_sach_ten,
danh_sach_nhom, danh_sach_ngay_nhap, danh_sach_don_vi,
danh_sach_so_luong): if not danh_sach_ten:
print("Danh sách mặt hàng trống.") lOMoAR cPSD| 45315597
return (danh_sach_ten, danh_sach_nhom,
danh_sach_ngay_nhap, danh_sach_don_vi, danh_sach_so_luong)
ten_can_cap_nhat = input("\nNhập tên mặt hàng cần cập nhật: ")
# Tìm các vị trí của mặt hàng có tên cần cập nhật
indexes = [] for i in range(len(danh_sach_ten)): if
danh_sach_ten[i].lower() == ten_can_cap_nhat.lower(): indexes.append(i) if not indexes:
print(f"Không tìm thấy mặt hàng có tên '{ten_can_cap_nhat}'.")
return (danh_sach_ten, danh_sach_nhom, danh_sach_ngay_nhap,
danh_sach_don_vi, danh_sach_so_luong) if len(indexes) > 1:
print(f"Tìm thấy {len(indexes)} mặt hàng có tên
'{ten_can_cap_nhat}'. Vui lòng chọn:") for idx, i
in enumerate(indexes): print(f"{idx+1}.
{danh_sach_ten[i]} (Nhóm: {danh_sach_nhom[i]}, Ngày nhập: {danh_sach_ngay_nhap[i]})") try:
choice = int(input("Chọn mặt hàng cần cập nhật: "))
if 1 <= choice <= len(indexes):
vitri_cap_nhat = indexes[choice-1] else:
print("Lựa chọn không hợp lệ.")
return (danh_sach_ten, danh_sach_nhom,
danh_sach_ngay_nhap, danh_sach_don_vi, danh_sach_so_luong) except:
print("Lựa chọn không hợp lệ.") return
(danh_sach_ten, danh_sach_nhom, danh_sach_ngay_nhap, danh_sach_don_vi, danh_sach_so_luong) else: lOMoAR cPSD| 45315597 vitri_cap_nhat = indexes[0]
print("\n===== CẬP NHẬT THÔNG TIN MẶT HÀNG =====")
print("Để trống nếu không muốn thay đổi giá trị hiện tại")
# Hiển thị thông tin hiện tại print("\nThông tin hiện
tại:") print(f"Tên: {danh_sach_ten[vitri_cap_nhat]}")
print(f"Nhóm: {danh_sach_nhom[vitri_cap_nhat]}")
print(f"Ngày nhập: {danh_sach_ngay_nhap[vitri_cap_nhat]}")
print(f"Đơn vị: {danh_sach_don_vi[vitri_cap_nhat]}")
print(f"Số lượng: {danh_sach_so_luong[vitri_cap_nhat]}")
# Nhập thông tin mới ten_moi = input("\nTên
mới (tối đa 25 ký tự): ") if ten_moi and len(ten_moi) <= 25:
danh_sach_ten[vitri_cap_nhat] = ten_moi
nhom_moi = input("Nhóm mới: ") if
nhom_moi: danh_sach_nhom[vitri_cap_nhat] = nhom_moi
ngay_moi_str = input("Ngày nhập mới (YYYY-MM-DD): ") if ngay_moi_str: try:
year, month, day = map(int, ngay_moi_str.split('-'))
ngay_moi = datetime.date(year, month, day)
danh_sach_ngay_nhap[vitri_cap_nhat] = ngay_moi except:
print("Định dạng ngày không hợp lệ. Giữ nguyên giá trị cũ.")
don_vi_moi = input("Đơn vị mới: ") if
don_vi_moi: danh_sach_don_vi[vitri_cap_nhat]
= don_vi_moi so_luong_moi_str = input("Số lượng mới: ") lOMoAR cPSD| 45315597 if so_luong_moi_str: try:
so_luong_moi = int(so_luong_moi_str) if so_luong_moi >= 0:
danh_sach_so_luong[vitri_cap_nhat] = so_luong_moi else:
print("Số lượng không được âm. Giữ nguyên giá trị
cũ.") except: print("Số lượng phải là số nguyên.
Giữ nguyên giá trị cũ.") print("\nĐã cập nhật thông tin mặt hàng thành công!")
return (danh_sach_ten, danh_sach_nhom, danh_sach_ngay_nhap,
danh_sach_don_vi, danh_sach_so_luong)
# Hàm tìm kiếm nâng cao def tim_kiem_nang_cao(danh_sach_ten,
danh_sach_nhom, danh_sach_ngay_nhap, danh_sach_don_vi,
danh_sach_so_luong): if not danh_sach_ten:
print("Danh sách mặt hàng trống.") return
print("\n===== TÌM KIẾM NÂNG CAO =====")
print("1. Tìm kiếm kết hợp nhiều điều kiện")
print("2. Tìm kiếm theo khoảng số lượng") print("3.
Tìm kiếm theo khoảng thời gian") print("4. Tìm kiếm
theo từ khóa trong tên hoặc nhóm") option =
input("Chọn cách tìm kiếm: ") ket_qua = [] if option == '1':
print("\nNhập các điều kiện tìm kiếm (để trống nếu không
sử dụng):") ten_can_tim = input("Tên mặt hàng chứa: ").lower()