Python题目:学生信息管理系统-高级版(图形界面+MySQL数据库)

2023-11-13

Python题目:学生信息管理系统-高级版(图形界面+MySQL数据库)

       使用图形界面显示,选用list、tuple、dictionary或map等数据结构,操作数据库存储X个学生的三门课的成绩(机器学习、Python程序设计、研究生英语),并实现以下功能:

1.添加学生信息
2.修改学生信息
3.删除学生
4.添加学生的成绩
5.修改学生成绩
6.按姓名或者学号查找学生,显示学生信息及三门课的成绩,以及排名
7.学生成绩统计(每门课的平均分、最高分、最低分)

代码里的注释很清楚了,这里不做讲解了,有任何问题可以评论提问。 

注意:

  • 数据表不存在则创建表,但自动创建的表是空白的,管理员用户名和密码需要自己数据库中添加一个(也可以运行文章最后的sql语句),为什么会出现这个问题,因为这是个课堂作业,当时没有设计好,现在懒得再改代码了╮(╯﹏╰)╭.......
  • 数据库在代码中(代码里有两处需要修改数据库 用户名、密码 的地方第66行第490行),配置为:
# 打开数据库连接 连接测试
db = pymysql.connect("localhost", "root", "root", "student")

       分别表示  主机名:localhost,用户名:root,密码:root,数据库名:student 


下面是界面的截图

 

 管理员操作界面,拥有增删改查功能,甚至拥有排序功能φ(>ω<*) ,快点击标签栏试试

 

 代码:

#!/usr/bin/python3

import pymysql
from tkinter import ttk
import tkinter as tk
import tkinter.font as tkFont
from tkinter import * # 图形界面库
import tkinter.messagebox as messagebox # 弹窗


class StartPage:
	def __init__(self, parent_window):
		parent_window.destroy() # 销毁子界面

		self.window = tk.Tk()  # 初始框的声明
		self.window.title('学生信息管理系统')
		self.window.geometry('300x470') # 这里的乘是小x

		label = Label(self.window, text="学生信息管理系统", font=("Verdana", 20))
		label.pack(pady=100)  # pady=100 界面的长度

		Button(self.window, text="管理员登陆", font=tkFont.Font(size=16), command=lambda: AdminPage(self.window), width=30, height=2,
			   fg='white', bg='gray', activebackground='black', activeforeground='white').pack()
		Button(self.window, text="学生登陆", font=tkFont.Font(size=16), command=lambda: StudentPage(self.window), width=30,
			   height=2,fg='white', bg='gray', activebackground='black', activeforeground='white').pack()
		Button(self.window, text="关于", font=tkFont.Font(size=16), command=lambda: AboutPage(self.window), width=30, height=2,
			   fg='white', bg='gray', activebackground='black', activeforeground='white').pack()
		Button(self.window, text='退出系统', height=2, font=tkFont.Font(size=16), width=30, command=self.window.destroy,
			   fg='white', bg='gray', activebackground='black', activeforeground='white').pack()

		self.window.mainloop() # 主消息循环


#管理员登陆页面
class AdminPage:
	def __init__(self, parent_window):
		parent_window.destroy() # 销毁主界面

		self.window = tk.Tk()  # 初始框的声明
		self.window.title('管理员登陆页面')
		self.window.geometry('300x450')  # 这里的乘是小x

		label = tk.Label(self.window, text='管理员登陆', bg='green', font=('Verdana', 20), width=30, height=2)
		label.pack()

		Label(self.window, text='管理员账号:', font=tkFont.Font(size=14)).pack(pady=25)
		self.admin_username = tk.Entry(self.window, width=30, font=tkFont.Font(size=14), bg='Ivory')
		self.admin_username.pack()

		Label(self.window, text='管理员密码:', font=tkFont.Font(size=14)).pack(pady=25)
		self.admin_pass = tk.Entry(self.window, width=30, font=tkFont.Font(size=14), bg='Ivory', show='*')
		self.admin_pass.pack()

		Button(self.window, text="登陆", width=8, font=tkFont.Font(size=12), command=self.login).pack(pady=40)
		Button(self.window, text="返回首页", width=8, font=tkFont.Font(size=12), command=self.back).pack()

		self.window.protocol("WM_DELETE_WINDOW", self.back)  # 捕捉右上角关闭点击
		self.window.mainloop()  # 进入消息循环

	def login(self):
		print(str(self.admin_username.get()))
		print(str(self.admin_pass.get()))
		admin_pass = None

		# 数据库操作 查询管理员表
		db = pymysql.connect("localhost", "root", "root", "student")  # 打开数据库连接
		cursor = db.cursor()  # 使用cursor()方法获取操作游标
		sql = "SELECT * FROM admin_login_k WHERE admin_id = '%s'" % (self.admin_username.get())  # SQL 查询语句
		try:
		# 执行SQL语句
			cursor.execute(sql)
			# 获取所有记录列表
			results = cursor.fetchall()
			for row in results:
				admin_id = row[0]
				admin_pass = row[1]
				# 打印结果
				print("admin_id=%s,admin_pass=%s" % (admin_id, admin_pass))
		except:
			print("Error: unable to fecth data")
			messagebox.showinfo('警告!', '用户名或密码不正确!')
		db.close()  # 关闭数据库连接

		print("正在登陆管理员管理界面")
		print("self",self.admin_pass)
		print("local",admin_pass)

		if self.admin_pass.get() == admin_pass:
			AdminManage(self.window)  # 进入管理员操作界面
		else:
			messagebox.showinfo('警告!', '用户名或密码不正确!')

	def back(self):
		StartPage(self.window) # 显示主窗口 销毁本窗口


