选课系统V1.0

tree .
.
├── bin
│   ├── __init__.py
│   └── start.py #启动文件
├── conf
│   ├── __init__.py
│   └── settings.py #全局配置文件
├── core#核心代码目录
│   ├── CourseClass.py#课程类
│   ├── GradeClass.py #班级类
│   ├── __init__.py
│   ├── main.py #主程序
│   ├── RWdb.py #数据读写功能类
│   ├── SchoolClass.py #学校类
│   ├── SchoolPeopleClass.py #人员父类
│   ├── StudentsClass.py #学生类
│   └── TeacherClass.py #教师类
├── db  #存放各种对象数据
│   ├── course.db
│   ├── grade.db
│   ├── __init__.py
│   ├── school.db
│   ├── students.db
│   └── teachers.db
├── __init__.py
└── test#测试目录
    ├── __init__.py
    └── test.py
目录结构
#!/usr/bin/env python
# Author:Zhangmingdad
import os
BASER_DIR =  os.path.dirname(os.path.dirname(os.path.abspath(__file__) ))

'''数据库文件路径/文件名配置'''
DB_PATH = os.path.join(BASER_DIR,'db')
SCHOOL_DB_FILE = os.path.join(DB_PATH,'school.db')
COURSE_DB_FILE = os.path.join(DB_PATH,'course.db')
TEACHERS_DB_FILE = os.path.join(DB_PATH,'teachers.db')
STUDENTS_DB_FILE = os.path.join(DB_PATH,'students.db')
GRADE_DB_FILE = os.path.join(DB_PATH,'grade.db')

'''系统统一入口视图配置'''
login_sys = {
    '1':'manager_sys()',
    '2':'students_sys()',
    '3':'teachers_sys()'
}
smg_login_sys = '''
    【1】 学校管理系统
    【2】 学生注册缴费查询系统
    【3】 教师办公系统
'''
'''后台管理视图配置'''
manager_sys = {
    '1':'create_course()',
    '2':'create_teacher()',
    '3':'create_grade()',
    '4':'create_school()',
    '5':'review_school_info()'
}
smg_manager_sys = '''
    【1】 创建课程
    【2】 招聘老师
    【3】 创建班级
    【4】 创建学校
    【5】 查看学校详情
'''

students_sys = {
    '1':'student_sign_in()',
    '2':'stu_paytuition()',
    '3':'show_score()',
    '4':'show_stu_info()'
}
smg_students_sys = '''
    【1】 注册
    【2】 缴费
    【3】 成绩查询
    【4】 查看个人信息
'''

teachers_sys = {
    '1':'show_teach_grades()',
    '2':'show_grade_students()',
    '3':'modify_stu_score()',
    '4':'show_teacher_info()'
}
smg_teachers_sys = '''
    【1】 查看所教班级
    【2】 查看班级学员列表
    【3】 修改学生成绩
    【4】 查看教师个人信息
'''

Manager_user = 'root'
Manager_passwd = 'root'
settings.py
#!/usr/bin/env python
# Author:Zhangmingda
import  os,pickle
from conf import settings

class RWdb(object):
    '''数据读写大类'''
    @staticmethod
    def readschooldb():
        '''通过pickle的load方法读取学校信息'''
        if os.path.exists(settings.SCHOOL_DB_FILE):
            with open(settings.SCHOOL_DB_FILE,'rb') as school_f:
                school_info = pickle.load(school_f)
        else:
            school_info = {}
        return school_info
    @staticmethod
    def writeschooldb(school_info):
        '''通过pickle的dump存入学校信息'''
        with open(settings.SCHOOL_DB_FILE,'wb') as school_f:
            pickle.dump(school_info,school_f)
#################课程读写#################################
    @staticmethod
    def readcoursedb():
        '''通过pickle的load方法读取课程信息'''
        if os.path.exists(settings.COURSE_DB_FILE):
            with open(settings.COURSE_DB_FILE,'rb') as course_f:
                course_info = pickle.load(course_f)
        else:
            course_info = {}
        return course_info
    @staticmethod
    def writecoursedb(course_info):
        '''通过pickle的dump存入学校信息'''
        with open(settings.COURSE_DB_FILE,'wb') as course_f:
            pickle.dump(course_info,course_f)
