Heim  >  Artikel  >  Backend-Entwicklung  >  So implementieren Sie ein Bestellsystem mithilfe der Go-Sprache

So implementieren Sie ein Bestellsystem mithilfe der Go-Sprache

PHPz
PHPzOriginal
2023-04-05 13:48:34981Durchsuche

In diesem Artikel erfahren Sie, wie Sie mithilfe der Go-Sprache ein einfaches und leicht verständliches Bestellsystem implementieren.

1. Bedarfsanalyse

Wir benötigen ein einfaches und leicht verständliches Bestellsystem, das mindestens folgende Funktionen umsetzen muss:

  1. Anzeige und Auswahl von Produkten
  2. Warenkorbfunktion
  3. Generierung und Anzeige von Bestellungen

Da unsere Zeit und Energie begrenzt sind, werden wir nur ein einfaches Mall-System implementieren und nur zwei Produkte zur Auswahl anbieten. Die Informationen zu diesen beiden Produkten lauten wie folgt:

Produktname Produktpreis
Produkt 1 10 Yuan
Produkt 2 20 Yuan

Wir brauchen Um den Befehl zu verwenden, implementieren Sie dieses Einkaufszentrumsystem in der Branche.

2. Code-Implementierung

  1. Produktstruktur erstellen

Wir müssen zunächst eine Struktur zum Speichern von Produktinformationen erstellen:

type product struct {
    name  string
    price int
}

var products = []product{
    {"商品1", 10},
    {"商品2", 20},
}
  1. Produktanzeige

Wir müssen eine Funktion implementieren Produktinformationen anzeigen Das Codebeispiel lautet wie folgt:

func showProducts() {
    fmt.Println("== 商品列表 ==")
    for _, p := range products {
        fmt.Printf("%s %d元\n", p.name, p.price)
    }
    fmt.Println("================")
}
  1. Einkaufswagen-Implementierung

Wir müssen eine Warenkorbstruktur implementieren, um die vom Benutzer ausgewählten Produktinformationen zu speichern. Das Codebeispiel lautet wie folgt:

type cart struct {
    items map[string]int
}

func newCart() *cart {
    return &cart{items: make(map[string]int)}
}

func (c *cart) addItem(name string, qty int) {
    c.items[name] += qty
}

func (c *cart) clear() {
    c.items = make(map[string]int)
}

func (c *cart) total() int {
    total := 0
    for name, qty := range c.items {
        for _, p := range products {
            if p.name == name {
                total += p.price * qty
                break
            }
        }
    }
    return total
}

func (c *cart) show() {
    if len(c.items) == 0 {
        fmt.Println("购物车为空")
        return
    }

    fmt.Println("== 购物车 ==")
    for name, qty := range c.items {
        fmt.Printf("%s × %d\n", name, qty)
    }
    fmt.Printf("总计 %d元\n", c.total())
    fmt.Println("============")
}
  1. Bestellimplementierung

Wir müssen eine Bestellung implementieren. Eine einzelne Funktion besteht darin, eine Bestellung aus den Produktinformationen im Warenkorb zu generieren. Das Codebeispiel lautet wie folgt:

func checkout(c *cart) {
    if len(c.items) == 0 {
        fmt.Println("购物车为空")
        return
    }

    // 生成订单
    order := make(map[string]int)
    for name, qty := range c.items {
        order[name] = qty
    }

    // 清空购物车
    c.clear()

    fmt.Println("== 订单详情 ==")
    for name, qty := range order {
        for _, p := range products {
            if p.name == name {
                fmt.Printf("%s × %d\n", name, qty)
                fmt.Printf("单价 %d元,总价 %d元\n", p.price, p.price*qty)
                break
            }
        }
    }
    fmt.Printf("总计 %d元\n", c.total())
    fmt.Println("============")
}
  1. Befehlszeileninteraktion

Wir müssen implementieren Eine Befehlszeilen-Interaktionsfunktion, mit der der Benutzer das Produkt und die Menge auswählen und die Bestellung abschließen kann. Ein Beispiel lautet wie folgt:

