本文将介绍如何使用go语言实现一个简单易懂的下单系统。
一、需求分析
我们需要一个简单易懂的下单系统,至少需要实现以下几个功能:
考虑到我们的时间和精力有限,我们将只实现一个简单的商城系统,且我们只提供两个商品可供选择。这两个商品的信息如下:
| 商品名称 | 商品价格 |
|---|---|
| 商品1 | 10元 |
| 商品2 | 20元 |
我们需要在命令行中实现这个商城系统。
立即学习“go语言免费学习笔记(深入)”;
二、代码实现
我们首先需要创建一个结构体来存储商品信息,代码示例如下:
type product struct {
name string
price int
}
var products = []product{
{"商品1", 10},
{"商品2", 20},
}我们需要实现一个函数来展示商品信息,代码示例如下:
weenCompany闻名企业网站系统(免费开源)是一个功能强大, 使用简单的中英文企业智能建站系统, 您只需要一些基本的计算机知识就可以利用此系统完成中小型企业网站的建设; 是低成本企业网站架设方案之首选CMS系统, 也适合建设个人网站。weenCompany闻名企业网站系统功能:1. 程序代码简洁严谨, 整个系统程序仅2M左右大小.2. 中英文双语版共用一套网站程序, 双语页面实现自由切换.3
0
func showProducts() {
fmt.Println("== 商品列表 ==")
for _, p := range products {
fmt.Printf("%s %d元\n", p.name, p.price)
}
fmt.Println("================")
}我们需要实现一个购物车结构体来存储用户选择的商品信息,代码示例如下:
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 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)
}三、完整代码
完整代码如下:
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()
}四、总结
本文简单介绍了如何使用Go语言实现一个简单易懂的下单系统,通过实现商品展示、购物车功能和订单生成与显示等功能,我们实现了一个有用的商城系统,具有一定的实用性和参考价值。在开发前,我们需要充分了解需求及目标,从而能够更好的完成产品开发,同时,Go语言的高效性和简洁性也为我们提供了可靠和高效的开发工具和支持。
以上就是如何使用Go语言实现一个下单系统的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号