灵虚御风
醉饮千觞不知愁,忘川来生空余恨!

导航

 

choicse_course_sys
.

import os,sys
from core import src
path = os.path.dirname(os.path.dirname(__file__))

# print(path) # D:/面试整理/重新开始/7.选课系统(25-26)/choicse_course_sys
sys.path.append(path)

if __name__ == '__main__':
    src.run()
bin/start.py
'''
环境配置
'''
import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))

DB_PATH = os.path.join(BASE_DIR,'db')
conf/settings.py
""""""
'''
管理员视图
'''
from interface import admin_interface,common_interface
from lib import common

admin_info = {"name":None}
def register():
    while True:
        user = input("please your use:>>>").strip()
        pwd = input("please your pwd").strip()
        re_pwd = input("re_pwd:>>>").strip()
        if pwd == re_pwd:
            # 加密
            pwd = common.get_md5(pwd)
            flag,msg = admin_interface.admin_register(user,pwd)
            if flag:
                print(msg)
                break
            else:
                print(msg)

def login():
    while True:
        user = input("please your use:>>>").strip()
        pwd = input("please your pwd").strip()
        re_pwd = input("re_pwd:>>>").strip()
        if pwd == re_pwd:
            # 加密
            pwd = common.get_md5(pwd)
            flag,msg = common_interface.login_interface(user,pwd,'admin')
            if flag:
                print(msg)
                admin_info["name"] = user
                break
            else:
                print(msg)

@common.login_auth('admin')
def create_school():
    while True:
        school_name = input('请输入学校名称:>>>').strip()
        school_addr = input('请输入地址:>>>').strip()
        flag,msg = admin_interface.create_school_interface(admin_info["name"],school_name,school_addr)
        if flag:
            print(msg)
            break
        else:
            print(msg)
    pass

@common.login_auth('admin')
def create_teacher():
    while True:
        teacher_name = input('请输入老师名字').strip()
        flag,msg = admin_interface.create_teacher_interface(admin_info['name'],teacher_name)
        if flag:
            print(msg)
            break
        else:
            print(msg)


@common.login_auth('admin')
def create_course():
    while True:
        school_list = common_interface.check_all_course('school')
        for index,school in enumerate(school_list):
            print(index,school)
        choice = input("please your school:>>>").strip()
        if choice.isdigit():
            choice = int(choice)
            if choice >= 0 and choice <= len(school_list):
                school_name = school_list[choice]
                course_name = input('please your course:>>>').strip()
                flag,msg = admin_interface.create_course_interface(admin_info['name'],school_name,course_name)
                if flag:
                    print(msg)
                    break
                else:
                    print(msg)
            else:
                print("please input true choice")
                continue
        else:
            print('请输入数字')
            continue




# 管理员视图
func_dic = {
    '1': register,
    '2': login,
    '3': create_school,
    '4': create_teacher,
    '5': create_course
}


# 主程序视图

def run():
    while True:
        print("""
        1.注册
        2.登录
        3.创建学校
        4.创建老师
        5.创建课程
        q.退出
        """)
        choice = input("please user sys:>>>").strip()
        if choice == "q":
            break
        elif choice in func_dic:
            func_dic[choice]()
        else:
            print("not have this sys")
            continue
core/admin.py
""""""
"""
用户功能
"""
from core import admin,student,teacher
func_dic = {
    "1":admin.run,
    "2":student.run,
    "3":teacher.run
}


# 主程序视图

def run():
    while True:
        print("""1.管理员视图
        2.学生视图
        3.老师视图
        q.退出
        """)
        choice = input("please user sys:>>>").strip()
        if choice == "q":break
        elif choice in func_dic:
            func_dic[choice]()
        else:
            print("not have this sys")
            continue
core/src.py
'''
学生视图
'''

from interface import student_interface,common_interface
from lib import common


student_info = {
    'name': None
}

