• 售前

  • 售后

热门帖子
入门百科

GO语言——IO项目

[复制链接]
123457595 显示全部楼层 发表于 2022-1-16 11:09:30 |阅读模式 打印 上一主题 下一主题
IO项目



1. util包

   file.go
  1. // CreatFile
  2. // @Title CreatFile
  3. // @Description 创建文件
  4. // @Param        name        string        "文件名"
  5. // @Return *os.File "文件对象"
  6. func CreatFile(name string) *os.File {
  7.         file, err := os.Create(name)
  8.         if err != nil {
  9.                 log.Fatalln(err)
  10.         }
  11.         return file
  12. }
  13. // ReadFile
  14. // @Title ReadFile
  15. // @Description 读取文件信息
  16. // @Param        name        string        "文件名"
  17. // @Return []string "结果切片"
  18. func ReadFile(name string) []string {
  19.         file, err := os.OpenFile(name, os.O_CREATE|os.O_RDONLY, 0666)
  20.         defer func(file *os.File) {
  21.                 err := file.Close()
  22.                 if err != nil {
  23.                         log.Fatalln(err)
  24.                 }
  25.         }(file)
  26.         if err != nil {
  27.                 log.Fatalln(err)
  28.         }
  29.         reader := bufio.NewReader(file)
  30.         result := make([]string,0)
  31.         for {
  32.                 lineString, err := reader.ReadString('\n')
  33.                 if err == io.EOF {
  34.                         break
  35.                 }
  36.                 lineString = strings.Trim(lineString,"\n")
  37.                 result = append(result,lineString)
  38.         }
  39.         return result
  40. }
  41. // WriteFile
  42. // @Title WriteFile
  43. // @Description 写入文件
  44. // @Param        name        string        "文件名"
  45. // @Param        strS        []string        "欲写入信息"
  46. // @Return []string "结果切片"
  47. func WriteFile(name string,strS []string) bool {
  48.         file, err := os.OpenFile(name, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666)
  49.         if err != nil {
  50.                 log.Fatalln(err)
  51.         }
  52.         defer func(file *os.File) {
  53.                 err := file.Close()
  54.                 if err != nil {
  55.                         log.Fatalln(err)
  56.                 }
  57.         }(file)
  58.         writer := bufio.NewWriter(file)
  59.         for _, str := range strS {
  60.                 _, err := writer.WriteString(str+"\n")//将数据先写入缓存
  61.                 if err != nil {
  62.                         log.Fatalln(err)
  63.                 }
  64.         }
  65.         err = writer.Flush() //将缓存中的内容写入文件
  66.         if err != nil {
  67.                 log.Fatalln(err)
  68.         }
  69.         return true
  70. }
  71. // AppendWriteFile
  72. // 追加一条信息
  73. func AppendWriteFile(name string,str string) bool {
  74.         file, err := os.OpenFile(name, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0666)
  75.         if err != nil {
  76.                 log.Fatalln(err)
  77.         }
  78.         defer func(file *os.File) {
  79.                 err := file.Close()
  80.                 if err != nil {
  81.                         log.Fatalln(err)
  82.                 }
  83.         }(file)
  84.         writer := bufio.NewWriter(file)
  85.         _, err = writer.WriteString(str+"\n")
  86.         if err != nil {
  87.                 log.Fatalln(err)
  88.         }
  89.         err = writer.Flush() //将缓存中的内容写入文件
  90.         if err != nil {
  91.                 log.Fatalln(err)
  92.         }
  93.         return true
  94. }
复制代码
2. model包

  1. // User 用户
  2. type User struct {
  3.         UserNo   string // 编号(用户名)-学号|工号
  4.         UserName string // 姓名
  5.         Password string // 密码
  6.         Level    int    // 权限 0-管理员|1-教师|2-学生
  7. }
  8. // IsStructureEmpty
  9. // 通过反射判断结构体是否为空
  10. func (x User) IsStructureEmpty() bool {
  11.         return reflect.DeepEqual(x, User{})
  12. }
