Hepsini Bir Araya Getirme
Coddy'nin GO Journey'sinin Mantık ve Akış bölümünün bir parçası — ders 25 / 68.
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:
- Önceki derslerdeki
Price(float64) veQuantity(int) alanlarına sahip aynıProductstruct yapısını kullanın - İlk girdiyi ayrıştırın ve envanter haritasını (map) mevcut ürün verileriyle başlatın
- Sistem başlatma mesajını görüntüleyin:
"=== INVENTORY MANAGEMENT SYSTEM ===""System initialized with [number_of_products] products""Starting interactive session..."
- Gerçekleştirilecek operasyon dizisini almak için ikinci girdiyi ayrıştırın
- Her operasyon için parametreleri almak üzere üçüncü girdiyi ayrıştırın
- 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
- Önceki derslerde olduğu gibi miktar ve hata döndüren
checkStockfonksiyonunu uygulayın - Önceki derslerde olduğu gibi ürün ekleyen ve hata döndüren
addNewItemfonksiyonunu uygulayın - Önceki derslerde olduğu gibi miktarları güncelleyen ve hata döndüren
updateStockfonksiyonunu uygulayın - Önceki derslerde olduğu gibi raporlar oluşturan
generateReportfonksiyonunu uygulayın "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"
"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]"
- Parametreyi
"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]"
- Parametreyi
"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
- Parametreyi
"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"
- Final envanter istatistiklerini görüntüleyin:
- 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
1İleri Seviye Kontrol Akışı
`fallthrough` ile Switchİç İçe Döngülerden ÇıkmaBelirli Bir Döngüye Devam Etme`goto` İfadesiÖzet - İleri Seviye Döngü Kontrolü4Proje: Basit Görev Listesi
Proje KurulumuGörev Ekleme2Structlar ve Metotlar
Structlarda Metot TanımlamaValue Receiver'larPointer Receiver'larReceiver SeçimiMetotlar ve FonksiyonlarÖzet - Struct Davranışı5Derinlemesine Map'ler
Struct Map'leriMap Değeri Olarak Pointer'larNil Map KontrolüMap'leri KarşılaştırmaÖzet - Kelime Frekansı Sayacı3Arayüzler (Temeller)
Arayüz Nedir?Bir Arayüz TanımlamaBir Arayüzü UygulamaArayüz Tiplerini KullanmaBoş ArayüzTip OnaylamalarıTip SeçimiÖzet - Şekiller ve Davranışlar