首页 > 其他分享 >简易的学生管理系统(go语言)

简易的学生管理系统(go语言)

时间:2023-08-09 19:56:46浏览次数:34  
标签:Println name err 管理系统 fmt 简易 student go scanner

简易的学生管理系统(go语言)

首先,你需要安装github.com/go-sql-driver/mysql这个包来操作MySQL数据库。你可以使用以下命令来安装它:

go get github.com/go-sql-driver/mysql
package main

import (
	"database/sql"
	"fmt"
	"os"
	"bufio"
	"strings"

	_ "github.com/go-sql-driver/mysql" // 导入MySQL数据库驱动
)

type Student struct {
	ID    int
	Name  string
	Age   int
	Grade float64
}

var db *sql.DB

func init() {
	var err error
	// 创建数据库连接字符串
	dsn := "username:password@tcp(localhost:3306)/dbname"
	// 打开MySQL数据库连接
	db, err = sql.Open("mysql", dsn)
	if err != nil {
		fmt.Println("数据库连接失败:", err)
		os.Exit(1)
	}

	// 测试数据库连接
	err = db.Ping()
	if err != nil {
		fmt.Println("数据库连接失败:", err)
		os.Exit(1)
	}

	// 创建表格(如果不存在)
	_, err = db.Exec(`
		CREATE TABLE IF NOT EXISTS students (
			id INT AUTO_INCREMENT PRIMARY KEY,
			name VARCHAR(255),
			age INT,
			grade FLOAT
		)
	`)
	if err != nil {
		fmt.Println("创建表格失败:", err)
		os.Exit(1)
	}
}

func addStudent(name string, age int, grade float64) {
	// 向数据库插入学生信息
	_, err := db.Exec("INSERT INTO students (name, age, grade) VALUES (?, ?, ?)", name, age, grade)
	if err != nil {
		fmt.Println("添加学生信息失败:", err)
		return
	}
	fmt.Println("学生信息已添加")
}

func getStudent(name string) (Student, error) {
	var student Student
	// 查询学生信息
	row := db.QueryRow("SELECT id, name, age, grade FROM students WHERE name = ?", name)
	err := row.Scan(&student.ID, &student.Name, &student.Age, &student.Grade)
	return student, err
}

func listStudents() {
	rows, err := db.Query("SELECT id, name, age, grade FROM students")
	if err != nil {
		fmt.Println("查询学生信息失败:", err)
		return
	}
	defer rows.Close()

	fmt.Println("所有学生信息:")
	for rows.Next() {
		var student Student
		err := rows.Scan(&student.ID, &student.Name, &student.Age, &student.Grade)
		if err != nil {
			fmt.Println("读取学生信息失败:", err)
			return
		}
		fmt.Printf("ID: %d, 姓名: %s, 年龄: %d, 成绩: %.2f\n", student.ID, student.Name, student.Age, student.Grade)
	}
}

func main() {
	fmt.Println("欢迎使用学生管理系统!")
	fmt.Println("可用命令:add, get, list, exit")

	scanner := bufio.NewScanner(os.Stdin)
	for {
		fmt.Print("请输入命令:")
		scanner.Scan()
		command := scanner.Text()
		switch command {
		case "add":
			fmt.Print("请输入学生姓名:")
			scanner.Scan()
			name := scanner.Text()

			fmt.Print("请输入学生年龄:")
			scanner.Scan()
			age := 0
			fmt.Sscanf(scanner.Text(), "%d", &age)

			fmt.Print("请输入学生成绩:")
			scanner.Scan()
			grade := 0.0
			fmt.Sscanf(scanner.Text(), "%f", &grade)

			addStudent(name, age, grade)

		case "get":
			fmt.Print("请输入学生姓名:")
			scanner.Scan()
			name := scanner.Text()
			student, err := getStudent(name)
			if err == sql.ErrNoRows {
				fmt.Println("未找到该学生的信息。")
			} else if err != nil {
				fmt.Println("查询学生信息失败:", err)
			} else {
				fmt.Printf("ID: %d, 姓名: %s, 年龄: %d, 成绩: %.2f\n", student.ID, student.Name, student.Age, student.Grade)
			}

		case "list":
			listStudents()

		case "exit":
			fmt.Println("感谢使用学生管理系统!")
			db.Close()
			return

		default:
			fmt.Println("无效的命令,请重新输入。")
		}
	}
}

