高度整合选课系统项目-练习

# 选课系统项目中涉及到诸多数据与功能,要求引入面向对象的思想对其进行高度整合
# # 1、学校数据与功能整合
# # 2、课程数据与功能进行整合
# # 3、学生数据与功能进行整合
# # 4、讲师数据与功能进行整合
# # 5、班级数据与功能进行整合

# 用面向对象思想编写程序:
"""
1. 根据需求先找到对象
    - 选课系统项目中涉及到诸多数据与功能,要求引入面向对象的 "思想" 对其进行高度整合
        1、学校 数据与功能 整合
        2、课程 数据与功能 进行整合
        3、学生 数据与功能 进行整合
        4、讲师 数据与功能 进行整合
        5、班级 数据与功能 进行整合


    - 数据部分:
         校区的名字:如"老男孩上海校区"
         校区的地址:如"上海虹桥"

         班级名字
         班级所在校区

         学生的学校
         学生的姓名
         学生的年龄
         学号
         学生的性别

         课程名字
         课程周期
         课程价格

         老师的名字
         老师的年龄
         老师的薪资
         老师的等级


    - 功能部分:
        上海校区 ---> School() ---> school_obj(创建班级的功能)
        校区创建完毕后,可以为每个校区创建班级

        班级创建完毕后,可以为每个班级创建课程

        学生创建完毕后,学生可以选择班级

        老师创建完毕后,可以为学生打分

2. 通过对象总结出类
    - 学校类
        - 数据
            - 学校名
            - 校区地址
        - 功能
            - 校区创建班级

    - 班级类
        - 数据
            - 班级名
            - 班级所在校区
        - 功能
            - 创建课程

    - 课程类
        - 数据
            - 课程名字
            - 课程周期
            - 课程价格
        - 功能
            - __str__输出课程的信息

    - 学生类
        - 数据
            - 学生学号
            - 学生姓名
            - 学生年龄
            - 学生性别
            - 学生的校区
        - 功能
            - 学生选择课程
    - 老师类
        - 数据
            - 老师姓名
            - 老师年龄
            - 老师薪资
            - 老师级别
        - 功能
            - 修改成绩
3. 定义类

4. 调用类实例化的对象进行操作
"""


class School:
    """
    - 数据
        - 学校名
        - 校区地址
    - 功能
        - 校区创建班级
    """
    school_name = "老男孩"

    def __init__(self, campus):
        self.campus = campus
        self.class_list = []

    def create_class(self, class_name):
        self.class_list.append(class_name)
        class_obj = Class(self.campus, class_name)
        return class_obj

class Class:
    """
    - 数据
        - 班级名
        - 班级所在校区
    - 功能
        - 创建课程
    """

    def __init__(self, campus, class_name):
        self.campus = campus
        self.class_name = class_name
        self.student_list = []
        self.course_list = []

    def create_course(self, course_name, course_period, course_price):
        self.course_list.append(course_name)
        course_obj = Course(course_name, course_period, course_price)
        return course_obj


class Course:
    """
    - 数据
        - 课程名字
        - 课程周期
        - 课程价格
    - 功能
        - __str__输出课程的信息
    """

    def __init__(self, name, period, price):
        self.name = name
        self.period = period
        self.price = price

    def __str__(self):
        return f'<课程:{self.name} 周期:{self.period} 定价:{self.price}>'


class Student:
    """
    - 学生学号
        - 学生所在的校区
        - 学生姓名
        - 学生年龄
        - 学生性别
        - 学生学号
        - 学生课程对象列表
        - 学生成绩字典: 默认成绩0分
    - 功能
        - 学生选择课程
        - __str__输出学生的个人信息
    """

    def __init__(self, campus, student_number, name, age,sex='male'):
        self.campus = campus
        self.name = name
        self.age = age
        self.sex = sex
        self.student_number = student_number
        self.course_list = []
        self.score = {}  # score 分数 {课程1:成绩1, 课程2:成绩2}

    def choose_course(self, course_name):
        self.course_list.append(course_name)
        self.score[course_name] = 0


class Teacher:
    """
    - 数据
        - 老师姓名
        - 老师年龄
        - 老师薪资
        - 老师级别
    - 功能
        - 修改成绩
        -- __str__输出老师的个人信息
    """

    def __init__(self, name, age, salary, level):
        self.name = name
        self.age = age
        self.salary = salary
        self.level = level

    @staticmethod
    def modify_grade(student_obj, course_name, score):
        student_obj.score[course_name] = score


# 实例化学校对象
school_obj = School('上海校区')

# 通过学校对象实例化创建班级对象
class_obj = school_obj.create_class('脱产14期')

# 通过班级对象创建课程对象
course_obj = class_obj.create_course('python', 6, 23800)

# 实例化创建学生对象
student_obj = Student(school_obj.campus, '刘洋', 18, '170628060319', 'male')

# 学生对象选择课程
student_obj.choose_course(course_obj.name)

# 实例化创建老师对象
teacher_obj = Teacher('tank', 18, 99999, 9)

# 老师对象修改学生成绩
teacher_obj.modify_grade(student_obj, course_obj.name, 99)

print(school_obj.__dict__)
print(class_obj.__dict__)
print(student_obj.__dict__)
print(teacher_obj.__dict__)
"""
{'campus': '上海校区', 'class_list': ['脱产14期']}
{'campus': '上海校区', 'class_name': '脱产14期', 'student_list': [], 'course_list': ['python']}
{'campus': '上海校区', 'name': 18, 'age': '170628060319', 'sex': 'male', 'student_number': '刘洋', 'course_list': ['python'], 'score': {'python': 99}}
{'name': 'tank', 'age': 18, 'salary': 99999, 'level': 9}
"""




# student_obj1 = Student('刘洋', 18, 170628060319, 'male')
# student_obj2 = Student('张晨', 19, 170628060320, 'male')
# student_obj3 = Student('刘旭', 20, 170628060329, 'male')
# student_obj4 = Student('朱斌成', 28, 17062806032, 'male')
# student_obj5 = Student('王律盛', 38, 170628060349, 'male')
# student_obj6 = Student('陈慧雯', 17, 170628060359, 'female')
posted @ 2020-04-07 21:28  给你加马桶唱疏通  阅读(154)  评论(0编辑  收藏  举报