精华内容
下载资源
问答
  • Python题目:学生信息管理系统-高级版(图形界面+MySQL数据库) 使用图形界面显示,选用list、tuple、dictionary或map等数据结构,操作数据库存储X个学生的三门课的成绩(机器学习、Python程序设计、研究生英语)...

    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', '通信工程');
    

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

    展开全文
  • 计一个GUI界面学生信息管理系统,方便保存学生的部分信息。 有五类功能: 1、 增加学生信息:输入姓名、学号、年龄、手机号 2、 修改学生信息:输入新的姓名、学号、年龄、手机号 3、 删除学生信息:以学号为索引 ...
  • 完成学生基本信息的管理,包括录入学生信息,删除学生信息,修改学生信息查询学生信息。很实用
  • qt 学生成绩计算查询界面设计

    千次阅读 2017-12-07 19:19:40
    点击进入增加记录界面后,可以根据学号或者姓名增加学生记录,点击增加记录按钮后自动填充专业班级等其他信息,并使能成绩录入功能,通过下拉框选择课程,并输入该门课程的成绩,点击提交后,该条记录会在下方的...

    这篇博客主要是从整体上讲解整体思路,包括设计目的、程序架构、涉及到的一些Qt功能的关键要素。

    在这个博客中,只放进我自己在验收时所做的ppt,ppt的内容涵盖了我在上面说到的全部内容。


    点击进入增加记录界面后,可以根据学号或者姓名增加学生记录,点击增加记录按钮后自动填充专业班级等其他信息,并使能成绩录入功能,通过下拉框选择课程,并输入该门课程的成绩,点击提交后,该条记录会在下方的文本框显示,增加多条记录后,点击确认,显示插入成功后即增加了该学生多门课程的成绩


    选择批量导入按钮后,弹出文件选择框,选择csv文件,选择成功后,提示选择的文件路径信息,并显示导入成功。



    本实验主演用到了selectinsert等数据库操作指令,第一行代码表示选择课程表格中的全部信息,第二行表示在课程表格中插入一行课程信息,第三行表示从课程表格中选择ID12345的课程信息

    首先要在pro文件中加入SQL模块,其次需要加入相关头文件,然后在主程序中添加数据库驱动、是指数据库名称、设置数据库登陆用户名、密码等



    使用QSqlQuery使用数据库命令对数据库进行操作


    在成绩的显示中使用了QTextEdit+HTML绘制表格的方式

    其中

    //cellpadding规定单元边沿与其内容之间的空白。

    //align规定表格相对周围元素的对齐方式。

     //border规定表格边框的宽度。


    使用QFileDialog调用文件选择框

    对文件的操作与上个实验类似,不在赘述



    展开全文
  • 可以将学生信息查询结果、学生成绩等导出到Excel中,供打印输出保存之用。 (6)统计分析功能。统计每个分数段的学生人数,并能够查看该分数段的具体学生信息。 (7)系统运行在Windows平台上,要有较好的图形用户...
  • ofbiz实战9——学生信息管理界面

    千次阅读 2017-10-31 09:46:47
    学生信息管理主要有:学生信息查询,修改,删除,重置密码,批量添加,下载模板功能。 查询界面: 点击更新按钮后的修改页面: 点击添加学生按钮后的页面: 点击批量导入学生按钮: 下载的模板excel文件: ...

    学生信息管理主要有:学生信息查询,修改,删除,重置密码,批量添加,下载模板功能。

    查询界面:


    点击更新按钮后的修改页面:


    点击添加学生按钮后的页面:


    点击批量导入学生按钮:


    下载的模板excel文件:



    学生信息管理的主要的功能界面就是以上这些。具体的实现代码下章介绍。

    返回导航页



    展开全文
  • 设计一个GUI界面学生信息管理系统,方便保存学生的部分信息。 有五类功能: 1、 增加学生信息:输入姓名、学号、年龄、手机号 2、 修改学生信息:输入新的姓名、学号、年龄、手机号 3、 删除学生信息:以学号为...
  • Java实现简单的学生信息管理界面

    万次阅读 多人点赞 2018-06-26 12:00:04
    主类package 学生信息管理系统; public class Main { public static void main(String[] args) { // TODO 自动生成的方法存根 InterFace Menu=new InterFace(); Menu.menu(); } }添加信息package 学生信息...

    主类

    package 学生信息管理系统;
    
    public class Main {
    	public static void main(String[] args) {
    		// TODO 自动生成的方法存根
    		InterFace Menu=new InterFace();
    		Menu.menu();
    	}
    }

    添加信息

    package 学生信息管理系统;
    
    import java.awt.AWTException;
    import java.awt.Robot;
    import java.awt.event.InputEvent;
    import java.awt.event.KeyEvent;
    import java.util.Scanner;
    
    public class Add {
    	static Stu[] stu=new Stu[100];
    	static Scanner scanner=new Scanner(System.in);
    	static  int number=0;
    	static InterFace Inter=new InterFace();
    	public void add() {
    		while(true) {
    			try {
    				clear();
    			} catch (AWTException e) {
    				// TODO 自动生成的 catch 块
    				e.printStackTrace();
    			}
    			System.out.println("请输入即将录入的人数:");
    			int N=scanner.nextInt();
    			for(int i=0;i<N;i++) {
    				stu[number]=new Stu();
    				System.out.println("请输入第"+(i+1)+"个学生的信息:");
    				System.out.println("请输入学号:");
    				stu[number].setNum(scanner.next());
    				System.out.println("请输入姓名:");
    				stu[number].setName(scanner.next());
    				System.out.println("请输入性别:");
    				stu[number].setSex(scanner.next());
    				System.out.println("请输入年龄:");
    				stu[number].setAge(scanner.nextInt());
    				System.out.println("请输入语文成绩:");
    				stu[number].setChinese(scanner.nextFloat());
    				System.out.println("请输入数学成绩:");
    				stu[number].setMath(scanner.nextFloat());
    				System.out.println("请输入英语成绩:");
    				stu[number].setEng(scanner.nextFloat());
    				number++;
    			}
    			System.out.println("录入完毕,即将返回!");
    			Inter.menu();
    		}
    	}
    	
    	//实现控制台清屏
    	@SuppressWarnings("deprecation")
    	public static void clear() throws AWTException
        {
            Robot r = new Robot();
            r.mousePress(InputEvent.BUTTON3_MASK);       // 按下鼠标右键
            r.mouseRelease(InputEvent.BUTTON3_MASK);    // 释放鼠标右键
            r.keyPress(KeyEvent.VK_CONTROL);             // 按下Ctrl键
            r.keyPress(KeyEvent.VK_R);                    // 按下R键
            r.keyRelease(KeyEvent.VK_R);                  // 释放R键
            r.keyRelease(KeyEvent.VK_CONTROL);            // 释放Ctrl键
            r.delay(100);       
        }
    }
    

    主界面

    package 学生信息管理系统;
    
    import java.awt.AWTException;
    import java.awt.Robot;
    import java.awt.event.InputEvent;
    import java.awt.event.KeyEvent;
    import java.util.*;
    
    public class InterFace {
    	static Scanner scanner=new Scanner(System.in);
    	
    	public void menu(){
    		int select;
    		try {
    			clear();
    		} catch (AWTException e) {
    			// TODO 自动生成的 catch 块
    			e.printStackTrace();
    		}
    		do{
    		System.out.println("\t\t      欢迎使用学生信息管理系统\n");
    		System.out.println("\t\t ***  ╭ □═■═□═■═□ ══╮***\n");  
    		System.out.println("\t\t *    │    学生信息管理系统    │  *\n");  
    		System.out.println("\t\t *    ╰═══■═□═■═□═■╯  *\n");  
    		System.out.println("\t\t *    ┌───────────┐    *\n");  
    		System.out.println("\t\t *    │1.添加信息  2.加载信息│    *\n");  
    		System.out.println("\t\t *    │                      │    *\n");  
    		System.out.println("\t\t *    │3.查询信息  4.文件操作│    *\n");  
    		System.out.println("\t\t *    │                      │    *\n");  
    		System.out.println("\t\t *    │5.数据排序  6.修改信息│    *\n");  
    		System.out.println("\t\t *    │                      │    *\n");  
    		System.out.println("\t\t *    │7.显示信息  8.删除信息│    *\n");
    		System.out.println("\t\t *    │                      │    *\n");
    		System.out.println("\t\t *    │9.保存信息  0.退出系统│    *\n");
    		System.out.println("\t\t *    └───────────┘    *\n");  
    		System.out.println("\t\t ************************************\n"); 
    		System.out.println();
    		System.out.println("\t请选择操作方式(1~8):\n");
    		select=scanner.nextInt();
    		switch(select){
    		case 8:
    			
    			break;
    		case 5:
    			
    			break;
    		case 4:
    			
    			break;
    		case 3:
    			
    			break;
    		case 2:
    			
    			break;
    		case 9:
    			
    			break;
    		case 7:
    			Show show=new Show();
    			show.show();
    			break;
    		case 1:
    			Add operate=new Add();
    			operate.add();
    			break;
    		case 0:
    			
    			break;
    		default:
    			try {
    				clear();
    			} catch (AWTException e) {
    				// TODO 自动生成的 catch 块
    				e.printStackTrace();
    			}
    			this.menu();
    		}
    		}while(select!=8);
    	}
    	@SuppressWarnings("deprecation")
    	public static void clear() throws AWTException
        {
            Robot r = new Robot();
            r.mousePress(InputEvent.BUTTON3_MASK);       // 按下鼠标右键
            r.mouseRelease(InputEvent.BUTTON3_MASK);    // 释放鼠标右键
            r.keyPress(KeyEvent.VK_CONTROL);             // 按下Ctrl键
            r.keyPress(KeyEvent.VK_R);                    // 按下R键
            r.keyRelease(KeyEvent.VK_R);                  // 释放R键
            r.keyRelease(KeyEvent.VK_CONTROL);            // 释放Ctrl键
            r.delay(100);       
        }
    }
    

    显示信息

    package 学生信息管理系统;
    
    import java.util.Scanner; 
    
    public class Show {
    	int n = Add.number;
    	static Scanner scanner=new Scanner(System.in);
    	public void show() {
    		System.out.println("**********************************************************");
    		System.out.println("学号	       姓名	性别	年龄	语文	数学	英语");
    		for (int i = 0; i < n; i++)
    			System.out.println(Add.stu[i].getNum() + " " +Add.stu[i].getName()+"	"+ Add.stu[i].getSex() + "	" + Add.stu[i].getAge() + "	"
    					+ Add.stu[i].getChinese() + "	" + Add.stu[i].getMath() + "	" + Add.stu[i].getEng());
    		System.out.println("**********************************************************");
    		System.out.println();
    		//n为毫秒数
    		try { Thread.sleep (100000) ; 
    		} catch (InterruptedException ie){}
    	}
    }
    

    学生类

    package 学生信息管理系统;
    
    public class Stu {
    	private String num;
    	private String name;
    	private String sex;
    	private int age;
    	private float chinese;
    	private float math;
    	private float eng;
    	public String getNum() {
    		return num;
    	}
    	public void setNum(String num) {
    		this.num = num;
    	}
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public String getSex() {
    		return sex;
    	}
    	public void setSex(String sex) {
    		this.sex = sex;
    	}
    	public int getAge() {
    		return age;
    	}
    	public void setAge(int age) {
    		this.age = age;
    	}
    	public float getChinese() {
    		return chinese;
    	}
    	public void setChinese(float chinese) {
    		this.chinese = chinese;
    	}
    	public float getMath() {
    		return math;
    	}
    	public void setMath(float math) {
    		this.math = math;
    	}
    	public float getEng() {
    		return eng;
    	}
    	public void setEng(float eng) {
    		this.eng = eng;
    	}
    }
    


    展开全文
  • 学生管理系统包括:学生信息登录、注册、删除、添加、查询等功能。最关键的也就是查询系统的实现。至于界面的设计前端事情我们不管。 下面是效果图。 界面效果实在一般,不会前端设计,也不想copy,将就看吧。...
  • 添加学生信息界面: 添加学生实现代码: 需求: 1、点击确定按钮时,能够...2、在确认界面中,确认ok,点击确定按钮能够将学生信息写入到文件中保存起来,同时,将添加学生信息界面恢复到初始值状态。 1...
  • VFP 学生信息查询系统

    2009-06-17 22:42:32
    进行模块后,请先输入学号,并单击定位,程序会搜索相匹配的启示,并在界面上显示详细的学生信息。如果需要修改,在修改后单击“修改”按钮保存。在单击“添加”后,程序会自动清除所有文本框的内容,以方便用户添加...
  • python实现的学生信息管理系统设计源代码【GUI界面版】 python实现的学生信息管理系统—GUI界面版Python学生信息管理系统设计源代码 ...4、查询学生信息:以学号为索引 5、显示学生信息:一条一条整页显示。
  • 是用java图形界面做的 实现了学生信息的添加 删除 修改(根据学号或姓名)查询等功能,用的是mySQL数据库
  • 图形化界面实现学生信息管理系统,实现添加,删除,修改,查询等功能。
  • python实现的学生信息管理系统—GUI界面版Python学生信息管理系统设计源代码 设计一个GUI界面学生信息管理系统,方便保存学生的部分信息。...4、查询学生信息:以学号为索引 5、显示学生信息:一条一条整页显示。
  • 主要为大家详细介绍了python+mysql实现学生信息查询系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 使用Java Swing开发的学生信息管理系统(界面美观)

    万次阅读 多人点赞 2018-12-31 12:32:29
    设计一个学生基本信息管理系统,实现“系统登录”,“学生信息增加”,“学生信息查询”,“学生信息删除”,“学生信息修改”,“学生信息导入”,“学生信息导出”等功能,具体要求如下: 关注下面的微信公众号,...
  • java 学生信息管理系统(图形界面

    热门讨论 2012-12-13 11:07:35
    自己写了一个简单的学生信息管理系统,使用图形界面,实现登录校验,学生信息的增删查改功能。
  • 学生信息查询系统

    2013-07-03 21:27:25
    学生信息查询系统,包括 , 功能需求, 数据需求, 数据流图, 结构设计,界面设计,数据库设计 ,信息插入,删除
  • 数据库小作 学生信息查询系统 数据库小作业 学生信息查询系统 数据库小作业
  • 使用txt文档进行学生信息查询,程序已经可以运行通过,界面友好。
  • 本文实例为大家分享了Python实现GUI学生信息管理系统的具体代码,供大家参考,具体内容如下项目环境:软件环境:OS:RedHat6.3Lib:PygtkLanguage:PythonSupport tool:Glade3项目简述:①Glade3设计用户的登录窗口,...
  • 程序开发软件: Zend Studio 9 程序开发环境: PHP + Apache + Mysql MVC设计模式,基于三层模式开发,界面采用div+css布局!采用了ajax技术! 程序功能:管理员后台添加学生信息,条件组合查询
  • 使用 java 图形界面开发的学生录取信息管理,可以根据录取分数线决定学生是否录取,支持查看已录取学生
  • Java图形界面开发—学生信息管理系统 完整源码

    千次下载 热门讨论 2017-02-28 21:36:13
    学生信息管理系统,使用Java开发。 1、登录界面可以进行登录操作。有俩种权限选择。分别跳转到不同的界面。 2、使用了事件监听、Java操作SQLserver数据库等知识。 3、图形化界面中使用了JTable等组件,将查询结果...
  • Microsoft visual studio ...学生信息查询功能-学生信息查询界面 学生信息修改删除功能-学生信息录入界面 三、 数据库设计 四、 实现(界面和核心代码) 五、 小结 可以实现所要求的功能
  • java学生管理系统界面设计

    万次阅读 多人点赞 2019-07-05 13:16:30
    关于学生管理系统的界面设计:代码如下: 数据库设计 DROP TABLE IF EXISTS `stu`; CREATE TABLE `stu` ( `stuId` int(11) NOT NULL AUTO_INCREMENT, `stuName` varchar(30) DEFAULT NULL, `stuSex` varchar(30) ...
  • 有JAVA可视化界面,可连接ACESS数据库。实现添加,删除,修改等常用功能。简单好用
  • 基于java的学生信息查询系统的源代码和界面,所有打包,希望可以帮到你们

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 28,346
精华内容 11,338
关键字:

学生信息查询界面