标签:Println,name,err,管理系统,fmt,简易,student,go,scanner
From: https://www.cnblogs.com/xdtxblog/p/17617862.html

相关文章

  • 使用golang解决LeetCode热题Hot100(1-10)
    使用golang解决LeetCode热题Hot1001.两数之和https://leetcode.cn/problems/two-sum/题目给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个......
  • Go语言——函数与闭包
    1函数定义在Go语言中定义函数使用func关键字,格式如下func函数名(参数)(返回值){ 函数体}函数名:由字母、数字、下划线组成。但首字母不能为数字,同一个包下,函数名称也不能重复参数:名称和类型组成,多个参数之间使用,分隔返回值:由返回值名称和返回值类型组成,返回值名称可以......
  • Django REST framework
    简介在Django框架基础之上,进行二次开发用于构建RestfulAPI简称为DRF框架或RESTframework 特性提供了强大的Serialize序列化器,可以高效进行序列化与反序列化操作提供了极为丰富的类视图、Mixin扩张类、ViewSet视图集提供了直观的We......
  • JMeter有对手了?RunnerGo这些功能真不错!
    当谈到对于性能测试的需求时,JMeter和RunnerGo在测试场景设置、执行性能测试、性能测试结果分析等方面都提供了很多功能,但两个工具仍然存在一些区别。以下是详细的比较分析:层次分明的模块化设计告别文件管理混乱:JMeter的设计倾向于单体结构,即将所有测试元素组合在一个文件中,一个文件......
  • JMeter有对手了?RunnerGo这些功能真不错!
    当谈到对于性能测试的需求时,JMeter和RunnerGo在测试场景设置、执行性能测试、性能测试结果分析等方面都提供了很多功能,但两个工具仍然存在一些区别。以下是详细的比较分析:层次分明的模块化设计告别文件管理混乱:JMeter的设计倾向于单体结构,即将所有测试元素组合在一个文件中,一个......
  • 免费 | 线上直播 | Google Cloud 如何为零售业提供增长解决方案?
    新的线上直播课程又来咯!赶快报名参加吧!时间:8月16日15:00-15:30直播地址:点击链接报名获取01.活动流程15:00-15:20GoogleCloud如何为零售业提供增长解决方案?15:20-15:30Q&A02.活动亮点亮点1:零售业多方面多维度讲解助您全面获取零售业相关信息。亮点2:零售领域深度......
  • django的queryset和objects对象
    1.queryset是查询集,就是传到服务器上的url里面的内容。Django会对查询返回的结果集QerySet进行缓存,这里是为了提高查询效率。  也就是说,在你创建一个QuerySet对象的时候,Django并不会立即向数据库发出查询命令,只有在你需要用到这个QuerySet的时候才回去数据库查询。2.Objects......
  • 让 GPT-4 给开源项目 GoPool Review 社区贡献者的 PR - 每天5分钟玩转 GPT 编程系列(5
    目录1.嘚瑟一下2.言归正传2.1GoPool的第一个PR2.2祭出GPT-42.3问问GPT-4怎么看这个PR2.4让GPT-4重构代码3.打完收工1.嘚瑟一下你还记得那个宣称自己性能全网第一的GolangWorkerPool不?对,就是能够GoPool,据说作者拿着GPT-4只花了3天就把这个项目肝出来了。......
  • go语言入门1---环境搭建以及helloworld
    go语言入门11环境搭建1.1安装go首先,在go官网下载,下面两个都行go版本-windows-amd64.msi,一直next就行,安装目录写成C:\Go\就行go版本-windows-amd64.zip压缩包直接压缩,将go文件直接移到C盘下新建的Go文件夹下。1.2添加环境变量将C:\Go\bin添加到环境变量path中1.3测试go......
  • 何时使用MongoDB而不是MySql
    什么是MySQL和MongoDBMySQL和MongoDB是两个可用于存储和管理数据的数据库管理系统。MySQL是一个关系数据库系统,以结构化表格格式存储数据。相比之下,MongoDB以更灵活的格式将数据存储为JSON文档。两者都提供性能和可扩展性,但它们为不同的应用场景提供了更好的性能。My......