选课系统项目

选课系统需求

https://www.cnblogs.com/kermitjam/p/11356270.html

结构图

文件

 

 1.conf/settings

import os

BASE_PATH = os.path.dirname(
    os.path.dirname(__file__)
)

DB_PATH = os.path.join(
    BASE_PATH, 'db'
)

2.core/admin_view

'''
管理员视图
'''
from interface import admin_interface
from interface import common_interface
from lib import common

admin_info = {
    'user': None
}


# 管理员注册
def register():
    while True:
        username = input('请输入用户名:').strip()
        password = input('请输入密码:').strip()
        re_password = input('请确认密码:').strip()
        if password == re_password:
            # 调用管理员注册接口
            flag, msg = admin_interface.register_interface(
                username, password
            )
            if flag:
                print(msg)
                break
                
            else:
                print(msg)

        else:
            print('两次密码不一致')


# 管理员登录
def login():
    while True:
        username = input('请输入用户名:').strip()
        password = input('请输入密码:').strip()

        # 调用公共登录接口
        flag, msg = common_interface.login_interface(
            username, password, 'admin'
        )
        if flag:
            # print(admin_info)
            admin_info['user'] = username
            # print(admin_info)
            print(msg)
            break
        else:
            print(msg)


# 管理员创建学校
@common.login_auth('admin')
def create_school():
    while True:
        # 1.管理员输入 学校名称 与 学校地址
        school_name = input('请输入学校名称:').strip()
        school_addr = input('请输入学校地址:').strip()

        # 2.调用创建学校接口,并传入 学校名称 与 学校地址 以及管理员名称
        # (管理员名称,用来获取管理员对象,并调用创建学校方法。)
        flag, msg = admin_interface.create_school_interface(
            school_name, school_addr, admin_info.get('user')
        )
        if flag:
            print(msg)
            break
        else:
            print(msg)


# 管理员创建课程
@common.login_auth('admin')
def create_course():
    while True:
        # 1.获取所有学校,让管理员选择
        # 判断学校是否存在
        school_list = common_interface.check_school_interface()
        if not school_list:
            print('没有可选择的学校,请先创建学校!')
            break

        for index, school_name in enumerate(school_list):
            print(index, school_name)

        choice = input('请输入选择的学校编号: ').strip()
        if not choice.isdigit():
            continue
        choice = int(choice)

        if choice not in range(len(school_list)):
            continue

        school_name = school_list[choice]

        # 2.选择完学校后,输入课程的名称
        course_name = input('请输入课程名称:').strip()

        # 3.调用创建课程接口,并保存课程对象
        flag, msg = admin_interface.create_course_interface(
            school_name, course_name, admin_info.get('user')
        )

        if flag:
            print(msg)
            break

        else:
            print(msg)


# 管理员创建老师
@common.login_auth('admin')
def create_teacher():
    while True:
        teacher_name = input('请输入老师名称: ').strip()

        # 1.调用创建老师接口,保存老师
        flag, msg = admin_interface.create_teacher_interface(
            teacher_name, admin_info.get('user'))
        if flag:
            print(msg)
            break

        else:
            print(msg)


func_dic = {
    '1': register,
    '2': login,
    '3': create_school,
    '4': create_course,
    '5': create_teacher
}


def view():
    while True:
        print('''
        ----- 欢迎来到管理员视图 -----
        1.注册
        2.登陆
        3.创建学校
        4.创建课程
        5.创建老师
        ''')

        choice = input('请输入编号进入视图:').strip()

        if choice == 'q':
            break

        if choice not in func_dic:
            continue

        func_dic.get(choice)()
View Code

core/src

'''
总视图
'''
from core import admin_view
from core import student_view
from core import teacher_view

func_dic = {
    '1': admin_view.view,
    '2': student_view.view,
    '3': teacher_view.view
}


def run():
    while True:
        print('''
        ----- 欢迎来到选课系统 -----
        1.管理员视图
        2.学生视图
        3.老师视图
        ''')

        choice = input('请输入编号进入视图:').strip()

        if choice == 'q':
            break

        if choice not in func_dic:
            continue
            
        func_dic.get(choice)()
View Code

core/student_view

'''
学生视图
'''
from lib import common
from interface import student_interface
from interface import common_interface

student_info = {
    'user': None
}


# 学生注册
def register():
    while True:
        username = input('请输入用户名:').strip()
        password = input('请输入密码:').strip()
        re_password = input('请确认密码:').strip()
        if password == re_password:
            # 调用管理员注册接口
            flag, msg = student_interface.register_interface(
                username, password
            )
            if flag:
                print(msg)
                break

            else:
                print(msg)

        else:
            print('两次密码不一致')


# 学生登录
def login():
    while True:
        username = input('请输入用户名:').strip()
        password = input('请输入密码:').strip()

        # 调用公共登录接口
        flag, msg = common_interface.login_interface(
            username, password, 'student'
        )
        if flag:
            # print(admin_info)
            student_info['user'] = username
            # print(admin_info)
            print(msg)
            break
        else:
            print(msg)


# 学生选择学校
@common.login_auth('student')
def choose_school():
    while True:

        # 1.获取所有的学校,并且打印让学生选择
        school_list = common_interface.check_school_interface()
        if not school_list:
            print('没有可选择的学校,请先创建学校!')
            break

        for index, school_name in enumerate(school_list):
            print(index, school_name)

        choice = input('请输入选择的学校编号: ').strip()

        if choice == 'q':
            break

        if not choice.isdigit():
            continue
        choice = int(choice)

        if choice not in range(len(school_list)):
            continue
        school_name = school_list[choice]

        # 2.调用学生接口中的 选择学校接口
        flag, msg = student_interface.choose_school_interface(
            school_name, student_info.get('user')
        )

        if flag:
            print(msg)
            break
        else:
            print(msg)


# 学生选择课程功能
@common.login_auth('student')
def choose_course():
    while True:
        # 1.获取当前对象的 学校中 所有的课程
        flag, course_list_or_msg = student_interface.get_course_list_interface(
            student_info.get('user'))
        if not flag:
            print(course_list_or_msg)
            break

        # 2.打印课程,选择课程名称
        for index, course_name in enumerate(course_list_or_msg):
            print(index, course_name)

        choice = input('请输入选择的课程编号: ').strip()

        if choice == 'q':
            break

        if not choice.isdigit():
            continue
        choice = int(choice)

        if choice not in range(len(course_list_or_msg)):
            continue
        course_name = course_list_or_msg[choice]

        # 3.调用学生选择课程接口
        flag, msg = student_interface.choose_course_interface(
            course_name, student_info.get('user')
        )

        if flag:
            print(msg)
            break

        else:
            print(msg)


# 学生查看分数功能
@common.login_auth('student')
def check_score():
    score_dic = student_interface.check_score_interface(student_info.get('user'))
    print(score_dic)


func_dic = {
    '1': register,
    '2': login,
    '3': choose_school,
    '4': choose_course,
    '5': check_score,
}


def view():
    while True:
        print('''
        1、注册
        2、登录
        3、选择校区
        4、选择课程
        5、查看成绩
        ''')
        choice = input('请输入编号进入视图:').strip()

        if choice == 'q':
            break

        if choice not in func_dic:
            continue

        func_dic.get(choice)()
View Code

core/teacher_view

'''
老师视图
'''
from lib import common
from interface import common_interface
from interface import teacher_interface

teacher_info = {
    'user': None
}


# 老师登录
def login():
    while True:
        username = input('请输入用户名:').strip()
        password = input('请输入密码:').strip()

        # 调用公共登录接口
        flag, msg = common_interface.login_interface(
            username, password, 'teacher'
        )
        if flag:
            # print(admin_info)
            teacher_info['user'] = username
            # print(admin_info)
            print(msg)
            break
        else:
            print(msg)


# 查看老师教授的课程
@common.login_auth('teacher')
def check_courses():
    while True:
        flag, course_list_or_msg = teacher_interface.check_course_interface(
            teacher_info.get('user')
        )

        if flag:
            print(course_list_or_msg)
            break
        else:
            print(course_list_or_msg)
            break


