首页后端开发GOGO语言——IO项目

GO语言——IO项目

时间2023-04-23 22:39:02发布访客分类GO浏览1256
导读:1. util包 file.go // CreatFile // @Title CreatFile // @Description 创建文件 // @Param name string "文件名" // @Return *os.File...

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

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

goadminio权限设计

若转载请注明出处: GO语言——IO项目
本文地址: https://pptw.com/jishu/6705.html
Go学习——使用MongoDB Go语言——反射

游客 回复需填写必要信息