python面向对象思维之选课系统

了解一点面向对象作用:

       对于编程语言的初学者来讲,OOP不是一个很容易理解的编程方式,大家虽然都知道OOP的三大特性是继承、封装、多态,并且大家也都知道了如何定义类、方法等面向对象的常用语法,但是一到真正写程序的时候,还是很多人喜欢用函数式编程来写代码,特别是像我一样的初学者,很容易陷入一个窘境就是“我知道面向对象,我也会写类,但我依然没发现在使用了面向对象后,对我们的程序开发效率或其它方面带来什么好处,因为我使用函数编程就可以减少重复代码并做到程序可扩展了,为啥子还用面向对象?”。 

  无论用什么形式来编程,我们都要明确记住以下原则:
  1. 写重复代码是非常不好的低级行为
  2. 你写的代码需要经常变更 
  开发正规的程序跟那种写个运行一次就扔了的小脚本一个很大不同就是,我们的代码总是需要不断的更改,不是修改bug就是添加新功能等,所以为了日后方便程序的修改及扩展,我们写的代码一定要遵循易读、易改的原则(专业数据叫可读性好、易扩展)。
 
  如果你把一段同样的代码复制、粘贴到了程序的多个地方以实现在程序的各个地方调用 这个功能,那日后你再对这个功能进行修改时,就需要把程序里多个地方都改一遍,这种写程序的方式是有问题的,因为如果你不小心漏掉了一个地方没改,那可能会导致整个程序的运行都 出问题。 因此我们知道 在开发中一定要努力避免写重复的代码,否则就相当于给自己再挖坑。
  所以面向对象的好处就是:使你的代码修改和扩展变的更容易。

python选课系统安排上:

需求:

角色:学校、学员、课程、讲师
要求:

1. 创建北京、上海 2 所学校
2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开
3. 课程包含,周期,价格,通过学校创建课程
4. 通过学校创建班级, 班级关联课程、讲师
5. 创建学员时,选择学校,关联班级
6. 创建讲师角色时要关联学校,
7. 提供三个角色接口
  7.1 学员视图, 可以注册, 交学费, 选择班级,
  7.2 讲师视图, 讲师可管理自己的班级, 上课时选择班级, 查看班级学员 列表 , 修改所管理的学员的成绩
  7.3 管理视图,创建讲师, 创建班级,创建课程

解决方法:

解决这个问题之前,我们先来了解一下传说中的-----领域模型

领域模型 

好了,假设你现在会了面向对象的各种语法了,我相信你可能是蒙蔽的, 学会了面向对象的语法,却依然写不出面向对象的程序。

原因是什么呢?原因就是因为你还没掌握一门面向对象设计利器。

答案就是:领域建模。 从领域模型开始,我们就开始了面向对象的分析和设计过程,可以说,领域模型是完成从需求分析到面向 对象设计的一座桥梁。 

 