def register():
    while True:
        username = input('请输入您的名字').strip()
        password = input('请输入您的密码:').strip()
        re_password = input('请确认密码:').strip()
        if password == re_password:
            flag, msg = student_interface.student_register(username, password)
            if flag:
                print(msg)
                break
            else:
                print(msg)



def login():
    while True:
        username = input('请输入用户名').strip()
        password = input('请输入密码:').strip()
        flag,msg = common_interface.login_interface(username,password,'student')
        if flag:
            print(msg)
            student_info['name'] = username
            break
        else:
            print(msg)

@common.login_auth('student')
def choose_school():
    while True:
        school_list = student_interface.get_all_school('school')
        if not school_list:
            print('没有学校可选')
            break
        for index,school in enumerate(school_list):
            print(index,school)
        choice = input('请选择学校:').strip()
        if choice.isdigit():
            choice = int(choice)
            if choice >= 0 and choice < len(school_list):
                school_name = school_list[choice]
                flag,msg = student_interface.choose_school_interface(student_info['name'],school_name)
                if flag:
                    print(msg)
                    break
                else:
                    print(msg)
            else:
                print('请选择正确编号')
        else:
            print('输入有误')

@common.login_auth('student')
def choose_course():
    while True:
        school_name = student_interface.check_school(student_info['name'])
        if not school_name:
            print('没有选择学校')
            break
        course_list = student_interface.get_all_from_school(school_name)
        if not course_list:
            break
        for index,course in enumerate(course_list):
            print(index,course)
        choice = input('请输入课程编号:').strip()
        if choice.isdigit():
            choice = int(choice)
            if choice >= 0 and choice < len(course_list):
                course_name = course_list[choice]


                flag,msg = student_interface.choose_course(student_info['name'],course_name)
                if flag:
                    print(msg)
                    break
                else:
                    print(msg)
            else:
                print('请输入正确的数字')
        else:
            print('选择正确的')


@common.login_auth('student')
def check_grade():
    while True:
        course_list= student_interface.get_all_course(student_info['name'])
        if not course_list:
            print('学生没有选择课程')

        for index, course in enumerate(course_list):
            print(index,course)

        choice = input('请选择课程编号:').strip()
        if choice.isdigit():
            choice = int(choice)
            if choice >= 0 and choice < len(course_list):
                course_name = course_list[choice]

                coure_score = student_interface.check_score_interface(student_info['name'],course_name)
                print(coure_score)
                break
            else:
                print('请输入正确的编号')
        else:
            print('请输入数字')


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


# 主程序视图

def run():
    while True:
        print("""
        1.注册
        2.登录
        3.选择学校
        4.选择课程
        5.查看成绩
        q.退出
        """)
        choice = input("please user sys:>>>").strip()
        if choice == "q" \
            :break
        elif choice in func_dic:
            func_dic[choice]()
        else:
            print("not have this sys")
            continue
core/student.py
from lib import common
from interface import teacher_interface, common_interface
teacher_info = {
    'name': None
}



def login():
    while True:
        username = input('请输入用户名').strip()
        password = input('请输入密码:').strip()
        flag, msg = common_interface.login_interface(username, password, 'teacher')
        if flag:
            print(msg)
            teacher_info['name'] = username
            break
        else:
            print(msg)



@common.login_auth('teacher')
def check_course():
    flag,msg = teacher_interface.check_course_teacher_interface(teacher_info['name'])
    if flag:
        print(msg)
    else:
        print(msg)

@common.login_auth('teacher')
def choose_course():
    while True:
        all_course_list = teacher_interface.get_all_course('course')
        if not all_course_list:
            print('没有课程选择,请联系管理员进行创建')
            break
        for index,course in enumerate(all_course_list):
            print(index,course)
        choice = input('请选择编号:')
        if choice.isdigit():
            choice = int(choice)

            if not (choice >= 0 and choice < len(all_course_list)):
                print('请输入正确的编号')
                continue
            course_name = all_course_list[choice]
            flag,msg = teacher_interface.choose_course(teacher_info["name"],course_name)
            if flag:
                print(msg)
                break
            else:
                print(msg)

        else:
            print('请输入正确的选择')

