用python+tkinter+mysql写一个学生公寓管理系统
时间: 2023-10-31 14:06:36 浏览: 101
好的,下面是一个简单的学生公寓管理系统的实现,使用了Python、Tkinter和MySQL:
前置条件:
- 已安装Python 3.x和MySQL
- 已安装pymysql模块和Tkinter模块
首先,在MySQL中创建一个名为student的数据库,并创建两个表,一个为学生信息表student_info,一个为宿舍信息表dorm_info。
student_info表的结构如下:
```
CREATE TABLE student_info (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
gender VARCHAR(10) NOT NULL,
major VARCHAR(50) NOT NULL,
dormitory VARCHAR(10),
PRIMARY KEY (id)
);
```
dorm_info表的结构如下:
```
CREATE TABLE dorm_info (
dormitory VARCHAR(10) NOT NULL,
building VARCHAR(50) NOT NULL,
room_num VARCHAR(50) NOT NULL,
beds INT NOT NULL,
free_beds INT NOT NULL,
PRIMARY KEY (dormitory)
);
```
然后,编写Python代码实现学生公寓管理系统。以下是代码:
```python
import tkinter as tk
import pymysql
# 连接数据库
db = pymysql.connect(host='localhost', user='root', password='password', database='student')
cursor = db.cursor()
class StudentApartmentManagementSystem:
def __init__(self, master):
self.master = master
self.master.title('学生公寓管理系统')
self.master.geometry('500x400')
self.master.resizable(False, False)
# 创建标签
tk.Label(self.master, text='学生公寓管理系统', font=('Arial', 20)).pack(side='top')
# 创建学生信息区域
self.frame_student = tk.Frame(self.master)
self.frame_student.pack(side='top', pady=10)
tk.Label(self.frame_student, text='学生信息', font=('Arial', 16)).grid(row=0, column=0, columnspan=2)
tk.Label(self.frame_student, text='姓名:').grid(row=1, column=0)
self.entry_name = tk.Entry(self.frame_student)
self.entry_name.grid(row=1, column=1)
tk.Label(self.frame_student, text='性别:').grid(row=2, column=0)
self.entry_gender = tk.Entry(self.frame_student)
self.entry_gender.grid(row=2, column=1)
tk.Label(self.frame_student, text='专业:').grid(row=3, column=0)
self.entry_major = tk.Entry(self.frame_student)
self.entry_major.grid(row=3, column=1)
tk.Label(self.frame_student, text='宿舍号:').grid(row=4, column=0)
self.entry_dormitory = tk.Entry(self.frame_student)
self.entry_dormitory.grid(row=4, column=1)
tk.Button(self.frame_student, text='添加学生', command=self.add_student).grid(row=5, column=0, columnspan=2, pady=10)
# 创建宿舍信息区域
self.frame_dorm = tk.Frame(self.master)
self.frame_dorm.pack(side='top', pady=10)
tk.Label(self.frame_dorm, text='宿舍信息', font=('Arial', 16)).grid(row=0, column=0, columnspan=2)
tk.Label(self.frame_dorm, text='宿舍号:').grid(row=1, column=0)
self.entry_dormitory2 = tk.Entry(self.frame_dorm)
self.entry_dormitory2.grid(row=1, column=1)
tk.Label(self.frame_dorm, text='楼栋:').grid(row=2, column=0)
self.entry_building = tk.Entry(self.frame_dorm)
self.entry_building.grid(row=2, column=1)
tk.Label(self.frame_dorm, text='房间号:').grid(row=3, column=0)
self.entry_room_num = tk.Entry(self.frame_dorm)
self.entry_room_num.grid(row=3, column=1)
tk.Label(self.frame_dorm, text='床位数:').grid(row=4, column=0)
self.entry_beds = tk.Entry(self.frame_dorm)
self.entry_beds.grid(row=4, column=1)
tk.Button(self.frame_dorm, text='添加宿舍', command=self.add_dormitory).grid(row=5, column=0, columnspan=2, pady=10)
# 创建查询区域
self.frame_query = tk.Frame(self.master)
self.frame_query.pack(side='top', pady=10)
tk.Label(self.frame_query, text='查询学生信息', font=('Arial', 16)).grid(row=0, column=0, columnspan=2)
tk.Label(self.frame_query, text='姓名:').grid(row=1, column=0)
self.entry_query_name = tk.Entry(self.frame_query)
self.entry_query_name.grid(row=1, column=1)
tk.Button(self.frame_query, text='查询', command=self.query_student).grid(row=2, column=0, columnspan=2, pady=10)
def add_student(self):
name = self.entry_name.get()
gender = self.entry_gender.get()
major = self.entry_major.get()
dormitory = self.entry_dormitory.get()
# 将学生信息插入student_info表中
sql = "INSERT INTO student_info (name, gender, major, dormitory) VALUES ('%s', '%s', '%s', '%s')" % (name, gender, major, dormitory)
cursor.execute(sql)
db.commit()
# 更新宿舍信息
self.update_dormitory(dormitory)
# 清空输入框
self.entry_name.delete(0, tk.END)
self.entry_gender.delete(0, tk.END)
self.entry_major.delete(0, tk.END)
self.entry_dormitory.delete(0, tk.END)
def add_dormitory(self):
dormitory = self.entry_dormitory2.get()
building = self.entry_building.get()
room_num = self.entry_room_num.get()
beds = int(self.entry_beds.get())
free_beds = beds
# 将宿舍信息插入dorm_info表中
sql = "INSERT INTO dorm_info (dormitory, building, room_num, beds, free_beds) VALUES ('%s', '%s', '%s', %d, %d)" % (dormitory, building, room_num, beds, free_beds)
cursor.execute(sql)
db.commit()
# 清空输入框
self.entry_dormitory2.delete(0, tk.END)
self.entry_building.delete(0, tk.END)
self.entry_room_num.delete(0, tk.END)
self.entry_beds.delete(0, tk.END)
def query_student(self):
name = self.entry_query_name.get()
# 查询学生信息
sql = "SELECT * FROM student_info WHERE name='%s'" % name
cursor.execute(sql)
result = cursor.fetchone()
if result:
dormitory = result[4]
# 查询宿舍信息
sql = "SELECT * FROM dorm_info WHERE dormitory='%s'" % dormitory
cursor.execute(sql)
result2 = cursor.fetchone()
# 显示查询结果
tk.Label(self.frame_query, text='宿舍号:%s' % dormitory).grid(row=3, column=0)
tk.Label(self.frame_query, text='楼栋:%s' % result2[1]).grid(row=4, column=0)
tk.Label(self.frame_query, text='房间号:%s' % result2[2]).grid(row=5, column=0)
tk.Label(self.frame_query, text='床位数:%d' % result2[3]).grid(row=6, column=0)
tk.Label(self.frame_query, text='空床位数:%d' % result2[4]).grid(row=7, column=0)
else:
# 显示查询结果
tk.Label(self.frame_query, text='没有找到该学生').grid(row=3, column=0)
def update_dormitory(self, dormitory):
# 更新宿舍信息
sql = "SELECT free_beds FROM dorm_info WHERE dormitory='%s'" % dormitory
cursor.execute(sql)
result = cursor.fetchone()
free_beds = result[0] - 1
sql = "UPDATE dorm_info SET free_beds=%d WHERE dormitory='%s'" % (free_beds, dormitory)
cursor.execute(sql)
db.commit()
root = tk.Tk()
app = StudentApartmentManagementSystem(root)
root.mainloop()
```
运行程序后,可以添加学生信息和宿舍信息,并查询学生所在宿舍的详细信息。同时,每次添加新的学生信息时,程序将自动更新对应宿舍的空床位数。
注意:以上代码只是简单的示例,没有包括异常处理和其他安全性措施,实际使用时需要进行改进和完善。