#################班级数据读写#################################
    @staticmethod
    def readgradedb():
        '''通过pickle的load方法读取课程信息'''
        if os.path.exists(settings.GRADE_DB_FILE):
            with open(settings.GRADE_DB_FILE,'rb') as grade_f:
                grade_info = pickle.load(grade_f)
        else:
            grade_info = {}
        return grade_info
    @staticmethod
    def writegradedb(grade_info):
        '''通过pickle的dump存入学校信息'''
        with open(settings.GRADE_DB_FILE,'wb') as grade_f:
            pickle.dump(grade_info,grade_f)
#################教师数据读写#################################
    @staticmethod
    def readteachersdb():
        '''通过pickle的load方法读取课程信息'''
        if os.path.exists(settings.TEACHERS_DB_FILE):
            with open(settings.TEACHERS_DB_FILE,'rb') as teachers_f:
                teachers_info = pickle.load(teachers_f)
        else:
            teachers_info = {}
        return teachers_info
    @staticmethod
    def writeteachersdb(teachers_info):
        '''通过pickle的dump存入学校信息'''
        with open(settings.TEACHERS_DB_FILE,'wb') as teachers_f:
            pickle.dump(teachers_info,teachers_f)
#################学生数据读写#################################
    @staticmethod
    def readstudentsdb():
        '''通过pickle的load方法读取课程信息'''
        if os.path.exists(settings.STUDENTS_DB_FILE):
            with open(settings.STUDENTS_DB_FILE,'rb') as students_f:
                students_info = pickle.load(students_f)
        else:
            students_info = {}
        return students_info
    @staticmethod
    def writestudentsdb(students_info):
        '''通过pickle的dump存入学校信息'''
        with open(settings.STUDENTS_DB_FILE,'wb') as students_f:
            pickle.dump(students_info,students_f)
RWdb.py
#!/usr/bin/env python
# Author:Zhangmingda
import os,sys
BASER_DIR =  os.path.dirname(os.path.abspath(__file__) )
sys.path.append(BASER_DIR)
from  .SchoolClass import School
from conf import settings
def create_school():
    '''创建一个学校'''
    back_flag = False
    while not back_flag:
        school_dict = School.readschooldb()
        '''查看已有学校名字'''
        if len(school_dict):
            print('当前已存在学校如下:')
            for school_name in school_dict:
                print(school_name)
        '''新建学校名字'''
        new_school_name = input('请输入要创建的学校名称(b返回):').strip()
        if new_school_name in school_dict or new_school_name == '':
            print('\033[31;1m您要创建的学校名称不合法或已存在!请重新输入\033[0m')
        elif new_school_name == 'b':
            back_flag = True
        else:
            '''创建学校'''
            School(new_school_name)
            print('\033[32;1m创建学校:%s OK!\033[0m'%new_school_name)
            chose_func = input('继续创建输入yes|任意键退出:')
            if chose_func == 'yes':
                continue
            else:
                back_flag = True

def review_school_info():
    '''查看学校信息'''
    def show_school_students(sch_obj):
        print('本校学生共计:%s人' % len(sch_obj.school_students))
        for student in sch_obj.school_students:
            print(student)
    def show_school_teachers(sch_obj):
        print('本校老师共计:%s人'% len(sch_obj.school_teachers))
        for teacher in sch_obj.school_teachers:
            print(teacher)
    def show_school_grades(sch_obj):
        print('本校设置班级共计:%s个' % len(sch_obj.school_grades))
        for grade in sch_obj.school_grades:
            print(grade)
    while True:
        school_dict = School.readschooldb()
        '''查看已有学校名字'''
        if len(school_dict):
            print('当前已存在学校如下:')
            for school_name in school_dict:
                print(school_name)
            school_name = input('请输入要查询学校名称:').strip()
            if school_name in school_dict:
                print('%s 校区 详情如下:'.center(50,'#')% school_name)
                sch_obj = school_dict[school_name]
                show_school_students(sch_obj)
                show_school_teachers(sch_obj)
                show_school_grades(sch_obj)
                print('%s 校区详情查询完毕'.center(50, '#')% school_name)
            else:
                print('\033[31;1m输入的学校名称不存在,请重新输入\033[0m')
                continue
            chose_continue = input("继续查询,输入y| 其它任意键退出")
            if chose_continue == 'y':
                continue
            else:
                break
        else:
            print('\033[31;1m当前没有任何学校\033[0m')
            break