@common.login_auth('teacher')
def check_student():
    while True:
        course_list = teacher_interface.check_course_teacher_interface(teacher_info['name'])
        print(course_list)
        if not course_list:
            print('老师下面没有课程')
            break

        for index, course in enumerate(course_list):
            print(index, course)
        choice = input('请选择课成:').strip()
        if choice.isdigit():
            choice = int(choice)
            if choice >= 0 and choice < len(course_list):
                course_name = course_list[choice]

                flag = teacher_interface.get_student_interface(teacher_info['name'], course_name)
                if flag:
                    print(flag)
                    break
                else:
                    print('课程下没有学生')
            else:
                print('请输入正确的编号')
        else:
            print('请输入数字')


@common.login_auth('teacher')
def revise_student_grade():
    while True:
        # 打印老师下的所有课程
        course_list = teacher_interface.check_course_teacher_interface(teacher_info['name'])
        if not course_list:
            print('老师没有课程')
            break
        for index, course in enumerate(course_list):
            print(index, course)
        choice = input('请输入您的选择:').strip()
        if not choice.isdigit():
            print('请输入数字')
            continue
        choice = int(choice)
        if not (choice >= 0 and choice < len(course_list)):
            print('请输入正确的编号')
            continue
        course_name = course_list[choice]

        student_list = teacher_interface.get_student_interface(teacher_info['name'], course_name)
        if not student_list:
            print('课程下没有学生')
            break
        for index, student in enumerate(student_list):
            print(index, student)
        choice = input('请输入学生编号:').strip()
        if choice.isdigit():
            choice = int(choice)

            if choice >= 0 and choice < len(student_list):
                student_name = student_list[choice]
                score = input('请输入分数:').strip()

                flag, msg = teacher_interface.change_score(teacher_info['name'], course_name, student_name,score)

                if flag:
                    print(msg)
                    break
            else:
                print('请输入正确的编号')
        else:
            print('请输入数字')



func_dic = {
    '1': login,
    '2': check_course,
    '3': choose_course,
    '4': check_student,
    '5': revise_student_grade,
}


# 主程序视图

def run():
    while True:
        print("""
        1.登录
        2.查看课程
        3.选择课程
        4.查看学生
        5.修改学生成绩
        q.退出
        """)
        choice = input("please user sys:>>>").strip()
        if choice == "q" \
            :break
        elif choice in func_dic:
            func_dic[choice]()
        else:
            print("not have this sys")
            continue
core/teacher.py
""""""
"""
数据层
"""
import os
from conf import settings
import pickle

def db_save(obj): # admin
    path = os.path.join(settings.DB_PATH,obj.__class__.__name__.lower())
    if not os.path.exists(path):
        os.mkdir(path)
    user_path = os.path.join(path,obj.name)
    with open(user_path,'wb') as f:
        pickle.dump(obj,f)
        f.flush()


def db_select(user_type,name):
    path = os.path.join(settings.DB_PATH,user_type.__name__.lower())
    if not os.path.exists(path):
        os.mkdir(path)
    user_path = os.path.join(path,name)
    if not os.path.exists(user_path):
        return False
    with open(user_path,'rb') as f:
        user_obj = pickle.load(f)
        if user_obj:
            return user_obj
        else:
            return False
db/DB_hanlder.py
""""""
'''
各种类以及类方法的定义
'''

from db import DB_hanlder
class Base:
    def save(self):
        DB_hanlder.db_save(self)
    @classmethod
    def select(cls,name):
        obj = DB_hanlder.db_select(cls,name)

        return obj
