Skip to content

前言

这一节我们把python面向对象的知识综合在一起,包含了继承、封装、多态和抽象方法做一个小案例。 1.gif

part1 总体框架设计


一、案例介绍

通过一个界面,完成对老师和学生信息的增删改。在主体界面双击对应的学生或老师选项,可以打开明细窗口。 其实这个案例不使用面向对象的思想也可以做出来,但是使用面向对象的思想设计的代码风格会清晰易懂,功能更具模块化。项目需求不是很难,但是很考验大家对面向对象思想的深入理解。

二、类的总体设计

类的设计是否科学合理,决定了整个面向对象项目代码的质量。我们从四大块对该项目进行类的设计。 图片.png

工程项目文件:

屏幕快照 2021-03-17 21.39.27.png

1. GUI界面设计思路

GUI主体界面依然采用Tkinter进行绘制,主体内容通过Treeview表格显示,常见的Label标签、Button按钮也都有涉及。 图片.png 明细界面:点击按钮或者点击表格内容都会弹出明细界面, 图片.png 因为学生明细界面和教师明细界面,界面几乎相同,我们让学生界面和老师界面都继承一个抽象的明细模板界面。 GUI结构框架.png 我们可以这样来设计: 明细窗体-->抽象成一个基类-->派生出学生明细、教师明细。 明细窗体设计思路

2. 数据存储设计思路

我们暂时还没介绍数据库知识,这里我们依然通过文本文件存储数据,初始化的时候通过文件来读取数据。 我们定义一个模块fileoperator.py来处理文件的读写,其中定义File类包含以下内容: * list_student_all存储所有的学生信息 * list_teacher_all存储所有的教师信息 定义了两个方法: * read_from_file读取文件,用来填充list_student_alllist_teacher_all * write_to_file写入文件,对list_student_alllist_teacher_all修改后,写入到文件 图片.png

3. 对象属性封装

这里利用了继承和封装的知识,通过类传递多个属性,抽象出student和teacher的共有属性封装在基类Person中,其所具备的共有属性有: 姓名、手机号码、邮箱地址、性别、出生日期。 由Person派生出两个类:student和teacher

class student(Person):
    def __init__():
        学号,专业,入学时间
class Teacher(Person):
    def __init__():
        教师编号,职称,毕业院校,入职时间

4. 实现增删改的功能

我们写一个抽象的Service类,具备添加、修改、删除、校验的功能。然后分别派生出StudentService类和TeacherService类来实现这些方法。再单独定义一个Check类来分别对输入的数值进行校验。 图片.png

以上为我们整个类的规划,这只是我们自己的想法,未必是最优的,大家可以根据自己对面向对象的理解,自行设计类的规划。

最后

后续内容,会逐步完成窗体GUI的搭建、数据的存储、增删改功能的实现,敬请期待、届时我会给大家分享全部的源码和素材供大家练习使用。