Menu
CoddyTech

הפקת דוח

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-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 אונליין