版权声明:本文为博主原创文章,未经博主允许不得转载。 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参数写错,看其是否报错。