美文网首页Python
学员管理系统-python面向对象最佳练习实例

学员管理系统-python面向对象最佳练习实例

作者: 孟轲666 | 来源:发表于2019-07-22 00:45 被阅读11次

在开始一个项目的时候,不是急于去动手,而是在动手之前先分析需求,在分析的过程中一步步的完善大体的框架,然后先实现自己比较拿手的那部分。

好,话不多说,我们接下来正式开始
  • 需求分析:
    我们先来看下具体的需求:

程序名称: 选课系统
角色:学校、学员、课程、讲师
要求:

  1. 创建北京、上海 2 所学校
  2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开
  3. 课程包含,周期,价格,通过学校创建课程
  4. 通过学校创建班级, 班级关联课程、讲师
  5. 创建学员时,选择学校,关联班级
  6. 创建讲师角色时要关联学校,
  7. 提供两个角色接口
  8. 学员视图, 可以注册, 交学费, 选择班级,
  9. 讲师视图, 讲师可管理自己的班级, 上课时选择班级, 查看班级学员列表 , 修改所管理的学员的成绩
  10. 管理视图,创建讲师, 创建班级,创建课程
  11. 上面的操作产生的数据都通过pickle序列化保存到文件里

我们接下来一条一条的分析:

需求 分析
1. 创建北京、上海2所学校 创建两所学校,肯定是要创建个学校的类,实例化两个对象就是两个具体的学校喽
2.创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开 创建课程,课程肯定也是个类,课程要和学校关联
3.课程包含,周期,价格,通过学校创建课程 其中课程类的属性为:周期、价格,课程实例化是由学校实例化的
4.通过学校创建班级, 班级关联课程、讲师 班级也是个类,班级类的实例化也是由学校来实例化的,其中班级要关联课程,讲师
5.创建学员时,选择学校,关联班级 学员也是个类,学员要选择学校,和班级关联
6.创建讲师角色时要关联学校 讲师也是个类,讲师要关联学校
7.提供两个角色接口 要提供视图接口
8.学员视图, 可以注册, 交学费, 选择班级 学员视图的功能,注册、交学费、选择班级
9.讲师视图, 讲师可管理自己的班级, 上课时选择班级, 查看班级学员列表 , 修改所管理的学员的成绩 讲师视图的功能
10.管理视图,创建讲师, 创建班级,创建课程 这个其实就是学校视图
11.上面的操作产生的数据都通过pickle序列化保存到文件里 这个就是数据库

总结:

三个视图:学员视图、讲师视图、学校视图 三个视图即三个管理接口
五个角色:学员、班级、课程、讲师、学校 五个角色即需要定义五个类

下面开始正式搬砖:

在搬砖之前,我们先应该定义好在那个位置搬什么样的砖,不能什么样的砖都放在一起,最后就会很乱。

  • 要有一个入口文件,就是程序的入口:bin文件,里面就是我们程序的入口:start.py
  • 要有一个database的文件,里面是我们存放数据库的位置
  • 要有一个模型module文件,里面放我们的角色数据
  • 要有一个配置文件,里面放我们的配置文件,setting.py
  • 要有一个主文件,里面是我们的主逻辑区
  • 还要有一个README.md记录我们的信息

module文件中:

student.py

class Student(object):
    """
    学生类
    属性:姓名、年龄
    """
    def __init__(self,student_name,student_age):
        self.student_name = student_name
        self.student_age = student_age
        

course.py

class Course(object):
    """
    课程类
    属性:课程名、价格、周期
    """
    def __init__(self,course_name,course_price,course_time):
        self.course_name = course_name
        self.course_price = course_price
        self.course_time = course_time

class.py

class Classes(object):
    """
    班级类
    属性:班级名、关联的课程
    """
    def __init__(class_name,course_obj):
        self.class_name = class_name
        self.class_course = course_obj
        self.class_student = {}

teacher.py

class Teacher(object):
    """
    老师类
    属性:老师名字、老师薪水
    """
    def __init__(self,teacher_name,teacher_salary):
        self.teacher_name = teacher_name
        self.teacher_salary = teacher_salary
        self.teacher_class = {}

    def teacher_add_class(self,class_name,class_obj):
        self.teacher_class[class_name] = class_obj

school.py

from module.course import Course
from module.class import Classes
from module.teacher import Teacher
from module.student import Student

