前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >GO语言——IO项目

GO语言——IO项目

作者头像
传说之下的花儿
发布2023-04-16 15:04:38
4840
发布2023-04-16 15:04:38
举报

1. util包

file.go

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

user_dao.go

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

代码语言:javascript
复制
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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-01-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. util包
  • 2. model包
  • 3. dao包
  • 4. service包
  • 5. controller包
  • 6. main.go
  • 7. user.txt文件
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档