agenda 开发项目
本次实现的是一个简易的Agenda开发项目,完整版与初级实训的要求相同,具体要求可查看课程网站。老师这次取消了组队,只要求每人完成两条命令,不过我最终实现了关于用户的5条命令。
1. 最终实现的需求
1)业务需求:
用户注册
- 注册新用户时,用户需设置一个唯一的用户名和一个密码。另外,还需登记邮箱及电话信息。
- 如果注册时提供的用户名已由其他用户使用,应反馈一个适当的出错信息;成功注册后,亦应反馈一个成功注册的信息。
用户登录
- 用户使用用户名和密码登录 Agenda 系统。
- 用户名和密码同时正确则登录成功并反馈一个成功登录的信息。否则,登录失败并反馈一个失败登录的信息。
用户登出
- 已登录的用户登出系统后,只能使用用户注册和用户登录功能。
用户查询
- 已登录的用户可以查看已注册的所有用户的用户名、邮箱及电话信息。
用户删除
- 已登录的用户可以删除本用户账户(即销号)。
- 操作成功,需反馈一个成功注销的信息;否则,反馈一个失败注销的信息。
- 删除成功则退出系统登录状态。删除后,该用户账户不再存在。
2)功能需求:
- agenda -h :列出程序说明
- agenda <command> -h :列出命令说明
- agenda register -u username –p password –e email -t telphone :用户注册
- agenda login -u usename -p password:用户登录
- agenda logout:用户登出
- agenda qryuser:查询所有用户信息
- agenda deluser -p password:注销当前账号
3)持久化要求:
- 使用 json 存储 User 实体(users.json)
- 当前用户信息存储在 curUser.txt 中
4)日志服务
使用 log 包记录命令执行情况
- 正常输出信息记录在info.log
- 错误信息记录在error.log
5)项目目录
cmd :存放命令实现代码
entity :存放 User对象读写与处理逻辑
service:存放充当cmd命令与data之间的接口的程序
data:存放系统数据,包括所有User信息(users.json),当前用户信息(curUser.txt)以及输出日志信息
2. 测试样例
GoOnlie测试环境并不稳定,进入之后总是报如下错误:
所以下面的实现效果是将其改为本地版之后在本地运行的结果。GoOnlline上的操作与本地版稍有不同(见GoOnline版本README.md)。
首先是运行go install将其安装到$GOPATH/bin或者go build编译到agenda目录内,然后运行agenda(同agenda -h),运行结果如下:
F:\Go\gowork\src\agenda>agenda
A simple version of agenda,a meeting-manage system.
Usage:
agenda [command]
Available Commands:
deluser delete the current user from the system
help Help about any command
login User login an account
logout user logout the account
qryuser query all the users
register Used to register an account
Flags:
--config string config file (default is $HOME/.agenda.yaml)
-h, --help help for agenda
-t, --toggle Help message for toggle
Use "agenda [command] --help" for more information about a command.
subcommand is required
- agenda <command> -h :列出命令说明,以agenda register - h 为例:
F:\Go\gowork\src\agenda>agenda register -h
Use the register command in one of the forms below to register an account:
1. agenda register -u username -p password -e email -t telephone
2. agenda register -uusername -ppassword -eemail -ttelephone
Flags:
-u username
-p password
-e email
-t telephone
Usage:
agenda register [flags]
Flags:
-e, --email string email address
-h, --help help for register
-p, --pass string password
-t, --tel string telephone number
-u, --user string username
Global Flags:
--config string config file (default is $HOME/.agenda.yaml)
- agenda register -u username –p password –e email -t telphone :用户注册(必须提供四个flag的值)
下面的命令注册了一个用户名为fsql,密码为123,邮箱为fsq@mail.com,电话为12345678的用户
F:\Go\gowork\src\agenda>agenda register -u fsql -p 123 -e fsq@mail.com -t 12345678
Info: 2019/10/29 16:44:38 fsql register succeed!
假如用户名已存在:
F:\Go\gowork\src\agenda>agenda register -u fsq -p 123 -e fsq@mail.com -t 12345678
Error: 2019/10/29 16:44:03 fsq register failed: username has been used!
注:Info与Error在输出到标准输出的同时也会写入info.log和error.log(可在agenda/data/目录中查看)
- agenda login -u usename -p password:用户登录
使用刚刚注册的账户登录
F:\Go\gowork\src\agenda>agenda login -u fsql -p 123
Info: 2019/10/29 16:50:38 fsql login succeed!
当前登录的用户信息会存在与agenda/data/curUser.txt中:
- agenda qryuser:在登陆之后查询所有用户信息
F:\Go\gowork\src\agenda>agenda qryuser
There are 3 users:
Name--Email--Telephone
fsq test@qq.com 12345678
fsq2 test@qq.com 12345678
fsql fsq@mail.com 12345678
Info: 2019/10/29 16:53:01 fsql qryuser succeed!
- agenda logout:用户登出
F:\Go\gowork\src\agenda>agenda logout
Info: 2019/10/29 16:54:26 fsql logout succeed!
- agenda deluser -p password:注销当前账号(在注销前需要保证用户已登录)
F:\Go\gowork\src\agenda>agenda deluser
Error: 2019/10/29 16:56:05 fsql deluser failed: password must be provided
F:\Go\gowork\src\agenda>agenda deluser -p 123
Info: 2019/10/29 16:56:13 fsql deluser succeed!