Python学生宿舍管理系统示例
随着高校信息化建设的不断推进,学生宿舍管理也逐渐从传统的纸质记录向数字化管理转变。本文将介绍一个基于Python和SQLite数据库的简单学生宿舍管理系统示例。该系统采用面向对象的设计思路,实现了宿舍房间的管理、学生信息的管理以及住宿分配等核心功能,非常适合Python初学者作为练手项目。
一、系统功能模块设计
本系统主要包含以下几个核心功能模块:
宿舍房间管理:添加新的宿舍房间,记录房间号、所属楼栋、房间容量等信息。
学生信息管理:录入学生基本信息,包括学号、姓名、性别、专业等。
住宿分配管理:为学生分配宿舍,系统会自动检查宿舍容量是否已满,并更新当前入住人数。
信息查询:查询指定宿舍的入住学生名单,以及查询学生的住宿信息。
二、数据库设计
为了简化部署,本系统使用Python自带的SQLite数据库。共设计了两张核心表:
rooms(宿舍表):
room_id:宿舍号(主键)
building:所属楼栋
capacity:房间容量
current_occupancy:当前入住人数
students(学生表):
student_id:学号(主键)
name:姓名
gender:性别
major:专业
room_id:宿舍号(外键,关联rooms表)
三、核心代码实现
下面是系统的完整Python代码实现。代码使用了sqlite3标准库进行数据库操作,并封装成了一个DormitorySystem类。
import sqlite3
class DormitorySystem:
def __init__(self, db_name='dormitory.db'):
"""初始化数据库连接并创建表"""
self.conn = sqlite3.connect(db_name)
self.cursor = self.conn.cursor()
self.create_tables()
def create_tables(self):
"""创建宿舍表和学生表"""
# 创建宿舍表
self.cursor.execute('''
CREATE TABLE IF NOT EXISTS rooms (
room_id TEXT PRIMARY KEY,
building TEXT NOT NULL,
capacity INTEGER NOT NULL,
current_occupancy INTEGER DEFAULT 0
)
''')
# 创建学生表
self.cursor.execute('''
CREATE TABLE IF NOT EXISTS students (
student_id TEXT PRIMARY KEY,
name TEXT NOT NULL,
gender TEXT NOT NULL,
major TEXT NOT NULL,
room_id TEXT,
FOREIGN KEY (room_id) REFERENCES rooms (room_id)
)
''')
self.conn.commit()
def add_room(self, room_id, building, capacity):
"""添加宿舍房间"""
try:
self.cursor.execute('INSERT INTO rooms (room_id, building, capacity) VALUES (?, ?, ?)',
(room_id, building, capacity))
self.conn.commit()
print(f"宿舍 {room_id} 添加成功!")
except sqlite3.IntegrityError:
print(f"添加失败:宿舍 {room_id} 已存在!")
def add_student(self, student_id, name, gender, major):
"""添加学生信息"""
try:
self.cursor.execute('INSERT INTO students (student_id, name, gender, major) VALUES (?, ?, ?, ?)',
(student_id, name, gender, major))
self.conn.commit()
print(f"学生 {name} 添加成功!")
except sqlite3.IntegrityError:
print(f"添加失败:学号 {student_id} 已存在!")
def assign_room(self, student_id, room_id):
"""为学生分配宿舍"""
# 检查宿舍是否存在及是否有空位
self.cursor.execute('SELECT capacity, current_occupancy FROM rooms WHERE room_id = ?', (room_id,))
room = self.cursor.fetchone()
if not room:
print(f"分配失败:宿舍 {room_id} 不存在!")
return
if room[1] >= room[0]:
print(f"分配失败:宿舍 {room_id} 已满,无法入住!")
return
# 检查学生是否已分配宿舍
self.cursor.execute('SELECT room_id FROM students WHERE student_id = ?', (student_id,))
student = self.cursor.fetchone()
if not student:
print(f"分配失败:学号 {student_id} 不存在!")
return
if student[0]:
print(f"分配失败:学生 {student_id} 已分配宿舍!")
return
# 更新学生宿舍信息
self.cursor.execute('UPDATE students SET room_id = ? WHERE student_id = ?', (room_id, student_id))
# 更新宿舍当前入住人数
self.cursor.execute('UPDATE rooms SET current_occupancy = current_occupancy + 1 WHERE room_id = ?', (room_id,))
self.conn.commit()
print(f"学生 {student_id} 成功入住宿舍 {room_id}!")
def view_room_students(self, room_id):
"""查看宿舍入住的学生名单"""
self.cursor.execute('SELECT student_id, name, major FROM students WHERE room_id = ?', (room_id,))
students = self.cursor.fetchall()
if not students:
print(f"宿舍 {room_id} 暂无学生入住。")
else:
print(f"--- 宿舍 {room_id} 入住名单 ---")
for stu in students:
print(f"学号: {stu[0]}, 姓名: {stu[1]}, 专业: {stu[2]}")
def close(self):
"""关闭数据库连接"""
self.conn.close()
print("系统已关闭,数据库连接释放。")
if __name__ == '__main__':
# 实例化系统
db = DormitorySystem()
# 1. 添加宿舍
db.add_room('A101', '1号楼', 4)
db.add_room('A102', '1号楼', 4)
# 2. 添加学生
db.add_student('20230001', '张三', '男', '计算机科学')
db.add_student('20230002', '李四', '男', '软件工程')
db.add_student('20230003', '王五', '男', '数据科学')
# 3. 分配宿舍
db.assign_room('20230001', 'A101')
db.assign_room('20230002', 'A101')
db.assign_room('20230003', 'A102')
# 4. 测试宿舍满员情况
db.add_student('20230004', '赵六', '男', '网络工程')
db.add_student('20230005', '孙七', '男', '信息安全')
db.add_student('20230006', '周八', '男', '人工智能')
db.assign_room('20230004', 'A101')
db.assign_room('20230005', 'A101')
db.assign_room('20230006', 'A101') # 第5个人入住4人间的A101,应提示已满
# 5. 查询宿舍信息
db.view_room_students('A101')
db.view_room_students('A102')
# 关闭连接
db.close()四、运行逻辑与测试说明
运行上述代码后,系统会在当前目录下生成一个dormitory.db文件用于持久化存储数据。控制台将输出整个业务流程的执行日志,包括添加成功提示、宿舍满员拦截提示等。
如果您希望体验带有可视化界面的完整版本,可以访问我们的在线演示平台:www.ipipp.com,该平台提供了基于Web的宿舍管理系统交互演示。
五、总结与扩展
本文介绍了一个基于Python和SQLite的学生宿舍管理系统基础示例。通过面向对象的封装,使得数据库的增删改查操作更加模块化,逻辑清晰。
在此基础上,您还可以进行以下扩展:
退宿功能:实现学生退宿,并自动减少宿舍当前入住人数。
换寝功能:支持学生从一个宿舍调换到另一个宿舍,涉及两个宿舍的人数增减。
数据可视化:结合Tkinter或PyQt制作GUI界面,或者使用Flask/Django开发Web端界面。
报修管理:增加宿舍设施报修模块,记录报修内容及处理状态。