def create_course():
    '''创建课程'''
    while True:
        school_dict = School.readschooldb()
        '''查看已有学校名字'''
        if len(school_dict):
            print('\033[34;1m请选择在哪个校区开设课程:\033[0m')
            for school_name in school_dict:
                print(school_name)
        '''选择学校名字'''
        chose_school = input('\033[34;1m请输入选择的学校名称|b退出:\033[0m').strip()
        if chose_school == 'b':
            break
        if chose_school in school_dict:
            sch_obj = school_dict[chose_school]
            sch_obj.create_course() #学校实例的创建课程方法
            break
        else:
            print('\033[31;1m您输入的学校名不存在,请重新输入\033[0m')

def create_teacher():
    '''创建老师'''
    while True:
        school_dict = School.readschooldb()
        '''查看已有学校名字'''
        if len(school_dict):
            print('\033[34;1m为哪个校区招聘老师:\033[0m')
            for school_name in school_dict:
                print(school_name)
        '''选择学校名字'''
        chose_school = input('\033[34;1m请输入选择的学校名称|b退出:\033[0m').strip()
        if chose_school == 'b':
            break
        if chose_school in school_dict:
            sch_obj = school_dict[chose_school]
            sch_obj.create_teacher() #通过学校实例的创建老师方法
            break
        else:
            print('\033[31;1m您输入的学校名不存在,请重新输入\033[0m')

def create_grade():
    while True:
        school_dict = School.readschooldb()
        '''查看已有学校名字'''
        if len(school_dict):
            print('\033[34;1m要在哪个校区增设班级:\033[0m')
            for school_name in school_dict:
                print(school_name)
        '''选择学校名字'''
        chose_school = input('\033[34;1m请输入选择的学校名称|b退出:\033[0m').strip()
        if chose_school == 'b':
            break
        if chose_school in school_dict:
            sch_obj = school_dict[chose_school]
            sch_obj.create_grade()
            break
        else:
            print('\033[31;1m您输入的学校名不存在,请重新输入\033[0m')

def manager_sys():
    '''后台管理系统'''
    login_status = False
    while not login_status:
        manager_user = input('输入管理员用户名:').strip()
        manager_passwd = input('输入管理员密码:').strip()
        if manager_user == settings.Manager_user and manager_passwd == settings.Manager_passwd:
            login_status = True
        else:
            print('\033[31;1m管理员用户名或密码错误\033[0m')
            break
    else:
        while True:
            print('欢迎进入\033[32;1m选课后台管理\033[0m系统'.center(50, '#'))
            print(settings.smg_manager_sys)
            chose_func = input('请输入要选择的功能序号|b退出:').strip()
            if chose_func == 'b':
                break
            if chose_func in settings.manager_sys:
                eval(settings.manager_sys[chose_func])
            else:
                print('\033[31;1m您输入的功能序号不存在,请重新输入\033[0m')

