1. util包
file.go
// CreatFile // @Title CreatFile // @Description 创建文件 // @Param name string "文件名" // @Return *os.File "文件对象" func CreatFile(name string) *os.File { file, err := os.Create(name) if err != nil { log.Fatalln(err) } return file } // ReadFile // @Title ReadFile // @Description 读取文件信息 // @Param name string "文件名" // @Return []string "结果切片" func ReadFile(name string) []string { file, err := os.OpenFile(name, os.O_CREATE|os.O_RDONLY, 0666) defer func(file *os.File) { err := file.Close() if err != nil { log.Fatalln(err) } }(file) if err != nil { log.Fatalln(err) } reader := bufio.NewReader(file) result := make([]string,0) for { lineString, err := reader.ReadString('\n') if err == io.EOF { break } lineString = strings.Trim(lineString,"\n") result = append(result,lineString) } return result } // WriteFile // @Title WriteFile // @Description 写入文件 // @Param name string "文件名" // @Param strS []string "欲写入信息" // @Return []string "结果切片" func WriteFile(name string,strS []string) bool { file, err := os.OpenFile(name, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666) if err != nil { log.Fatalln(err) } defer func(file *os.File) { err := file.Close() if err != nil { log.Fatalln(err) } }(file) writer := bufio.NewWriter(file) for _, str := range strS { _, err := writer.WriteString(str+"\n")//将数据先写入缓存 if err != nil { log.Fatalln(err) } } err = writer.Flush() //将缓存中的内容写入文件 if err != nil { log.Fatalln(err) } return true } // AppendWriteFile // 追加一条信息 func AppendWriteFile(name string,str string) bool { file, err := os.OpenFile(name, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0666) if err != nil { log.Fatalln(err) } defer func(file *os.File) { err := file.Close() if err != nil { log.Fatalln(err) } }(file) writer := bufio.NewWriter(file) _, err = writer.WriteString(str+"\n") if err != nil { log.Fatalln(err) } err = writer.Flush() //将缓存中的内容写入文件 if err != nil { log.Fatalln(err) } return true }
2. model包
// User 用户 type User struct { UserNo string // 编号(用户名)-学号|工号 UserName string // 姓名 Password string // 密码 Level int // 权限 0-管理员|1-教师|2-学生 } // IsStructureEmpty // 通过反射判断结构体是否为空 func (x User) IsStructureEmpty() bool { return reflect.DeepEqual(x, User{}) }
3. dao包
user_dao.go
// SelectUserByUserNo // @Title SelectUserByUserNo // @Description 通过学号|工号查询用户(0,1,2) // @Param UserNo string "学号|工号" // @Return model.User "查询到结果" func SelectUserByUserNo(UserNo string) model.User { contain := util.ReadFile("./user.txt") var user model.User var strS []string for _, u := range contain { strS = strings.Split(u, " ") if strS[0] == UserNo { strS := strings.Split(u, " ") user.UserNo = strS[0] user.UserName = strS[1] user.Password = strS[2] user.Level, _ = strconv.Atoi(strings.Trim(strS[3], "\r")) return user } } return user } // SelectAllUser // @Title SelectAllUser // @Description 查询所有用户(0) // @Return []model.User "查询到结果切片" func SelectAllUser() []model.User { contain := util.ReadFile("./user.txt") users := make([]model.User, 0) var user model.User for _, u := range contain { strS := strings.Split(u, " ") user.UserNo = strS[0] user.UserName = strS[1] user.Password = strS[2] user.Level, _ = strconv.Atoi(strings.Trim(strS[3], "\r")) users = append(users, user) } return users } // InsertUser // @Title InsertUser // @Description 添加用户(0) // @Param user model.User "用户信息" // @Return bool "插入成功与否" func InsertUser(user model.User) bool { s := user.UserNo + " " + user.UserName + " " + user.Password + " " + strconv.Itoa(user.Level) return util.AppendWriteFile("./user.txt", s) } // DeleteUserByUserNo // @Title DeleteUserByUserNo // @Description 删除用户(0) // @Param UserNo string "学号|工号" // @Return bool "删除成功与否" func DeleteUserByUserNo(UserNo string) bool { users := SelectAllUser() strS := make([]string, 0) for _, user := range users { if user.UserNo == UserNo { continue } s := user.UserNo + " " + user.UserName + " " + user.Password + " " + strconv.Itoa(user.Level) strS = append(strS, s) } return util.WriteFile("./user.txt", strS) } // UpdateUserByUserNO // @Title UpdateUserByUserNO // @Description 修改用户信息(0,1,2) // @Param user model.User "用户信息" // @Return bool "修改成功与否" func UpdateUserByUserNO(user model.User) bool { users := SelectAllUser() strS := make([]string, 0) for _, user01 := range users { if user01.UserNo == user.UserNo { user01 = user } s := user01.UserNo + " " + user01.UserName + " " + user01.Password + " " + strconv.Itoa(user01.Level) strS = append(strS, s) } return util.WriteFile("./user.txt", strS) }
4. service包
user_service.go
func SelectUserByUserNo(userNo string) model.User { return dao.SelectUserByUserNo(userNo) } func SelectAllUser() []model.User { return dao.SelectAllUser() } func InsertUser(user model.User) bool { if !SelectUserByUserNo(user.UserNo).IsStructureEmpty() { return false } else { return dao.InsertUser(user) } } func DeleteUserByUserNo(userNo string) bool { if SelectUserByUserNo(userNo).IsStructureEmpty() { return false } else { return dao.DeleteUserByUserNo(userNo) } } func UpdateUserByUserNo(user model.User) bool { return dao.UpdateUserByUserNO(user) }
5. controller包
user_controller.go
// SelectUserByNo // @Title SelectUserByNo // @Description 查询用户信息(0) func SelectUserByNo() { var StuNo string fmt.Print("请输入学号|工号:") _, err := fmt.Scan(&StuNo) if err != nil { log.Fatalln(err) } user := service.SelectUserByUserNo(StuNo) fmt.Println("查询结果:") if user.IsStructureEmpty() { fmt.Println("\t未查询到该用户") } else { fmt.Printf("\t[编号:%s,姓名:%s,密码:%s,权限%d]\n", user.UserNo, user.UserName, user.Password, user.Level) } } // SelectALLUser // @Title SelectALLUser // @Description 查询所有用户信息(0) func SelectALLUser() { users := service.SelectAllUser() fmt.Println("查询结果:") if len(users) == 0 { fmt.Println("\t未查询到用户") } else { for _, user := range users { fmt.Printf("\t[编号:%s,姓名:%s,密码:%s,权限%d]\n", user.UserNo, user.UserName, user.Password, user.Level) } } } // InsertUser // @Title InsertUser // @Description 添加用户(0) func InsertUser() { fmt.Println("请输入用户信息: ") var user model.User fmt.Print("学号/工号: ") _, err := fmt.Scan(&user.UserNo) fmt.Print("姓名: ") _, err = fmt.Scan(&user.UserName) fmt.Print("密码: ") _, err = fmt.Scan(&user.Password) fmt.Print("权限: ") _, err = fmt.Scan(&user.Level) if err != nil { log.Fatalln(err) } if service.InsertUser(user) { fmt.Println("添加成功!") } else { fmt.Println("添加失败,学号|工号已存在!") } } // DeleteUserByNo // @Title DeleteUserByNo // @Description 删除用户(0) func DeleteUserByNo() { var userNo string fmt.Print("请输入学号/工号: ") _, err := fmt.Scan(&userNo) if err != nil { log.Fatalln(err) } if service.DeleteUserByUserNo(userNo) { fmt.Println("删除成功!") } else { fmt.Println("删除失败,学号|工号不存在!") } } // UpdateUserByNo // @Title UpdateUserByNo // @Description 修改用户(0)|修改自己(1,2) func UpdateUserByNo(myUser model.User) { var result bool if myUser.Level == 0 { var userNo string fmt.Print("学号/工号: ") _, err := fmt.Scan(&userNo) if err != nil { log.Fatalln(err) } user := service.SelectUserByUserNo(userNo) if user.IsStructureEmpty() { fmt.Println("未查询到该用户!") return } fmt.Println("请选择修改的内容:") out1: fmt.Println("1>姓名") fmt.Println("2>密码") fmt.Println("3>权限") fmt.Println("4>返回") var s string _, err = fmt.Scan(&s) switch s { case "1": fmt.Print("姓名: ") _, err = fmt.Scan(&user.UserName) result = service.UpdateUserByUserNo(user) break case "2": fmt.Print("密码: ") _, err = fmt.Scan(&user.Password) result = service.UpdateUserByUserNo(user) break case "3": fmt.Print("权限: ") _, err = fmt.Scan(&user.Level) result = service.UpdateUserByUserNo(user) break case "4": return default: fmt.Println("输入不合法,请重新选择") fmt.Println("------------------------") goto out1 } } else { fmt.Println("请选择修改的内容:") out2: fmt.Println("1>密码") fmt.Println("2>返回") var s string _, err := fmt.Scan(&s) if err != nil { log.Fatalln(err) } switch s { case "1": fmt.Print("密码: ") _, err = fmt.Scan(&myUser.Password) result = service.UpdateUserByUserNo(myUser) break case "2": return default: fmt.Println("输入不合法,请重新选择") fmt.Println("------------------------") goto out2 } } if result { fmt.Println("修改成功!") } else { fmt.Println("修改失败!") } } // Login // @Title Login // @Description 登录 func Login() model.User { var password string var userNo string fmt.Print("学号|工号: ") _, err := fmt.Scan(&userNo) if err != nil { log.Fatalln(err) } fmt.Print("密码: ") _, err = fmt.Scan(&password) if err != nil { log.Fatalln(err) } user := service.SelectUserByUserNo(userNo) if user.IsStructureEmpty() { fmt.Println("登录失败,学号|工号或密码错误。") return user } if user.Password == password { fmt.Println("登录成功") return user } else { fmt.Println("登录失败,学号|工号或密码错误。") return model.User{} } }
6. main.go
var User model.User func init() { log.SetFlags(log.Lshortfile | log.Ltime | log.Ldate) } func main() { View() } func View() { fmt.Println("-------------欢迎来到教务管理系统-------------") start: fmt.Println("1> 登录") fmt.Println("2> 退出") fmt.Println("-------------------------------------------") var s string _, err := fmt.Scan(&s) if err != nil { log.Fatalln(err) } switch s { case "1": Login: User = controller.Login() if User.IsStructureEmpty() { fmt.Println("-----------请重新输入-----------") goto Login } for { if User.Level == 0 { fmt.Println("---------------欢迎管理员进入---------------") admin: fmt.Println("请选择您要进行的操作:") fmt.Println("1>查询用户") fmt.Println("2>添加用户") fmt.Println("3>删除用户") fmt.Println("4>修改用户") fmt.Println("5>退出登录") var s1 string _, err = fmt.Scan(&s1) if err != nil { log.Fatalln(err) } switch s1 { case "1": Select: fmt.Println("1>查询所有用户") fmt.Println("2>查询指定学号|工号用户") fmt.Println("3>返回") var s2 string _, err = fmt.Scan(&s2) if err != nil { log.Fatalln(err) } switch s2 { case "1": controller.SelectALLUser() break case "2": controller.SelectUserByNo() break case "3": goto admin default: fmt.Println("输入非法,请重新输入!") goto Select } case "2": controller.InsertUser() break case "3": controller.DeleteUserByNo() break case "4": controller.UpdateUserByNo(User) break case "5": User = model.User{} goto start default: fmt.Println("输入不合法,请重新选择!") goto admin } }else { fmt.Println("---------------欢迎登录---------------") Common: fmt.Println("请选择您要进行的操作:") fmt.Println("1>修改密码") fmt.Println("2>退出登录") var s1 string _, err = fmt.Scan(&s1) if err != nil { log.Fatalln(err) } switch s1 { case "1": controller.UpdateUserByNo(User) break case "2": User = model.User{} goto start default: fmt.Println("输入不合法,请重新选择!") goto Common } } } case "2": fmt.Println("欢迎您的下次使用!") return default: fmt.Println("输入非法,请重新输入!") goto start } }
7. user.txt文件
文件预设计:
user.txt : 用于储存用户信息
权限为0(管理员,账号密码需要手动录入)可进行: 对学生信息进行增删改查,无需密码即可删除学生|修改学生密码,账号默认密码123456
权限为1可进行: 本人密码的修改
权限为2可进行: 本人密码的修改
0000 admin admin 0
1002 tea01 123456 1
2001 stu01 123456 2