ホームページ  >  記事  >  バックエンド開発  >  Go言語を使用して注文システムを実装する方法

Go言語を使用して注文システムを実装する方法

PHPz
PHPzオリジナル
2023-04-05 13:48:341022ブラウズ

この記事では、Go言語を使ってシンプルでわかりやすい注文システムを実装する方法を紹介します。

1. 需要分析

シンプルでわかりやすい注文システムが必要であり、少なくとも次の機能を実装する必要があります:

  1. 表示と商品の選択
  2. ショッピングカートの機能
  3. ##注文の生成と表示
  4. ##時間と労力が限られているので、簡単なモールシステムのみを実装します。 、および私たち 2 つのアイテムのみから選択できます。この 2 つの製品の情報は次のとおりです。

製品名 製品 1製品 2このモール システムをコマンド ラインで実装する必要があります。
製品価格
10 元
20 元

2. コードの実装

製品構造の作成
  1. 最初に製品情報を保存する構造を作成する必要があります。コード例は次のとおりです。
type product struct {
    name  string
    price int
}

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

商品表示
  1. 商品情報を表示する関数を実装する必要があります。コード例は次のとおりです:
func showProducts() {
    fmt.Println("== 商品列表 ==")
    for _, p := range products {
        fmt.Printf("%s %d元\n", p.name, p.price)
    }
    fmt.Println("================")
}

Shoppingカートの実装
  1. ユーザーが選択した製品情報を保存するためのショッピング カート構造を実装する必要があります。コード例は次のとおりです:
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("============")
}

Order 実装
  1. 実装する必要がある注文関数は、ショッピング カート内の製品情報を注文に生成することです。コード例は次のとおりです:
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. ユーザーが製品と数量を選択して注文を完了できるように、コマンド ライン インタラクション機能を実装する必要があります。コード例は次のとおりです:
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. 完全なコード

完全なコードは次のとおりです:

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. まとめ

この記事では、Go 言語を使用してシンプルでわかりやすい注文システムを実装する方法を簡単に紹介します。商品表示、ショッピングカート機能、注文生成・表示などの機能を実装することで、一定の機能を備えた便利なモールシステムを実現しています。製品開発をより適切に完了できるように、開発前にニーズと目標を十分に理解する必要があると同時に、Go 言語の効率性とシンプルさにより、信頼性が高く効率的な開発ツールとサポートも提供されます。

以上がGo言語を使用して注文システムを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。