Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara melaksanakan sistem pesanan menggunakan bahasa Go

Cara melaksanakan sistem pesanan menggunakan bahasa Go

PHPz
PHPzasal
2023-04-05 13:48:341022semak imbas

Artikel ini akan memperkenalkan cara menggunakan bahasa Go untuk melaksanakan sistem pesanan yang ringkas dan mudah difahami.

1. Analisis permintaan

Kami memerlukan sistem pesanan yang ringkas dan mudah difahami, yang sekurang-kurangnya perlu melaksanakan fungsi berikut:

  1. Paparan dan pemilihan produk
  2. Fungsi troli beli-belah
  3. Penjanaan dan paparan pesanan

Memandangkan masa dan tenaga kami terhad, kami hanya akan melaksanakan sistem pusat membeli-belah yang mudah , dan kami Hanya dua item tersedia untuk dipilih. Maklumat kedua-dua produk ini adalah seperti berikut:

商品名称 商品价格
商品1 10元
商品2 20元

Kita perlu melaksanakan sistem pusat membeli-belah ini dalam baris arahan.

2. Pelaksanaan kod

  1. Mencipta struktur produk

Kita perlu membuat struktur untuk menyimpan maklumat produk Contoh kod adalah seperti berikut :

type product struct {
    name  string
    price int
}

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

Kita perlu melaksanakan fungsi untuk memaparkan maklumat produk Contoh kod adalah seperti berikut:

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

Kami perlu melaksanakan struktur troli beli-belah untuk menyimpan maklumat produk yang dipilih oleh pengguna Contoh kod adalah seperti berikut:

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. Pelaksanaan pesanan

Kita perlu melaksanakan fungsi pesanan, yang menjana maklumat produk dalam troli beli-belah ke dalam pesanan Contoh kod adalah seperti berikut:

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. Interaksi baris perintah

Kami perlu melaksanakan fungsi interaktif baris arahan untuk pengguna memilih produk dan kuantiti, dan melengkapkan pesanan adalah seperti berikut:

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. Kod lengkap

Kod lengkap adalah seperti berikut:

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 Ringkasan

Artikel ini memperkenalkan secara ringkas cara menggunakan bahasa Go untuk melaksanakan yang mudah. dan sistem pesanan yang mudah difahami Dengan melaksanakan fungsi seperti paparan produk, fungsi troli beli-belah, dan penjanaan dan paparan pesanan, Kami telah melaksanakan sistem pusat membeli-belah yang berguna dengan nilai praktikal dan rujukan tertentu. Sebelum pembangunan, kita perlu memahami sepenuhnya keperluan dan matlamat supaya kita dapat menyelesaikan pembangunan produk dengan lebih baik Pada masa yang sama, kecekapan dan kesederhanaan bahasa Go juga menyediakan alat dan sokongan pembangunan yang boleh dipercayai dan cekap.

Atas ialah kandungan terperinci Cara melaksanakan sistem pesanan menggunakan bahasa Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn