Go语言基础(十一)—— 实现命令行参数对数据的简单查询小案例

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/The_Reader/article/details/84403114

案例要求:

  • 结合命令行参数、复合类型、包管理、排序等知识,写一个商品管理系统
  • 商品属性包括:整型商品ID(gid)、字符串型名称(name)、整型类别(cid)、浮点型价格(price)
  • 自己造一些假数据,实现如下功能:
  • shop.exe -cmd single -gid xxx 查看商品ID为gid的单品详细信息
  • shop.exe -cmd category -cid xxx -order 0 查看指定类别下的所有商品,cid=类别ID,order为排序规则
  • 排序规则参数:0=按gid升序,1=按gid降序,2=按price升序,3=按price降序
package main

import (
	"flag"
	"fmt"
)

type Product struct {
	name  string
	Gid   int
	Cid   string
	Price float32
}

var productmap = make(map[string][]Product)

func main() {
	//制作一些假数据
	var (
		Fruit []Product = []Product{
			{"apple", 1, "Fruit", 1.5},
			{"pear", 2, "Fruit", 0.8},
			{"Banana", 3, "Fruit", 0.9},}
		Tools []Product = []Product{
			{"clippers", 4, "Tools", 5.0},
			{"knife", 5, "Tools", 6.0},
			{"pen", 6, "Tools", 1.0},
		}
	)
	//将假数据添加到map中,方便查询
	productmap["Fruit"] = Fruit
	productmap["Tools"] = Tools

	//获取cmd命令参数
	cid, gid, order := GetFlagArgs()

	if cid != nil && order != nil {
		var orderValue = *order
		//如果存在这个product则进行,如果不存在则出错
		if products, ok := productmap[*cid]; ok {
			Ordersort(orderValue, products)
		} else {
			fmt.Println("您输入的cid参数不正确!")
		}
	} else if gid != nil {
		for _, products := range productmap {
			for _, product := range products {
				if *gid == product.Gid {
					fmt.Println(product)
					goto HERE
				}
			}
		}
		fmt.Println("您输入的gid参数错误!")

	HERE:
	} else {
		fmt.Println("您没有进行任何操作!")
	}
}

func GetFlagArgs() (cid *string, gid *int, order *int) {
	cmd := flag.String("cmd", "cmd", "命令行参数")
	cid = flag.String("cid", "cid", "整型类别")
	gid = flag.Int("gid", 0, "整型商品类型")
	order = flag.Int("order", 0, "商品排序规则")
	flag.Parse()
	if *cmd == "single" {
		return nil, gid, nil
	} else if *cmd == "category" {
		return cid, nil, order
	} else {
		fmt.Println("cmd没有写正确,请重写")
		return nil, nil, nil
	}
}

func Ordersort(order int, products []Product) {
	switch order {

	case 0:
		for i := 0; i < len(products)-1; i++ {
			for j := i + 1; j < len(products); j++ {
				if products[i].Gid > products[j].Gid {
					products[i], products[j] = products[j], products[i]
				}
			}
		}
	case 1:
		for i := 0; i < len(products)-1; i++ {
			for j := i + 1; j < len(products); j++ {
				if products[i].Gid < products[j].Gid {
					products[i], products[j] = products[j], products[i]
				}
			}
		}
	case 2:
		for i := 0; i < len(products)-1; i++ {
			for j := i + 1; j < len(products); j++ {
				if products[i].Price > products[j].Price {
					products[i], products[j] = products[j], products[i]
				}
			}
		}
	case 3:
		for i := 0; i < len(products)-1; i++ {
			for j := i + 1; j < len(products); j++ {
				if products[i].Price < products[j].Price {
					products[i], products[j] = products[j], products[i]
				}
			}
		}
	default:
		fmt.Println("您输入的order参数错误!")
	}
	for _, v := range products {
		fmt.Println(v)
	}

}

结果演示:

编译一下

执行命令 main.exe -cmd single -gid 3(查询gid为3的product)

执行命令 main.exe -cmd single -gid 6(查询gid为6的product)

并查询一个不存在的gid看其是否显示错误

输入main.exe category -cid Frult -order 0 ,查询cid为Frult 的products并将其按照gid升序排列

输入main.exe category -cid Tools -order 1 ,查询cid为Tools 的products并将其按照gid降序排列

输入main.exe category -cid Tools -order 3 ,查询cid为Tools 的products并将其按照price降序排列

故意将order参数写错,看其是否报错。

猜你喜欢

转载自blog.csdn.net/The_Reader/article/details/84403114
今日推荐