Maison  >  Article  >  développement back-end  >  Comment implémenter un système de commande en utilisant le langage Go

Comment implémenter un système de commande en utilisant le langage Go

PHPz
PHPzoriginal
2023-04-05 13:48:341022parcourir

Cet article expliquera comment utiliser le langage Go pour mettre en œuvre un système de commande simple et facile à comprendre.

1. Analyse de la demande

Nous avons besoin d'un système de commande simple et facile à comprendre, qui doit mettre en œuvre au moins les fonctions suivantes :

  1. Affichage et sélection des produits
  2. Fonction panier
  3. Génération et affichage des commandes

Considérant que notre temps et notre énergie sont limités, nous ne mettrons en œuvre qu'un système de centre commercial simple et nous ne proposerons que deux produits parmi lesquels choisir. Les informations de ces deux produits sont les suivantes :

Nom du produit Prix du produit
Produit 1 10 yuans
Produit 2 20 yuans

Nous avons besoin utiliser la commande Mettre en œuvre ce système de centre commercial dans l'industrie.

2. Implémentation du code

  1. Créer une structure de produit

Nous devons d'abord créer une structure pour stocker les informations sur le produit. L'exemple de code est le suivant :

type product struct {
    name  string
    price int
}

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

Nous devons implémenter une fonction pour. afficher les informations sur le produit, l'exemple de code est le suivant :

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

Nous devons implémenter une structure de panier pour stocker les informations sur le produit sélectionnées par l'utilisateur, l'exemple de code est le suivant :

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. Implémentation de la commande

Nous devons implémenter une commande. Une seule fonction consiste à générer une commande à partir des informations sur le produit dans le panier. L'exemple de code est le suivant :

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. Interaction en ligne de commande

Nous devons implémenter. une fonction d'interaction en ligne de commande permettant à l'utilisateur de sélectionner le produit et la quantité et de compléter la commande. Code Un exemple est le suivant :

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. Code complet

Le code complet est le suivant :

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. Résumé

Cet article présente brièvement comment utiliser le langage Go pour mettre en œuvre un système de commande simple et facile à comprendre, en réalisant des fonctions d'affichage des produits et de panier d'achat. Avec des fonctions telles que la génération et l'affichage des commandes, nous avons implémenté un système de centre commercial utile et doté d'une certaine praticité. et valeur de référence. Avant le développement, nous devons bien comprendre les besoins et les objectifs afin de pouvoir mieux mener à bien le développement du produit. Dans le même temps, l'efficacité et la simplicité du langage Go nous fournissent également des outils et un support de développement fiables et efficaces.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn