小明:嘿,小李,我最近在做一个宿舍管理系统,但是对怎么设计功能模块有点困惑。你有没有什么建议?
小李:当然有!首先,你需要明确系统的功能需求。比如,宿舍管理通常包括学生信息、房间分配、费用管理等。我们可以先列出一个功能清单。
小明:那功能清单应该包含哪些内容呢?
小李:功能清单是系统设计的基础。你可以从以下几个方面入手:学生信息管理、房间分配、费用统计、报修处理、权限控制等。
小明:听起来不错。那具体怎么用代码实现这些功能呢?
小李:我们可以用Python来实现。Python语法简洁,适合快速开发。接下来我给你演示一下基本的代码结构。
小明:太好了!那我们先从学生信息管理开始吧。
小李:好的,我们可以创建一个学生类,用来存储学生的姓名、学号、班级和联系方式。
class Student:
def __init__(self, name, student_id, class_name, contact):
self.name = name
self.student_id = student_id
self.class_name = class_name
self.contact = contact
def display_info(self):
print(f"姓名: {self.name}, 学号: {self.student_id}, 班级: {self.class_name}, 联系方式: {self.contact}")
小明:这个类看起来很清晰。那如何将学生信息保存到数据库中呢?
小李:我们可以使用SQLite数据库。它是一个轻量级的数据库,非常适合小型项目。
import sqlite3
def create_table():
conn = sqlite3.connect('dormitory.db')
cursor = conn.cursor()
cursor.execute('''
CREATE TABLE IF NOT EXISTS students (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
student_id TEXT,
class_name TEXT,
contact TEXT
)
''')
conn.commit()
conn.close()
def add_student(student):
conn = sqlite3.connect('dormitory.db')
cursor = conn.cursor()
cursor.execute('INSERT INTO students (name, student_id, class_name, contact) VALUES (?, ?, ?, ?)',
(student.name, student.student_id, student.class_name, student.contact))

conn.commit()
conn.close()
小明:这样就可以把学生信息存进去了。那房间分配怎么实现呢?
小李:房间分配需要一个房间类,以及一个分配逻辑。我们可以先定义房间的信息,比如房号、床位数、当前入住人数等。
class Room:
def __init__(self, room_number, bed_count):
self.room_number = room_number
self.bed_count = bed_count
self.occupants = []
def assign_bed(self, student):
if len(self.occupants) < self.bed_count:
self.occupants.append(student)
return True
else:
return False
def display_room_info(self):
print(f"房间号: {self.room_number}, 床位数: {self.bed_count}, 当前入住人数: {len(self.occupants)}")
小明:明白了。那如何将房间信息也保存到数据库里呢?
小李:同样可以使用SQLite。我们再创建一个房间表,用于存储房间的基本信息。
def create_room_table():
conn = sqlite3.connect('dormitory.db')
cursor = conn.cursor()
cursor.execute('''
CREATE TABLE IF NOT EXISTS rooms (
room_number TEXT PRIMARY KEY,
bed_count INTEGER
)
''')
conn.commit()
conn.close()
def add_room(room):
conn = sqlite3.connect('dormitory.db')
cursor = conn.cursor()
cursor.execute('INSERT INTO rooms (room_number, bed_count) VALUES (?, ?)',
(room.room_number, room.bed_count))
conn.commit()
conn.close()
小明:这样就实现了房间信息的存储。那费用管理呢?
小李:费用管理可以包括水电费、住宿费等。我们可以为每个学生设置一个费用记录,然后定期计算总费用。
class Fee:
def __init__(self, student_id, water_fee, electricity_fee, accommodation_fee):
self.student_id = student_id
self.water_fee = water_fee
self.electricity_fee = electricity_fee
self.accommodation_fee = accommodation_fee
def total_fee(self):
return self.water_fee + self.electricity_fee + self.accommodation_fee
def add_fee(fee):
conn = sqlite3.connect('dormitory.db')
cursor = conn.cursor()
cursor.execute('INSERT INTO fees (student_id, water_fee, electricity_fee, accommodation_fee) VALUES (?, ?, ?, ?)',
(fee.student_id, fee.water_fee, fee.electricity_fee, fee.accommodation_fee))
conn.commit()
conn.close()
小明:这个费用类挺实用的。那报修处理呢?
小李:报修处理需要一个报修类,记录报修人的信息、报修内容、状态等。我们可以创建一个报修表,用于存储这些信息。
class Repair:
def __init__(self, student_id, description, status='待处理'):
self.student_id = student_id
self.description = description
self.status = status
def update_status(self, new_status):
self.status = new_status
def add_repair(repair):
conn = sqlite3.connect('dormitory.db')
cursor = conn.cursor()
cursor.execute('INSERT INTO repairs (student_id, description, status) VALUES (?, ?, ?)',
(repair.student_id, repair.description, repair.status))
conn.commit()
conn.close()
小明:这下报修也能跟踪了。那权限控制呢?
小李:权限控制可以通过用户角色来实现。比如管理员、宿管员、学生等。我们可以定义一个用户类,包含用户名、密码和角色。
class User:
def __init__(self, username, password, role):
self.username = username
self.password = password
self.role = role
def check_password(self, input_password):
return self.password == input_password
def is_admin(self):
return self.role == 'admin'
小明:这个权限控制很关键,防止未授权访问。那么整个系统是怎么整合起来的呢?
小李:我们可以创建一个主程序,用来初始化数据库,然后根据用户输入进行操作。比如,添加学生、分配房间、查看费用、提交报修等。
def main():
create_table()
create_room_table()
# 创建一些初始数据
student1 = Student("张三", "2021001", "计算机科学", "13800000000")
add_student(student1)
room1 = Room("A101", 4)
add_room(room1)
fee1 = Fee("2021001", 50, 100, 800)
add_fee(fee1)
repair1 = Repair("2021001", "卫生间漏水")
add_repair(repair1)
print("系统初始化完成!")
if __name__ == "__main__":
main()
小明:这样看来,整个系统已经具备了基本的功能。不过,可能还需要进一步优化,比如界面设计或者数据可视化。
小李:没错,你可以考虑使用Tkinter或Flask框架来构建图形界面,或者用Pandas做数据分析。不过现在这个基础版本已经可以满足大部分需求了。
小明:非常感谢你的指导,我现在对宿管系统的开发有了更清晰的认识。
小李:不客气,如果你有任何问题,随时来找我。祝你开发顺利!