# 选择教授的课程
@common.login_auth('teacher')
def choose_course():
    while True:
        # 1.先获取所有学校,选择学校
        school_list = common_interface.check_school_interface()
        if not school_list:
            print('没有学校可以选择!')
            break

        for index, school_name in enumerate(school_list):
            print(index, school_name)

        choice = input('请输入学校编号: ').strip()
        if not choice.isdigit():
            continue

        choice = int(choice)

        if choice not in range(len(school_list)):
            continue

        school_name = school_list[choice]

        # 2.通过学校获取所有课程,再选择教授课程
        flag, course_list_or_msg = common_interface.check_course_from_school(school_name)

        # 3.打印所有的课程,让老师选择课程编号
        if not flag:
            print(course_list_or_msg)
            break

        for index, course_name in enumerate(course_list_or_msg):
            print(index, course_name)

        choice = input('请输入课程编号: ').strip()
        if not choice.isdigit():
            continue

        choice = int(choice)

        if choice not in range(len(course_list_or_msg)):
            continue

        course_name = course_list_or_msg[choice]

        # 4.调用选择教授课程接口
        flag, msg = teacher_interface.choose_course_interface(
            course_name, teacher_info.get('user'))

        if flag:
            print(msg)
            break
        else:
            print(msg)


# 查看老师课程下的学生
@common.login_auth('teacher')
def check_student():
    while True:
        # 1.获取老师中所有的课程,并选择
        flag, course_list_or_msg = teacher_interface.check_course_interface(
            teacher_info.get('user'))

        if not flag:
            print(course_list_or_msg)
            break

        # 2.通过课程查看课程中所有的学生
        for index, course_name in enumerate(course_list_or_msg):
            print(index, course_name)

        choice = input('请输入课程编号: ').strip()
        if not choice.isdigit():
            continue

        choice = int(choice)

        if choice not in range(len(course_list_or_msg)):
            continue

        course_name = course_list_or_msg[choice]

        # 3.调用查看课程中所有学生接口
        flag, student_list_or_msg = teacher_interface.check_student_interface(
            course_name, teacher_info.get('user')
        )

        if flag:
            print(student_list_or_msg)
            break

        else:
            print(student_list_or_msg)


# 修改学生分数
@common.login_auth('teacher')
def change_score():
    while True:
        # 1.获取老师中所有的课程,并选择
        flag, course_list_or_msg = teacher_interface.check_course_interface(
            teacher_info.get('user'))

        if not flag:
            print(course_list_or_msg)
            break

        # 2.通过课程查看课程中所有的学生
        for index, course_name in enumerate(course_list_or_msg):
            print(index, course_name)

        choice = input('请输入课程编号: ').strip()
        if not choice.isdigit():
            continue

        choice = int(choice)

        if choice not in range(len(course_list_or_msg)):
            continue

        course_name = course_list_or_msg[choice]

        # 3.调用查看课程中所有学生接口
        flag, student_list_or_msg = teacher_interface.check_student_interface(
            course_name, teacher_info.get('user')
        )

        if not flag:
            print(student_list_or_msg)
            break

        # 4.先循环打印所有的学生,并选择学生编号,获取学生名字
        for index, student_name in enumerate(student_list_or_msg):
            print(index, student_name)

        choice2 = input('请输入学生编号: ').strip()
        if not choice2.isdigit():
            continue

        choice2 = int(choice2)

        if choice2 not in range(len(student_list_or_msg)):
            continue

        # 获取学生名字
        student_name = student_list_or_msg[choice2]

        # 让老师输入修改课程的分数
        score = input('请输入修改的分数: ').strip()

        # 课后作业1: 校验修改的分数是否是数字

        score = int(score)

        # 课后作业2: 校验输入的成绩是否 > 100分

        # 5.调用修改学生分数接口
        flag, msg = teacher_interface.change_score_interface(
            student_name, course_name, score, teacher_info.get('user')
        )

        if flag:
            print(msg)
            break


func_dic = {
    '1': login,
    '2': check_courses,
    '3': choose_course,
    '4': check_student,
    '5': change_score,
}


def view():
    while True:
        print('''
        1、登录
        2、查看教授课程
        3、选择教授课程
        4、查看课程下学生
        5、修改学生成绩
        ''')
        choice = input('请输入编号进入视图:').strip()

        if choice == 'q':
            break

        if choice not in func_dic:
            continue

        func_dic.get(choice)()
View Code

3.db/db_handler  (存取数据)

