当前位置: 首页 > 新闻资讯  > 宿舍管理系统

基于Python的免费宿舍信息管理系统实现

本文介绍如何使用Python开发一个免费的宿舍信息管理系统,涵盖数据库设计、用户界面和功能实现。

随着高校学生人数的不断增加,宿舍资源的管理和分配变得愈发重要。为了提高宿舍管理的效率和透明度,许多学校开始采用信息化手段来优化这一过程。本文将围绕“宿舍信息管理系统”和“免费”这两个关键词,介绍如何利用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开发一个功能完善且免费的宿舍信息管理系统,涵盖了数据库设计、图形界面开发、功能实现等多个方面。希望本文能够为相关开发者提供参考和帮助,推动更多高效、低成本的信息化解决方案落地。

相关资讯

    暂无相关的数据...