#学生登陆页面
class StudentPage:
	def __init__(self, parent_window):
		parent_window.destroy() # 销毁主界面

		self.window = tk.Tk()  # 初始框的声明
		self.window.title('学生登陆')
		self.window.geometry('300x450')  # 这里的乘是小x

		label = tk.Label(self.window, text='学生登陆', bg='green', font=('Verdana', 20), width=30, height=2)
		label.pack()

		Label(self.window, text='学生账号:', font=tkFont.Font(size=14)).pack(pady=25)
		self.student_id = tk.Entry(self.window, width=30, font=tkFont.Font(size=14), bg='Ivory')
		self.student_id.pack()

		Label(self.window, text='学生密码:', font=tkFont.Font(size=14)).pack(pady=25)
		self.student_pass = tk.Entry(self.window, width=30, font=tkFont.Font(size=14), bg='Ivory', show='*')
		self.student_pass.pack()

		Button(self.window, text="登陆", width=8, font=tkFont.Font(size=12), command=self.login).pack(pady=40)
		Button(self.window, text="返回首页", width=8, font=tkFont.Font(size=12), command=self.back).pack()

		self.window.protocol("WM_DELETE_WINDOW", self.back)  # 捕捉右上角关闭点击
		self.window.mainloop()  # 进入消息循环

	def login(self):
		print(str(self.student_id.get()))
		print(str(self.student_pass.get()))
		stu_pass = None

		# 数据库操作 查询管理员表
		db = pymysql.connect("localhost", "root", "root", "student")  # 打开数据库连接
		cursor = db.cursor()  # 使用cursor()方法获取操作游标
		sql = "SELECT * FROM stu_login_k WHERE stu_id = '%s'" % (self.student_id.get())  # SQL 查询语句
		try:
			# 执行SQL语句
			cursor.execute(sql)
			# 获取所有记录列表
			results = cursor.fetchall()
			for row in results:
				stu_id = row[0]
				stu_pass = row[1]
				# 打印结果
				print("stu_id=%s,stu_pass=%s" % (stu_id, stu_pass))
		except:
			print("Error: unable to fecth data")
			messagebox.showinfo('警告!', '用户名或密码不正确!')
		db.close()  # 关闭数据库连接

		print("正在登陆学生信息查看界面")
		print("self", self.student_pass.get())
		print("local", stu_pass)

		if self.student_pass.get() == stu_pass:
			StudentView(self.window, self.student_id.get()) # 进入学生信息查看界面
		else:
			messagebox.showinfo('警告!', '用户名或密码不正确!')

	def back(self):
		StartPage(self.window)  # 显示主窗口 销毁本窗口



