Skip to content

Nhóm 4_ Mã Nguồn #325

@thanhtuyentv0101-blip

Description

@thanhtuyentv0101-blip

class Product: # Khai báo lớp Product — kiểu dữ liệu tùy chỉnh để lưu thông tin sản phẩm.
def init(self, name, price, stock): # là hàm khởi tạo (constructor) chạy khi tạo một đối tượng Product.
self.name = name # Các câu lệnh self.name = name, self.price = price, self.stock = stock có vai trò khởi tạo và lưu trữ thông tin của từng sản phẩm.
self.price = price
self.stock = stock

def __str__(self):           # __str__ định nghĩa cách chuyển object thành chuỗi khi dùng print(product) hoặc khi ép kiểu chuỗi.

                             # Trả về chuỗi mô tả sản phẩm: tên - giá - tồn kho.
 return f"{self.name} - Giá: {self.price} VND, Tồn kho: {self.stock}"

class VendingMachine: # là lớp dùng để mô tả máy bán hàng tự động bao gồm có (sản phẩm, giá tiền)
def init(self):
# Khởi tạo các sản phẩm
self.products = [
Product("Mì Gói Siu Cay", 19000, 14),
Product("Coca Cola", 15000, 10),
Product("Snack", 12000, 12), # dây là 5 tham số về sản phẩm đã tạo
Product("Nước suối", 5000, 20),
Product("Sữa MILO", 12000, 15),
]
self.balance = 500000 # Khởi tạo số tiền ban đầu

def show_menu(self):                   # là lớp dùng để in ra danh sách sản phẩm và số tiền còn lại. 
    print("\nMenu sản phẩm:")                        # index: vị trí của phần tử trong danh sách (bắt đầu từ 0)
    for index, product in enumerate(self.products):  #Hàm enumerate() dùng để đánh số thứ tự cho từng phần tử trong danh sách.
        print(f"{index + 1}. {product}") 
    print(f"số tiền còn lại: {self.balance} VND") 



def buy_product(self, choice): 
             #  Là số người dùng nhập để chọn sản phẩm.(có thể lớn hơn 1 và có thể nhỏ hơn 1 or bằng số lượng sản phẩm) 
    if 1 <= choice <= len(self.products): # được dùng để kiểm tra lựa chọn của người dùng có nằm trong phạm vi các sản phẩm hiện có hay không
        product = self.products[choice - 1] 

        if product.stock > 0:             # kiểm tra sản phẩm còn hàng 

            if self.balance >= product.price: 

                # Giao dịch thành công 

                self.balance -= product.price # trừ tiền. 

                product.stock -= 1    # giảm tồn kho một đơn vị. 

                print(f"\nMua {product.name} thành công!") 

                print(f"Tiền còn lại: {self.balance} VND") 

                print(f"Tồn kho {product.name} còn lại: {product.stock}") 

            else: 

                print("\nLỗi: Bạn không đủ tiền để mua sản phẩm này!") 

        else: 

            print("\nLỗi: Sản phẩm đã hết hàng!") 

    else: 

        print("\nLỗi: Lựa chọn không hợp lệ!") 



def run(self): # tạo vòng lặp vô hạn 

    while True: # để chương trình liên tục tương tác với người dùng cho đến khi người dùng chọn thoát. 

        self.show_menu() 

        try: 

            choice = int(input("\nChọn sản phẩm để mua (hoặc nhập 0 để thoát): ")) 

            if choice == 0:  # nếu người dùng nhập 0 thì thoát vòng lặp và kết thúc chương trình 

                print("\nCảm ơn bạn đã sử dụng máy bán hàng!") 

                break 

            else: 

                self.buy_product(choice) 

        except ValueError: 

            print("\nLỗi: Vui lòng nhập một số hợp lệ!") 

if name == "main":

vending_machine = VendingMachine() 
vending_machine.run() 

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions