Menu
CoddyTech
flag Ar iconالعربيةdown icon

إنشاء تقرير

جزء من قسم المنطق وتدفّق التنفيذ في رحلة GDScript على Coddy. الدرس 75 من 78.

challenge icon

التحدي

صعب

أخيرًا، أضف الأمر sell، الذي يبيع عدة عناصر دفعةً واحدة ويعرض الإيرادات. احتفظ بكل ما كتبته في الخطوات السابقة.

سطر مثل sell Apple:30 Banana:20 يبيع 30 تفاحة و20 موزة. كل جزء يأتي بعد sell يتكوّن من اسم عنصر ونقطتين وكمية، ولا يظهر العنصر أكثر من مرة في السطر الواحد.

اكتب الدالة sales_report(inventory, sales) فوق _ready(). sales قاموس يربط كل اسم عنصر بالكمية المبيعة. عالج كل عنصر بالترتيب:

  1. إذا لم يكن العنصر موجودًا في inventory، اطبع Error: Item 'Orange' not found. وانتقل إلى العنصر التالي
  2. إذا كان مخزونه أقل من الكمية، اطبع Error: Insufficient stock for 'Apple'. وانتقل إلى العنصر التالي
  3. وإلا، اطرح الكمية من المخزون وأضف حاصل ضرب الكمية في السعر إلى الإيرادات

تعيد الدالة النص Total revenue: $ متبوعًا بالإيرادات مع منزلتين عشريتين.

في الحلقة، ينشئ فرع sell قاموس sales من الأجزاء التي تأتي بعد الأمر. الجزء الذي لا يتكوّن بالضبط من اسم وعدد صحيح مفصولين بـ : يطبع Error: Invalid sale 'Apple-3'. (مع ذلك الجزء) ويُتجاوز. ثم اطبع ما تعيده sales_report().

بالنسبة إلى الأوامر add Apple 0.5 50 وadd Banana 0.2 60 وsell Apple:30 Banana:20 Orange:10 وshow وexit، يكون الناتج:

Inventory Management System
Item 'Apple' added successfully.
Item 'Banana' added successfully.
Error: Item 'Orange' not found.
Total revenue: $19.00
{ "Apple": { "price": 0.5, "stock": 20 }, "Banana": { "price": 0.2, "stock": 40 } }
Goodbye!

جرّب بنفسك

extends Node

func add_item(inventory: Dictionary, item: String, price: float, stock: int) -> void:
	if inventory.has(item):
		print("Error: Item '%s' already exists." % item)
		return
	inventory[item] = {"price": price, "stock": stock}
	print("Item '%s' added successfully." % item)

func update_stock(inventory: Dictionary, item: String, quantity: int) -> void:
	if not inventory.has(item):
		print("Error: Item '%s' not found." % item)
		return
	var new_stock: int = inventory[item]["stock"] + quantity
	if new_stock < 0:
		print("Error: Insufficient stock for '%s'." % item)
		return
	inventory[item]["stock"] = new_stock
	print("Stock for '%s' updated successfully." % item)

func check_availability(inventory: Dictionary, item: String) -> int:
	if not inventory.has(item):
		return -1
	return inventory[item]["stock"]

func _ready():
	# المخزون: اسم العنصر -> {"price": float, "stock": int}
	var inventory := {}
	print("Inventory Management System")

	while true:
		var line := OS.read_string_from_stdin()
		var parts := line.split(" ")
		var command := parts[0]

		if command == "exit":
			print("Goodbye!")
			break
		elif command == "show":
			print(inventory)
		elif command == "add":
			if parts.size() != 4:
				print("Error: Use add ITEM PRICE STOCK")
			elif not parts[2].is_valid_float() or not parts[3].is_valid_int():
				print("Error: Price and stock must be numeric.")
			else:
				add_item(inventory, parts[1], float(parts[2]), int(parts[3]))
		elif command == "update":
			if parts.size() != 3:
				print("Error: Use update ITEM QUANTITY")
			elif not parts[2].is_valid_int():
				print("Error: Quantity must be an integer.")
			else:
				update_stock(inventory, parts[1], int(parts[2]))
		elif command == "check":
			if parts.size() != 2:
				print("Error: Use check ITEM")
			else:
				var stock := check_availability(inventory, parts[1])
				if stock == -1:
					print("Item not found")
				else:
					print(parts[1], ": ", stock, " in stock")
		else:
			print("Unknown command")

جميع دروس المنطق وتدفّق التنفيذ

تدرّب بنفسك: مترجم GDScript عبر الإنترنت