class School(object):
    """
    学校类
    属性:学校名、学校地址、学校老师实例、学校课程实例、学校班级实例
    """
    def __init__(self,school_name,school_addr):
        self.school_name = school_name
        self.school_addr = school_addr
        self.school_class = {}
        self.school_teacher = {}
        self.school_course = {}
        #self.school_student = {}

    def creat_course(self,course_name,course_price,course_time):
        '''创建课程'''
        course_obj = Course(course_name,course_price,course_time)
        self.school_course[course_name] = course_obj

    def show_course(self):
        '''查看课程'''
        for k in self.school_course:
            course_obj = self.course[k]
            print("\33[32;1m课程:%s\t价格:%s\t周期:%s月\33[0m"%(course_obj.course_name,couese_obj.course_price,course_time))


    def creat_class(self,class_name,couse_obj):
        '''创建班级'''
        class_obj = Classes(class_name,course_obj)
        self.school_class[class_name] = class_obj

    def show_class(slef):        
        '''查看班级'''
        for key in self.school_class:
            class_obj = self.school_class[key]
            print("\33[32;1m班级:%s\t班级关联的课程%s\33[0m"%(class_obj_class_name,class_obj.course_obj.course_name))

    def show_class_course(self):
        '''查看班级关联课程'''
        for key in self.school_class:
            class_obj = self.school_class[key]
            course_obj = class_obj.class_course
            print("\33[32;1m班级:%s\t课程:%s\t价格:%s\t周期:%s月\33[0m"%(class_obj.class_name,course_obj.course_name,course_obj.course_price,course_obj.course_time))

    def creat_student(self,student_name,student_age,class_choice):
        '''创建学员实例'''
        student_obj = Student(student_name,student_age)
        class_obj = self.school_class[class_choice]
        class_obj.class_student[student_name] = student_obj
        self.school_class[class_choice] = class_obj

    def creat_teacher(self,teacher_name,teacher_salary,class_name,class_obj):
        '''创建老师实例'''
        teacher_obj = Teacher(teacher_name,teacher_salary)
        teacher_obj. teacher_add_class(class_name,class_obj)
        self.school_teacher[teacher_name] = teacher_obj

    def show_teacher(self):
        '''查看老师'''
        for key in self.school_teacher:
            teacher_obj = self.school_teacher[key]
           class_list = []
           for k in teacher_obj.teacher_class:
               class_list.append(k)
           print("\33[32;1m老师%s\t薪水%s\t关联班级%s\33[0m"%(teacher_obj.teacher_name,teacher_obj.teacher_salary,class_list))


    def teacher_class_inifo(self,teacher_name):
        '''老师所带班级的信息'''
        teacher_obj = self.school_teacher[teacher_name]
        for k in teacher_obj.teacher_class:
            class_obj = self.school_class[k]
            student_list = []
            for i in class_obj.class_student:
                student_list.appent(i)
            print("\33[31;1m老师:%s\t关联课程:%s\t学员:%s"%(teacher_name,class_obj.class_course.course_name,student_list))

    def update_teacher(self,teacher_name,class_name,class_course):
        '''更新讲师'''
        teacher_obj = self.school[teacher_name]
        teacher_obj.teacher_add_class(class_name,class_course)

配置文件conf

setting.py

import os
import platform

if platform.system() == "Window":
    BASE_DIR ='\\'.join(os.path.abspath(os.path.dirname(__file__)).splite['\\'][:-1])
    database_path = os.path.join(BASE_DIR,db)
else:
    BASE_DIR ='/'.join(os.path.abspath(os.path.dirname(__file__)).splite['/'][:-1])
    database_path = os.path.join(BASE_DIR,db)
school_db_file = os.path.join(database_path,school)

数据库文件db

school.db

该文件自动生成

core模块

main.py

from conf import setting
from module.school import School
import shelve

class Manage_center(object):
    def __init__(self):
        pass
    def run(self):
        while True:
            print("\n欢迎进入学员管理系统\n"
                  "1 学生视图\n"
                  "2 教师视图\n"
                  "3 学校视图\n"
                  "q 退出学员管理系统\n")
            user_choice = raw_input("\33[34;1m请输入您要登录的视图\33[0m")
            if user_chioice == '1':
                Manage_student()
            elif user_choice == '2':
                Manage_teacher()
            elif user_choice == '3':
                Manage_school()
            elif user_choice == 'q':
                print("\33[34;1m感谢使用学员管理系统,退出\33[0m")
                break
             else:
                print("\33[34;1m请输入正确的选项\33[0m")

class Manage_student(object):
    '''学员视图'''
    def __init__(self):
        self.run_manage()
