1
0
Fork 0
Sebastian Steger 2026-04-07 13:43:47 +00:00
commit f04845ea77
1 changed files with 79 additions and 12 deletions

View File

@ -1,40 +1,107 @@
package main package main
import "fmt"
// a new type named Category that can hold integer values
type Category int
// The go equivalent of an enum that enumerates different named Categories
const (
Electronics Category = iota //0
Groceries //1
Clothes //2
)
// implementation of the fmt.Stringer interface. In that way, Categories can be printed using the fmt.Print* functions
func (c Category) String() string {
switch c {
case Electronics:
return "Electronics"
case Groceries:
return "Groceries"
case Clothes:
return "Clothes"
default:
return "Unknown"
}
}
// Struct for product details
type Product struct { type Product struct {
Name string Name string
Price float64 Price float64
Quantity int Quantity int
Category string //TODO: use enum instead Category Category
} }
func addProduct(inventory *[]Product, name string, price float64, quantity int, category string) { // Add a new product to the inventory
//TODO: implement func addProduct(inventory *[]Product, //pointer to the slice of of Products that shall be modified. In that way it can serve as in input/output parameter
name string, price float64, quantity int, category Category) {
// Check if the product already exists in the inventory
for _, product := range *inventory {
if product.Name == name {
fmt.Println("Product already exists.")
return
}
}
// Add the new product
*inventory = append(*inventory, Product{
Name: name,
Price: price,
Quantity: quantity,
Category: category,
})
fmt.Printf("Added product: %s\n", name)
} }
func removeProduct(inventory *[]Product, name string) { // Remove a product from the inventory
//TODO: implement func removeProduct(inventory *[]Product, //pointer to the slice of of Products that shall be modified. In that way it can serve as in input/output parameter
name string) {
for i, product := range *inventory {
if product.Name == name {
*inventory = append((*inventory)[:i], (*inventory)[i+1:]...)
fmt.Printf("Removed product: %s\n", name)
return
}
}
fmt.Println("Product not found.")
} }
func updateQuantity(inventory *[]Product, name string, newQuantity int) { // Update the quantity of a product.
//TODO: implement func updateQuantity(inventory *[]Product, //pointer to the slice of of Products that shall be modified. In that way it can serve as in input/output parameter
name string, newQuantity int) {
for i, product := range *inventory {
if product.Name == name {
(*inventory)[i].Quantity = newQuantity
fmt.Printf("Updated quantity for %s: New Quantity = %d\n", name, newQuantity)
return
}
}
fmt.Println("Product not found.")
} }
// Display the inventory
func displayInventory(inventory []Product) { func displayInventory(inventory []Product) {
//TODO: implement fmt.Println("Inventory:")
for _, product := range inventory { //iterating over a range returns pairs of index and the content of a container (here: inventory). Since we don't care about the index, we use _ as a placeholder.
fmt.Printf("%s - %s (Price: $%.2f, Quantity: %d)\n",
product.Name, product.Category, product.Price, product.Quantity)
}
} }
func main() { func main() {
// Initialize inventory
inventory := []Product{ inventory := []Product{
{Name: "Laptop", Price: 1000, Quantity: 5, Category: "Electronics"}, {Name: "Laptop", Price: 1000, Quantity: 5, Category: Electronics},
{Name: "Apples", Price: 2, Quantity: 50, Category: "Groceries"}, {Name: "Apples", Price: 2, Quantity: 50, Category: Groceries},
{Name: "T-shirt", Price: 10, Quantity: 20, Category: "Clothes"}, {Name: "T-shirt", Price: 10, Quantity: 20, Category: Clothes},
} }
// Display initial inventory // Display initial inventory
displayInventory(inventory) displayInventory(inventory)
// Add a new product // Add a new product
addProduct(&inventory, "Phone", 800, 10, "Electronics") addProduct(&inventory, "Phone", 800, 10, Electronics)
// Display updated inventory // Display updated inventory
displayInventory(inventory) displayInventory(inventory)