import os
from conf import settings
import pickle


# 保存数据
def save(obj):
    # 保存对象的操作
    # 1.拼接文件保存路径,想要当前的类当做文件夹,以对象的名称作为文件名
    # admin_obj.__class__ --> Admin.__name__ ----> 'Admin'
    cls_name = obj.__class__.__name__

    # 获取当前类所在的文件夹
    dir_path = os.path.join(
        settings.DB_PATH, cls_name)

    # 若文件夹不存在,则创建文件夹
    if not os.path.exists(dir_path):
        os.mkdir(dir_path)

    # 拼接当前用户文件的绝对路径
    user_path = os.path.join(
        dir_path, obj.name
    )

    # 将obj对象写入pickle文件中
    with open(user_path, 'wb') as f:
        pickle.dump(obj, f)
        f.flush()


# 查看数据
def select(cls, name):
    # 保存对象的操作
    # 1.拼接文件保存路径,想要当前的类当做文件夹,以对象的名称作为文件名
    # admin_obj.__class__ --> Admin.__name__ ----> 'Admin'
    cls_name = cls.__name__

    # 获取当前类所在的文件夹
    dir_path = os.path.join(
        settings.DB_PATH, cls_name)

    # 若文件夹不存在,则创建文件夹
    if not os.path.exists(dir_path):
        os.mkdir(dir_path)

    # 拼接当前用户文件的绝对路径
    user_path = os.path.join(
        dir_path, name
    )

    # 若文件路径存在则查找对象
    if os.path.exists(user_path):
        # 将obj对象写入pickle文件中
        with open(user_path, 'rb') as f:
            obj = pickle.load(f)
            return obj
View Code

db/models  (定义类属性)

'''
存放一个个的类:

管理员对象、学生对象、老师对象、课程对象、学校对象

所有类的父类:
    - Class Base:

    - 技能:
        - 保存数据
        - 查看数据

课程对象(课程类):
    - 特征(属性):
        - 课程名字
        - 学校
        - 学生列表

    - 技能(方法)
        - 保存数据(课程)
        - 查看数据(课程)

        - 添加学校
            self.学校 = 上海校区

        - 添加学生
            self.学生列表.append(学生)


学生对象(学生类):
    - class Student(Base):
        - 特征(属性):
            - 名字
            - 密码
            - 学校
            - 课程列表
            - 分数字典: {'课程名字': 课程分数, '课程名字2': 课程分数,}

        - 技能(方法)
            - 保存数据(注册):
                - 调用学生类,实例化得到一个学生对象,并将学生对象保存成pickle文件。

            - 查看数据(登录):
                - 从pickle文件中读出相应的对象。

            - 选择校区
                学校 = oldboy

            - 选择课程
                self.课程列表.append(课程)

            - 查看成绩
                for line in self.分数字典:
                    print(line)


老师对象(老师类):
    class Teacher(Base):
        - 特征(属性):
            - 名字
            - 密码
            - 课程列表

        - 技能(方法)

            - 保存数据(老师)

            - 查看数据 (登录)

            - 查看教授课程
                self.课程列表

            - 选择教授课程
                课程列表.append(课程名字)

            - 查看课程下学生
                课程列表.课程---》 获取课程对象.学生列表

            - 修改学生成绩
                课程列表.课程----> 获取课程对象.学生列表.学生 ----> 获取学生对象.分数字典[课程]  = 100


管理员对象(管理员类):
    - class Admin(Base):
        - 特征(属性):
            - 名字
            - 密码

        - 技能(方法)
            - 保存数据 (注册)
                - 调用管理员类,实例化得到一个管理员对象,并将管理员对象保存成pickle文件。

            - 查看数据 (登录)

            - 创建学校
                - 调用学校类,实例化得到一个学校对象,并将学校对象保存成pickle文件。

            - 创建老师
                - 调用老师类,实例化得到一个老师对象,并将老师对象保存成pickle文件。

            - 创建课程
                - 调用课程类,实例化得到一个课程对象,并将课程对象保存成pickle文件。


学校对象(学校类):
    - class School(Base):
        - 特征(属性):
            - 学校名称
            - 学校地址
            - 课程列表
            -

        - 技能(方法)
            - 查看数据(学校)
            - 保存数据(学校)

            - 添加课程
                self.课程列表.append(课程)

'''
from db import db_handler