class Manage_teacher(object):
    '''讲师视图'''
class Manage_school(object):
    '''学校视图'''
    def __init__(self):
        if os.path.exist(setting.school_db_file+'.db'):
            self.school_db = shelve.open(setting.school_db_file)
            self.run_manage():
            self.school_db.close()
        else:
            self.initialize_school()
            self.run_manage()
            self.school_db.close()

    def initialize_school(self):
        self.school_db = shelve.open(setting.school_db_file)
        self.school['北京'] = School('北京','中国.北京')
        self.school['上海'] = School('上海','中国.上海')

    def run_manage(self):
        for key in self.school_db:
             print("学校名称:",key)
        choice_school = raw_input("\33[34;1m请输入您要管理的学校\33[0m").strip()
        if choice_school in self.school_db:
            self.choice_school = choice_school
            self.school_obj = self.school_db[choice_school]
            while True:
                print("\n欢迎来到老男孩%s校区\n"
                          "添加课程 add_course\n"
                          "增加班级 add_class\n"
                          "招聘讲师 add_teacher\n"
                          "查看课程 check_course\n"
                          "查看班级 check_class\n"
                          "查看讲师 check_teacher\n"
                          "退出程序 exit"%self.school_obj.school_name)
            user_func = raw_input("\33[34;1m请输入要操作的指令\33[0m")
            if hasattr(self,user_func):
                getattr(self,user_func)()
        else:
            print("\33[31;1m请输入正确的学校\33[0m")
    def add_course(self):
        '''添加课程'''
        course_name = raw_input("\33[34;1m请输入要添加的课程名\33[0m")
        course_price = raw_input("\33[34;1m请输入要添加的课程的价格\33[0m")
        course_time = raw_input("\33[34;1m请输入要添加的课程的周期\33[0m")
        if course_name in self.school_obj.school_course:
            print("\33[32;1m课程存在\33[0m")
            self.school_obj.creat_course(course_name,course_price,course_time)
            print("\33[32;1m更新完成\33[0m")
        else:
            self.school_obj.creat_course(course_name,course_price,course_time)
            print("\33[32;1m课程添加完成\33[0m")
       self.school_db.update({self.choice_school:self.school_obj})
            
    def add_class(self):
        '''增加班级'''
    def add_teacher(self):
        '''招聘讲师'''
    def check_course(self):
        '''查看课程'''
    def check_class(self):
        '''查看班级'''
    def check_teacher(self):
        '''查看讲师'''
    def exit(self):
        self.school_db.close()
        sys.exit("\33[32;1m欢迎下次使用学员管理系统\33[0m")

        

相关文章

  • 学员管理系统-python面向对象最佳练习实例

    在开始一个项目的时候,不是急于去动手,而是在动手之前先分析需求,在分析的过程中一步步的完善大体的框架,然后先实现自...

  • Python学员管理系统【面向对象实现】

    一、系统需求 使用面向对象编程思想完成学员管理系统的开发,具体如下: 系统要求:学员数据存储在文件中 系统功能:添...

  • 面向对象版学员管理系统

    课程:面向对象版学员管理系统 目标 了解面向对象开发过程中类内部功能的分析方法 了解常用系统功能添加删除修改查询 ...

  • Python GUI与面向对象

    Python GUI与面向对象 Python面向对象 对象是数据与其能实施的操作的封装结构 类是对于实例对象的抽象...

  • Python学习-面向对象

    查看所有Python相关学习笔记 面向对象 面向对象知识点汇总: 面向对象静态属性实例属性(self)静态方法(@...

  • 2018-07-31Python (11)

    python 基础语法(11) 面向对象 概念 面向对象最重要的概念就是类和实例,类是实例的抽象,而实例是类的具象...

  • python 面向对象的编程(一)

    python 同时支持面向对象编程和函数式编程的语言python面向对象的主题围绕 类 和 类实例 两个主题。面向...

  • python面向对象(下)

    一、面向对象,这个对象到底是什么? 这个对象不是python中的实例,python中我们把一个类的实例也叫做对象,...

  • Python面向对象(基础)

    面向对象 Python是支持面向对象的,面向对象编程是一种程序设计思想。 类和实例(基础) 面向对象最重要的就是类...

  • python-面向对象——多态

    多态 python是一种运行时语言,python即支持面向过程,也支持面向对象 类属性和实例属性 实例属性:和具体...

网友评论

    本文标题:学员管理系统-python面向对象最佳练习实例

    本文链接:https://www.haomeiwen.com/subject/empblctx.html