def students_sys():

    def student_sign_in():
        '''学生注册系统'''
        while True:
            school_dict = School.readschooldb()
            '''查看已有学校名字'''
            if len(school_dict):
                print('\033[34;1m请选择在哪个校区注册:\033[0m')
                for school_name in school_dict:
                    print(school_name)
            chose_school = input('\033[34;1m请输入选择的学校名称|b退出:\033[0m').strip()
            if chose_school == 'b':
                break
            if chose_school in school_dict:
                sch_obj = school_dict[chose_school]
                sch_obj.add_student() #通过学校实例添加学员
                break
            else:
                print('\033[31;1m您输入的学校名不存在,请重新输入\033[0m')

    def stu_auth(func):
        '''学生登录认证装饰器'''
        def stu_login(*args):
            while True:
                stu_name = input('请输入学员姓名|b退出:').strip()
                if stu_name in School.readstudentsdb():
                    stu_obj = School.readstudentsdb()[stu_name]
                    while True:
                        stu_passwd = input('请输入密码|b退出:').strip()
                        if stu_passwd == stu_obj.passwd:
                            func(stu_obj)
                            break
                        elif stu_passwd == 'b':
                            print('\033[31;1m退出登录\033[0m')
                            break
                        else:
                            print('\033[31;1m密码错误\033[0m')
                    break
                elif stu_name == 'b':
                    print('\033[31;1m退出登录\033[0m')
                    break
                else:
                    print('\033[31;1m学生姓名不存在,请重新输入...\033[0m')
        return stu_login
    @stu_auth
    def stu_paytuition(stu_obj):
        '''使用学生对象交学费'''
        stu_obj.paytuition()
    @stu_auth
    def show_score(stu_obj):
        '''查看学生成绩'''
        stu_obj.show_score()
    @stu_auth
    def show_stu_info(stu_obj):
        '''查看个人信息'''
        stu_obj.student_info()

    while True:
        print('欢迎进入\033[32;1m欢迎进入学生自助缴费注册查询系统\033[0m'.center(50, '#'))
        print(settings.smg_students_sys)
        chose_func = input('请输入要选择的功能序号|b退出:').strip()
        if chose_func == 'b':
            break
        if chose_func in settings.students_sys:
            while True:
                eval(settings.students_sys[chose_func])
                chose_continue = input('继续?(yes继续|任意键退出)').strip()
                if chose_continue != 'yes':
                    break
        else:
            print('\033[31;1m您输入的功能序号不存在,请重新输入\033[0m')

def teachers_sys():
    '''老师功能系统'''
    teacher_auth_status = False
    # teacher_obj = None

    def auth_teacher(func):
        '''检查教师登录状态装饰器'''
        def teacher_login(*args):
            if teacher_auth_status:
                func()
        return teacher_login
    @auth_teacher
    def show_teach_grades():
        print('查看所教班级信息'.center(40,'#'))
        teacher_obj.show_teach_grades()
    @auth_teacher
    def show_grade_students():
        print('查看学员列表选择班级'.center(40,'#'))
        teacher_obj.show_grade_students()
    @auth_teacher
    def modify_stu_score():
        '''修改学员成绩'''
        show_teach_grades(teacher_obj)
        print('修改学员成绩信息'.center(40, '#'))
        chose_grade = input('\033[31;1m请选择班级\033[0m').strip()
        while chose_grade in teacher_obj.teach_grade:
            grade_obj = School.readgradedb()[chose_grade]
            print('当前班级(%s)学员如下:' % chose_grade)
            for student in grade_obj.students:
                print(student)
            while True:
                chose_student_name = input('\033[32;1m请选择学员|b退出\033[0m').strip()
                if chose_student_name in grade_obj.students:
                    student_obj = grade_obj.students[chose_student_name]
                    score_name = input('\033[32;1m请输入科目名称:\033[0m').strip()
                    score = input('\033[32;1m请输入科目成绩:\033[0m').strip()
                    student_obj.score[score_name] = score
                    '''存储学生数据'''
                    students_info = student_obj.readstudentsdb()
                    students_info[chose_student_name] = student_obj
                    student_obj.writestudentsdb(students_info)
                    print('\033[32;1m成绩修改成功!\033[0m')
                    '''存储到班级数据中'''
                    grade_info = student_obj.readgradedb()
                    grade_info[student_obj.stu_grade].students[student_obj.name] = student_obj
                    student_obj.writegradedb(grade_info)
                    '''存储到学校数据中'''
                    school_info = student_obj.readschooldb()
                    '''更新学校班级数据(中的学生数据)'''
                    school_info[student_obj.stu_school].school_grades[student_obj.stu_grade].students[
                        student_obj.name] = student_obj
                    '''更新学校对象中的学生数据'''
                    school_info[student_obj.stu_school].school_students[student_obj.name] = student_obj
                    student_obj.writeschooldb(school_info)
                    # break
                elif chose_student_name == 'b':
                    break
                else:
                    print('\033[31;1m输入的学生姓名不存在,请重新输入\033[0m')
            break
        else:
            print('\033[31;1m您选择的班级不存在\033[0m')
    @auth_teacher
    def show_teacher_info():
        teacher_obj.teacher_info()


    while True:
        '''登录认证循环体,保证任何一步不进入死循环'''
        teacher_name = input('请输入老师姓名|b退出:').strip()
        teachers_info = School.readteachersdb()
        if teacher_name in teachers_info:
            teacher_obj = teachers_info[teacher_name]
            while True:
                teacher_passwd = input('请输入密码|b退出:').strip()
                if teacher_passwd == teacher_obj.passwd:
                    teacher_auth_status = True
                    break
                elif teacher_passwd == 'b':
                    print('\033[31;1m退出登录\033[0m')
                    break
                else:
                    print('\033[31;1m密码错误,请重新输入...\033[0m')
            break
        elif teacher_name == 'b':
            print('\033[31;1m退出登录\033[0m')
            break
        else:
            print('\033[31;1m教师姓名不存在,请重新输入...\033[0m')

    while teacher_auth_status:
        print('欢迎进入\033[32;1m欢迎进入教师管理系统\033[0m'.center(50, '#'))
        print(settings.smg_teachers_sys)
        chose_func = input('请输入要选择的功能序号|b退出:').strip()
        if chose_func == 'b':
            break
        if chose_func in settings.teachers_sys:
            while True:
                eval(settings.teachers_sys[chose_func])
                chose_continue = input('继续?(yes继续|任意键退出当前功能模块)').strip()
                if chose_continue != 'yes':
                    break
        else:
            print('\033[31;1m您输入的功能序号不存在,请重新输入\033[0m')

