Vyřešené úkoly budou zkontrolovány na semináři.
Naprogramuj jednoduchý systém skladu se skladovými položkami a operacemi příjmu/výdeje.
enum StockOperationType: inbound (příjem), outbound (výdej).struct StockItem: sku: String (unikátní kód, např. „A123“), name: String, quantity: Int.struct StockOperation: type: StockOperationType, sku: String, amount: Int, date: Date.class Warehouse s vlastnostmi var items: [StockItem], var history: [StockOperation] a metodami:
func addNewItem(_ item: StockItem) (nesmí vložit duplicitní sku)func apply(_ operation: StockOperation) -> Bool (vrací true, pokud proběhla; false, pokud nešla provést)apply: amount musí být > 0. U inbound — existuje-li položka, zvýší se quantity, jinak se vytvoří nová s quantity = amount. U outbound — položka musí existovat a nesmí jít pod nulu (jinak se operace neprovede).func item(with sku: String) -> StockItem?func totalQuantity() -> Intfunc lowStockItems(threshold: Int) -> [StockItem] (např. <= 3)Přidej ke StockItem computed property isLowStock: Bool (např. quantity <= 3) a využij ji v lowStockItems.
func mostMovedItem() -> StockItem? (podle součtu pohybů v historii)func printReport() (hezký výpis do konzole)Poznámka: Nejsou povoleny funkce map, filter, reduce. Použij for-in a podmínky.
Naprogramuj zjednodušenou evidenci knih a výpůjček se stavem a penalizací za pozdní vrácení.
struct Book: isbn: String, title: String.struct Member: id: UUID, name: String.struct Loan: isbn: String, memberId: UUID, dueDate: Date, returnDate: Date? — přidej computed property isOverdue: Bool.class Library s var books: [Book] a var loans: [Loan] a metodami:
func isAvailable(isbn: String) -> Bool (kniha je dostupná, pokud nemá aktivní nevrácenou výpůjčku)func borrow(isbn: String, by member: UUID) -> Bool (selže, není-li kniha dostupná)func returnBook(isbn: String) -> Bool (nastaví returnDate na aktivní výpůjčce)func penalty(for loan: Loan) -> Double, která spočítá penále jako počet dní po termínu krát pevná sazba (např. 5 Kč/den).func overdueLoans() -> [Loan] — přehled aktuálně po termínu.Poznámka: Nejsou povoleny funkce map, filter, reduce. Použij for-in a podmínky.