前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于golang的学生信息管理系统

基于golang的学生信息管理系统

原创
作者头像
菜菜有点菜
发布2024-09-12 21:41:22
1360
发布2024-09-12 21:41:22
举报
文章被收录于专栏:白菜博客

数据库

启动数据库

使用 go-sql-driver/mysql 库连接到 MySQL 数据库。连接信息:root:123456@tcp(127.0.0.1:3306)/books

建立数据库以及相应的数据表

创建一个名为 “books” 的数据库。在 “books” 数据库中创建一个名为 “users” 的数据表,包含 “name” 和 “pass” 两个字段。在 “books” 数据库中创建一个名为 “stud” 的数据表,包含 “id”、“xuehao”、“xingming”、“ban”、“banma”、“kecheng” 和 “zy” 七个字段。

创建项目

2.1 创建项目

使用 Go 语言的 http 库创建一个 Web 应用程序。

bee new admin

打开项目

VS使用文本编辑器或 IDE 打开项目文件夹。

整理项目

将项目文件按照功能模块进行整理。

项目介绍

3.1 初始化数据库

在项目启动时,使用 sql.Open() 函数连接到 MySQL 数据库,并检查连接是否成功。

处理 HTTP 请求

使用 http.HandleFunc() 函数设置路由和处理函数,处理不同的 HTTP 请求。。

模板渲染

使用 template.ParseFiles() 函数加载 HTML 模板文件,并使用 template.Execute() 函数渲染模板。

注册

提供一个注册页面,用户可以输入用户名和密码进行注册。将注册信息插入到 “users” 数据表中。

登录

提供一个登录页面,用户可以输入用户名和密码进行登录。验证用户名和密码是否正确,如果正确则跳转到搜索页面。

搜索

提供一个搜索页面,用户可以输入查询条件进行搜索。根据查询条件从 “stud” 数据表中检索数据,并显示搜索结果。

tests——测试

使用 Go 语言的调试工具进行调试,例如使用 “fmt.Println()” 函数输出调试信息。

main.go

项目运行

使用 “go run main.go” 命令运行项目。

全部代码

代码语言:txt
复制
package main

import (
	"database/sql"
	"html/template"
	"log"
	"net/http"

	_ "github.com/go-sql-driver/mysql"
)

var a1 *sql.DB
var a2 error

func init() {
	a1, a2 = sql.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/books")
	if a2 != nil {
		log.Fatal(a2)
	}

	a2 = a1.Ping()
	if a2 != nil {
		log.Fatal(a2)
	}
}

func main() {
	http.HandleFunc("/results", a3)
	http.HandleFunc("/register", a4)
	http.HandleFunc("/registerSubmit", a5)
	http.HandleFunc("/login", a6)
	http.HandleFunc("/searchSubmit", a7)
	http.HandleFunc("/", a8)
	http.HandleFunc("/loginSubmit", a9)
	http.HandleFunc("/search", a10)
	log.Fatal(http.ListenAndServe(":8080", nil))
}

func a8(w http.ResponseWriter, r *http.Request) {
	t := template.Must(template.ParseFiles("index.html"))
	t.Execute(w, nil)
}

func a4(w http.ResponseWriter, r *http.Request) {
	t := template.Must(template.ParseFiles("register.html"))
	t.Execute(w, nil)
}

func a5(w http.ResponseWriter, r *http.Request) {
	if r.Method == "POST" {
		name := r.FormValue("name")
		pass := r.FormValue("pass")
		_, a2 := a1.Exec("INSERT INTO users (name, pass) VALUES (?, ?)", name, pass)
		if a2 != nil {
			http.Error(w, a2.Error(), http.StatusInternalServerError)
			return
		}
		http.Redirect(w, r, "/login", http.StatusSeeOther)
	}
}

func a6(w http.ResponseWriter, r *http.Request) {
	t := template.Must(template.ParseFiles("login.html"))
	t.Execute(w, nil)
}

func a9(w http.ResponseWriter, r *http.Request) {
	if r.Method == "POST" {
		name := r.FormValue("name")
		pass := r.FormValue("pass")
		var a3 string
		a2 := a1.QueryRow("SELECT name FROM users WHERE name = ? AND pass = ?", name, pass).Scan(&a3)
		if a2 != nil {
			http.Error(w, "用户名或密码错误", http.StatusUnauthorized)
			return
		}
		http.Redirect(w, r, "/search", http.StatusSeeOther)
	}
}

func a10(w http.ResponseWriter, r *http.Request) {
	t := template.Must(template.ParseFiles("search.html"))
	t.Execute(w, nil)
}

func a7(w http.ResponseWriter, r *http.Request) {
	if r.Method == "POST" {
		query := r.FormValue("query")
		http.Redirect(w, r, "/results?q="+query, http.StatusSeeOther)
	}
}

func a3(w http.ResponseWriter, r *http.Request) {
	query := r.URL.Query().Get("q")
	rows, a2 := a1.Query("SELECT * FROM stud WHERE xuehao LIKE ? OR xingming LIKE ? OR ban LIKE ? OR banma LIKE ? OR kecheng LIKE ? OR zy LIKE ?", "%"+query+"%", "%"+query+"%", "%"+query+"%", "%"+query+"%", "%"+query+"%", "%"+query+"%")
	if a2 != nil {
		http.Error(w, a2.Error(), http.StatusInternalServerError)
		return
	}
	defer rows.Close()

	var results []map[string]interface{}
	for rows.Next() {
		var id int
		var xuehao, xingming, ban, banma, kecheng, zy string
		a2 := rows.Scan(&id, &xuehao, &xingming, &ban, &banma, &kecheng, &zy)
		if a2 != nil {
			http.Error(w, a2.Error(), http.StatusInternalServerError)
			return
		}
		result := map[string]interface{}{
			"id":       id,
			"xuehao":   xuehao,
			"xingming": xingming,
			"ban":      ban,
			"banma":    banma,
			"kecheng":  kecheng,
			"zy":       zy,
		}
		results = append(results, result)
	}

	t := template.Must(template.ParseFiles("results.html"))
	t.Execute(w, results)
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档