学生信息管理系统

学生信息管理系统:
main:

package main

import (
   "mysql_learn/service"
)

/*
实现一个学生信息管理系统
学生信息:学号
      姓名
      年龄
      班级
系统面板:
----------欢迎使用学生信息管理系统----------
1、增加学生信息
2、删除学生信息
3、修改学生信息
   1、修改学生姓名
   2、修改学生年龄
   3、修改学生班级
4、查看学生信息
   1、查看单个学生的信息
   2、查看所有学生的信息
5、退出系统
-----------------------------------------
*/
func main() {
   service.ConnectDatabase() //连接数据库
   for {
      service.ShowMenu()                             //功能菜单
      num := service.ChoiceNumberExecutiveFunction() //选择数字
      service.NumCorrespondOperate(num)              //执行数字对应的函数
   }
}

service:

package service

import (
   "database/sql"
   "fmt"
   _ "github.com/go-sql-driver/mysql"
   "log"
   "mysql_learn/template"
   "os"
)

var db *sql.DB //定义一个数据库对象的全局变量

// ShowMenu 功能面板
func ShowMenu() {
   println("----------欢迎使用学生信息管理系统----------")
   println("1、增加学生信息")
   println("2、删除学生信息")
   println("3、修改学生信息")
   println("4、查看学生信息")
   println("5、退出系统")
   println("-----------------------------------------")
}

// ChoiceNumberExecutiveFunction 选择数字对应的功能
func ChoiceNumberExecutiveFunction() int {
   fmt.Println("请输入数字,系统来执行该数字对应的功能")
   var inputNumber int
   _, err := fmt.Scanln(&inputNumber)
   if err != nil {
      log.Fatal(err)
   }
   return inputNumber
}

// NumCorrespondOperate 数字对应操作
func NumCorrespondOperate(num int) {
   switch num {
   case 1:
      //增
      AddData()
   case 2:
      //删
      DeleteData()
   case 3:
      //改
      UpdateData()
   case 4:
      //查
      LookStudentMessage()
   case 5:
      os.Exit(1) //退出系统
   }
}

// ConnectDatabase 数据库的连接
func ConnectDatabase() {
   var err error
   dsn := "root:123456@tcp(127.0.0.1:3306)/go_db?charset=utf8mb4&parseTime=True"
   db, err = sql.Open("mysql", dsn)
   if err != nil {
      fmt.Println("数据库连接发生错误,err:", err)
      return
   }
   //尝试与数据库建立连接,校验dsn是否正确。
   err = db.Ping()
   if err != nil {
      fmt.Println("使用Ping()发现Ping不同,说明数据库连接失败。")
      return
   }
   fmt.Println("数据库连接成功")
}

// CreateTable 创建数据库中的表
//func CreateTable() {
// sqlStr := "create table studentMessage (Id integer primary key auto_increment,Name varchar(50),Age integer,Class varchar(50))"
// _, err := db.Exec(sqlStr)
// if err != nil {
//    fmt.Println("表创建失败,err:", err)
//    return
// }
//}

//CloseDatabase  关闭数据库
//func CloseDatabase() {
// err := db.Close()
// if err != nil {
//    fmt.Println("关闭数据库出现错误,err:", err)
//    return
// }
//}

// AddData 往数据库中插入数据
func AddData() {
   var (
      Id    int
      Name  string
      Age   int
      Class string
   )
   println("----------请输入学生的各项基本信息----------")
   println("1、请输入学生学号:")
   fmt.Scanln(&Id)
   println("2、请输入学生姓名")
   fmt.Scanln(&Name)
   println("3、请输入学生年龄")
   fmt.Scanln(&Age)
   println("4、请输入学生班级")
   fmt.Scanln(&Class)
   sqlStr := "insert into student_message(Id,Name,Age,Class) values(?,?,?,?)"
   _, err := db.Exec(sqlStr, Id, Name, Age, Class)
   if err != nil {
      log.Fatal(err)
   }
   fmt.Println("插入数据成功。")
}

// DeleteData 删除学生信息
func DeleteData() {
   var Id int
   fmt.Println("请输入要删除的学生Id:")
   fmt.Scanln(&Id)
   sqlStr := "delete from student_message where Id=?"
   _, err := db.Exec(sqlStr, Id)
   if err != nil {
      fmt.Println("从数据中删除数据发生错误,err:", err)
      return
   }
   fmt.Printf("Id为:%v的学生个人信息删除成功。\n", Id)
}