class Admin(Base):
    def __init__(self,name,pwd):
        self.name = name
        self.pwd = pwd
        self.save()
    def add_school(self,school_name,school_addr):
        School(school_name,school_addr)

    def add_teacher(self,teacher_name,pwd):
        Teacher(teacher_name,pwd)

    def add_course(self,course_name):
        Course(course_name)
class School(Base):
    def __init__(self,school_name,school_addr):
        self.name = school_name
        self.school_addr = school_addr
        self.school_course_list = []  # #学校的课程列表
        self.save()

# 老师类
class Teacher(Base):
    def __init__(self, teacher_name, pwd):
        self.name = teacher_name
        self.pwd = pwd
        self.teacher_course_list = []  # 老师的课程列表
        self.save()

    def choose_course(self,course_name):
        self.teacher_course_list.append(course_name)
        self.save()

    def check_student(self,course_name):
        course_obj = Course.select(course_name)
        return course_obj.student_list

    def change_score(self,course_name,student_name,score):
        student_obj = Student.select(student_name)
        student_obj.score[course_name] = score
        student_obj.save()


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()
    def choose_school(self,school_name):
        self.school = school_name
        self.save()
    def choose_course(self,course_name):
        self.course_list.append(course_name)
        self.score[course_name] = 0
        self.save()


class Course(Base):
    def __init__(self,course_name):
        self.name = course_name
        self.student_list = []
        self.save()

    def add_student(self,student_name):
        self.student_list.append(student_name)
        self.save()
db/modles.py
from db import modles


# 注册接口
def admin_register(user,pwd):
    admin_obj = modles.Admin.select(user) # cls,name
    if admin_obj:
        return False, '用户已存在'
    # 调用类,自动触发内部的 __init__
    modles.Admin(user,pwd)
    return True,f'{user}创建成功'

# 注册学校接口
def create_school_interface(admin_name,school_name,school_addr):
    school_obj = modles.Admin.select(school_name)
    if not school_obj:
        admin_obj = modles.Admin.select(admin_name)
        admin_obj.add_school(school_name,school_addr)
        return True,f'{school_name}学校创建成功'


# 创建老师接口
def create_teacher_interface(admin_name,teacher_name,pwd = '123'):# #管理员控制密码给他一个默认的密码
    tea_obj = modles.Teacher.select(teacher_name)
    if tea_obj:
        return False,'老师已经存在'
    admin_obj = modles.Admin.select(admin_name)
    admin_obj.add_teacher(teacher_name,pwd)
    return True,f'{teacher_name}老师创建成功'

# 创建课程接口
def  create_course_interface(admin_name,school_name,course_name):
    school_obj = modles.School.select(school_name)
    if not school_obj:
        return False,'学校不存在'
    admin_obj = modles.Admin.select(admin_name)
    admin_obj.add_course(course_name)
    school_list = school_obj.school_course_list
    if course_name not in school_list:
        school_obj.school_course_list.append(course_name)
        school_obj.save()
        return True,f"{course_name}课程创建成功"
    else:
        return False,'课程已经存在'
interface/admin_interface.py
from db import modles
import os
from conf import settings
# 登录接口
def login_interface(user,pwd,role):
    if role == 'admin':
        obj = modles.Admin.select(user)
        if not obj:
            return False,'管理员用户不存在'
    elif role == 'student':
       obj = modles.Student.select(user)
       if not obj:
            return False,'学生用户不存在'
    elif role == 'teacher':
        obj = modles.Teacher.select(user)
        if not obj:
            return False,'老师用户不存在'
    else:
        return False,'没有权限'
    if obj.pwd == pwd:
        return True, '登录成功'
    else:
        return False, '密码错误'

# 查看文件接口
def check_all_course(user_type):
    course_path = os.path.join(settings.DB_PATH,user_type)
    if os.path.exists(course_path):
        return os.listdir(course_path)
    return False
interface/common_interface.py
'''
学生的接口
'''
from db import modles
from interface import common_interface

# 注册接口
def student_register(username,password):
    student_obj = modles.Student.select(username)
    if student_obj:
        return False,'学生已存在'

    modles.Student(username,password)
    return True,f'{username}学生注册成功'

