随着高校学生人数的不断增加,宿舍资源的管理和分配变得愈发重要。为了提高宿舍管理的效率和透明度,许多学校开始采用信息化手段来优化这一过程。本文将围绕“宿舍信息管理系统”和“免费”这两个关键词,介绍如何利用Python语言开发一个功能完善的宿舍信息管理系统,并提供完整的代码示例。
一、系统概述
宿舍信息管理系统是一个用于管理学生宿舍信息的软件系统,主要功能包括学生信息录入、宿舍分配、房间状态查询、费用管理等。该系统的目标是通过自动化的方式减少人工操作,提高数据处理的准确性和效率。
本系统采用开源技术,完全免费,适合学校或小型机构使用。系统前端使用Python的Tkinter库进行图形界面开发,后端使用SQLite作为数据库存储数据,确保系统的轻量化和易部署。
二、技术选型
在本系统中,我们选择了以下技术栈:
编程语言:Python
图形界面库:Tkinter
数据库:SQLite
开发工具:PyCharm 或 VS Code

Python作为一种高级编程语言,具有语法简洁、学习成本低、社区支持强大等特点,非常适合快速开发中小型应用。Tkinter是Python自带的图形界面库,无需额外安装即可使用,非常适合开发简单的桌面应用程序。而SQLite则是一种轻量级的嵌入式数据库,不需要复杂的配置,适合本系统的需求。
三、系统功能模块
本系统主要包括以下几个核心功能模块:
学生信息管理
宿舍信息管理
宿舍分配
费用统计
查询与报表
每个模块都对应一定的数据库表结构和相应的用户交互逻辑。
四、数据库设计
为了更好地组织和管理数据,我们需要设计合理的数据库结构。本系统使用SQLite作为数据库,主要包含以下几个表:
students(学生信息表)
id:主键,唯一标识每个学生
name:学生姓名
gender:性别
major:专业
phone:联系方式
room_id:关联宿舍编号
rooms(宿舍信息表)
id:主键,唯一标识每个宿舍
number:宿舍编号
capacity:容纳人数
status:当前状态(已分配/未分配)
fees(费用信息表)
id:主键
student_id:关联学生ID
amount:费用金额
payment_date:支付日期
allocations(宿舍分配记录表)
id:主键
student_id:学生ID
room_id:宿舍ID
allocate_date:分配日期
五、代码实现
以下是本系统的完整代码实现,包含数据库连接、界面设计、功能模块等部分。
1. 数据库初始化
import sqlite3
# 连接数据库
conn = sqlite3.connect('dormitory.db')
cursor = conn.cursor()
# 创建学生表
cursor.execute('''
CREATE TABLE IF NOT EXISTS students (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
gender TEXT NOT NULL,
major TEXT NOT NULL,
phone TEXT NOT NULL,
room_id INTEGER DEFAULT NULL
)
''')
# 创建宿舍表
cursor.execute('''
CREATE TABLE IF NOT EXISTS rooms (
id INTEGER PRIMARY KEY AUTOINCREMENT,
number TEXT NOT NULL UNIQUE,
capacity INTEGER NOT NULL,
status TEXT NOT NULL DEFAULT '未分配'
)
''')
# 创建费用表
cursor.execute('''
CREATE TABLE IF NOT EXISTS fees (
id INTEGER PRIMARY KEY AUTOINCREMENT,
student_id INTEGER NOT NULL,
amount REAL NOT NULL,
payment_date TEXT NOT NULL,
FOREIGN KEY (student_id) REFERENCES students(id)
)
''')
# 创建分配记录表
cursor.execute('''
CREATE TABLE IF NOT EXISTS allocations (
id INTEGER PRIMARY KEY AUTOINCREMENT,
student_id INTEGER NOT NULL,
room_id INTEGER NOT NULL,
allocate_date TEXT NOT NULL,
FOREIGN KEY (student_id) REFERENCES students(id),
FOREIGN KEY (room_id) REFERENCES rooms(id)
)
''')
# 提交并关闭
conn.commit()
conn.close()
2. 图形界面设计
import tkinter as tk
from tkinter import messagebox
import sqlite3
class DormitoryApp:
def __init__(self, root):
self.root = root
self.root.title("宿舍信息管理系统")
self.conn = sqlite3.connect('dormitory.db')
self.cursor = self.conn.cursor()
# 界面组件
self.create_widgets()
def create_widgets(self):
# 学生信息输入
tk.Label(self.root, text="姓名:").grid(row=0, column=0)
self.name_entry = tk.Entry(self.root)
self.name_entry.grid(row=0, column=1)
tk.Label(self.root, text="性别:").grid(row=1, column=0)
self.gender_entry = tk.Entry(self.root)
self.gender_entry.grid(row=1, column=1)
tk.Label(self.root, text="专业:").grid(row=2, column=0)
self.major_entry = tk.Entry(self.root)
self.major_entry.grid(row=2, column=1)
tk.Label(self.root, text="电话:").grid(row=3, column=0)
self.phone_entry = tk.Entry(self.root)
self.phone_entry.grid(row=3, column=1)
# 添加学生按钮
self.add_button = tk.Button(self.root, text="添加学生", command=self.add_student)
self.add_button.grid(row=4, column=0, columnspan=2)
# 显示学生信息
self.student_listbox = tk.Listbox(self.root)
self.student_listbox.grid(row=5, column=0, columnspan=2)
self.load_students()
def add_student(self):
name = self.name_entry.get()
gender = self.gender_entry.get()
major = self.major_entry.get()
phone = self.phone_entry.get()
if not all([name, gender, major, phone]):
messagebox.showerror("错误", "请填写所有字段!")
return
self.cursor.execute("INSERT INTO students (name, gender, major, phone) VALUES (?, ?, ?, ?)",
(name, gender, major, phone))
self.conn.commit()
self.load_students()
def load_students(self):
self.student_listbox.delete(0, tk.END)
self.cursor.execute("SELECT * FROM students")
for row in self.cursor.fetchall():
self.student_listbox.insert(tk.END, f"ID: {row[0]}, 姓名: {row[1]}, 性别: {row[2]}, 专业: {row[3]}, 电话: {row[4]}")
if __name__ == "__main__":
root = tk.Tk()
app = DormitoryApp(root)
root.mainloop()
3. 宿舍分配功能
def assign_room(student_id, room_id):
conn = sqlite3.connect('dormitory.db')
cursor = conn.cursor()
cursor.execute("UPDATE students SET room_id = ? WHERE id = ?", (room_id, student_id))
cursor.execute("UPDATE rooms SET status = '已分配' WHERE id = ?", (room_id,))
cursor.execute("INSERT INTO allocations (student_id, room_id, allocate_date) VALUES (?, ?, DATE('now'))",
(student_id, room_id))
conn.commit()
conn.close()
4. 查询功能
def query_students():
conn = sqlite3.connect('dormitory.db')
cursor = conn.cursor()
cursor.execute("SELECT * FROM students")
results = cursor.fetchall()
conn.close()
return results
六、系统优势
本系统具有以下几个显著优势:
免费开源:系统完全免费,适用于各类学校和机构。
易于部署:无需复杂的服务器配置,直接运行即可。
可扩展性强:可根据实际需求增加更多功能模块。
安全性高:使用SQLite数据库,避免了网络攻击的风险。
七、结语
宿舍信息管理系统是现代化校园管理的重要组成部分。本文介绍了如何使用Python开发一个功能完善且免费的宿舍信息管理系统,涵盖了数据库设计、图形界面开发、功能实现等多个方面。希望本文能够为相关开发者提供参考和帮助,推动更多高效、低成本的信息化解决方案落地。