def login_sys():
    '''登录总入口'''
    while True:
        print('欢迎进入老男孩\033[32;1m学校选课系统\033[0m'.center(50, '#'))
        print(settings.smg_login_sys)
        chose_sub_sys = input('请输入要进入的子系统序号|b退出:').strip()
        if chose_sub_sys == 'b':
            break
        if chose_sub_sys in settings.login_sys:
            eval(settings.login_sys[chose_sub_sys])
        else:
            print('\033[31;1m您输入的系统序号不存在,请重新输入\033[0m')
main.py
#!/usr/bin/env python
# Author:Zhangmingda
from SchoolPeopleClass import People
from RWdb import RWdb

class Student(People,RWdb):
    '''定义学生角色应有的属性和方法'''
    def __init__(self,name,passwd,age,sex,stu_grade,school):
        super(Student,self).__init__(name,passwd,age,sex)
        self.stu_grade = stu_grade
        self.tuition = self.readcoursedb()[self.readgradedb()[stu_grade].course_name].price
        self.payment_status = '未缴'
        self.stu_school = school
        self.score = {}
        '''存储学生数据'''
        students_info = self.readstudentsdb()
        students_info[self.name] = self
        self.writestudentsdb(students_info)

    def paytuition(self):
        '''学生交学费方法'''
        if self.payment_status == True:
            print('\033[31;1m学费已交!无需再交\033[0m')
        else:
            while True:
                print('您所在班级,所需缴费金额为:%s 元'% self.tuition)
                pay_tuition = input('输入要缴费的金额:').strip()
                if pay_tuition.isnumeric()  and int(pay_tuition)  >= self.tuition:
                    self.payment_status = '已缴'
                    '''缴费后重新存储学生数据'''
                    students_info = self.readstudentsdb()
                    students_info[self.name] = self
                    self.writestudentsdb(students_info)
                    print('\033[31;1m缴费成功!\033[0m')
                    '''存储到班级数据中'''
                    grade_info = self.readgradedb()
                    grade_info[self.stu_grade].students[self.name] = self
                    self.writegradedb(grade_info)

                    '''存储到学校数据中'''
                    school_info = self.readschooldb()
                    '''更新学校班级数据(中的学生数据)'''
                    school_info[self.stu_school].school_grades[self.stu_grade].students[self.name] = self
                    '''更新学校对象中的学生数据'''
                    school_info[self.stu_school].school_students[self.name] = self
                    self.writeschooldb(school_info)
                    break

                elif pay_tuition == 'b':
                    print('\033[32;1m您放弃了缴费\033[0m')
                    break
                else:
                    print('\033[32;1m金额不足|输入错误,请重缴!\033[0m')

    def show_score(self):
        '''查看学生成绩'''
        if len(self.score):
            print('\033[33;1m学员:%s成绩如下\033[0m'.center(50,'#')% self.name)
            for score_name in self.score:
                print('\033[32;1m科目:%s\t成绩:%s\033[0m'% (score_name,self.score[score_name]))
        else:
            print('\033[31;1m当前没有任何成绩可以查询\033[0m')

    def student_info(self):
        '''查看学生个人信息'''
        stu_info = '''
        姓名:%s
        年龄:%s
        性别:%s
        所在班级:%s
        所在学校:%s
        应缴学费:%s
        缴费状态:%s'''%(self.name,self.age,self.sex,self.stu_grade,self.stu_school,self.tuition,self.payment_status)
        print('\033[33;1m:%s 你好,您的个人信息如下\033[0m'.center(50,'#')% self.name)
        print(stu_info)
