软件工程日报--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()
posted @ 2025-05-12 15:11  元始天尊123  阅读(11)  评论(0)    收藏  举报