Menu
Coddy logo textTech

Hepsini Bir Araya Getirme

Coddy'nin GO Journey'sinin Mantık ve Akış bölümünün bir parçası — ders 25 / 68.

challenge icon

Görev

Kolay

Önceki derslerde oluşturduğunuz tüm işlevleri birleştiren kapsamlı bir ana program oluşturarak envanter yönetim sisteminizi tamamlayın. Bu final görevi; envanter başlatma, stok kontrolü, ürün ekleme, stok güncellemeleri ve rapor oluşturma işlemlerini, menü tabanlı navigasyona sahip eksiksiz bir komut satırı arayüzünde bir araya getiriyor.

Üç girdi alacaksınız:

  • "product1:price1:quantity1,product2:price2:quantity2,product3:price3:quantity3" formatında başlangıç envanter verilerini içeren bir dize (örneğin, "Laptop:999.99:5,Mouse:25.50:15,Keyboard:75.00:8")
  • Operasyonların "check", "add", "update", "report" veya "exit" olabileceği "operation1,operation2,operation3" formatında bir menü operasyonları dizisi (örneğin, "check,add,update,report,exit")
  • Her bir parametrenin aynı pozisyondaki operasyona karşılık geldiği "param1|param2|param3" formatında operasyon parametrelerini içeren bir dize (örneğin, "Mouse|Monitor:299.99:10|Laptop:5|full,10")

Göreviniz şunları yapmaktır:

  1. Önceki derslerdeki Price (float64) ve Quantity (int) alanlarına sahip aynı Product struct yapısını kullanın
  2. İlk girdiyi ayrıştırın ve envanter haritasını (map) mevcut ürün verileriyle başlatın
  3. Sistem başlatma mesajını görüntüleyin:
    • "=== INVENTORY MANAGEMENT SYSTEM ==="
    • "System initialized with [number_of_products] products"
    • "Starting interactive session..."
  4. Gerçekleştirilecek operasyon dizisini almak için ikinci girdiyi ayrıştırın
  5. Her operasyon için parametreleri almak üzere üçüncü girdiyi ayrıştırın
  6. Sıradaki her operasyon için operasyon başlığını görüntüleyin ve ilgili eylemi gerçekleştirin:
    • "check" için: "--- STOCK CHECK ---" yazdırın ve belirtilen ürün için stok kontrolü yapın
    • "add" için: "--- ADD ITEM ---" yazdırın ve belirtilen ürünü ekleyin
    • "update" için: "--- UPDATE STOCK ---" yazdırın ve belirtilen ürün için stok güncellemesi yapın
    • "report" için: "--- GENERATE REPORT ---" yazdırın ve belirtilen raporu oluşturun
    • "exit" için: "--- SYSTEM EXIT ---" yazdırın ve çıkış bilgilerini gösterin
  7. Önceki derslerde olduğu gibi miktar ve hata döndüren checkStock fonksiyonunu uygulayın
  8. Önceki derslerde olduğu gibi ürün ekleyen ve hata döndüren addNewItem fonksiyonunu uygulayın
  9. Önceki derslerde olduğu gibi miktarları güncelleyen ve hata döndüren updateStock fonksiyonunu uygulayın
  10. Önceki derslerde olduğu gibi raporlar oluşturan generateReport fonksiyonunu uygulayın
  11. "check" operasyonu için:
    • Parametreyi kontrol edilecek ürün adı olarak kullanın
    • Şunu görüntüleyin: "Checking stock for: [product_name]"
    • Bulunursa: "Stock level: [quantity] units"
    • Bulunamazsa: "Product not found in inventory"
  12. "add" operasyonu için:
    • Parametreyi "product_name:price:quantity" formatında ayrıştırın
    • Şunu görüntüleyin: "Adding new product: [product_name]"
    • Başarılı olursa: "Product added successfully"
    • Başarısız olursa: "Failed to add product: [error_message]"
  13. "update" operasyonu için:
    • Parametreyi "product_name:change" formatında ayrıştırın
    • Şunu görüntüleyin: "Updating stock for: [product_name]"
    • Başarılı olursa ve değişim pozitifse: "Added [change] units. New stock: [new_quantity]"
    • Başarılı olursa ve değişim negatifse: "Removed [absolute_change] units. New stock: [new_quantity]"
    • Başarısız olursa: "Update failed: [error_message]"
  14. "report" operasyonu için:
    • Parametreyi "report_type,threshold" formatında ayrıştırın
    • Şunu görüntüleyin: "Generating [report_type] report with threshold [threshold]"
    • Önceki derslerde olduğu gibi tam raporu oluşturun ve görüntüleyin
  15. "exit" operasyonu için:
    • Final envanter istatistiklerini görüntüleyin:
      • "Final inventory status:"
      • "Total products: [total_products]"
      • "Total items: [total_items]"
      • "Total value: $[total_value]"
    • Şunu görüntüleyin: "Session completed successfully"
    • Şunu görüntüleyin: "Thank you for using the Inventory Management System"
  16. Her operasyondan sonra (exit hariç) şunu görüntüleyin: "Operation completed. Continuing to next operation..."

Girdi dizelerini bölmek için strings paketini, dizeleri sayılara dönüştürmek için strconv paketini, hata yönetimi için errors paketini, formatlı çıktı için fmt paketini ve alfabetik sıralama için sort paketini kullanın. Tüm fiyatları ve değerleri 2 ondalık basamak olacak şekilde formatlayın. Bu görev, birden fazla işlevsel bileşeni uygun hata yönetimi ve durum yönetimi ile uyumlu bir kullanıcı deneyimine entegre eden eksiksiz bir etkileşimli sistemin nasıl oluşturulacağını göstermektedir.

Kendin dene

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

type Task struct {
	Name      string
	Completed bool
}

func removeTask(tasks []Task, index int) []Task {
	return append(tasks[:index], tasks[index+1:]...)
}

func main() {
	// Read input using bufio.Scanner to handle spaces properly
	scanner := bufio.NewScanner(os.Stdin)
	
	scanner.Scan()
	_ = scanner.Text() // Read but don't use the number of tasks
	
	scanner.Scan()
	taskData := scanner.Text()
	
	scanner.Scan()
	indexStr := scanner.Text()
	
	// Parse task data
	taskEntries := strings.Split(taskData, ",")
	var tasks []Task
	
	for _, entry := range taskEntries {
		parts := strings.Split(entry, ":")
		if len(parts) >= 2 {
			name := parts[0]
			status := parts[1] == "true"
			tasks = append(tasks, Task{Name: name, Completed: status})
		}
	}
	
	// Convert index string to integer
	index, _ := strconv.Atoi(indexStr)
	
	// Store the name of the task to be removed
	removedTaskName := tasks[index].Name
	
	// Remove the task
	tasks = removeTask(tasks, index)
	
	// Display remaining tasks
	completedCount := 0
	for _, task := range tasks {
		if task.Completed {
			fmt.Printf("[x] %s\n", task.Name)
			completedCount++
		} else {
			fmt.Printf("[ ] %s\n", task.Name)
		}
	}
	
	// Print confirmation message
	fmt.Printf("Task '%s' removed successfully!\n", removedTaskName)
	
	// Print summary
	totalCount := len(tasks)
	incompleteCount := totalCount - completedCount
	fmt.Printf("Total: %d tasks (%d completed, %d remaining)\n", totalCount, completedCount, incompleteCount)
}

Mantık ve Akış bölümündeki tüm dersler