# 得到所有的学校
def get_all_school(school):
    school_list = common_interface.check_all_course(school)
    if not school_list:
        return False,'没有学校可选'
    return school_list

# 选择学校
def choose_school_interface(student_name,school_name):
    student_obj = modles.Student.select(student_name)
    if student_obj.school:
        return False,'已选择学校'
    student_obj.choose_school(school_name)
    return True,'选择学校成功'




# 查看学校
def check_school(student_name):
    student_obj = modles.Student.select(student_name)
    if student_obj.school:
        return student_obj.school

    return False


# 获取学校所有课程
def get_all_from_school(school_name):
    school_obj = modles.School.select(school_name)
    if not school_obj.school_course_list:
        return False,'没有课程'
    return school_obj.school_course_list

# 选择课程
def choose_course(student_name,course_name):
    student_obj = modles.Student.select(student_name)
    c_list = student_obj.course_list
    if course_name in c_list:
        return False,'课程已选择'
    student_obj.choose_course(course_name)
    course_obj = modles.Course.select(course_name)
    course_obj.add_student(student_name)
    return True,'添加课程成功'

# 获取学生的所有课程
def get_all_course(student_name):
    student_obj = modles.Student.select(student_name)
    if not student_obj.course_list:
        return False

    return student_obj.course_list

# 查看课程分数接口
def check_score_interface(student_name,course_name):
    student_obj = modles.Student.select(student_name)

    return student_obj.score[course_name]
interface/student_interface.py
'''
老师的接口
'''

from db import modles
from interface import common_interface

# 查看课程
def check_course_teacher_interface(teacher_name):
    teacher_obj = modles.Teacher.select(teacher_name)
    course_list = teacher_obj.teacher_course_list
    if not course_list:
        return False
    return course_list

# 获取课程的接口
def get_all_course(course):
    all_course_list = common_interface.check_all_course(course)
    if not all_course_list:
        return False
    return all_course_list

# 选择课程
def choose_course(teacher_name,course_name):
    teacher_obj = modles.Teacher.select(teacher_name)
    course_list = teacher_obj.teacher_course_list
    if course_name in course_list:
        return False,'课程已经添加'
    teacher_obj.choose_course(course_name)
    return True,f'{course_name}课程已经添加成功'

# 查看课程下面的学生
def get_student_interface(teacher_name,course_name):
    teacher_obj = modles.Teacher.select(teacher_name)
    student_list = teacher_obj.check_student(course_name)
    if not student_list:
        return False
    return student_list

# 修改学生分数接口
def change_score(teacher_name,course_name,student_name,score):
    teacher_obj = models.Teacher.select(teacher_name)

    teacher_obj.change_score(course_name,student_name,score)
    return True,'修改分数成功'
interface/teacher_interface.py
import hashlib

def get_md5(pwd):

    # 加盐
    val = '天山这没收'
    md5 = hashlib.md5()
    md5.update(pwd.encode('utf-8'))
    md5.update(val.encode('utf-8'))
    res = md5.hexdigest()
    return res

# 装饰器
def login_auth(user_type):
    from core import admin,teacher,student
    def auth(func):
        def inner(*args,**kwargs):
            if user_type == 'admin':
                if admin.admin_info["name"]:
                    return func(*args,**kwargs)
                else:
                    admin.login()
            elif user_type == 'teacher':
                if teacher.teacher_info['name']:
                    return func(*args, **kwargs)
                else:
                    teacher.login()

            elif user_type == 'student':
                if student.student_info['name']:
                    return func(*args, **kwargs)
                else:
                    student.login()

        return inner
    return auth
lib/common.py

log

