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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions