导读:本期聚焦于小伙伴创作的《Python学生宿舍管理系统完整实现教程:基于SQLite的增删改查与住宿分配》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《Python学生宿舍管理系统完整实现教程:基于SQLite的增删改查与住宿分配》有用,将其分享出去将是对创作者最好的鼓励。

Python学生宿舍管理系统示例

随着高校信息化建设的不断推进,学生宿舍管理也逐渐从传统的纸质记录向数字化管理转变。本文将介绍一个基于Python和SQLite数据库的简单学生宿舍管理系统示例。该系统采用面向对象的设计思路,实现了宿舍房间的管理、学生信息的管理以及住宿分配等核心功能,非常适合Python初学者作为练手项目。

一、系统功能模块设计

本系统主要包含以下几个核心功能模块:

  • 宿舍房间管理:添加新的宿舍房间,记录房间号、所属楼栋、房间容量等信息。

  • 学生信息管理:录入学生基本信息,包括学号、姓名、性别、专业等。

  • 住宿分配管理:为学生分配宿舍,系统会自动检查宿舍容量是否已满,并更新当前入住人数。

  • 信息查询:查询指定宿舍的入住学生名单,以及查询学生的住宿信息。

二、数据库设计

为了简化部署,本系统使用Python自带的SQLite数据库。共设计了两张核心表:

  1. rooms(宿舍表)

    • room_id:宿舍号(主键)

    • building:所属楼栋

    • capacity:房间容量

    • current_occupancy:当前入住人数

  2. 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端界面。

  • 报修管理:增加宿舍设施报修模块,记录报修内容及处理状态。

Python学生宿舍管理系统SQLite面向对象设计住宿分配

免责声明:已尽一切努力确保本网站所含信息的准确性。网站部分内容来源于网络或由用户自行发表,内容观点不代表本站立场。本站是个人网站免费分享,内容仅供个人学习、研究或参考使用,如内容中引用了第三方作品,其版权归原作者所有。若内容触犯了您的权益,请联系我们进行处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。前端、网络、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握网站开发与运维所需的核心技术栈。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端逻辑,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。