Python

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

2019-07-22  本文已影响11人  孟轲666

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

好,话不多说,我们接下来正式开始

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

  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序列化保存到文件里 这个就是数据库

总结:

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

下面开始正式搬砖:

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


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")

        

上一篇 下一篇

猜你喜欢

热点阅读