# 管理员操作界面
class AdminManage:
	def __init__(self, parent_window):
		parent_window.destroy() # 销毁主界面

		self.window = Tk()  # 初始框的声明
		self.window.title('管理员操作界面')

		self.frame_left_top = tk.Frame(width=300, height=200)
		self.frame_right_top = tk.Frame(width=200, height=200)
		self.frame_center = tk.Frame(width=500, height=400)
		self.frame_bottom = tk.Frame(width=650, height=50)

		# 定义下方中心列表区域
		self.columns = ("学号", "姓名", "性别", "年龄")
		self.tree = ttk.Treeview(self.frame_center, show="headings", height=18, columns=self.columns)
		self.vbar = ttk.Scrollbar(self.frame_center, orient=VERTICAL, command=self.tree.yview)
		# 定义树形结构与滚动条
		self.tree.configure(yscrollcommand=self.vbar.set)

		# 表格的标题
		self.tree.column("学号", width=150, anchor='center')  # 表示列,不显示
		self.tree.column("姓名", width=150, anchor='center')
		self.tree.column("性别", width=100, anchor='center')
		self.tree.column("年龄", width=100, anchor='center')

		# 调用方法获取表格内容插入
		self.tree.grid(row=0, column=0, sticky=NSEW)
		self.vbar.grid(row=0, column=1, sticky=NS)

		self.id = []
		self.name = []
		self.gender = []
		self.age = []
		# 打开数据库连接
		db = pymysql.connect("localhost", "root", "root", "student")
		cursor = db.cursor()  # 使用cursor()方法获取操作游标
		sql = "SELECT * FROM student_k"  # SQL 查询语句
		try:
			# 执行SQL语句
			cursor.execute(sql)
			# 获取所有记录列表
			results = cursor.fetchall()
			for row in results:
				self.id.append(row[0])
				self.name.append(row[1])
				self.gender.append(row[2])
				self.age.append(row[3])
				# print(self.id)
				# print(self.name)
				# print(self.gender)
				# print(self.age)
		except:
			print("Error: unable to fetch data")
			messagebox.showinfo('警告!', '数据库连接失败!')
		db.close()# 关闭数据库连接


		print("test***********************")
		for i in range(min(len(self.id), len(self.name), len(self.gender), len(self.age))):  # 写入数据
			self.tree.insert('', i, values=(self.id[i], self.name[i], self.gender[i], self.age[i]))

		for col in self.columns:  # 绑定函数,使表头可排序
			self.tree.heading(col, text=col,
							  command=lambda _col=col: self.tree_sort_column(self.tree, _col, False))

		# 定义顶部区域
		# 定义左上方区域
		self.top_title = Label(self.frame_left_top, text="学生信息:", font=('Verdana', 20))
		self.top_title.grid(row=0, column=0, columnspan=2, sticky=NSEW, padx=50, pady=10)

		self.left_top_frame = tk.Frame(self.frame_left_top)
		self.var_id = StringVar()  # 声明学号
		self.var_name = StringVar()  # 声明姓名
		self.var_gender = StringVar()  # 声明性别
		self.var_age = StringVar()  # 声明年龄
		# 学号
		self.right_top_id_label = Label(self.frame_left_top, text="学号:", font=('Verdana', 15))
		self.right_top_id_entry = Entry(self.frame_left_top, textvariable=self.var_id, font=('Verdana', 15))
		self.right_top_id_label.grid(row=1, column=0)  # 位置设置
		self.right_top_id_entry.grid(row=1, column=1)
		# 姓名
		self.right_top_name_label = Label(self.frame_left_top, text="姓名:", font=('Verdana', 15))
		self.right_top_name_entry = Entry(self.frame_left_top, textvariable=self.var_name, font=('Verdana', 15))
		self.right_top_name_label.grid(row=2, column=0)  # 位置设置
		self.right_top_name_entry.grid(row=2, column=1)
		# 性别
		self.right_top_gender_label = Label(self.frame_left_top, text="性别:", font=('Verdana', 15))
		self.right_top_gender_entry = Entry(self.frame_left_top, textvariable=self.var_gender,
											font=('Verdana', 15))
		self.right_top_gender_label.grid(row=3, column=0)  # 位置设置
		self.right_top_gender_entry.grid(row=3, column=1)
		# 年龄
		self.right_top_gender_label = Label(self.frame_left_top, text="年龄:", font=('Verdana', 15))
		self.right_top_gender_entry = Entry(self.frame_left_top, textvariable=self.var_age,
											font=('Verdana', 15))
		self.right_top_gender_label.grid(row=4, column=0)  # 位置设置
		self.right_top_gender_entry.grid(row=4, column=1)

		# 定义右上方区域
		self.right_top_title = Label(self.frame_right_top, text="操作:", font=('Verdana', 20))

		self.tree.bind('<Button-1>', self.click)  # 左键获取位置
		self.right_top_button1 = ttk.Button(self.frame_right_top, text='新建学生信息', width=20, command=self.new_row)
		self.right_top_button2 = ttk.Button(self.frame_right_top, text='更新选中学生信息', width=20,
											command=self.updata_row)
		self.right_top_button3 = ttk.Button(self.frame_right_top, text='删除选中学生信息', width=20,
											command=self.del_row)

		# 位置设置
		self.right_top_title.grid(row=1, column=0, pady=10)
		self.right_top_button1.grid(row=2, column=0, padx=20, pady=10)
		self.right_top_button2.grid(row=3, column=0, padx=20, pady=10)
		self.right_top_button3.grid(row=4, column=0, padx=20, pady=10)

		# 整体区域定位
		self.frame_left_top.grid(row=0, column=0, padx=2, pady=5)
		self.frame_right_top.grid(row=0, column=1, padx=30, pady=30)
		self.frame_center.grid(row=1, column=0, columnspan=2, padx=4, pady=5)
		self.frame_bottom.grid(row=2, column=0, columnspan=2)

		self.frame_left_top.grid_propagate(0)
		self.frame_right_top.grid_propagate(0)
		self.frame_center.grid_propagate(0)
		self.frame_bottom.grid_propagate(0)

		self.frame_left_top.tkraise() # 开始显示主菜单
		self.frame_right_top.tkraise() # 开始显示主菜单
		self.frame_center.tkraise() # 开始显示主菜单
		self.frame_bottom.tkraise() # 开始显示主菜单

		self.window.protocol("WM_DELETE_WINDOW", self.back)  # 捕捉右上角关闭点击
		self.window.mainloop()  # 进入消息循环

	def back(self):
		StartPage(self.window) # 显示主窗口 销毁本窗口

	def click(self, event):
		self.col = self.tree.identify_column(event.x)  # 列
		self.row = self.tree.identify_row(event.y)  # 行

		print(self.col)
		print(self.row)
		self.row_info = self.tree.item(self.row, "values")
		self.var_id.set(self.row_info[0])
		self.var_name.set(self.row_info[1])
		self.var_gender.set(self.row_info[2])
		self.var_age.set(self.row_info[3])
		self.right_top_id_entry = Entry(self.frame_left_top, state='disabled', textvariable=self.var_id,
										font=('Verdana', 15))

		print('')

	def tree_sort_column(self, tv, col, reverse):  # Treeview、列名、排列方式
		l = [(tv.set(k, col), k) for k in tv.get_children('')]
		l.sort(reverse=reverse)  # 排序方式
		# rearrange items in sorted positions
		for index, (val, k) in enumerate(l):  # 根据排序后索引移动
			tv.move(k, '', index)
		tv.heading(col, command=lambda: self.tree_sort_column(tv, col, not reverse))  # 重写标题,使之成为再点倒序的标题

	def new_row(self):
		print('123')
		print(self.var_id.get())
		print(self.id)
		if str(self.var_id.get()) in self.id:
			messagebox.showinfo('警告!', '该学生已存在!')
		else:
			if self.var_id.get() != '' and self.var_name.get() != '' and self.var_gender.get() != '' and self.var_age.get() != '':
				# 打开数据库连接
				db = pymysql.connect("localhost", "root", "root", "student")
				cursor = db.cursor()  # 使用cursor()方法获取操作游标
				sql = "INSERT INTO student_k(id, name, gender, age) \
				       VALUES ('%s', '%s', '%s', '%s')" % \
					  (self.var_id.get(), self.var_name.get(), self.var_gender.get(), self.var_age.get())  # SQL 插入语句
				try:
					cursor.execute(sql)  # 执行sql语句
					db.commit()  # 提交到数据库执行
				except:
					db.rollback()  # 发生错误时回滚
					messagebox.showinfo('警告!', '数据库连接失败!')
				db.close()  # 关闭数据库连接

				self.id.append(self.var_id.get())
				self.name.append(self.var_name.get())
				self.gender.append(self.var_gender.get())
				self.age.append(self.var_age.get())
				self.tree.insert('', len(self.id) - 1, values=(
				self.id[len(self.id) - 1], self.name[len(self.id) - 1], self.gender[len(self.id) - 1],
				self.age[len(self.id) - 1]))
				self.tree.update()
				messagebox.showinfo('提示!', '插入成功!')
			else:
				messagebox.showinfo('警告!', '请填写学生数据')

	def updata_row(self):
		res = messagebox.askyesnocancel('警告!', '是否更新所填数据?')
		if res == True:
			if self.var_id.get() == self.row_info[0]:  # 如果所填学号 与 所选学号一致
				# 打开数据库连接
				db = pymysql.connect("localhost", "root", "root", "student")
				cursor = db.cursor()  # 使用cursor()方法获取操作游标
				sql = "UPDATE student_k SET name = '%s', gender = '%s', age = '%s' \
				 WHERE id = '%s'" % (self.var_name.get(), self.var_gender.get(), self.var_age.get(), self.var_id.get())  # SQL 插入语句
				try:
					cursor.execute(sql)  # 执行sql语句
					db.commit()  # 提交到数据库执行
					messagebox.showinfo('提示!', '更新成功!')
				except:
					db.rollback()  # 发生错误时回滚
					messagebox.showinfo('警告!', '更新失败,数据库连接失败!')
				db.close()  # 关闭数据库连接

				id_index = self.id.index(self.row_info[0])
				self.name[id_index] = self.var_name.get()
				self.gender[id_index] = self.var_gender.get()
				self.age[id_index] = self.var_age.get()

				self.tree.item(self.tree.selection()[0], values=(
					self.var_id.get(), self.var_name.get(), self.var_gender.get(),
					self.var_age.get()))  # 修改对于行信息
			else:
				messagebox.showinfo('警告!', '不能修改学生学号!')

	def del_row(self):
		res = messagebox.askyesnocancel('警告!', '是否删除所选数据?')
		if res == True:
			print(self.row_info[0])  # 鼠标选中的学号
			print(self.tree.selection()[0])  # 行号
			print(self.tree.get_children())  # 所有行
			# 打开数据库连接
			db = pymysql.connect("localhost", "root", "root", "student")
			cursor = db.cursor()  # 使用cursor()方法获取操作游标
			sql = "DELETE FROM student_k WHERE id = '%s'" % (self.row_info[0]) # SQL 插入语句
			try:
				cursor.execute(sql)  # 执行sql语句
				db.commit()  # 提交到数据库执行
				messagebox.showinfo('提示!', '删除成功!')
			except:
				db.rollback()  # 发生错误时回滚
				messagebox.showinfo('警告!', '删除失败,数据库连接失败!')
			db.close()  # 关闭数据库连接

			id_index = self.id.index(self.row_info[0])
			print(id_index)
			del self.id[id_index]
			del self.name[id_index]
			del self.gender[id_index]
			del self.age[id_index]
			print(self.id)
			self.tree.delete(self.tree.selection()[0])  # 删除所选行
			print(self.tree.get_children())