StudentsClass.py
#!/usr/bin/env python
# Author:Zhangmingda

from RWdb import RWdb
from CourseClass import Course
from GradeClass import Grade
from TeacherClass import Teacher
from StudentsClass import Student

class School(RWdb):
    def __init__(self,name):
        self.school_name = name
        self.school_course = {}
        self.school_teachers = {}
        self.school_students = {}
        self.school_grades = {}
        school_info =  self.readschooldb()
        school_info[self.school_name] = self
        self.writeschooldb(school_info)

    def create_course(self):
        '''管理员创建课程'''
        while True:
            if len(self.school_course):
                print('当前本校已开设课程:')
                for course_name in self.school_course:
                    print(course_name)
            new_course_name = input('请输入要创建的课程名称(b退回):').strip()
            if new_course_name in self.school_course or new_course_name == '':
                print('\033[31;1m您要创建的课程已存在或不合法!请重新输入\033[0m')
                continue
            elif new_course_name  == 'b':
                break
            else:
                while True :
                    price = input('输入课程价格:').strip()
                    if price.isnumeric():
                        price = int(price)
                        break
                    else:
                        print("\033[31;1m课程价格必须为纯数字,请重新输入....\033[0m")
                preiod = input('计划课程周期:').strip()
                new_course = Course(new_course_name,price,preiod)
                school_info = self.readschooldb()
                self.school_course[new_course_name] = new_course
                school_info[self.school_name] = self
                self.writeschooldb(school_info)
                print('\033[32;1m创建课程:%s OK!\033[0m' % new_course_name)
                # break

    def create_teacher(self):
        '''管理员创建老师'''
        while True:
            teachers_info = self.school_teachers
            '''当前校区已存在老师名单:'''
            if len(teachers_info):
                print('当前学校已招聘老师名单:')
                for school_teacher in teachers_info:
                    print(school_teacher)
            new_teacher_name = input('输入要新招聘的老师名字(b退出):').strip()
            if new_teacher_name in teachers_info or new_teacher_name == '':
                print('\033[31;1m该老师已经存在(或不合法),请重新输入~\033[0m')
                continue
            elif new_teacher_name == 'b':
                break

            else:
                while True:
                    age = input('老师年方几何:')
                    if age.isdigit() and 0 < int(age) < 150:
                        break
                    else:
                        print('年龄必须为大于0,小于150的整数')
                sex = input('请输入性别:').strip()
                course = input('老师教什么:').strip()
                salary = input('要多少工资:').strip()
                passwd = input('请为您设置密码:').strip()
                new_teacher_obj = Teacher(new_teacher_name,passwd,age,sex,course,salary,self.school_name)
                self.school_teachers[new_teacher_name] = new_teacher_obj
                school_info = self.readschooldb()
                school_info[self.school_name] = self
                self.writeschooldb(school_info)
                print('老师:%s创建成功'% new_teacher_name)

    def create_grade(self):
        '''管理员创建班级'''
        while True:
            grade_info = self.school_grades
            if len(grade_info):
                print('当前已经开设的班级如下:')
                for grade_name in grade_info:
                    print(grade_name)
            if len(self.school_course) == 0:
                print('\033[31;1m当前学校未开设任何课程,请先创建课程,再创建班级\033[0m')
                break
            new_grade_name = input('请输入要创建的班级名称(b退回):').strip()
            if new_grade_name in self.school_grades or new_grade_name == '':
                print('\033[31;1m您要创建的班级已存在(或不合法),Please 重新输入\033[0m')
                continue
            elif new_grade_name == 'b':
                break
            # else:
            while True:
                print('当前本校已开设课程如下,请为班级选择课程:')
                for course_name in self.school_course:
                    print(course_name)
                chose_course = input('请选择>>>:').strip()
                if chose_course in self.school_course:
                    break
                else:
                    print('您输入的课程不存在,请重新输入:')
                # else:

            if len(self.school_teachers ) == 0:
                print('\033[31;1m当前学校未招聘任何老师,请先再创建班级\033[0m')
                break
            while True:
                print('本校区已招聘老师名单如下:')
                for teacher_name in self.school_teachers :
                    print(teacher_name)
                chose_teacher = input('请为班级选择老师>>>:').strip()
                if chose_teacher  in self.school_teachers:
                    break
                else:
                    print('\033[31;1m您输入的老师不存在\033[0m')

            grade_start_time = input('输入班级开课时间:').strip()
            new_grade = Grade(new_grade_name, chose_course, chose_teacher, grade_start_time)
            self.school_grades[new_grade_name] = new_grade
            '''下面将新创建的班级添加到学校数据库中'''
            school_info = self.readschooldb()
            school_info[self.school_name] = self
            self.writeschooldb(school_info)
            print('\033[32;1m建班级:%s成功!\033[0m'% new_grade_name)

    def add_student(self):
        '''管理员自主添加学员'''
        while True:
            grade_info = self.school_grades
            if len(grade_info):
                print('添加学员,请先选择班级,当前本校区已经开设的班级如下:')
                for grade_name in grade_info:
                    print(grade_name)
                chose_grade = input('\033[31;1m请输入要选择班级(b退出):\033[0m').strip()
                if chose_grade in self.school_grades:
                    while True:
                        name = input('输入要添加的学员名字:').strip()
                        if name in self.school_grades[chose_grade].students or name == '':
                            print('\033[31;1m学员名字不合法,或班级内已存在,请重新输入...\033[0m')
                        else:
                            break
                    while True:
                        age = input('输入学员年龄:')
                        if age.isdigit() and 0 < int(age) < 150:
                            break
                        else:
                            print('年龄必须为大于0,小于150的整数')
                    sex = input('输入学员性别:').strip()
                    passwd = input('为学员设置密码:').strip()
                    '''创建学员'''
                    stu_obj = Student(name,passwd,age,sex,chose_grade,self.school_name)
                    '''存储到学校数据'''
                    self.school_grades[chose_grade].students[name] = stu_obj
                    self.school_students[name] = stu_obj
                    school_info = self.readschooldb()
                    school_info[self.school_name] = self
                    self.writeschooldb(school_info)
                    '''存储到班级数据中'''
                    grade_info = self.readgradedb()
                    grade_info[chose_grade].students[name] = stu_obj
                    self.writegradedb(grade_info)
                    print('\033[32;1m学员:%s注册成功!信息如下请牢记自己的密码\033[0m'% name)
                    stu_info = '''
                    姓名:%s
                    年龄:%s
                    性别:%s
                    班级:%s
                    应缴学费:%s
                    缴费状态:%s
                    所属校区:%s
                    课程成绩:%s
                    '''%(stu_obj.name,stu_obj.age,stu_obj.sex,stu_obj.stu_grade,stu_obj.tuition,stu_obj.payment_status,stu_obj.stu_school,stu_obj.score)
                    print(stu_info)
                    break
                elif chose_grade == 'b':
                    break
                else:
                    print('\033[31;1m您选择的班级不存在\033[0m')
            else:
                print('\033[31;1m当前学校未设置任何班级,请先添加班级后再添加学员\033[0m')
                break
