1. util包
代码语言:javascript复制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包
代码语言:javascript复制// 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包
代码语言:javascript复制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包
代码语言:javascript复制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包
代码语言:javascript复制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
代码语言:javascript复制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