领域模型,顾名思义,就是需求所涉及的领域的一个建模,更通俗的讲法是业务模型。 参考百度百科(http://baike.baidu.cn/view/757895.htm ),领域模型定义如下: 

从这个定义我们可以看出,领域模型有两个主要的作用:

  1. 发掘重要的业务领域概念
  2. 建立业务领域概念之间的关系 

领域建模三字经 

领域模型如此重要,很多同学可能会认为领域建模很复杂,需要很高的技巧。然而事实上领域建模非常简 单,简单得有点难以让人相信,领域建模的方法概括一下就是“找名词”! 许多同学看到这个方法后估计都会笑出来:太假了吧,这么简单,找个初中生都会啊,那我们公司那些分 析师和设计师还有什么用哦?

分析师和设计师当然有用,后面我们会看到,即使是简单的找名词这样的操作,也涉及到分析和提炼,而 不是简单的摘取出来就可,这种情况下分析师和设计师的经验和技能就能够派上用场了。但领域模型分析 也确实相对简单,即使没有丰富的经验和高超的技巧,至少也能完成一个能用的领域模型。 

虽然我们说“找名词”很简单,但一个关键的问题还没有说明:从哪里找? 如果你还记得领域模型是“需求到面向对象的桥梁”,那么你肯定一下子就能想到:从需求模型中找,具 体来说就是从用例中找。 

 

归纳一下域建模的方法就是“从用例中找名词”。 当然,找到名词后,为了能够更加符合面向对象的要求和特点,我们还需要对这些名词进一步完善,这就 是接下来的步骤:加属性,连关系

 

最后我们总结出领域建模的三字经方法:找名词、加属性、连关系。 

 再看一下需求:

1. 创建北京、上海 2 所学校
2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开
3. 课程包含,周期,价格,通过学校创建课程
4. 通过学校创建班级, 班级关联课程、讲师
5. 创建学员时,选择学校,关联班级
6. 创建讲师角色时要关联学校,
7. 提供三个角色接口
    7.1 学员视图, 可以注册, 交学费, 选择班级,
    7.2 讲师视图, 讲师可管理自己的班级, 上课时选择班级, 查看班级学员    列表 , 修改所管理的学员的成绩
    7.3 管理视图,创建讲师, 创建班级,创建课程
打开查看需求

1.找名词

who : 学员、讲师、管理员

2.加属性

分析一下:各个角色固有的属性,学员、教师、管理员各要实现哪些功能?这些功能就是属性,通过在类中定义对应的方法来实现。

3.连关系

所谓连关系就是将各属性分门别类,通过其他函数和用户的操作实现不同属性的过程。

此时你需要一个清晰的程序目录结构:

 1 │  README        #程序说明
 2 ├─bin
 3 │      main.py          # 启动入口
 4 ├─core # 核心代码
 5 │  │  admin_view.py        # 学校\管理视图
 6 │  │  data_deal.py        # 数据的增删改查实现
 7 │  │  edu_class.py        #学校,学生,教师,课程,班级
 8 │  │  student_view.py    # 学生视图
 9 │  │  teacher_view.py    # 老师视图
10 └─datas
11         datas.pk        #日志文件

接下来为你端上每个源程序的代码:

 1 '''
 2 启动程序
 3 '''
 4 import os
 5 import sys
 6 
 7 # 导入路径
 8 BASE_PATH = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
 9 sys.path.append(BASE_PATH)
10 print(BASE_PATH)
11 '''从核心代码core中导入三种视图'''
12 from core import admin_view
13 from core import student_view
14 from core import teacher_view
15 
16 
17 def main():
18     print("*"*50)
19     choice = input("请输入角色:1 学校\t2 教师\t3 学生\n->")
20     print("*" * 50)
21     if choice == '1':
22         admin_view.run()
23     elif choice == '2':
24         teacher_view.run()
25     elif choice == '3':
26         student_view.run()
27     elif choice == '0':
28         print("已退出程序!")
29         return
30     else:
31         print("输入错误!\n********************")
32         main()
33 
34 if __name__ == "__main__":
35     main()
main.py
  1 # 作者:周浩强
  2 '''
  3 ---------管理员视图---------------
  4 功能:
  5     将 --->讲师类、班级类、课程类 进行实例化
  6     即:创建讲师, 创建班级,创建课程
  7 '''
  8 import os
  9 import sys
 10 
 11 # 导入路径
 12 BASE_PATH = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
 13 sys.path.append(BASE_PATH)
 14 
 15 from core import edu_class
 16 from core import data_deal
 17 
 18 
 19 def ch_school():
 20     print("选择学校:")
 21     data_deal.print_schools()
 22     school_name = input("学校名:")
 23     school = data_deal.get_school(school_name)
 24     if school == None:
 25         print("学校选择错误")
 26         return
 27 
 28 
 29 def ch_course():
 30     print("选择课程:")
 31     data_deal.print_courses()
 32     course_name = input("课程名:")
 33     course = data_deal.get_course(course_name)
 34     if course == None:
 35         print("课程选择错误")
 36         return
 37 
 38 
 39 def ch_teacher():
 40     print("选择老师:")
 41     data_deal.print_teachers()
 42     teacher_name = input("老师姓名:")
 43     teacher = data_deal.get_teacher(teacher_name)
 44     if teacher == None:
 45         print("老师选择错误")
 46         return
 47 
 48 
 49 def add_grade():  # 创建班级
 50     print("请填写班级信息:")
 51     grade_name = input("名称:")
 52     ch_school()
 53     ch_course()
 54     ch_teacher()
 55     grade = school.create_grade(grade_name, teacher, course)
 56     data_deal.update_grade(grade)
 57     data_deal.update_school(school)
 58 
 59 
 60 def add_school():  # 创建学校
 61     print("请填写学校信息:")
 62     school_name = input("名称:")
 63     address = input("地址:")
 64     school = edu_class.School(school_name, address)
 65     data_deal.update_school(school)
 66 
 67 
 68 def add_course():  # 创建课程:linux , python , go 3个  linux\py 在北京开, go 在上海开
 69     print("请填写课程信息:")
 70     course_name = input("名称:")
 71     cycle = input("周期:")
 72     price = input("学费:")
 73     ch_school()
 74     course = school.create_course(course_name, cycle, price)
 75     data_deal.update_course(course)
 76     data_deal.update_school(school)
 77 
 78 
 79 def add_teacher():  # 创建老师
 80     print("请填写教师信息:")
 81     teacher_name = input("姓名:")
 82     ch_school()
 83     teacher = school.create_teacher(teacher_name)
 84     data_deal.update_teacher(teacher)
 85     data_deal.update_school(school)
 86     print("老师 %s 创建成功!" % teacher.name)
 87 
 88 
 89 def show_schools():
 90     data_deal.print_schools()
 91 
 92 
 93 def show_courses():
 94     data_deal.print_courses()
 95 
 96 
 97 def show_teachers():
 98     data_deal.print_teachers()
 99 
100 
101 def show_grades():
102     data_deal.print_grades()
103 
104 
105 def show_teacher():
106     ch_teacher()
107     teacher.show_info()
108 
109 
110 def run():
111     print("\t学校视图\n","=" * 20)
112     while True:
113         print("1.增加学校\t2.增加老师\t3.增加课程\t4.增加班级\t"
114               "5.查看学校\n6.查看老师\t7.查看课程\t8.查看班级\t"
115               "9.查看教师详细\t"
116               "0.退出")
117         res = input("输入序号:")
118         if res == "1":
119             add_school()
120         elif res == "2":
121             add_teacher()
122         elif res == "3":
123             add_course()
124         elif res == "4":
125             add_grade()
126         elif res == "5":
127             show_schools()
128         elif res == "6":
129             show_teachers()
130         elif res == "7":
131             show_courses()
132         elif res == "8":
133             show_grades()
134         elif res == "9":
135             show_teacher()
136         elif res == "0":
137             print("退出成功!")
138             break
139         else:
140             print("请选择正确的编号")
141 
142 
143 if __name__ == "__main__":
144     run()
admin_view.py
  1 # 作者:周浩强
  2 '''
  3 ---------学生视图---------------
  4 功能:
  5     将----->学生类实例化,交学费,选择班级
  6 '''
  7 import os
  8 import sys
  9 
 10 # 导入路径
 11 BASE_PATH = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
 12 sys.path.append(BASE_PATH)
 13 
 14 from core import edu_class
 15 from core import data_deal
 16 
 17 
 18 # 选择函数集
 19 def ch_school():
 20     print("选择学校:")
 21     data_deal.print_schools()
 22     school_name = input("学校名:")
 23     school = data_deal.get_school(school_name)
 24     if school == None:
 25         print("学校选择错误")
 26         return
 27 
 28 
 29 def ch_course():
 30     print("选择课程:")
 31     data_deal.print_courses()
 32     course_name = input("课程名:")
 33     course = data_deal.get_course(course_name)
 34     if course == None:
 35         print("课程选择错误")
 36         return
 37 
 38 
 39 def ch_teacher():
 40     print("选择老师:")
 41     data_deal.print_teachers()
 42     teacher_name = input("老师姓名:")
 43     teacher = data_deal.get_teacher(teacher_name)
 44     if teacher == None:
 45         print("老师选择错误")
 46         return
 47 
 48 
 49 def ch_grade():
 50     print("选择班级:")
 51     data_deal.print_grades()
 52     grade_name = input("班级名:")
 53     grade = data_deal.get_grade(grade_name)
 54     if grade == None:
 55         print("班级选择错误")
 56         return
 57 
 58 
 59 def ch_student():
 60     print("选择学生:")
 61     data_deal.print_students()
 62     student_name = input("学生名:")
 63     student = data_deal.get_student(student_name)
 64     if student == None:
 65         print("学生选择错误")
 66         return
 67 
 68 
 69 # 学生视图函数集
 70 def add_student():
 71     print("请填写学生信息:")
 72     name = input("姓名:")
 73     ch_school()
 74     ch_grade()
 75     student = edu_class.Student(name, school, grade)
 76     data_deal.update_student(student)
 77     data_deal.update_school(school)
 78     data_deal.update_grade(grade)
 79 
 80 
 81 def pay_tuition():
 82     ch_student()
 83     money = input("请输入学费金额:")
 84     if not money.isdigit():
 85         print("输入金额格式不正确")
 86         return
 87     student.pay_tuition(int(money))
 88     data_deal.update_student(student)
 89 
 90 
 91 def choose_grade():
 92     ch_student()
 93     ch_grade()
 94     student.choose_grade(grade)
 95     data_deal.update_student(student)
 96     data_deal.update_grade(grade)
 97 
 98 
 99 def choose_school():
100     ch_student()
101     ch_school()
102     student.choose_school(school)
103     data_deal.update_student(student)
104     data_deal.update_school(school)
105 
106 
107 def show_student():
108     ch_student()
109     student.show_info()
110 
111 
112 def show_students():
113     data_deal.print_students()
114 
115 
116 def run():
117     print("学生视图:")
118     print("=" * 20)
119     while True:
120         print("1.增加学生\t2.交学费\t3.选择班级\t4.选择学校\t"
121               "5.查看学生\t6.查看详细\t"
122               "0.退出")
123         res = input("输入序号:")
124         if res == "1":
125             add_student()
126         elif res == "2":
127             pay_tuition()
128         elif res == "3":
129             choose_grade()
130         elif res == "4":
131             choose_school()
132         elif res == "5":
133             show_students()
134         elif res == "6":
135             show_student()
136         elif res == "0":
137             print("退出成功!")
138             break
139         else:
140             print("请选择正确的编号")
141 
142 
143 if __name__ == "__main__":
144     run()
student_view.py
  1 # 作者:周浩强
  2 '''
  3 ---------讲师视图---------------
  4 功能:
  5     讲师可管理自己的班级, 上课时选择班级,
  6     查看班级学员列表 , 修改所管理的学员的成绩
  7     即:调用data_deal模块的功能
  8 '''
  9 import os
 10 import sys
 11 
 12 # 导入路径
 13 BASE_PATH = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
 14 sys.path.append(BASE_PATH)
 15 
 16 from core import edu_class
 17 from core import data_deal
 18 
 19 
 20 # 选择函数集
 21 def ch_school():
 22     print("选择学校:")
 23     data_deal.print_schools()
 24     school_name = input("学校名:")
 25     school = data_deal.get_school(school_name)
 26     if school == None:
 27         print("学校选择错误")
 28         return
 29 
 30 
 31 def ch_course():
 32     print("选择课程:")
 33     data_deal.print_courses()
 34     course_name = input("课程名:")
 35     course = data_deal.get_course(course_name)
 36     if course == None:
 37         print("课程选择错误")
 38         return
 39 
 40 
 41 def ch_teacher():
 42     print("选择老师:")
 43     data_deal.print_teachers()
 44     teacher_name = input("老师姓名:")
 45     teacher = data_deal.get_teacher(teacher_name)
 46     if teacher == None:
 47         print("老师选择错误")
 48         return
 49 
 50 
 51 def ch_grade():
 52     print("选择班级:")
 53     data_deal.print_grades()
 54     grade_name = input("班级名:")
 55     grade = data_deal.get_grade(grade_name)
 56     if grade == None:
 57         print("班级选择错误")
 58         return
 59 
 60 
 61 def ch_student():
 62     print("选择学生:")
 63     data_deal.print_students()
 64     student_name = input("学生名:")
 65     student = data_deal.get_student(student_name)
 66     if student == None:
 67         print("学生选择错误")
 68         return
 69 
 70 
 71 # 教师视图函数集
 72 def choose_grade():
 73     ch_teacher()
 74     ch_grade()
 75     teacher.choose_grade(grade)
 76     data_deal.update_teacher(teacher)
 77 
 78 
 79 def show_students():
 80     ch_teacher()
 81     teacher.show_students()
 82 
 83 
 84 def modify_score():
 85     ch_teacher()
 86     ch_student()
 87     score = input("请输入分数:")
 88     if not score.isdigit() or 0 > int(score) or int(score) > 100:
 89         print("输入分数不正确")
 90         return
 91 
 92     teacher.modify_score(student, score)
 93     data_deal.update_teacher(teacher)
 94     data_deal.update_student(student)
 95     data_deal.update_grade(teacher.grade)
 96     print("%s 的成绩修改为: %s" % (student.name, data_deal.get_student(student_name).score))
 97 
 98 
 99 def show_teacher():
100     ch_teacher()
101     teacher.show_info()
102 
103 
104 def run():
105     print("教师视图:")
106     print("=" * 20)
107     while True:
108         print("1.选择班级\t2.查看学生\t3.修改成绩\t4.查看教师\t0.退出")
109         res = input("输入序号:")
110 
111         if res == "1":
112             choose_grade()
113         elif res == "2":
114             show_students()
115         elif res == "3":
116             modify_score()
117         elif res == "4":
118             show_teacher()
119         elif res == "0":
120             print("退出成功!")
121             break
122         else:
123             print("请选择正确的编号")
124 
125 
126 if __name__ == "__main__":
127     run()
teacher_view.py
  1 # 作者:周浩强
  2 
  3 # 处理高层业务逻辑
  4 
  5 class Education(object):
  6     def __init__(self, name):
  7         self.name = name
  8 
  9     def show(self):
 10         pass
 11 
 12     def __str__(self):
 13         return self.name
 14 
 15 
 16 class School(Education, object):
 17     '''学校类'''
 18 
 19     def __init__(self, name, address):
 20         super(School, self).__init__(name)
 21         self.address = address
 22         self.teachers = []
 23         self.students = []
 24         self.courses = []
 25         self.grades = []
 26         print("school:%s 创建成功" % name)
 27 
 28     def enroll(self, student):  # 学员注册
 29         self.students.append(student)
 30         print("%s 注册在 %s" % (student.name, self.name))
 31 
 32     def leave_schol(self, student):  # 学员退学
 33         self.students.remove(student)
 34         print("%s 从 %s 退学" % (student.name, self.name))
 35 
 36     def create_course(self, name, cycle, price):  # 创建课程
 37         '''通过学校创建课程,课程包含:周期、价格'''
 38         course = Course(name, cycle, price)
 39         self.courses.append(course)
 40         print("course: %s 创建成功" % name)
 41         return course
 42 
 43     def create_teacher(self, name):
 44         teacher = Teacher(name, self)
 45         self.teachers.append(teacher)
 46         print("teacher: %s 创建成功" % name)
 47         return teacher
 48 
 49     def hire_teacher(self, teacher):
 50         self.teachers.append(teacher)
 51         print("teacher: %s 雇佣成功" % teacher.name)
 52 
 53     def fire_teacher(self, teacher):
 54         self.teachers.remove(teacher)
 55         print("teacher: %s 从 %s 移除" % (teacher.name, self.name))
 56 
 57     def create_grade(self, name, teacher, course):
 58         '''学校创建班级,班级关联教师和课程'''
 59         grade = Grade(name, teacher, course)
 60         self.grades.append(grade)
 61         print("grade: %s 创建成功" % name)
 62         return grade
 63 
 64 
 65 class Course(Education, object):
 66     '''创建课程'''
 67 
 68     def __init__(self, name, cycle, price):
 69         super(Course, self).__init__(name)
 70         self.cycle = cycle
 71         self.price = price
 72 
 73 
 74 class Grade(Education, object):
 75     '''创建班级'''
 76 
 77     def __init__(self, name, teacher, course):
 78         super(Grade, self).__init__(name)
 79         self.teacher = teacher
 80         self.course = course
 81         self.students = []
 82 
 83     def enroll(self, student):  # 学员注册
 84         self.students.append(student)
 85         print("%s enroll in %s " % (student.name, self.name))
 86 
 87     def leave_grade(self, student):  # 学员离开
 88         self.students.remove(student)
 89         print("%s leave grade from %s " % (student.name, self.name))
 90 
 91     def show_info(self):
 92         print("grade:name: %s\t teacher:%s\t course:%s\t students:%s" %
 93               (self.name, self.teacher, self.course, self.students))
 94 
 95 
 96 class Teacher(Education, object):
 97     '''创建老师'''
 98 
 99     def __init__(self, name, school):
100         super(Teacher, self).__init__(name)
101         self.school = None  # 为None时表示未选择学校
102         self.choose_school(school)
103         self.grade = None  # 为None时表示未选择班级
104 
105     def choose_school(self, school):
106         if self.school != None:
107             self.school.fire_teacher(self)
108         school.hire_teacher(self)
109         self.school = school
110 
111     def choose_grade(self, grade):
112         self.grade = grade
113 
114     def show_students(self):
115         if self.grade != None:
116             for student in self.grade.students:
117                 student.show_info()
118         else:
119             print("请选择班级")
120 
121     def modify_score(self, student, score):
122         student.score = score
123 
124     def show_info(self):
125         print("teacher:name:%s\t school:%s\t grade:%s"
126               % (self.name, self.school, self.grade))
127 
128 
129 class Student(Education, object):
130     '''创建学员时,选择学校,关联班级'''
131 
132     def __init__(self, name, school, grade, score=0):
133         super(Student, self).__init__(name)
134         self.score = score
135         self.school = None
136         self.grade = None
137         self.tuition = 0
138         self.choose_school(school)
139         self.choose_grade(grade)
140 
141     def choose_school(self, school):
142         if self.school != None:
143             self.school.leave_school(self)
144         school.enroll(self)
145         self.school = school
146 
147     def choose_grade(self, grade):
148         if self.grade != None:
149             self.grade.leave_grade(self)
150         grade.enroll(self)
151         self.grade = grade
152 
153     def pay_tuition(self, money):  # 交学费
154         self.tuition += money
155 
156     def show_info(self):
157         print("student:name: %s\t school:%s\t grade:%s\t score:%s\t tuition:%s"
158               % (self.name, self.school, self.grade, self.score, self.tuition))
159 
160 
161 if __name__ == "__main__":
162     school = School("淮南师范学院", "淮南")
163     teacher = school.create_teacher("王老师")
164     course = school.create_course("通信", "1年", 5000)
165     grade = school.create_grade("大三", teacher, course)
166     student = Student("Tom", school, grade)
167     student.show_info()
168     teacher.modify_score(student, 64)
169     teacher.show_info()
170     student.show_info()
edu_class.py
  1 # 作者:周浩强
  2 '''
  3 功能:处理数据存储与提取,数据的增删改查实现
  4 '''
  5 
  6 import pickle
  7 
  8 path = "../datas/datas.pk"  # 数据路径
  9 
 10 
 11 def dump(obj):
 12     f = open(path, "wb")
 13     pickle.dump(obj, f)
 14     f.close()
 15 
 16 
 17 def load():
 18     f = open(path, "rb")
 19     infos = pickle.load(f)
 20     f.close()
 21     return infos
 22 
 23 
 24 def print_all_info():  # 打印数据信息
 25     infos = load()
 26     print("=" * 50)
 27     for key in infos:
 28         print(key, ":")
 29         for key2 in infos.get(key):
 30             print("\t", key2, ":", infos.get(key).get(key2))
 31     print("=" * 50)
 32 
 33 
 34 def print_infos(key):
 35     infos = load()
 36     print(key.center(50, "="))
 37     # print("\t", "名称", ":", key)
 38     print("\t", "-" * 30)
 39     for key2 in infos.get(key):
 40         print("\t", key, ":", infos.get(key).get(key2))
 41     print("=" * 50)
 42 
 43 
 44 def print_schools():
 45     key = "schools"
 46     print_infos(key)
 47 
 48 
 49 def print_courses():
 50     key = "courses"
 51     print_infos(key)
 52 
 53 
 54 def print_grades():
 55     key = "grades"
 56     print_infos(key)
 57 
 58 
 59 def print_teachers():
 60     key = "teachers"
 61     print_infos(key)
 62 
 63 
 64 def print_students():
 65     key = "students"
 66     print_infos(key)
 67 
 68 
 69 # 查询操作
 70 def get_infos(class_name):
 71     infos = load()
 72     return infos.get(class_name)
 73 
 74 
 75 # 查询学校
 76 def get_schools():
 77     return get_infos("schools")
 78 
 79 
 80 def get_school(school_name):
 81     return get_schools().get(school_name)
 82 
 83 
 84 # 查询班级
 85 def get_grades():
 86     return get_infos("grades")
 87 
 88 
 89 def get_grade(grade_name):
 90     return get_grades().get(grade_name)
 91 
 92 
 93 # 查询课程
 94 def get_courses():
 95     return get_infos("courses")
 96 
 97 
 98 def get_course(course_name):
 99     return get_courses().get(course_name)
100 
101 
102 # 查询老师
103 def get_teachers():
104     return get_infos("teachers")
105 
106 
107 def get_teacher(teacher_name):
108     return get_teachers().get(teacher_name)
109 
110 
111 # 查询学生
112 def get_students():
113     return get_infos("students")
114 
115 
116 def get_student(student_name):
117     return get_students().get(student_name)
118 
119 
120 # 修改操作
121 def update(dct):
122     obj = load()
123     obj.update(dct)
124     dump(obj)
125 
126 
127 def update_school(school):
128     infos = load()
129     infos["schools"].update({school.name: school})
130     dump(infos)
131 
132 
133 def update_course(course):
134     infos = load()
135     infos["courses"].update({course.name: course})
136     dump(infos)
137 
138 
139 def update_grade(grade):
140     infos = load()
141     infos["grades"].update({grade.name: grade})
142     dump(infos)
143 
144 
145 def update_teacher(teacher):
146     infos = load()
147     infos["teachers"].update({teacher.name: teacher})
148     dump(infos)
149 
150 
151 def update_student(student):
152     infos = load()
153     infos["students"].update({student.name: student})
154     dump(infos)
155 
156 
157 def init():
158     # 存储结构
159     infos = {
160         "schools": {
161             # "school_name": "school_obj"
162         },
163         "grades": {
164             # "grade_name": "grade_obj"
165         },
166         "courses": {
167             # "course_name": "course_obj"
168         },
169         "teachers": {
170             # "teacher_name": "teacher_obj"
171         },
172         "students": {
173             # "student_name": "student_obj"
174         },
175     }
176     # 初始化数据
177     res = input("是否初始化数据?[y]:")
178     if res == "y":
179         dump(infos)
180         print("数据初始化成功!")
181     else:
182         print("数据初始化失败!")
183 
184 
185 if __name__ == '__main__':
186     init()
data_deal.py

运行截图

 

 

 

posted @ 2020-02-06 15:00  Vinci-Q  阅读(249)  评论(0)    收藏  举报