func interactive() {
    scanner := bufio.NewScanner(os.Stdin)
    c := newCart()

    for {
        showProducts()
        c.show()
        fmt.Print("请选择商品(输入商品编号):")
        scanner.Scan()
        id := scanner.Text()
        if id == "q" {
            break
        }

        var p product
        for _, p = range products {
            if p.name == id {
                break
            }
        }
        if p.price == 0 {
            fmt.Printf("商品 %s 不存在\n", id)
            continue
        }

        fmt.Print("请输入数量:")
        scanner.Scan()
        qtyStr := scanner.Text()
        qty, err := strconv.Atoi(qtyStr)
        if err != nil {
            fmt.Println("输入的数量无效")
            continue
        }

        c.addItem(p.name, qty)
    }

    checkout(c)
}

3. Vollständiger Code

Der vollständige Code lautet wie folgt:

package main

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

type product struct {
    name  string
    price int
}

var products = []product{
    {"商品1", 10},
    {"商品2", 20},
}

type cart struct {
    items map[string]int
}

func newCart() *cart {
    return &cart{items: make(map[string]int)}
}

func (c *cart) addItem(name string, qty int) {
    c.items[name] += qty
}

func (c *cart) clear() {
    c.items = make(map[string]int)
}

func (c *cart) total() int {
    total := 0
    for name, qty := range c.items {
        for _, p := range products {
            if p.name == name {
                total += p.price * qty
                break
            }
        }
    }
    return total
}

func (c *cart) show() {
    if len(c.items) == 0 {
        fmt.Println("购物车为空")
        return
    }

    fmt.Println("== 购物车 ==")
    for name, qty := range c.items {
        fmt.Printf("%s × %d\n", name, qty)
    }
    fmt.Printf("总计 %d元\n", c.total())
    fmt.Println("============")
}

func showProducts() {
    fmt.Println("== 商品列表 ==")
    for _, p := range products {
        fmt.Printf("%s %d元\n", p.name, p.price)
    }
    fmt.Println("================")
}

func checkout(c *cart) {
    if len(c.items) == 0 {
        fmt.Println("购物车为空")
        return
    }

    // 生成订单
    order := make(map[string]int)
    for name, qty := range c.items {
        order[name] = qty
    }

    // 清空购物车
    c.clear()

    fmt.Println("== 订单详情 ==")
    for name, qty := range order {
        for _, p := range products {
            if p.name == name {
                fmt.Printf("%s × %d\n", name, qty)
                fmt.Printf("单价 %d元,总价 %d元\n", p.price, p.price*qty)
                break
            }
        }
    }
    fmt.Printf("总计 %d元\n", c.total())
    fmt.Println("============")
}

func interactive() {
    scanner := bufio.NewScanner(os.Stdin)
    c := newCart()

    for {
        showProducts()
        c.show()
        fmt.Print("请选择商品(输入商品编号):")
        scanner.Scan()
        id := scanner.Text()
        if id == "q" {
            break
        }

        var p product
        for _, p = range products {
            if p.name == id {
                break
            }
        }
        if p.price == 0 {
            fmt.Printf("商品 %s 不存在\n", id)
            continue
        }

        fmt.Print("请输入数量:")
        scanner.Scan()
        qtyStr := scanner.Text()
        qty, err := strconv.Atoi(qtyStr)
        if err != nil {
            fmt.Println("输入的数量无效")
            continue
        }

        c.addItem(p.name, qty)
    }

    checkout(c)
}

func main() {
    interactive()
}

4. Zusammenfassung

In diesem Artikel wird kurz vorgestellt, wie Sie mit der Go-Sprache ein einfaches und leicht verständliches Bestellsystem implementieren, indem wir Produktanzeige- und Warenkorbfunktionen realisieren. Mit Funktionen wie Bestellgenerierung und -anzeige haben wir ein nützliches Mall-System mit gewisser Praktikabilität implementiert und Referenzwert. Vor der Entwicklung müssen wir die Bedürfnisse und Ziele vollständig verstehen, damit wir die Produktentwicklung besser abschließen können. Gleichzeitig bietet uns die Effizienz und Einfachheit der Go-Sprache auch zuverlässige und effiziente Entwicklungstools und Unterstützung.

Das obige ist der detaillierte Inhalt vonSo implementieren Sie ein Bestellsystem mithilfe der Go-Sprache. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn