Menambahkan Barang Baru
Termasuk bagian Logika & Alur dalam perjalanan GO di Coddy. Pelajaran 47 dari 68.
Tantangan
MudahPerluas sistem pengelolaan persediaanmu dengan menerapkan fungsi untuk menambahkan produk baru dengan aman. Tantangan ini melanjutkan sistem pemeriksaan stok sebelumnya dan menambahkan kemampuan untuk memperluas persediaanmu sekaligus mencegah entri duplikat melalui penanganan error yang tepat.
Kamu akan menerima dua input:
- Sebuah string yang berisi data persediaan yang ada dalam format
"product1:price1:quantity1,product2:price2:quantity2,product3:price3:quantity3"(misalnya,"Laptop:999.99:5,Mouse:25.50:15,Keyboard:75.00:8") - Sebuah string yang berisi produk baru untuk ditambahkan dalam format
"product1:price1:quantity1,product2:price2:quantity2,product3:price3:quantity3"(misalnya,"Monitor:299.99:10,Mouse:19.99:20,Webcam:89.99:12")
Tugasmu adalah:
- Gunakan struct
Productyang sama dari pelajaran sebelumnya dengan fieldPrice(float64) danQuantity(int) - Parse input pertama dengan memisahkannya berdasarkan koma untuk mendapatkan setiap entri produk yang sudah ada
- Untuk setiap entri produk yang sudah ada, pisahkan berdasarkan titik dua untuk mendapatkan nama produk, harga, dan kuantitas
- Konversi string harga menjadi float64 dan string kuantitas menjadi int
- Buat dan isi map
inventorydengan data produk yang sudah ada - Buat fungsi bernama
addNewItemyang menerima map inventory, nama produk, harga, dan kuantitas sebagai parameter, lalu mengembalikan error:- Jika produk sudah ada di inventory, kembalikan error dengan pesan
"product already exists: [product_name]" - Jika produk belum ada, tambahkan produk itu ke inventory dan kembalikan nil
- Jika produk sudah ada di inventory, kembalikan error dengan pesan
- Parse input kedua dengan memisahkannya berdasarkan koma untuk mendapatkan list produk baru yang akan ditambahkan
- Untuk setiap entri produk baru, pisahkan berdasarkan titik dua untuk mendapatkan nama produk, harga, dan kuantitas
- Konversi string harga menjadi float64 dan string kuantitas menjadi int
- Tampilkan header proses penambahan:
"Adding New Items:" - Untuk setiap produk baru, panggil fungsi
addNewItemdan tampilkan hasilnya:- Jika tidak ada error:
"[product_name]: Successfully added - $[price] (Stock: [quantity])" - Jika terjadi error:
"[product_name]: Failed to add - [error_message]"
- Jika tidak ada error:
- Hitung dan tampilkan statistik penambahan:
"Addition Summary:""Items processed: [total_number_of_items_processed]""Items added: [number_of_items_successfully_added]""Items rejected: [number_of_items_that_failed_to_add]"
- Tampilkan persediaan yang sudah diperbarui dalam urutan alfabet berdasarkan nama produk:
"Updated Inventory:"- Untuk setiap produk:
"- [product_name]: $[price] (Stock: [quantity])"
- Hitung dan tampilkan statistik akhir persediaan:
"Final Inventory Statistics:""Total Products: [total_number_of_products_in_inventory]""Total Items in Stock: [sum_of_all_quantities]""Total Inventory Value: $[sum_of_price_times_quantity_for_all_products]"
- Cantumkan produk yang ditolak:
- Jika ada produk yang ditolak:
"Rejected products: [comma_separated_list_of_rejected_products]" - Jika tidak ada produk yang ditolak:
"All new products were added successfully"
- Jika ada produk yang ditolak:
Gunakan package strings untuk memisahkan string input, package strconv untuk mengonversi string menjadi angka, package errors untuk membuat pesan error, package fmt untuk output berformat, dan package sort untuk mengurutkan nama produk berdasarkan abjad. Format semua harga hingga 2 angka desimal dan total nilai persediaan hingga 2 angka desimal. Tantangan ini menunjukkan cara memperluas kumpulan data dengan aman sekaligus mencegah entri duplikat melalui penanganan error dan validasi yang tepat.
Coba sendiri
package main
import (
"errors"
"fmt"
"strconv"
"strings"
)
type Product struct {
Price float64
Quantity int
}
func checkStock(inventory map[string]Product, productName string) (int, error) {
product, exists := inventory[productName]
if !exists {
return 0, errors.New("product not found: " + productName)
}
return product.Quantity, nil
}
func main() {
var inventoryData string
var checkRequests string
fmt.Scanln(&inventoryData)
fmt.Scanln(&checkRequests)
inventory := make(map[string]Product)
// Parse inventory data
productEntries := strings.Split(inventoryData, ",")
for _, entry := range productEntries {
parts := strings.Split(entry, ":")
name := parts[0]
price, _ := strconv.ParseFloat(parts[1], 64)
quantity, _ := strconv.Atoi(parts[2])
inventory[name] = Product{Price: price, Quantity: quantity}
}
// Parse check requests
productsToCheck := strings.Split(checkRequests, ",")
fmt.Println("Stock Check Results:")
var productsFound int
var productsNotFound int
var totalStock int
var missingProducts []string
for _, productName := range productsToCheck {
quantity, err := checkStock(inventory, productName)
if err != nil {
fmt.Printf("%s: Error - %s\n", productName, err.Error())
productsNotFound++
missingProducts = append(missingProducts, productName)
} else {
fmt.Printf("%s: %d units in stock\n", productName, quantity)
productsFound++
totalStock += quantity
}
}
fmt.Println("Check Summary:")
fmt.Printf("Products checked: %d\n", len(productsToCheck))
fmt.Printf("Products found: %d\n", productsFound)
fmt.Printf("Products not found: %d\n", productsNotFound)
fmt.Printf("Total stock for found products: %d units\n", totalStock)
if len(missingProducts) > 0 {
fmt.Printf("Missing products: %s\n", strings.Join(missingProducts, ","))
} else {
fmt.Println("All requested products are available")
}
}Semua pelajaran di Logika & Alur
1Alur Kontrol Lanjutan
switch dengan `fallthrough`Keluar dari Perulangan BersarangMelanjutkan Perulangan TertentuPernyataan `goto`Rangkuman, Kontrol Perulangan Lanjutan4Proyek: Daftar Tugas Sederhana
Menyiapkan ProyekMenambahkan Tugas2Struct dan Method
Mendefinisikan Method pada StructPenerima NilaiPenerima PointerMemilih PenerimaMethod vs FungsiRekap: Perilaku Struct5Map secara Mendalam
Map Berisi StructPointer sebagai Nilai MapMenguji Map NilMembandingkan MapRingkasan: Penghitung Frekuensi Kata8Proyek: Inventaris Sederhana
Gambaran Umum ProyekMemeriksa Stok3Interface (Dasar)
Apa Itu Interface?Mendefinisikan InterfaceMengimplementasikan InterfaceMenggunakan Tipe InterfaceInterface KosongType AssertionType SwitchRingkasan: Bentuk dan PerilakuLatihan sendiri: Compiler Go online