# 父类
class Base:
    # 保存 数据(对象) 方法
    def save_obj(self):

        # 调用db_handler中save将对象保存到pickle文件中
        db_handler.save(self)

    # 查看 数据(对象) 方法
    @classmethod
    def select_obj_by_name(cls, name):

        obj = db_handler.select(cls, name)

        return obj


# 管理员类
class Admin(Base):  # admin_obj.save_obj(admin_obj)

    def __init__(self, name, pwd):
        self.name = name
        self.pwd = pwd

    # 管理员创建学校方法
    def create_school(self, school_name, school_addr):
        # 创建对象方式一:
        # school_obj = School(school_name, school_addr)
        # school_obj.save_obj()

        # 创建对象方式二:
        School(school_name, school_addr)

    # 管理员创建课程方法
    def create_course(self, school_name, course_name):
        # 1.调用课程类 创建课程对象
        Course(school_name, course_name)

        # 2.获取学校对象,为学校对象中的课程列表添加课程
        school_obj = School.select_obj_by_name(school_name)
        school_obj.course_list.append(course_name)
        school_obj.save_obj()

    # 管理员创建老师方法
    def create_teacher(self, teacher_name, teacher_pwd):
        Teacher(teacher_name, teacher_pwd)


# 学校类
class School(Base):
    def __init__(self, school_name, school_addr):
        self.name = school_name
        self.addr = school_addr
        self.course_list = []
        self.save_obj()

    # 学校对象查看所有课程方法
    def check_all_course(self):
        return self.course_list


# 课程类
class Course(Base):
    '''
    - 课程名字
    - 学校
    - 学生列表
    '''
    def __init__(self, school_name, course_name):
        self.name = course_name
        self.school = school_name
        self.student_list = []
        self.save_obj()

    # 课程添加学生方法
    def add_student(self, student_name):
        self.student_list.append(student_name)
        self.save_obj()

    # 课程对象获取所有学生方法
    def check_all_student(self):
        return self.student_list


# 学生类
class Student(Base):
    def __init__(self, student_name, student_pwd):
        self.name = student_name
        self.pwd = student_pwd
        # 一个学生只能选择一所学校
        self.school = None
        self.course_list = []
        self.score = {}
        self.save_obj()

    # 学生添加学校方法
    def add_school(self, school_name):
        self.school = school_name
        self.save_obj()

    # 学生添加课程方法
    def add_course(self, course_name):
        # 1.添加课程
        self.course_list.append(course_name)
        # 2.为新添加的课程设置初始分数
        self.score[course_name] = 0
        self.save_obj()

        # 3.获取课程对象,让课程对象调用添加学生方法
        course_obj = Course.select_obj_by_name(course_name)

        # 调用添加学生方法
        course_obj.add_student(self.name)


# 老师类
class Teacher(Base):

    def __init__(self, teacher_name, teacher_pwd):
        self.name = teacher_name
        self.pwd = teacher_pwd
        self.course_list = []
        self.save_obj()

    # 老师查看所有课程方法
    def check_all_course(self):
        return self.course_list

    # 老师添加课程方法
    def add_course(self, course_name):
        self.course_list.append(course_name)
        self.save_obj()

    # 老师查看教授课程方法
    def check_student_from_course(self, course_name):
        # 1.获取课程对象
        course_obj = Course.select_obj_by_name(course_name)

        # 2.通过课程对象, 获取学生列表
        student_list = course_obj.check_all_student()
        return student_list

    # 老师修改分数方法
    def change_score(self, student_name, course_name, score):
        # 1.获取学生对象
        student_obj = Student.select_obj_by_name(student_name)

        # 2.直接修改学生score属性
        student_obj.score[course_name] = score
        student_obj.save_obj()
View Code

4.interface/admin_interface

from db import models


# 管理员注册接口
def register_interface(username, password):
    # 查看对象是否存在
    # obj or None
    obj = models.Admin.select_obj_by_name(username)

    # 创建 “管理员对象” ,让数据层中db_handler帮你保存
    if not obj:
        # 开始创建对象
        # 创建对象保存数据
        admin_obj = models.Admin(username, password)
        admin_obj.save_obj()
        return True, f'用户[{username}]注册成功!'

    return False, '用户已存在!'


# 创建学校接口
def create_school_interface(school_name, school_addr, admin_name):

    # 1.校验学校是否存在,若存在返回 学校已存在
    school_obj = models.School.select_obj_by_name(school_name)
    if school_obj:
        return False, '学校已存在!'

    # 2.获取管理员对象
    admin_obj = models.Admin.select_obj_by_name(admin_name)

    # 3.通过管理员对象 调用创建学校方法
    admin_obj.create_school(school_name, school_addr)

    return True, '学校创建成功'


# 创建课程接口
def create_course_interface(school_name, course_name, admin_name):

    # 1.先获取学校对象,判断 用户输入的课程 是否存在学校对象的课程列表中
    school_obj = models.School.select_obj_by_name(school_name)
    if course_name in school_obj.course_list:  # [course1, course2]
        return False, '课程已存在!'

    # 2.获取管理员对象,通过管理员对象调用创建课程方法
    admin_obj = models.Admin.select_obj_by_name(admin_name)

    admin_obj.create_course(school_name, course_name)

    return True, '课程创建成功!'


# 创建老师接口: 老师密码默认为 123
def create_teacher_interface(teacher_name, admin_name, pwd='123'):
    # 1.校验老师是否存在
    teacher_obj = models.Teacher.select_obj_by_name(teacher_name)
    if teacher_obj:
        return False, '老师已存在!'

    # 2.不存在则创建老师, 由管理员创建老师 ---》调用管理员创建老师方法
    admin_obj = models.Admin.select_obj_by_name(admin_name)
    admin_obj.create_teacher(teacher_name, pwd)

    return True, '老师创建成功!'
View Code

interface/common_interface

from conf import settings
from db import models
import os


# 查看所有学校接口
def check_school_interface():

    # 1.拼接所有学校存放的文件夹
    school_dir = os.path.join(
        settings.DB_PATH, 'School'
    )

    if os.path.exists(school_dir):
        # 2.获取文件夹中所有文件的名字
        school_list = os.listdir(school_dir)
        return school_list


# 公共登录接口
def login_interface(username, password, user_type):

    # 为了不冒黄色
    obj = None

    if user_type == 'admin':
        # 1.判断用户是否存在
        obj = models.Admin.select_obj_by_name(username)

    elif user_type == 'student':
        obj = models.Student.select_obj_by_name(username)

    elif user_type == 'teacher':
        obj = models.Teacher.select_obj_by_name(username)

    # 2.若不存在返回用户不存在
    if not obj:
        return False, '用户不存在!'

    # 3.用户存在, 校验密码是否正确
    # self.pwd
    if obj.pwd == password:
        return True, '登录成功!'
    else:
        return False, '密码错误!'


# 查看学校中所有的课程接口
def check_course_from_school(school_name):

    school_obj = models.School.select_obj_by_name(school_name)

    # 有学校对象,调用查看学校中所有课程的方法
    course_list = school_obj.check_all_course()
    if course_list:
        return True, course_list

    return False, '学校中没有课程!'
View Code

interface/student_interface

from db import models


# 管理员注册接口
def register_interface(username, password):
    # 查看对象是否存在
    # obj or None
    obj = models.Student.select_obj_by_name(username)

    # 创建 “管理员对象” ,让数据层中db_handler帮你保存
    if not obj:
        # 开始创建对象
        # 创建对象保存数据
        admin_obj = models.Student(username, password)
        admin_obj.save_obj()
        return True, f'用户[{username}]注册成功!'

    return False, '用户已存在!'


# 学生选择学校课程接口
def choose_school_interface(school_name, student_name):

    # 1.获取学生对象
    student_obj = models.Student.select_obj_by_name(student_name)

    # 2.判断学生是否已经选择学校
    if student_obj.school:
        return False, '已选择过学校了!'

    # 3.若不存在,则 调用学生对象中的 选择学校方法,添加学校
    student_obj.add_school(school_name)
    return True, '学校添加成功!'


# 获取当前学生中学校的所有课程
def get_course_list_interface(student_name):
    # 1.获取当前学生对象
    student_obj = models.Student.select_obj_by_name(student_name)
    school_name = student_obj.school

    # 2.判断学生是否 选择了学校
    if not school_name:
        return False, '请先选择学校'

    # 3.获取学校对象,获取学校对象中的课程列表
    school_obj = models.School.select_obj_by_name(school_name)
    course_list = school_obj.course_list
    if course_list:
        return True, course_list
    else:
        return False, '学校中没有课程!'


# 学生选择课程接口
def choose_course_interface(course_name, student_name):
    # 1.获取学生对象, 获取学生课程列表
    student_obj = models.Student.select_obj_by_name(student_name)
    course_list = student_obj.course_list

    # 2.判断当前课程是否存在 学生对象的课程列表中
    if course_name in course_list:
        return False, '该课程已存在!'

    # 3.若不存在,则添加到课程列表中, 让学生对象调用添加课程方法
    student_obj.add_course(course_name)
    return True, '添加课程成功!'


# 查看学生成绩接口
def check_score_interface(student_name):
    # 1.获取学生对象
    student_obj = models.Student.select_obj_by_name(student_name)

    # 2.将学生对象中的字典返回给视图层
    return student_obj.score
View Code

interface/teacher_interface

from db import models


# 查看老师下所有课程
def check_course_interface(teacher_name):

    # 1.获取老师对象
    teacher_obj = models.Teacher.select_obj_by_name(teacher_name)

    # 2.由老师对象调用查看课程的方法
    course_list = teacher_obj.check_all_course()

    if not course_list:
        return False, '该老师没有选择教授课程!'

    return True, course_list


# 老师选择课程接口
def choose_course_interface(course_name, teacher_name):
    # 1.获取老师对象
    teacher_obj = models.Teacher.select_obj_by_name(teacher_name)
    teacher_course_list = teacher_obj.course_list

    # 2.判断该课程是否存在
    if course_name in teacher_course_list:
        return False, '该课程已存在'

    # 3.若不存在,则让老师对象 调用添加课程方法,老师添加课程。
    teacher_obj.add_course(course_name)

    return True, '添加课程成功!'


# 老师查看教授课程接口
def check_student_interface(course_name, teacher_name):
    # 1.先获取老师对象
    teacher_obj = models.Teacher.select_obj_by_name(teacher_name)

    # 2.让老师对象,调用查看课程中所有学生方法
    student_list = teacher_obj.check_student_from_course(course_name)

    if not student_list:
        return False, '课程中没有学生'

    return True, student_list


# 老师修改分数接口
# student_name, course_name, score, teacher_info.get('user')
def change_score_interface(
        student_name, course_name, score, teacher_name):

    # 1.获取老师对象
    teacher_obj = models.Teacher.select_obj_by_name(teacher_name)

    # 2.通过老师对象,调用修改分数方法
    teacher_obj.change_score(
        # 学生名字传入,为了获取学生对象,并修改学生中的课程成绩
        student_name, course_name, score,
    )

    return True, f'修改分数成功, 课程[{course_name}]分数为: [{score}]'
View Code

5.lib/common ()  登录认证装饰器

# 登录认证装饰器 ---> 附加权限认证
def login_auth(role):
    def outer(func):
        def inner(*args, **kwargs):
            # 权限认证
            if role == 'admin':
                from core import admin_view
                if admin_view.admin_info.get('user'):
                    res = func(*args, **kwargs)
                    return res
                else:
                    admin_view.login()
            elif role == 'student':
                from core import student_view
                if student_view.student_info.get('user'):
                    res = func(*args, **kwargs)
                    return res
                else:
                    student_view.login()
            elif role == 'teacher':
                from core import teacher_view
                if teacher_view.teacher_info.get('user'):
                    res = func(*args, **kwargs)
                    return res
                else:
                    teacher_view.login()
            else:
                print('用户权限不足')
        return inner
    return outer
View Code

6.start

注意:此处添加环境变量可以省略因为start在项目路径下。当start.py在bin目录下,必须加如环境变量,否则无法引用项目其他文件夹中的模块

import os
import sys

sys.path.append(
    os.path.dirname(__file__)
)

from core import src

if __name__ == '__main__':
    src.run()
View Code
原文地址:https://www.cnblogs.com/ludingchao/p/11982325.html