# 选课系统项目中涉及到诸多数据与功能,要求引入面向对象的思想对其进行高度整合
# # 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')