//studentMessageMenu 学生个人信息菜单
func studentMessageMenu() {
   println("1、修改学生姓名")
   println("2、修改学生年龄")
   println("3、修改学生班级")
   println("4、修改学生全部信息")
   fmt.Println("请输入相应数字:")
}

// UpdateData 修改学生信息
func UpdateData() {
   var (
      inputNumber int
      Id          int
      Name        string
      Age         int
      Class       string
   )

   fmt.Println("----------请选择要修改哪部分的信息----------")
   studentMessageMenu()
   fmt.Scanln(&inputNumber)
   switch inputNumber {
   case 1:
      fmt.Println("请输入学生Id:")
      fmt.Scanln(&Id)
      fmt.Println("请输入修改后的学生姓名:")
      fmt.Scanln(&Name)
      sqlStr := "update student_message set Name=? where Id=?"
      _, err := db.Exec(sqlStr, Name, Id)
      if err != nil {
         fmt.Println("err:", err)
         return
      }
      fmt.Println("学生姓名修改成功")
   case 2:
      fmt.Println("请输入学生Id:")
      fmt.Scanln(&Id)
      fmt.Println("请输入修改后的学生年龄:")
      fmt.Scanln(&Age)
      sqlStr := "update student_message set Age=? where Id=?"
      _, err := db.Exec(sqlStr, Age, Id)
      if err != nil {
         fmt.Println("err:", err)
         return
      }
      fmt.Println("学生年龄修改成功")
   case 3:
      fmt.Println("请输入学生Id:")
      fmt.Scanln(&Id)
      fmt.Println("请输入修改后的学生班级:")
      fmt.Scanln(&Class)
      sqlStr := "update student_message set Class=? where Id=?"
      _, err := db.Exec(sqlStr, Class, Id)
      if err != nil {
         fmt.Println("err:", err)
         return
      }
      fmt.Println("学生班级修改成功")
   case 4:
      fmt.Println("请输入学生Id:")
      fmt.Scanln(&Id)
      sql := "delete from student_message where Id=?"
      _, err := db.Exec(sql, Id)
      if err != nil {
         fmt.Println("err:", err)
         return
      }
      AddData()
   }
}

// LookStudentMessage 查看学生个人信息
func LookStudentMessage() {
   var (
      inputNumber int
      Id          int
   )
   fmt.Println("----------查看学生个人信息----------")
   println("1、查看单个学生的信息")
   println("2、查看所有学生的信息")
   fmt.Println("请输入数字:")
   fmt.Scanln(&inputNumber)
   switch inputNumber {
   case 1:
      fmt.Println("请输入要查询学生的Id:")
      fmt.Scanln(&Id)
      sqlStr := "select Id,Name,Age,Class from student_message where Id=?"
      var u template.StudentMessage
      err := db.QueryRow(sqlStr, Id).Scan(&u.Id, &u.Name, &u.Age, &u.Class)
      if err != nil {
         fmt.Println(err)
         return
      }
      fmt.Println("----------学生信息如下----------")
      fmt.Printf("Id:%v\tName:%v\tAge:%v\tClass:%v\n", u.Id, u.Name, u.Age, u.Class)
      fmt.Println("-------------------------------")
   case 2:
      sqlStr := "select Id,Name,Age,Class from student_message "
      var u template.StudentMessage //定义一个结构体对象
      rows, err := db.Query(sqlStr) //返回一个指向Rows结构体的一个指针变量。
      if err != nil {
         log.Fatal(err)
      }
      //非常重要,关闭rows释放持有的数据库连接。
      defer func(rows *sql.Rows) {
         err := rows.Close()
         if err != nil {
            log.Fatal(err)
         }
      }(rows)
      //循环读取结果集中的数据。(rows便是结果集)
      for rows.Next() {
         err := rows.Scan(&u.Id, &u.Name, &u.Age, &u.Class)
         if err != nil {
            log.Fatal(err)
         }
         fmt.Printf("Id:%v\tName:%v\tAge:%v\tClass:%v\n", u.Id, u.Name, u.Age, u.Class)
      }
   }
}

template:

package template

// StudentMessage 数据库中的表中的信息都是StudentMessage结构体的对象
type StudentMessage struct {
   Id    int
   Name  string
   Age   int
   Class string
}

对项目的分层不太好,欢迎大佬批评指正。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值