# 学生查看信息界面
class StudentView:
	def __init__(self, parent_window, student_id):
		parent_window.destroy() # 销毁主界面

		self.window = tk.Tk()  # 初始框的声明
		self.window.title('关于')
		self.window.geometry('300x450')  # 这里的乘是小x

		label = tk.Label(self.window, text='学生信息查看', bg='green', font=('Verdana', 20), width=30, height=2)
		label.pack(pady=20)

		self.id = '学号:' + ''
		self.name = '姓名:' + ''
		self.gender = '性别:' + ''
		self.age = '年龄:' + ''
		# 打开数据库连接
		db = pymysql.connect("localhost", "root", "root", "student")
		cursor = db.cursor()# 使用cursor()方法获取操作游标
		sql = "SELECT * FROM student_k WHERE id = '%s'" % (student_id) # SQL 查询语句
		try:
			# 执行SQL语句
			cursor.execute(sql)
			# 获取所有记录列表
			results = cursor.fetchall()
			for row in results:
				self.id = '学号:' + row[0]
				self.name = '姓名:' + row[1]
				self.gender = '性别:' + row[2]
				self.age = '年龄:' + row[3]
		except:
			print("Error: unable to fetch data")
		db.close()		# 关闭数据库连接

		Label(self.window, text=self.id, font=('Verdana', 18)).pack(pady=5)
		Label(self.window, text=self.name, font=('Verdana', 18)).pack(pady=5)
		Label(self.window, text=self.gender, font=('Verdana', 18)).pack(pady=5)
		Label(self.window, text=self.age, font=('Verdana', 18)).pack(pady=5)

		Button(self.window, text="返回首页", width=8, font=tkFont.Font(size=16), command=self.back).pack(pady=25)

		self.window.protocol("WM_DELETE_WINDOW", self.back)  # 捕捉右上角关闭点击
		self.window.mainloop()  # 进入消息循环

	def back(self):
		StartPage(self.window)  # 显示主窗口 销毁本窗口