复制代码
3. dao包

   user_dao.go
  1. // SelectUserByUserNo
  2. // @Title SelectUserByUserNo
  3. // @Description 通过学号|工号查询用户(0,1,2)
  4. // @Param        UserNo        string        "学号|工号"
  5. // @Return model.User "查询到结果"
  6. func SelectUserByUserNo(UserNo string) model.User {
  7.         contain := util.ReadFile("./user.txt")
  8.         var user model.User
  9.         var strS []string
  10.         for _, u := range contain {
  11.                 strS = strings.Split(u, " ")
  12.                 if strS[0] == UserNo {
  13.                         strS := strings.Split(u, " ")
  14.                         user.UserNo = strS[0]
  15.                         user.UserName = strS[1]
  16.                         user.Password = strS[2]
  17.                         user.Level, _ = strconv.Atoi(strings.Trim(strS[3], "\r"))
  18.                         return user
  19.                 }
  20.         }
  21.         return user
  22. }
  23. // SelectAllUser
  24. // @Title SelectAllUser
  25. // @Description 查询所有用户(0)
  26. // @Return []model.User   "查询到结果切片"
  27. func SelectAllUser() []model.User {
  28.         contain := util.ReadFile("./user.txt")
  29.         users := make([]model.User, 0)
  30.         var user model.User
  31.         for _, u := range contain {
  32.                 strS := strings.Split(u, " ")
  33.                 user.UserNo = strS[0]
  34.                 user.UserName = strS[1]
  35.                 user.Password = strS[2]
  36.                 user.Level, _ = strconv.Atoi(strings.Trim(strS[3], "\r"))
  37.                 users = append(users, user)
  38.         }
  39.         return users
  40. }
  41. // InsertUser
  42. // @Title InsertUser
  43. // @Description 添加用户(0)
  44. // @Param        user        model.User        "用户信息"
  45. // @Return bool "插入成功与否"
  46. func InsertUser(user model.User) bool {
  47.         s := user.UserNo + " " + user.UserName + " " + user.Password + " " + strconv.Itoa(user.Level)
  48.         return util.AppendWriteFile("./user.txt", s)
  49. }
  50. // DeleteUserByUserNo
  51. // @Title DeleteUserByUserNo
  52. // @Description 删除用户(0)
  53. // @Param        UserNo        string        "学号|工号"
  54. // @Return bool "删除成功与否"
  55. func DeleteUserByUserNo(UserNo string) bool {
  56.         users := SelectAllUser()
  57.         strS := make([]string, 0)
  58.         for _, user := range users {
  59.                 if user.UserNo == UserNo {
  60.                         continue
  61.                 }
  62.                 s := user.UserNo + " " + user.UserName + " " + user.Password + " " + strconv.Itoa(user.Level)
  63.                 strS = append(strS, s)
  64.         }
  65.         return util.WriteFile("./user.txt", strS)
  66. }
  67. // UpdateUserByUserNO
  68. // @Title UpdateUserByUserNO
  69. // @Description 修改用户信息(0,1,2)
  70. // @Param        user        model.User        "用户信息"
  71. // @Return bool "修改成功与否"
  72. func UpdateUserByUserNO(user model.User) bool {
  73.         users := SelectAllUser()
  74.         strS := make([]string, 0)
  75.         for _, user01 := range users {
  76.                 if user01.UserNo == user.UserNo {
  77.                         user01 = user
  78.                 }
  79.                 s := user01.UserNo + " " + user01.UserName + " " + user01.Password + " " + strconv.Itoa(user01.Level)
  80.                 strS = append(strS, s)
  81.         }
  82.         return util.WriteFile("./user.txt", strS)
  83. }