SchoolClass.py
#!/usr/bin/env python
# Author:Zhangmingda
from RWdb import RWdb

class Course(RWdb):
    '''定义一个课程有哪些属性&方法'''
    def __init__(self,course_name,price,period):
        self.course_naem = course_name
        self.price = price
        self.period = period
        '''获取所有校区最新课程数据'''
        course_info = self.readcoursedb()
        '''添加刚刚创建的课程对象,到获取 最新课程数据中'''
        course_info[self.course_naem] = self
        '''将更新后的数据保存到文件中'''
        self.writecoursedb(course_info)
CourseClass.py
#!/usr/bin/env python
# Author:Zhangmingda
from RWdb import RWdb
class Grade(RWdb):
    '''定义一个班级的样子(属性:名字课程老师学生)'''
    def __init__(self,name,course,teacher,start_time):
        self.grade_name = name
        self.course_name = course
        self.teachers_name = []
        self.teachers_name.append(teacher)
        self.start_time = start_time
        self.students = {}
        '''将新创建的实例加入到已有实例字典中'''
        grade_info = self.readgradedb()
        grade_info[self.grade_name] = self
        self.writegradedb(grade_info)

        teachers_info = self.readteachersdb()
        teachers_info[teacher].teach_grade[self.grade_name] = self
        self. writeteachersdb(teachers_info)
