Bạn đã chán ngấy với việc thiết lập và quản lý những cơ sở dữ liệu cồng kềnh cho các dự án nhỏ của mình? Nếu bạn đang phát triển một ứng dụng quy mô nhỏ và cần một giải pháp nhẹ nhàng, JSON (JavaScript Object Notation) có thể là người bạn đồng hành tốt nhất! Trong hướng dẫn này, chúng ta sẽ cùng nhau xây dựng một hệ thống kế toán khách sạn đơn giản sử dụng Python và JSON để lưu trữ và quản lý dữ liệu.
JSON là gì?
JSON, hay JavaScript Object Notation, là một định dạng trao đổi dữ liệu nhẹ, dễ đọc và viết cho con người, đồng thời dễ phân tích và tạo ra cho máy móc. Nó thường được sử dụng để truyền dữ liệu giữa máy chủ và ứng dụng web, và rất phù hợp cho các cơ sở dữ liệu nhỏ!
1. Định dạng JSON chuẩn
Tệp JSON lưu trữ dữ liệu theo các cặp khóa-giá trị, giống như một từ điển Python. Dưới đây là một cấu trúc cơ bản:
{ "key": "value", "key2": { "nested_key": "nested_value" }, "list_key": [1, 2, 3]
}
Trong hệ thống kế toán khách sạn của chúng ta, chúng ta sẽ sử dụng JSON để lưu trữ thông tin như thông tin đặt phòng, chi tiết khách hàng và phí phòng.
2. Module json của Python
Module json tích hợp sẵn của Python giúp việc đọc và ghi dữ liệu JSON trở nên dễ dàng. Hãy cùng xem một số phương thức quan trọng trong module này:
import json with open('data.json', 'r') as file: data = json.load(file)
json.load()
Phương thức json.load() đọc dữ liệu JSON từ một tệp và chuyển đổi nó thành một đối tượng Python (thường là một từ điển).
import json with open('data.json', 'r') as file: data = json.load(file)
json.loads()
Phương thức json.loads() đọc dữ liệu JSON từ một chuỗi và chuyển đổi nó thành một đối tượng Python.
json_string = '{"name": "John", "age": 30}'
data = json.loads(json_string)
json.dump()
Phương thức json.dump() ghi một đối tượng Python vào một tệp JSON.
data = {"name": "John", "age": 30}
with open('data.json', 'w') as file: json.dump(data, file)
json.dumps()
Phương thức json.dumps() chuyển đổi một đối tượng Python thành một chuỗi JSON.
data = {"name": "John", "age": 30}
json_string = json.dumps(data)
Xây dựng hệ thống
Giờ chúng ta hãy cùng xây dựng một hệ thống kế toán khách sạn dựa trên những gì đã biết nhé.
Bước 1: Thiết lập dự án
Đầu tiên, hãy tạo một cấu trúc cơ bản cho Hệ thống Kế toán Khách sạn của chúng ta. Chúng ta cần:
- Một tệp JSON để lưu trữ dữ liệu khách sạn (đặt phòng, thông tin khách hàng, v.v.).
- Các hàm Python để quản lý dữ liệu này.
Tạo một tệp có tên hotel_data.json và khởi tạo nó với một từ điển rỗng:
{}
Bước 2: Xây dựng các hàm quản lý dữ liệu khách sạn
Chúng ta sẽ định nghĩa một số hàm cơ bản để xử lý việc đặt phòng, thanh toán và hiển thị thông tin khách hàng.
1. Thêm đặt phòng
Hãy tạo một hàm có tên add_booking() nhận thông tin chi tiết của khách hàng và thông tin đặt phòng, sau đó lưu nó vào tệp JSON.
import json def add_booking(customer_name, room_number, nights, rate_per_night): try: with open('hotel_data.json', 'r') as file: data = json.load(file) except FileNotFoundError: data = {} # Calculate total charges total_charge = nights * rate_per_night # Create a booking dictionary booking = { "customer_name": customer_name, "room_number": room_number, "nights": nights, "rate_per_night": rate_per_night, "total_charge": total_charge } # Store booking data data[customer_name] = booking # Save data back to JSON file with open('hotel_data.json', 'w') as file: json.dump(data, file, indent=4) print(f"Booking added for {customer_name} in room {room_number}.") # Example usage
add_booking(customer_name="John Doe",room_number= 101,nights= 3,rate_per_night= 100)
2. Hiển thị đặt phòng
Tiếp theo, hãy tạo một hàm có tên view_bookings() để hiển thị tất cả các đặt phòng.
def view_bookings(): try: with open('hotel_data.json', 'r') as file: data = json.load(file) except FileNotFoundError: data = {} if not data: print("No bookings found.") return for customer, details in data.items(): print(f"Customer: {customer}") for key, value in details.items(): print(f" {key}: {value}") print() # Newline for readability # Example usage
view_bookings()
3. Thanh toán cho khách hàng
Bây giờ, hãy tạo một hàm checkout() để xóa đặt phòng của khách hàng khỏi tệp JSON.
def checkout(customer_name): try: with open('hotel_data.json', 'r') as file: data = json.load(file) except FileNotFoundError: print("No bookings found.") return if customer_name in data: del data[customer_name] with open('hotel_data.json', 'w') as file: json.dump(data, file, indent=4) print(f"Checked out {customer_name}.") else: print(f"No booking found for {customer_name}.") # Example usage
checkout("John Doe")
4. Tính toán tổng doanh thu
Cuối cùng, hãy tạo một hàm calculate_revenue() để tính tổng chi phí từ tất cả các đặt phòng.
def calculate_revenue(): try: with open('hotel_data.json', 'r') as file: data = json.load(file) except FileNotFoundError: data = {} total_revenue = sum(booking["total_charge"] for booking in data.values()) print(f"Total Revenue: ${total_revenue}") # Example usage
calculate_revenue()
Bọc tất cả các hàm trong một vòng lặp while sẽ làm cho Hệ thống Kế toán Khách sạn của chúng ta trở nên tương tác, cho phép người dùng chọn các tùy chọn trong một định dạng giống menu và thực hiện nhiều thao tác lặp đi lặp lại cho đến khi họ chọn thoát. Hãy tiếp tục và triển khai điều này.
Bước 3: Thêm vòng lặp menu chính
Ở đây, chúng ta sẽ tạo một hàm có tên main_menu() sẽ:
- Hiển thị menu với các tùy chọn khả dụng.
- Nhận đầu vào của người dùng để xác định hành động nào cần thực hiện.
- Tiếp tục lặp cho đến khi người dùng chọn thoát.
def main_menu(): while True: print("\n--- Hotel Accounting System ---") print("1. Add Booking") print("2. View Bookings") print("3. Checkout Customer") print("4. Calculate Revenue") print("5. Exit") # Get user choice choice = input("Choose an option (1-5): ") if choice == '1': customer_name = input("Enter customer name: ") room_number = int(input("Enter room number: ")) nights = int(input("Enter number of nights: ")) rate_per_night = float(input("Enter rate per night: ")) add_booking(customer_name, room_number, nights, rate_per_night) elif choice == '2': view_bookings() elif choice == '3': customer_name = input("Enter customer name for checkout: ") checkout(customer_name) elif choice == '4': calculate_revenue() elif choice == '5': print("Exiting the system. Have a great day!") break else: print("Invalid choice. Please enter a number from 1 to 5.")
Giải thích về hàm main_menu()
-
Hiển thị các tùy chọn menu: Hàm bắt đầu bằng cách in một menu với các tùy chọn cho người dùng. Mỗi tùy chọn tương ứng với một chức năng cụ thể trong hệ thống: thêm đặt phòng, xem đặt phòng, thanh toán cho khách hàng, tính toán doanh thu và thoát khỏi chương trình.
-
Nhận đầu vào của người dùng: Hàm input() được sử dụng để thu thập lựa chọn của người dùng. Sau đó, chúng ta sử dụng một khối if-elif để xác định hành động nào cần thực hiện dựa trên đầu vào của người dùng.
-
Thực thi các hàm dựa trên lựa chọn của người dùng:
- Nếu 1 được chọn, nó sẽ nhắc nhập chi tiết đặt phòng và gọi hàm add_booking().
- Nếu 2 được chọn, nó sẽ gọi view_bookings() để hiển thị tất cả các đặt phòng hiện tại.
- Nếu 3 được chọn, nó sẽ yêu cầu tên của khách hàng và gọi checkout() để xóa đặt phòng của họ.
- Nếu 4 được chọn, nó sẽ gọi calculate_revenue() để hiển thị tổng doanh thu từ tất cả các đặt phòng.
- Nếu 5 được chọn, vòng lặp bị phá vỡ bằng câu lệnh break và thông báo tạm biệt được hiển thị.
- Xử lý đầu vào không hợp lệ: Nếu người dùng nhập bất kỳ thứ gì khác ngoài 1-5, nó sẽ hiển thị thông báo lỗi và vòng lặp tiếp tục, cho phép người dùng chọn một tùy chọn hợp lệ.
Chạy chương trình
Bây giờ, bạn có thể đơn giản gọi hàm main_menu() để bắt đầu Hệ thống Kế toán Khách sạn tương tác:
main_menu()
Khi bạn chạy chương trình, bạn sẽ thấy một menu. Sau đó, bạn có thể nhập số tương ứng với hành động mà bạn muốn thực hiện và hệ thống sẽ phản hồi tương ứng. Bạn có thể tiếp tục thực hiện các hành động cho đến khi bạn chọn tùy chọn 5 để thoát.
Giờ đây, bạn đã có một hệ thống kế toán khách sạn hoàn toàn tương tác bằng cách sử dụng JSON làm cơ sở dữ liệu nhỏ. Vòng lặp này cung cấp một cách đơn giản nhưng hiệu quả để mô phỏng một hệ thống thực, giúp bạn dễ dàng mở rộng thêm các tính năng trong tương lai. Chúc các bạn lập trình vui vẻ!