软件工程日报--python 作业
宿舍管理系统
实现对于宿舍的管理,对于学生的增删改查,对于宿舍的增删改查,以及学生和宿舍的联系操作,目前实现了在控制台的代码,后期会实现在可视化界面的代码
源码
class Student:
def __init__(self, stu_id, name, gender, dormitory):
self.stu_id = stu_id
self.name = name
self.gender = gender
self.dormitory = dormitory
class Dormitory:
def __init__(self, building, room, area, capacity):
self.building = building
self.room = room
self.area = area
self.capacity = capacity
self.current = 0 # 已入住人数
@property
def dorm_id(self):
return f"{self.building}-{self.room}"
class DormManager:
def __init__(self):
self.students = []
self.dormitories = []
def add_student(self):
stu_id = input("请输入学号:")
if any(s.stu_id == stu_id for s in self.students):
print("该学号已存在!")
return
name = input("姓名:")
gender = input("性别:")
dorm_id = input("宿舍号(格式:楼号-房间号):")
dorm = self.find_dorm(dorm_id)
if not dorm:
print("宿舍不存在!")
return
if dorm.current >= dorm.capacity:
print("该宿舍已满员!")
return
self.students.append(Student(stu_id, name, gender, dorm_id))
dorm.current += 1
print("学生添加成功!")
def add_dormitory(self):
building = input("楼号:")
room = input("房间号:")
dorm_id = f"{building}-{room}"
if any(d.dorm_id == dorm_id for d in self.dormitories):
print("该宿舍已存在!")
return
area = float(input("面积:"))
capacity = int(input("容纳人数:"))
self.dormitories.append(Dormitory(building, room, area, capacity))
print("宿舍添加成功!")
def modify_student_dorm(self):
stu_id = input("请输入要修改的学号:")
student = next((s for s in self.students if s.stu_id == stu_id), None)
if not student:
print("学生不存在!")
return
old_dorm = self.find_dorm(student.dormitory)
new_dorm_id = input("请输入新宿舍号:")
new_dorm = self.find_dorm(new_dorm_id)
if not new_dorm:
print("新宿舍不存在!")
return
if new_dorm.current >= new_dorm.capacity:
print("新宿舍已满员!")
return
# 更新宿舍人数
old_dorm.current -= 1
new_dorm.current += 1
student.dormitory = new_dorm_id
print("宿舍修改成功!")
def delete_student(self):
stu_id = input("请输入要删除的学号:")
for i, s in enumerate(self.students):
if s.stu_id == stu_id:
dorm = self.find_dorm(s.dormitory)
if dorm:
dorm.current -= 1
del self.students[i]
print("学生删除成功!")
return
print("学生不存在!")
def delete_dormitory(self):
dorm_id = input("请输入要删除的宿舍号:")
for i, d in enumerate(self.dormitories):
if d.dorm_id == dorm_id:
if d.current > 0:
print("该宿舍仍有学生居住,不能删除!")
return
del self.dormitories[i]
print("宿舍删除成功!")
return
print("宿舍不存在!")
def find_student(self):
key = input("请输入学号或姓名:")
results = [s for s in self.students if key in (s.stu_id, s.name)]
self.show_students(results)
def find_dorm(self, dorm_id):
return next((d for d in self.dormitories if d.dorm_id == dorm_id), None)
def show_dorm_info(self):
dorm_id = input("请输入宿舍号:")
dorm = self.find_dorm(dorm_id)
if dorm:
print(f"宿舍信息:{dorm.building}号楼 {dorm.room}室")
print(f"面积:{dorm.area}㎡ 容量:{dorm.capacity}人 已住:{dorm.current}人")
students = [s for s in self.students if s.dormitory == dorm_id]
self.show_students(students)
else:
print("宿舍不存在!")
def show_students(self, students):
if not students:
print("没有找到相关记录")
return
print("\n{:<15}{:<10}{:<8}{:<10}".format("学号", "姓名", "性别", "宿舍号"))
for s in students:
print(f"{s.stu_id:<15}{s.name:<10}{s.gender:<8}{s.dormitory:<10}")
def main():
manager = DormManager()
while True:
print("\n====== 学生宿舍管理系统 ======")
print("1. 添加学生 2. 添加宿舍")
print("3. 修改学生宿舍 4. 删除学生")
print("5. 删除宿舍 6. 查询学生")
print("7. 查询宿舍信息 0. 退出")
choice = input("请选择操作:")
if choice == '1':
manager.add_student()
elif choice == '2':
manager.add_dormitory()
elif choice == '3':
manager.modify_student_dorm()
elif choice == '4':
manager.delete_student()
elif choice == '5':
manager.delete_dormitory()
elif choice == '6':
manager.find_student()
elif choice == '7':
manager.show_dorm_info()
elif choice == '0':
print("谢谢使用!")
break
else:
print("无效的输入!")
if __name__ == "__main__":
main()