作业要求
角色:学校、学生、课程、讲师
要求:
    1. 创建北京、上海 2 所学校  ----> 创建学校
    2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开  ---> 创建课程、课程绑定给学校


    3. 管理员 创建学校,老师,课程  ---> 管理员功能
    4. 课程包含课程名称(周期,价格等属性) ---> 课程信息
    5. 学校包含学校名称,地址等属性 ----> 学校的信息

    6. 创建 老师角色 要关联学校 ----> 老师关联学校

    7. 学生 注册登录后,可以选择学校,选择课程,查看成绩  ---> 学生的功能、学生绑定给课程

    8. 老师登录后,可以查看教授课程,选择想要教授的课程,查看课程下的学生,修改学生成绩等  ---> 老师的功能


用户功能层:
    管理员视图:
        1.注册
        2.登录
        3.创建学校
        4.创建老师
        5.创建课程

    学生视图:
        1.注册
        2.登录
        3.选择学校
        4.选择课程
        5.查看成绩

    老师视图:
        1.登录
        2.查看教授的课程
        3.选择教授的课程
        4.查看课程下的学生
        5.修改学生成绩


项目目录搭建:
    conf放置配置信息setting
    core:放置用户层视图
    db:数据操作层py文件和以文件形式保存的数据
    interface:放置接口相关信息,有管理员接口,老师接口,学校接口,学生接口和公共接口
    lib:放置公共方法


    用户功能层:src下:
                    src:主视图,
                    admin:管理员视图,
                    student:学生视图
                    teacher:老师视图

    接口层:interface下:
                      admin_interface管理员的接口
                      common_interface公共的接口
                      school_interface学校的接口
                      student_interface学生的接口
                      teacher_interface老师的接口
    数据层:db目录下:
                    db_handler,文件操作相关的方法
                    models:各种类及类方法的定义

                    其它目录:admin,course,school,student,teacher是自动生成的目录,用来存放数据信息

    start.py启动文件


models:

父类:
    Base:
        方法属性:
            绑定给类方法: (类来调用会自动把类当做第一个参数传给它)
            select(类, 对象的名字): 由类来调用查看某个角色是否存在。

            绑定给对象方法:  (对象来调用会把对象当做第一个参数传给它)
            save(对象):  由对象来调用保存某个角色。

子类:
    Admin(管理员):
        数据属性:
            name = admin_username
            pwd = admin_password

        方法属性:
            继承父类:
                select(类, 对象的名字):
                save(对象)

            自己的方法:
                create_school
                create_teacher
                create_course


    School(学校):
        数据属性:
            addr = school_addr
            name = school_name
            course_list = []   # 学校应该有多个课程,所以给学校对象添加一个 课程列表 用于存放课程。

        方法属性:
            继承父类:
                select(类, 对象的名字):
                save(对象)

            对象自己的:
                add_course(self, course_name):  # 添加课程方法
                (在管理员选择学校并选择课程的时候,课程对象由管理员来创建,并且得把课程名称追加到学校对象中)
                    self.course_list.append(course_name)

    Course(课程):
        数据属性:
            course_name
            student_list = []

        方法属性:
            继承父类:
                select(类, 对象的名字):
                save(对象)

            对象自己的:
                tell_all_student(self):
                    return self.student_list


    Student(学生):
        数据属性:
            name = student_name
            pwd = student_pwd
            school = None
            course_list = []
            score = {}

        方法属性:
            继承父类:
                select(类, 对象的名字):
                save(对象)

            对象自己的:
                choose_school: 选择学校
                choose_course: 选择课程
                check_course: 查看课程


    Teacher(老师):
        数据属性:
            name = teacher_name
            pwd = teacher_pwd
            course_list = []

        方法属性:
            继承父类:
                select(类, 对象的名字):
                save(对象)

            对象自己的:
                check_course: 查看教授课程
                choose_course: 选择教授课程
                check_student_from_course: 查看课程下的学生
                change_student_score: 修改学生的分数
readme

关联关系.png

 

posted on 2022-03-25 17:42  没有如果,只看将来  阅读(20)  评论(0编辑  收藏  举报