Stok Kontrolü
Coddy'nin GO Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 46 / 68.
Görev
KolayEnvanter yönetim sisteminiz için ürün miktarlarını güvenli bir şekilde alan ve mevcut olmayan ürün durumlarını yöneten bir stok kontrolü işlevi uygulayın. Bu meydan okuma, önceki dersteki envanter temelini geliştirir ve stok sorguları için hata işlemeyi ekler.
İki girdi alacaksınız:
"product1:price1:quantity1,product2:price2:quantity2,product3:price3:quantity3"biçiminde mevcut envanter verilerini içeren bir dize (ör."Laptop:999.99:5,Mouse:25.50:15,Keyboard:75.00:8")"product1,product2,product3"biçiminde stok kontrol isteklerini içeren bir dize (ör."Mouse,Tablet,Keyboard")
Göreviniz:
- Önceki dersteki aynı
Productyapısını,Price(float64) veQuantity(int) alanlarıyla kullanın - Tek tek ürün girdilerini elde etmek için ilk girdiyi virgüllere göre bölerek ayrıştırın
- Ürün adını, fiyatı ve miktarı elde etmek için her ürün girdisini iki nokta üst üste karakterlerine göre bölün
- Fiyat dizesini float64 türüne, miktar dizesini int türüne dönüştürün
- Ayrıştırılan ürün verileriyle
inventoryeşlemesini oluşturun ve doldurun - Envanter eşlemesini ve ürün adını parametre olarak alan ve (int, error) döndüren
checkStockadlı bir işlev oluşturun:- Ürün envanterde mevcutsa miktarını ve nil değerini döndürün
- Ürün mevcut değilse 0 değerini ve
"product not found: [product_name]"mesajını içeren bir hata döndürün
- Kontrol edilecek ürünler listesini elde etmek için ikinci girdiyi virgüllere göre bölerek ayrıştırın
- Stok kontrolü başlığını görüntüleyin:
"Stock Check Results:" - Kontrol listesindeki her ürün için
checkStockişlevini çağırın ve sonuçları görüntüleyin:- Hata yoksa:
"[product_name]: [quantity] units in stock" - Hata varsa:
"[product_name]: Error - [error_message]"
- Hata yoksa:
- Özet istatistiklerini sayın ve görüntüleyin:
"Check Summary:""Products checked: [total_number_of_products_checked]""Products found: [number_of_products_that_exist]""Products not found: [number_of_products_that_dont_exist]"
- Bulunan ürünlerin toplam stokunu görüntüleyin:
"Total stock for found products: [sum_of_quantities_for_existing_products] units"
- Eksik ürünleri listeleyin:
- Eksik ürünler varsa:
"Missing products: [comma_separated_list_of_missing_products]" - Eksik ürün yoksa:
"All requested products are available"
- Eksik ürünler varsa:
Girdi dizelerini bölmek için strings paketini, dizeleri sayılara dönüştürmek için strconv paketini, hata mesajları oluşturmak için errors paketini ve biçimlendirilmiş çıktı için fmt paketini kullanın. Bu meydan okuma, envanter yönetim sistemlerinde temel bir yaklaşım olan, uygun hata işleme ile güvenli veri almanın nasıl uygulanacağını gösterir.
Kendin dene
package main
import (
"bufio"
"fmt"
"os"
"sort"
"strconv"
"strings"
)
// Define the Product struct
type Product struct {
Price float64
Quantity int
}
func main() {
// Read input using bufio.Scanner to handle spaces properly
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
storeInfo := scanner.Text()
scanner.Scan()
productData := scanner.Text()
// 1. Parse store information (split by comma)
storeInfoParts := strings.Split(storeInfo, ",")
storeName := ""
location := ""
if len(storeInfoParts) >= 2 {
storeName = storeInfoParts[0]
location = storeInfoParts[1]
}
// 2. Parse product data (split by comma, then by colon for each product)
productEntries := strings.Split(productData, ",")
// 3. Create inventory map
inventory := make(map[string]Product)
// 4. Convert strings to appropriate types and populate inventory
for _, entry := range productEntries {
parts := strings.Split(entry, ":")
if len(parts) >= 3 {
productName := parts[0]
price, _ := strconv.ParseFloat(parts[1], 64)
quantity, _ := strconv.Atoi(parts[2])
inventory[productName] = Product{
Price: price,
Quantity: quantity,
}
}
}
// 5. Display store information
fmt.Printf("=== %s Inventory System ===\n", storeName)
fmt.Printf("Location: %s\n", location)
fmt.Printf("Inventory initialized with %d products\n", len(inventory))
// 6. Display current inventory (sorted alphabetically)
fmt.Println("Current Inventory:")
var productNames []string
for name := range inventory {
productNames = append(productNames, name)
}
sort.Strings(productNames)
for _, name := range productNames {
product := inventory[name]
fmt.Printf("- %s: $%.2f (Stock: %d)\n", name, product.Price, product.Quantity)
}
// 7. Calculate and display inventory statistics
totalProducts := len(inventory)
totalItems := 0
totalValue := 0.0
for _, product := range inventory {
totalItems += product.Quantity
totalValue += product.Price * float64(product.Quantity)
}
fmt.Println("Inventory Statistics:")
fmt.Printf("Total Products: %d\n", totalProducts)
fmt.Printf("Total Items in Stock: %d\n", totalItems)
fmt.Printf("Total Inventory Value: $%.2f\n", totalValue)
// 8. Display system status
fmt.Println("System Status: Ready")
fmt.Println("Inventory management system initialized successfully")
}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ı8Proje: Basit Envanter
Projeye Genel BakışStok Kontrolü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ışlarKendi başına pratik yap: Online Go derleyicisi