GradeClass.py
#!/usr/bin/env python
# Author:Zhangmingda
from RWdb import RWdb
from SchoolPeopleClass import People
class Teacher(People,RWdb):
    '''定义一个老师该有的属性和方法'''
    def __init__(self,name,passwd,age,sex,course,salary,school):
        super(Teacher,self).__init__(name,passwd,age,sex)
        self.teacher_course = course
        self.teacher_salary = salary
        self.teacher_school = school
        self.teach_grade = {}
        '''定义后就存储起来老师数据'''
        teachers_info = self.readteachersdb()
        teachers_info[self.name] = self
        self. writeteachersdb(teachers_info)
    def show_teach_grades(self):
        print('\033[32;1m您所教班级如下:\033[0m')
        for grade in self.teach_grade:
            print(grade)
    def show_grade_students(self):
        while True:
            self.show_teach_grades()
            # print('查看所教班级学员列表'.center(40, '#'))
            chose_grade = input('\033[31;1m请输入要查看的班级名称\033[0m').strip()
            if chose_grade in self.teach_grade:
                grade_obj = self.readgradedb()[chose_grade]
                print('当前班级(%s)学员如下:'% chose_grade)
                for student in grade_obj.students:
                    print(student)
                break
            else:
                print('\033[31;1m您选择的班级不存在,请重新输入\033[0m')

    def teacher_info(self):
        '''查看教师个人信息'''
        teacher_info = '''
        姓名:%s
        年龄:%s
        性别:%s
        所教班级:%s
        所教课程:%s
        所在学校:%s
        当前工资:%s'''%(self.name,self.age,self.sex,self.teach_grade.keys(),self.teacher_course,self.teacher_school,self.teacher_salary)
        print('\033[33;1m:%s 你好,您的个人信息如下\033[0m'.center(50,'#')% self.name)
        print(teacher_info)
TeacherClass.py
#!/usr/bin/env python
# Author:Zhangmingda
class People(object):
    def __init__(self,name,passwd,age,sex):
        self.name = name
        self.passwd = passwd
        self.age = age
        self.sex = sex
SchoolPeopleClass.py
#!/usr/bin/env python
# Author:Zhangmingda
import os,sys
BASER_DIR =  os.path.dirname(os.path.dirname(os.path.abspath(__file__) ))
sys.path.append(BASER_DIR)
from core import main

if __name__ == '__main__':
    main.login_sys()
start.py

猜你喜欢

转载自www.cnblogs.com/zhangmingda/p/9190301.html