复制代码
4. service包

   user_service.go
  1. func SelectUserByUserNo(userNo string) model.User {
  2.         return dao.SelectUserByUserNo(userNo)
  3. }
  4. func SelectAllUser() []model.User {
  5.         return dao.SelectAllUser()
  6. }
  7. func InsertUser(user model.User) bool {
  8.         if !SelectUserByUserNo(user.UserNo).IsStructureEmpty() {
  9.                 return false
  10.         } else {
  11.                 return dao.InsertUser(user)
  12.         }
  13. }
  14. func DeleteUserByUserNo(userNo string) bool {
  15.         if SelectUserByUserNo(userNo).IsStructureEmpty() {
  16.                 return false
  17.         } else {
  18.                 return dao.DeleteUserByUserNo(userNo)
  19.         }
  20. }
  21. func UpdateUserByUserNo(user model.User) bool {
  22.         return dao.UpdateUserByUserNO(user)
  23. }
复制代码
5. controller包

   user_controller.go
  1. // SelectUserByNo
  2. // @Title SelectUserByNo
  3. // @Description 查询用户信息(0)
  4. func SelectUserByNo() {
  5.         var StuNo string
  6.         fmt.Print("请输入学号|工号:")
  7.         _, err := fmt.Scan(&StuNo)
  8.         if err != nil {
  9.                 log.Fatalln(err)
  10.         }
  11.         user := service.SelectUserByUserNo(StuNo)
  12.         fmt.Println("查询结果:")
  13.         if user.IsStructureEmpty() {
  14.                 fmt.Println("\t未查询到该用户")
  15.         } else {
  16.                 fmt.Printf("\t[编号:%s,姓名:%s,密码:%s,权限%d]\n", user.UserNo, user.UserName, user.Password, user.Level)
  17.         }
  18. }
  19. // SelectALLUser
  20. // @Title SelectALLUser
  21. // @Description 查询所有用户信息(0)
  22. func SelectALLUser() {
  23.         users := service.SelectAllUser()
  24.         fmt.Println("查询结果:")
  25.         if len(users) == 0 {
  26.                 fmt.Println("\t未查询到用户")
  27.         } else {
  28.                 for _, user := range users {
  29.                         fmt.Printf("\t[编号:%s,姓名:%s,密码:%s,权限%d]\n", user.UserNo, user.UserName, user.Password, user.Level)
  30.                 }
  31.         }
  32. }
  33. // InsertUser
  34. // @Title InsertUser
  35. // @Description 添加用户(0)
  36. func InsertUser() {
  37.         fmt.Println("请输入用户信息: ")
  38.         var user model.User
  39.         fmt.Print("学号/工号: ")
  40.         _, err := fmt.Scan(&user.UserNo)
  41.         fmt.Print("姓名: ")
  42.         _, err = fmt.Scan(&user.UserName)
  43.         fmt.Print("密码: ")
  44.         _, err = fmt.Scan(&user.Password)
  45.         fmt.Print("权限: ")
  46.         _, err = fmt.Scan(&user.Level)
  47.         if err != nil {
  48.                 log.Fatalln(err)
  49.         }
  50.         if service.InsertUser(user) {
  51.                 fmt.Println("添加成功!")
  52.         } else {
  53.                 fmt.Println("添加失败,学号|工号已存在!")
  54.         }
  55. }
  56. // DeleteUserByNo
  57. // @Title DeleteUserByNo
  58. // @Description 删除用户(0)
  59. func DeleteUserByNo() {
  60.         var userNo string
  61.         fmt.Print("请输入学号/工号: ")
  62.         _, err := fmt.Scan(&userNo)
  63.         if err != nil {
  64.                 log.Fatalln(err)
  65.         }
  66.         if service.DeleteUserByUserNo(userNo) {
  67.                 fmt.Println("删除成功!")
  68.         } else {
  69.                 fmt.Println("删除失败,学号|工号不存在!")
  70.         }
  71. }
  72. // UpdateUserByNo
  73. // @Title UpdateUserByNo
  74. // @Description 修改用户(0)|修改自己(1,2)
  75. func UpdateUserByNo(myUser model.User) {
  76.         var result bool
  77.         if myUser.Level == 0 {
  78.                 var userNo string
  79.                 fmt.Print("学号/工号: ")
  80.                 _, err := fmt.Scan(&userNo)
  81.                 if err != nil {
  82.                         log.Fatalln(err)
  83.                 }
  84.                 user := service.SelectUserByUserNo(userNo)
  85.                 if user.IsStructureEmpty() {
  86.                         fmt.Println("未查询到该用户!")
  87.                         return
  88.                 }
  89.                 fmt.Println("请选择修改的内容:")
  90.         out1:
  91.                 fmt.Println("1>姓名")
  92.                 fmt.Println("2>密码")
  93.                 fmt.Println("3>权限")
  94.                 fmt.Println("4>返回")
  95.                 var s string
  96.                 _, err = fmt.Scan(&s)
  97.                 switch s {
  98.                 case "1":
  99.                         fmt.Print("姓名: ")
  100.                         _, err = fmt.Scan(&user.UserName)
  101.                         result = service.UpdateUserByUserNo(user)
  102.                         break
  103.                 case "2":
  104.                         fmt.Print("密码: ")
  105.                         _, err = fmt.Scan(&user.Password)
  106.                         result = service.UpdateUserByUserNo(user)
  107.                         break
  108.                 case "3":
  109.                         fmt.Print("权限: ")
  110.                         _, err = fmt.Scan(&user.Level)
  111.                         result = service.UpdateUserByUserNo(user)
  112.                         break
  113.                 case "4":
  114.                         return
  115.                 default:
  116.                         fmt.Println("输入不合法,请重新选择")
  117.                         fmt.Println("------------------------")
  118.                         goto out1
  119.                 }
  120.         } else {
  121.                 fmt.Println("请选择修改的内容:")
  122.         out2:
  123.                 fmt.Println("1>密码")
  124.                 fmt.Println("2>返回")
  125.                 var s string
  126.                 _, err := fmt.Scan(&s)
  127.                 if err != nil {
  128.                         log.Fatalln(err)
  129.                 }
  130.                 switch s {
  131.                 case "1":
  132.                         fmt.Print("密码: ")
  133.                         _, err = fmt.Scan(&myUser.Password)
  134.                         result = service.UpdateUserByUserNo(myUser)
  135.                         break
  136.                 case "2":
  137.                         return
  138.                 default:
  139.                         fmt.Println("输入不合法,请重新选择")
  140.                         fmt.Println("------------------------")
  141.                         goto out2
  142.                 }
  143.         }
  144.         if result {
  145.                 fmt.Println("修改成功!")
  146.         } else {
  147.                 fmt.Println("修改失败!")
  148.         }
  149. }
  150. // Login
  151. // @Title Login
  152. // @Description 登录
  153. func Login() model.User {
  154.         var password string
  155.         var userNo string
  156.         fmt.Print("学号|工号: ")
  157.         _, err := fmt.Scan(&userNo)
  158.         if err != nil {
  159.                 log.Fatalln(err)
  160.         }
  161.         fmt.Print("密码: ")
  162.         _, err = fmt.Scan(&password)
  163.         if err != nil {
  164.                 log.Fatalln(err)
  165.         }
  166.         user := service.SelectUserByUserNo(userNo)
  167.         if user.IsStructureEmpty() {
  168.                 fmt.Println("登录失败,学号|工号或密码错误。")
  169.                 return user
  170.         }
  171.         if user.Password == password {
  172.                 fmt.Println("登录成功")
  173.                 return user
  174.         } else {
  175.                 fmt.Println("登录失败,学号|工号或密码错误。")
  176.                 return model.User{}
  177.         }
  178. }