# About页面
class AboutPage:
	def __init__(self, parent_window):
		parent_window.destroy() # 销毁主界面

		self.window = tk.Tk()  # 初始框的声明
		self.window.title('关于')
		self.window.geometry('300x450')  # 这里的乘是小x

		label = tk.Label(self.window, text='学生信息管理系统', bg='green', font=('Verdana', 20), width=30, height=2)
		label.pack()

		Label(self.window, text='作者:清晨的光明', font=('Verdana', 18)).pack(pady=30)
		Label(self.window, text='blog.csdn.net/kdongyi', font=('Verdana', 18)).pack(pady=5)

		Button(self.window, text="返回首页", width=8, font=tkFont.Font(size=12), command=self.back).pack(pady=100)

		self.window.protocol("WM_DELETE_WINDOW", self.back)  # 捕捉右上角关闭点击
		self.window.mainloop()  # 进入消息循环

	def back(self):
		StartPage(self.window)  # 显示主窗口 销毁本窗口


if __name__ == '__main__':
	try:
		# 打开数据库连接 连接测试
		db = pymysql.connect("localhost", "root", "root", "student")
		# 使用cursor()方法获取操作游标
		cursor = db.cursor()
		# 如果数据表不存在则创建表 若存在则跳过
		# 设置主键唯一
		sql = """CREATE TABLE IF NOT EXISTS student_k(
				id char(20) NOT NULL,
				name char(20) default NULL,
				gender char(5) default NULL,  
				age char(5) default NULL,
				PRIMARY KEY (id)
				
				) ENGINE = InnoDB 
				DEFAULT	CHARSET = utf8
				"""
		cursor.execute(sql)
		# 如果数据表不存在则创建表 若存在则跳过
		sql = """CREATE TABLE IF NOT EXISTS admin_login_k(
						admin_id char(20) NOT NULL,
						admin_pass char(20) default NULL,
						PRIMARY KEY (admin_id)
						) ENGINE = InnoDB 
						DEFAULT	CHARSET = utf8
						"""
		cursor.execute(sql)
		# 如果数据表不存在则创建表 若存在则跳过
		sql = """CREATE TABLE IF NOT EXISTS stu_login_k(
						stu_id char(20) NOT NULL,
						stu_pass char(20) default NULL,
						PRIMARY KEY (stu_id)
						) ENGINE = InnoDB 
						DEFAULT	CHARSET = utf8
						"""
		cursor.execute(sql)

		# 关闭数据库连接
		db.close()

		# 实例化Application
		window = tk.Tk()
		StartPage(window)
	except:
		messagebox.showinfo('错误!', '连接数据库失败!')

 下面是我从我电脑数据库转储的SQL文件:

/*
Navicat MySQL Data Transfer

Source Server         : mysql
Source Server Version : 50532
Source Host           : localhost:3306
Source Database       : student

Target Server Type    : MYSQL
Target Server Version : 50532
File Encoding         : 65001

Date: 2019-11-28 15:09:36
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for `admin_login_k`
-- ----------------------------
DROP TABLE IF EXISTS `admin_login_k`;
CREATE TABLE `admin_login_k` (
  `admin_id` char(20) NOT NULL,
  `admin_pass` char(20) DEFAULT NULL,
  PRIMARY KEY (`admin_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of admin_login_k
-- ----------------------------
INSERT INTO `admin_login_k` VALUES ('admin', 'admin');

-- ----------------------------
-- Table structure for `student_k`
-- ----------------------------
DROP TABLE IF EXISTS `student_k`;
CREATE TABLE `student_k` (
  `id` char(20) NOT NULL,
  `name` char(20) DEFAULT NULL,
  `gender` char(5) DEFAULT NULL,
  `age` char(5) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of student_k
-- ----------------------------
INSERT INTO `student_k` VALUES ('182085211003', 'a', '女', '22');
INSERT INTO `student_k` VALUES ('182085211004', 'b', '女', '18');
INSERT INTO `student_k` VALUES ('182085211005', 'abc', '男', '23');
INSERT INTO `student_k` VALUES ('182085211006', 'abc', '女', '24');
INSERT INTO `student_k` VALUES ('182085211008', 'Tom', '男', '23');
INSERT INTO `student_k` VALUES ('182085211009', 'Tom', '男', '23');
INSERT INTO `student_k` VALUES ('182085211010', 'Tom', '男', '23');
INSERT INTO `student_k` VALUES ('182085211011', 'Tom', '男', '23');
INSERT INTO `student_k` VALUES ('1820852110111', 'Tom', '男', '23');
INSERT INTO `student_k` VALUES ('182085211012', 'Tom', '男', '23');
INSERT INTO `student_k` VALUES ('182085211013', 'Tom', '男', '23');
INSERT INTO `student_k` VALUES ('182085211014', 'Tom2', '男', '23');
INSERT INTO `student_k` VALUES ('182085211015', 'Tom1', '男', '23');
INSERT INTO `student_k` VALUES ('182085211016', 'Tom', '男', '23');
INSERT INTO `student_k` VALUES ('182085211017', 'Tom', '男', '23');
INSERT INTO `student_k` VALUES ('182085211018', 'Tom', '男', '23');
INSERT INTO `student_k` VALUES ('182085211019', 'Tom', '男', '23');
INSERT INTO `student_k` VALUES ('182085211020', 'Tom', '男', '23');
INSERT INTO `student_k` VALUES ('182085211021', 'Tom', '男', '23');
INSERT INTO `student_k` VALUES ('1820852110211', 'Tom', '男', '23');
INSERT INTO `student_k` VALUES ('182085211022', 'Tom1', '男', '23');
INSERT INTO `student_k` VALUES ('182085211023', 'Tom', '男', '23');
INSERT INTO `student_k` VALUES ('182085211024', 'Tom', '男', '23');
INSERT INTO `student_k` VALUES ('182085211034', 'Tom', '男', '23');

-- ----------------------------
-- Table structure for `stu_login_k`
-- ----------------------------
DROP TABLE IF EXISTS `stu_login_k`;
CREATE TABLE `stu_login_k` (
  `stu_id` char(20) NOT NULL,
  `stu_pass` char(20) DEFAULT NULL,
  PRIMARY KEY (`stu_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of stu_login_k
-- ----------------------------
INSERT INTO `stu_login_k` VALUES ('182085211000', '123456');

-- ----------------------------
-- Table structure for `t_course`
-- ----------------------------
DROP TABLE IF EXISTS `t_course`;
CREATE TABLE `t_course` (
  `SNO` char(255) NOT NULL,
  `COURSE` char(255) DEFAULT NULL,
  `CREDIT` char(255) DEFAULT NULL,
  `GRADE` char(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of t_course
-- ----------------------------
INSERT INTO `t_course` VALUES ('08300205', '程序设计', '4', '88');
INSERT INTO `t_course` VALUES ('08300205', '数据库', '2.5', '90');
INSERT INTO `t_course` VALUES ('08300205', '力学', '5', '92');
INSERT INTO `t_course` VALUES ('08080929', '数据库', '2.5', '85');
INSERT INTO `t_course` VALUES ('09350124', '数据库', '2.5', '92');
INSERT INTO `t_course` VALUES ('09620233', '数据库', '2.5', '80');
INSERT INTO `t_course` VALUES ('09300218', '数据库', '2.5', '78');
INSERT INTO `t_course` VALUES ('09010122', '数据库', '2.5', '87');
INSERT INTO `t_course` VALUES ('08080929', '程序设计', '4', '86');
INSERT INTO `t_course` VALUES ('09010122', '程序设计', '4', '80');
INSERT INTO `t_course` VALUES ('08300516', '程序设计', '4', '76');

-- ----------------------------
-- Table structure for `t_st`
-- ----------------------------
DROP TABLE IF EXISTS `t_st`;
CREATE TABLE `t_st` (
  `SNO` char(11) NOT NULL,
  `SNAME` char(255) DEFAULT NULL,
  `SSEX` char(255) DEFAULT NULL,
  `AGE` char(255) DEFAULT NULL,
  `DEPT` char(255) DEFAULT NULL,
  PRIMARY KEY (`SNO`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of t_st
-- ----------------------------
INSERT INTO `t_st` VALUES ('08080929', '刘超世', '男', '19', '计算机应用技术');
INSERT INTO `t_st` VALUES ('08300205', '李媛媛', '女', '19', '软件工程');
INSERT INTO `t_st` VALUES ('09300218', '王海超', '男', '19', '软件工程');
INSERT INTO `t_st` VALUES ('09350124', '王彤', '女', '19', '通信原理');
INSERT INTO `t_st` VALUES ('09620233', '陈晓丽', '女', '21', '通信工程');

觉得有用,点个赞再走吧^_^

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python题目:学生信息管理系统-高级版(图形界面+MySQL数据库) 的相关文章

随机推荐

  • R语言KERAS深度学习CNN卷积神经网络分类识别手写数字图像数据(MNIST)

    最近我们被客户要求撰写关于卷积神经网络的研究报告 包括一些图形和统计输出 在本文中 我们将学习如何使用keras 用手写数字图像数据集 即MNIST 进行深度学习 本文的目的是为了让大家亲身体验并熟悉培训课程中的神经网络部分 1 软件包的下
  • Vue-cli安装文档及使用(搭建vue-cli、nodejs、webpack架子)

    之前学习基础语法 todolist 所有的代码写在index html之中 大型项目不可维护 在真实vue项目开发过程中 会借助webpack打包工具帮助构建大型项目开发目录 再开发完成之后进行打包的操作 帮助生成线上可运行的代码 如果让每
  • 树莓派教程 - 1.5 树莓派GPIO库wiringPi 使用硬件串口ttyAMA0与ttyS0

    Git例程源码仓库 https github com ZhiliangMa raspberry git 上一篇介绍 ttyS0串口的用法 说到了此串口利弊 可能会出现乱码 但绝对能满足绝大部分的要求 本节使用 dev ttyAMA0 的方法
  • CentOS7 安装配置FTP服务器的问题

    C C 气象数据中心实战工业级项目系列 第三章 CentOS7 安装配置FTP服务器的问题 文章目录 C C 气象数据中心实战工业级项目系列 一 参考 二 设置 data ftp ftpuser upload目录 代表着只能在这个目录中上传
  • mysql in和exists性能比较和使用

    in 是把外表和内表作hash 连接 而exists是对外表作loop循环 每次loop循环再对内表进行查询 一直以来认为exists比in效率高的说法是不准确的 如果查询的两个表大小相当 那么用in和exists差别不大 如果两个表中一个
  • 【Redis入门】-浅谈redis事务

    说到事务大家都不陌生 在关系型数据库中 事务时并发控制的基本单位 他是一个操作的序列 可以包含多个指令 并且 对于一个事务 其内部的指令要么全部执行 要么都不执行 内部指令不可分割 关系型数据库的事务具有四个特性 1 原子性 2 一致性 3
  • 【大数据】Flink 详解(六):源码篇 Ⅰ

    本系列包含 大数据 Flink 详解 一 基础篇 大数据 Flink 详解 二 核心篇 大数据 Flink 详解 三 核心篇 大数据 Flink 详解 四 核心篇 大数据 Flink 详解 五 核心篇 大数据 Flink 详解 六 源码篇
  • 如何解决主机发送地址之后 从机没有发出ACK应答信号给主机

    1 iic总线从机没有返回应答给主机 我用的一个带有iic接口电量计和我的单片机通讯 我用逻辑分析仪分析数据发现主机写一个字节数据后从机并没有返回一个ack给主机 导致我后面读取从机的数据时全部是ff 请问各位iic大神 我该怎么去查问题呢
  • 给kali的Metasploit下添加一个新的exploit

    转载 https blog csdn net SilverMagic article details 40978081 首先在 usr share metasploit framework modules exploits 目录下新建一个自
  • SpringCloud01:认识微服务

    SpringCloud01 1 认识微服务 随着互联网行业的发展 对服务的要求也越来越高 服务架构也从单体架构逐渐演变为现在流行的微服务架构 这些架构之间有怎样的差别呢 1 0 学习目标 了解微服务架构的优缺点 1 1 单体架构 单体架构
  • 从服务器拿文件,怎么从远程服务器拿文件夹

    怎么从远程服务器拿文件夹 内容精选 换一换 添加节点时提示 添加节点失败 节点已存在 待添加节点的服务器上已安装系统性能分析或者添加过节点 如果待添加节点的服务器上已安装系统性能分析 需要登录服务器卸载系统性能分析 详细步骤请参见卸载 卸载
  • [一步一步学react系列] 04—计算器Demo

    前言 之前的例子都是写的计数器 加一减一的功能 我们大致弄懂了redux分层和store数据管理 下面我们将结合现有知识写一个终极版的计算器 以此巩固所学知识 知识点 redux分层 react router 一些算法及数据结构知识 栈 中
  • 调用ChatGpt openai官方node.js包Error: connect ETIMEDOUT问题

    原因是调用的axios库不走系统代理 需要额外配置 openai在文档中有说明增加axios配置的方法 只需请求时配置下proxy就ok了
  • Understand(代码分析工具)的安装教程

    前言 最近在学习嵌入式系统时 写的代码越来越多 一个文件里面函数的数量也越来越多 为方便查看写了哪些函数 以及文件总体架构 在网上找了半天 找到了Understand这款神器 相比于vscode 该软件占内较少 查看结构更直接 文章目录 前
  • JavaScript 获取数组的最后一个元素

    index取值 args args length 1 pop方法 args pop 注意 pop方法会删除args最后一个元素 并返回
  • RS485、MODBUS通信协议浅显易懂篇

    前言 MODBUS协议是Modicon公司发表的一种串行通信协议 属于OSI模型中应用层的协议 现广泛应用于工业控制领域 它的主要特点是免费开放 支持多种电气接口 如RS 232 RS 485 传输介质可以是双绞线 光纤 无线等 RS485
  • 计算机网络基础概论

    什么是Internet 从具体构成角度看 端系统 主机节点 主机及其上运行的网络应用程序 和网络交换设备 数据交换节点 中继器 路由器 交换机 负载均衡设备等 边 通信链路 分为接入网链路和骨干链路 接入网链路是指主机连接到互联网的链路 骨
  • java开发异常类型汇总

    1 java lang nullpointerexception 这个异常大家肯定都经常遇到 异常的解释是 程序遇上了空指针 简单地说就是调用了未经初始化的对象或者是不存在的对象 这个错误经常出现在创建图片 调用数组这些操作中 比如图片未经
  • Java 5-1、用户模块-Mybatis代码生成

    5 1 用户模块 Mybatis代码生成 从这里开始 环境相关配置就告一段落了 项目就开始进入开发学习阶段 一 代码生成 实体类 Mapper接口 Mapper xml 分别生成 AppUser java SysUser java 再抽取B
  • Python题目:学生信息管理系统-高级版(图形界面+MySQL数据库)

    Python题目 学生信息管理系统 高级版 图形界面 MySQL数据库 使用图形界面显示 选用list tuple dictionary或map等数据结构 操作数据库存储X个学生的三门课的成绩 机器学习 Python程序设计 研究生英语 并