服务计算——CLI命令行实用程序开发实战 - Agenda

HW7 CLI命令行实用程序开发实战 - Agenda

1. 实验准备

配置环境:

打开 $GOPATH ,使用 git clonesystext 两个包下载下来。

接着使用 go install github.com/spf13/cobra/cobra 安装 cobra

接着要做初始化工作

本次作业是做 agenda ,所以使用命令 cobra init agenda --pkg-name=agenda/cmd 做初始化。

这样我们的项目就初始化完毕了,可以开始代码设计了。

2.设计过程

本次实验,我选择实现的命令式 loginlogout 以及 register ,接下来将分别介绍其实现过程。

register

register 比较复杂,我们首先要读取用户信息,接着遍历所有用户的名字,检查是否与当前的用户信息冲突。若不冲突则可以注册,否则则返回失败。

我们读取用户信息使用到的是 json 的框架,我们通过 json.NewDecoder 来绑定读取文件,并使用 Decode 函数来将用户信息传入我们先前定义好的数组中。接着我们就可以在这个数组中遍历所有的用户名,来查询冲突。

具体代码如下:

type User struct{
	Username string
	Password string
	Email string
	Phone string
}

var user_info []User

// registerCmd represents the register command
var registerCmd = &cobra.Command{
	Use:   "register",
	Short: "Sign up",
	Long:  `Sign up your account, so that you can use the agenda`,
	Run: func(cmd *cobra.Command, args []string) {
//	init()
	username, _ := cmd.Flags().GetString("username")
	password, _ := cmd.Flags().GetString("password")
        email, _ := cmd.Flags().GetString("email")
        phone, _ := cmd.Flags().GetString("phone")
		readFile()
		for _,value:=range user_info{
			if value.Username==username{
				fmt.Println("Fail: This Username is used!")
				return
			}
		}
		fileptr, err := os.OpenFile("entity/User.json", os.O_APPEND|os.O_WRONLY|os.O_TRUNC,0644)
		defer fileptr.Close()
		encoder := json.NewEncoder(fileptr)
		var temp User
		temp.Username=username
		temp.Password=password
		temp.Email=email
		temp.Phone=phone
		user_info=append(user_info,temp)
		err=encoder.Encode(user_info)
		if err!=nil{
			fmt.Println(err)
		}
		fmt.Println("Succeed!")	
	},
}

func readFile(){
	fileptr, _:=os.Open("entity/User.json")
	defer fileptr.Close()
	decoder := json.NewDecoder(fileptr)
	decoder.Decode(&user_info)
//	fmt.Println(user_info)
}

login

login就比较简单了,我们可以调用之前已经写好的 readFile 函数,然后查询要登陆的用户是否在数组中,若存在则对比密码,若不存在则直接返回失败。登录成功之后需要更新 currentUser.txt 的信息。

具体代码如下:

var loginCmd = &cobra.Command{
	Use:   "login",
	Short: "login",
	Long:  `login to use the agenda`,
	Run: func(cmd *cobra.Command, args []string) {
//	init()
	username, _ := cmd.Flags().GetString("username")
	password, _ := cmd.Flags().GetString("password")
		readFile()
		for _,value:=range user_info{
			if value.Username==username{
				if value.Password==password{
					fmt.Println("Login succeed!")
					return
				}else{
					fmt.Println("Wrong password!")
					return
				}
			}
		}
		f,_:=os.OpenFile("currentUser.txt",os.O_RDWR|os.O_CREATE|os.O_TRUNC,0644)
		defer f.Close()
		data:=[]byte(username)
		f.Write(data)
		fmt.Println("You have not registered!")
		
	},
}

logout

logout是最简单的一部分,我们只需更改 currentUser.txt 里的信息为 no one 即可。

具体代码如下:

var logoutCmd = &cobra.Command{
	Use:   "logout",
Short: "logout",
Long:  `logout the agenda`,
Run: func(cmd *cobra.Command, args []string) {
//	init()

f,_:=os.OpenFile("currentUser.txt",os.O_RDWR|os.O_CREATE|os.O_TRUNC,0644)


defer f.Close()
data:=[]byte("no one")
f.Write(data)
fmt.Println("No one login now!")
	
},
}

3. 测试结果

register

在这里插入图片描述
在这里插入图片描述

login

在这里插入图片描述
在这里插入图片描述

logout

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值