复制代码
6. main.go

  1. var User model.User
  2. func init() {
  3.         log.SetFlags(log.Lshortfile | log.Ltime | log.Ldate)
  4. }
  5. func main() {
  6.         View()
  7. }
  8. func View() {
  9.         fmt.Println("-------------欢迎来到教务管理系统-------------")
  10. start:
  11.         fmt.Println("1> 登录")
  12.         fmt.Println("2> 退出")
  13.         fmt.Println("-------------------------------------------")
  14.         var s string
  15.         _, err := fmt.Scan(&s)
  16.         if err != nil {
  17.                 log.Fatalln(err)
  18.         }
  19.         switch s {
  20.         case "1":
  21.         Login:
  22.                 User = controller.Login()
  23.                 if User.IsStructureEmpty() {
  24.                         fmt.Println("-----------请重新输入-----------")
  25.                         goto Login
  26.                 }
  27.                 for {
  28.                         if User.Level == 0 {
  29.                                 fmt.Println("---------------欢迎管理员进入---------------")
  30.                         admin:
  31.                                 fmt.Println("请选择您要进行的操作:")
  32.                                 fmt.Println("1>查询用户")
  33.                                 fmt.Println("2>添加用户")
  34.                                 fmt.Println("3>删除用户")
  35.                                 fmt.Println("4>修改用户")
  36.                                 fmt.Println("5>退出登录")
  37.                                 var s1 string
  38.                                 _, err = fmt.Scan(&s1)
  39.                                 if err != nil {
  40.                                         log.Fatalln(err)
  41.                                 }
  42.                                 switch s1 {
  43.                                 case "1":
  44.                                 Select:
  45.                                         fmt.Println("1>查询所有用户")
  46.                                         fmt.Println("2>查询指定学号|工号用户")
  47.                                         fmt.Println("3>返回")
  48.                                         var s2 string
  49.                                         _, err = fmt.Scan(&s2)
  50.                                         if err != nil {
  51.                                                 log.Fatalln(err)
  52.                                         }
  53.                                         switch s2 {
  54.                                         case "1":
  55.                                                 controller.SelectALLUser()
  56.                                                 break
  57.                                         case "2":
  58.                                                 controller.SelectUserByNo()
  59.                                                 break
  60.                                         case "3":
  61.                                                 goto admin
  62.                                         default:
  63.                                                 fmt.Println("输入非法,请重新输入!")
  64.                                                 goto Select
  65.                                         }
  66.                                 case "2":
  67.                                         controller.InsertUser()
  68.                                         break
  69.                                 case "3":
  70.                                         controller.DeleteUserByNo()
  71.                                         break
  72.                                 case "4":
  73.                                         controller.UpdateUserByNo(User)
  74.                                         break
  75.                                 case "5":
  76.                                         User = model.User{}
  77.                                         goto start
  78.                                 default:
  79.                                         fmt.Println("输入不合法,请重新选择!")
  80.                                         goto admin
  81.                                 }
  82.                         }else {
  83.                                 fmt.Println("---------------欢迎登录---------------")
  84.                         Common:
  85.                                 fmt.Println("请选择您要进行的操作:")
  86.                                 fmt.Println("1>修改密码")
  87.                                 fmt.Println("2>退出登录")
  88.                                 var s1 string
  89.                                 _, err = fmt.Scan(&s1)
  90.                                 if err != nil {
  91.                                         log.Fatalln(err)
  92.                                 }
  93.                                 switch s1 {
  94.                                 case "1":
  95.                                         controller.UpdateUserByNo(User)
  96.                                         break
  97.                                 case "2":
  98.                                         User = model.User{}
  99.                                         goto start
  100.                                 default:
  101.                                         fmt.Println("输入不合法,请重新选择!")
  102.                                         goto Common
  103.                                 }
  104.                         }
  105.                 }
  106.         case "2":
  107.                 fmt.Println("欢迎您的下次使用!")
  108.                 return
  109.         default:
  110.                 fmt.Println("输入非法,请重新输入!")
  111.                 goto start
  112.         }
  113. }
复制代码
7. user.txt文件

   文件预筹划:
 user.txt : 用于储存用户信息
   权限为0(管理员,账号暗码须要手动录入)可举行: 对门生信息举行增编削查,无需暗码即可删除门生|修改门生暗码,账号默认暗码123456
   权限为1可举行: 本人暗码的修改
   权限为2可举行: 本人暗码的修改
    0000 admin admin 0
    1002 tea01 123456 1
    2001 stu01 123456 2

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作