作业-选课系统

一、作业需求

readme
作业要求:选课系统
角色:学校、学生、课程、讲师
要求:

1. 创建北京、上海 2 所学校
2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开
3. 管理员创建学校 ,老师,课程
4. 课程包含课程名称(周期,价格等属性)
5. 学校包含学校名称,地址等属性
6. 创建老师角色要关联学校
7. 学生注册登录后,可以选择学校,选择课程,查看成绩
8. 老师登录后,可以查看教授课程,选择想要教授的课程,查看课程下的学生,修改学生成绩等

最终分为以下视图和功能:
1 学生视图
    1、注册
    2、登录
    3、选择校区
    4、选择课程
    5、查看成绩
2 老师视图
    1、登录
    2、查看教授课程
    3、选择教授课程
    4、查看课程下学生
    5、修改学生成绩
3 管理视图,创建讲师, 创建班级,创建课程
    1、注册
    2、登录
    3、创建学校
    4、创建老师
    5、创建课程
上面的操作产生的数据都通过pickle序列化保存到文件里

总共分三个视图:
    管理员视图:
        def admin_register():
            pass
        def admin_login():
            pass
        def creat_school():
            pass
        def creat_teacher():
            pass
        def creat_course():
            pass
    老师视图:
        def teacher_login():
            pass
        def check_course():
            pass
        def choose_course():
            pass
        def check_student():
            pass
        def modify_score():
            pass
    学生视图:
        def student_register():
            pass
        def student_login():
            pass
        def choose_school():
            pass
        def choose_course():
            pass
        def check_score():
            pass


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启动文件

二、项目根目录文件一览

在这里插入图片描述

start

import os
import sys
from core import src


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

if __name__ == '__main__':
    src.run()

conf

settings

import os

base_path = os.path.dirname(os.path.dirname(__file__))
db_path = os.path.join(base_path, 'db')

core

src

from core.student import student_view
from core.teacher import teacher_view
from core.admin import admin_view

dic = {'1': student_view,
       '2': teacher_view,
       '3': admin_view}


def run():
    while True:
        print('''
       '1': student_view
       
       '2': teacher_view
       
       '3': admin_view
       
       '0': exit''')
        choice = input('请输入功能编号:').strip()
        if choice == '0':
            print('已退出')
            break
        if choice not in dic:
            print('请输入正确功能编号')
            continue
        dic[choice]()

admin

from lib.common import login_info
from interface import admin_interface, common_interface

admin_info = {'user': None}


def admin_login():
    print('管理员登入')
    name = input('请输入账号:').strip()
    pwd = input('请输入密码:').strip()
    flag, msg = common_interface.login_interface(name, pwd, 'admin')
    if flag:
        print(msg)
        admin_info['user'] = name
    else:
        print(msg)


def admin_register():
    print('管理员注册')
    name = input('请输入账号:').strip()
    pwd = input('请输入密码:').strip()
    flag, msg = admin_interface.register_interface(name, pwd)
    if flag:
        print(msg)
    else:
        print(msg)


@login_info(user='admin')
def create_school():
    print('创建学校')
    school_name = input('请输入校名:').strip()
    school_addr = input('请输入地址:').strip()
    flag, msg = admin_interface.create_school_interface(school_name, school_addr)
    if flag:
        print(msg)
    else:
        print(msg)


@login_info(user='admin')
def create_teacher():
    print('创建老师账号')
    name = input('设置用户名:').strip()
    pwd = input('设置密码:').strip()
    flag, msg = admin_interface.create_teacher_interface(name, pwd)
    if flag:
        print(msg)
    else:
        print(msg)


@login_info(user='admin')
def create_course():
    print('创建课程')
    school_list = admin_interface.check_all_school()
    for i, school in enumerate(school_list):
        print(f'{i} {school}')
    choice = input('请输学校编号:').strip()
    if choice.isdigit():
        if 0 <= int(choice) < len(school_list):
            course_name = input('输入课程名称:').strip()
            school_name = school_list[int(choice)]
            flag, msg = admin_interface.create_course_interface(school_name,course_name)
            if flag:
                print(msg)
            else:
                print(msg)
        else:
            print('请输入正确功能编号')
    else:
        print('请输入数字')


dic = {
    '1': admin_login,

    '2': admin_register,

    '3': create_school,

    '4': create_teacher,

    '5': create_course,
}


def admin_view():
    while True:
        print('''
    '1': admin_login

    '2': admin_register

    '3': create_school

    '4': create_teacher

    '5': create_course
    
    '0': exit
      ''')
        choice = input('请输入功能编号:').strip()
        if choice == '0':
            print('已退出')
            break
        if choice not in dic:
            print('请输入正确功能编号')
            continue
        dic[choice]()

teacher

from lib.common import login_info
from interface import common_interface, teacher_interface

teacher_info = {'user': None}


def teacher_login():
    name = input('请输入姓名:').strip()
    pwd = input('请输入密码:').strip()
    flag, msg = common_interface.login_interface(name, pwd, 'teacher')
    if flag:
        print(msg)
        teacher_info['user'] = name
    else:
        print(msg)


@login_info(user='teacher')
def check_course():
    print('查看教授的课程')
    course_list = teacher_interface.get_course_list_interface(teacher_info['user'])
    if course_list:
        for i, course in enumerate(course_list):
            print(f'{i}  {course}')
    else:
        print('您还没有选课')


@login_info(user='teacher')
def choose_course():
    course_list = teacher_interface.get_all_course()
    if course_list:
        for i, course in enumerate(course_list):
            print(f'{i} {course}')
        choice = input('请输入课程编号:').strip()
        if choice.isdigit():
            if 0 <= int(choice) < len(course_list):
                msg = teacher_interface.choose_course_interface(teacher_info['user'], course_list[int(choice)])
                print(msg)
            else:
                print('请输入正确编号')
        else:
            print('请输入数字类型')
    else:
        print('暂无可挑选课程,请联系管理员')


@login_info(user='teacher')
def check_student():
    print('查看课程下学生')
    course_list = teacher_interface.get_course_list_interface(teacher_info['user'])
    if course_list:
        for i, course in enumerate(course_list):
            print(f'{i}  {course}')
        choice = input('请输入课程编号:').strip()
        if choice.isdigit():
            if 0 <= int(choice) < len(course_list):
                student_list = teacher_interface.check_students_course(course_list[int(choice)])
                if student_list:
                    for i, student in enumerate(student_list):
                        print(f'{i} {student}')
                else:
                    print('该课程下没有学生')
            else:
                print('请输入正确编号')
        else:
            print('请输入数字类型')
    else:
        print('您还没有选课')


@login_info(user='teacher')
def modify_score():
    print('为学生评分')
    course_list = teacher_interface.get_course_list_interface(teacher_info['user'])
    if course_list:
        for i, course in enumerate(course_list):
            print(f'{i}  {course}')
        choice = input('请输入课程编号:').strip()
        if choice.isdigit():
            if 0 <= int(choice) < len(course_list):
                student_list = teacher_interface.check_students_course(course_list[int(choice)])
                if student_list:
                    for i, student in enumerate(student_list):
                        print(f'{i} {student}')
                    choice1 = input('请输入学生编号:').strip()
                    if choice1.isdigit():
                        if 0 <= int(choice1) < len(student_list):
                            score = input('请打分(后期可有修改):').strip()
                            msg = teacher_interface.change_score_interface(
                                student_list[int(choice1)], score, course_list[int(choice)])
                            print(msg)
                        else:
                            print('请输正确编号')
                    else:
                        print('请输入数字类型')

                else:
                    print('该课程下没有学生')
            else:
                print('请输入正确编号')
        else:
            print('请输入数字类型')
dic = {
    '1': teacher_login,
    '2': check_course,
    '3': choose_course,
    '4': check_student,
    '5': modify_score,
}


def teacher_view():
    while True:
        print('''
    '1': teacher_login
         
    '2': check_course
    
    '3': choose_course
    
    '4': check_student
    
    '5': modify_score
    
    '0': exit
          ''')
        choice = input('请输入功能编号:').strip()
        if choice == '0':
            print('已退出')
            break
        if choice not in dic:
            print('请输入正确功能编号')
            continue
        dic[choice]()

student

from interface import student_interface, common_interface, admin_interface
from lib.common import login_info
student_info = {'user': None}


def student_login():
    print('学生登入')
    name = input('请输入账号:').strip()
    pwd = input('请输入密码:').strip()
    flag, msg = common_interface.login_interface(name, pwd, 'student')
    if flag:
        print(msg)
        student_info['user'] = name
    else:
        print(msg)


def student_register():
    print('学生注册')
    name = input('请输入账号:').strip()
    pwd = input('请输入密码:').strip()
    flag, msg = student_interface.register_interface(name, pwd)
    if flag:
        print(msg)
    else:
        print(msg)


@login_info(user='student')
def choose_school():
    print('选择学校')
    school_list = admin_interface.check_all_school()
    for i, school in enumerate(school_list):
        print(f'{i} {school}')
    choice = input('请输入学校编号:').strip()
    if choice.isdigit():
        if 0 <= int(choice) < len(school_list):
            flag, msg = student_interface.choose_school_interface(student_info['user'],school_list[int(choice)])
            if flag:
                print(msg)
            else:
                print(msg)
        else:
            print('请输入正确编号')
    else:
        print('请输入数字类型')


@login_info(user='student')
def choose_course():
    print('选择课程')
    flag, course_list = student_interface.get_choose_course_interface(student_info['user'])
    if flag:
        if course_list:
            for i, course in enumerate(course_list):
                print(f'{i} {course}')
            choice = input('请输入课程编号:').strip()
            if choice.isdigit():
                if 0 <= int(choice) < len(course_list):
                    msg = student_interface.choose_course_interface(student_info['user'],course_list[int(choice)])
                    print(msg)
                else:
                    print('请输入正确编号')
            else:
                print('请输入数字类型')
        else:
            print('课程暂未上传,请联系管理员')
    else:
        print(course_list)


@login_info(user='student')
def check_score():
    print('查看分数')
    course_list = student_interface.get_by_course_interface(student_info['user'])
    if course_list:
        for i, course in enumerate(course_list):
            print(f'{i} {course}')
        choice = input('请输出课程编号:').strip()
        if choice.isdigit():
            if 0 <= int(choice) < len(course_list):
                score = student_interface.check_score_interface(student_info['user'], course_list[int(choice)])
                if score:
                    print(f'当前科目分数为{score}')
                else:
                    print('分数未出')
            else:
                print('请输入正确编号')
        else:
            print('请输入数字')
    else:
        print('您还没选择课程')


dic = {
    '1': student_login,
    '2': student_register,
    '3': choose_school,
    '4': choose_course,
    '5': check_score,
    '0': exit
}


def student_view():
    while True:

        print('''  
    '1': student_login
    
    '2': student_register
    
    '3': choose_school
    
    '4': choose_course
    
    '5': check_auth
    
    '0': exit
        ''')
        choice = input('请输入功能编号:').strip()
        if choice == '0':
            print('已退出')
            break
        if choice not in dic:
            print('请输入正确功能编号')
            continue
        dic[choice]()

db

db_handler

import pickle
import os
from conf import settings


def save(obj):
    name = obj.__class__.__name__.lower()
    path = os.path.join(settings.db_path, name)
    if not os.path.isdir(path):
        os.mkdir(path)
    obj_path = os.path.join(path, obj.name)
    with open(obj_path, 'wb') as f:
        pickle.dump(obj, f)
        f.flush()


def select(name, type_str):
    path = os.path.join(settings.db_path, type_str)
    if not os.path.exists(path):
        os.mkdir(path)
    obj_path = os.path.join(path, name)
    if os.path.exists(obj_path):
        with open(obj_path, 'rb') as f:
            obj = pickle.load(f)
            return obj

models

from db import db_handler


class Baseclass:
    def save(self):
        db_handler.save(self)

    @classmethod
    def get_obj_name(cls, name):
        type_str = cls.__name__.lower()
        return db_handler.select(name, type_str)


class Student(Baseclass):
    def __init__(self, name, pwd):
        self.name = name
        self.pwd = pwd
        self.school = None
        self.course_list = []
        self.score = {}

    def choose_school(self, school_name):
        self.school = school_name


class Admin(Baseclass):
    def __init__(self, name, pwd):
        self.name = name
        self.pwd = pwd


class Teacher(Baseclass):
    def __init__(self, name, pwd):
        self.name = name
        self.pwd = pwd
        self.course_list = []


class School(Baseclass):
    def __init__(self, school_name, school_addr):
        self.name = school_name
        self.addr = school_addr
        self.course_list = []

    def add_course(self, course):
        self.course_list.append(course)


class Course(Baseclass):
    def __init__(self, name):
        self.name = name
        self.student_list = []

interface

admin_interface

from db import models
import os
from conf import settings
from lib import common


def register_interface(name, pwd):
    obj = models.Admin.get_obj_name(name)
    if obj:
        return False, '用户已存在'
    obj = models.Admin(name, pwd)
    obj.save()
    return True, '注册成功'


def create_school_interface(name, addr):
    obj = models.School.get_obj_name(name)
    if obj:
        return False, '用户已存在'
    obj = models.School(name, addr)
    obj.save()
    return True, '创建成功'


def create_teacher_interface(name, pwd):
    obj = models.Teacher.get_obj_name(name)
    if obj:
        return False, '当前账户已存在'
    obj = models.Teacher(name, pwd)
    obj.save()
    return True, '成功创建账户'


def check_all_school():
    path = os.path.join(settings.db_path, 'school')
    return common.get_all_filename(path)


def create_course_interface(s_name, c_name):
    obj = models.Course.get_obj_name(c_name)
    if obj:
        return False, '已存在该课程'
    obj = models.Course(c_name)
    obj.save()
    school_obj = models.School.get_obj_name(s_name)
    school_obj.add_course(c_name)
    school_obj.save()
    return True, '创建课程成功'

teacher_interface

from db import models
from conf import settings
from lib import common
import os


def get_all_course():
    path = os.path.join(settings.db_path, 'course')
    return common.get_all_filename(path)


def choose_course_interface(name, c_name):
    obj = models.Teacher.get_obj_name(name)
    obj.course_list.append(c_name)
    obj.save()
    return '选课成功'


def get_course_list_interface(name):
    obj = models.Teacher.get_obj_name(name)
    if obj.course_list:
        return obj.course_list


def check_students_course(c_name):
    obj = models.Course.get_obj_name(c_name)
    if obj.student_list:
        return obj.student_list


def change_score_interface(s_name, score, c_name):
    s_obj = models.Student.get_obj_name(s_name)
    s_obj.score[c_name] = score
    s_obj.save()

student_interface

from db import models


def register_interface(name, pwd):
    obj = models.Student.get_obj_name(name)
    if obj:
        return False, '当前用户已存在'
    obj = models.Student(name, pwd)
    obj.save()
    return True, '注册成功'


def choose_school_interface(name, s_name):
    obj = models.Student.get_obj_name(name)
    if obj.school:
        return False, '您已选择学校'

    obj.choose_school(s_name)
    obj.save()
    return True, '成功入校'


def get_choose_course_interface(name):
    obj = models.Student.get_obj_name(name)
    if obj.school:
        school_obj = models.School.get_obj_name(obj.school)
        return True, school_obj.course_list
    else:
        return False, '请先入校'


def choose_course_interface(name, c_name):
    student_obj = models.Student.get_obj_name(name)
    if c_name in student_obj.course_list:
        return '已在该课程下'

    student_obj.course_list.append(c_name)
    student_obj.save()

    course_obj = models.Course.get_obj_name(c_name)
    course_obj.student_list.append(name)
    course_obj.save()
    return '选课成功'


def get_by_course_interface(name):
    obj = models.Student.get_obj_name(name)
    return obj.course_list


def check_score_interface(s_name, c_name):
    s_obj = models.Student.get_obj_name(s_name)
    if s_obj.score:
        for i in s_obj.score:
            if i == c_name:
                return s_obj.score[i]

common_interface

from db import models


def login_interface(name, pwd, type_str):
    if type_str == 'student':
        obj = models.Student.get_obj_name(name)
    elif type_str == 'teacher':
        obj = models.Teacher.get_obj_name(name)
    else:
        obj = models.Admin.get_obj_name(name)
    if obj:
        if pwd == obj.pwd:
            return True, '登入成功'
        else:
            return False, '密码错误'
    else:
        return False, '用户不存在'

lib

common

import os


def login_info(user):
    def wrapper(func):
        def inner(*args, **kwargs):
            from core import student, teacher, admin

            if user == 'student':
                if student.student_info['user']:
                    return func(*args, **kwargs)
                else:
                    print('请先登入')
                    student.student_login()

            if user == 'teacher':
                if teacher.teacher_info['user']:
                    return func(*args, **kwargs)
                else:
                    print('请先登入')
                    teacher.teacher_login()

            if user == 'admin':
                if admin.admin_info['user']:
                    return func(*args, **kwargs)
                else:
                    print('请先登入')
                    admin.admin_login()

        return inner

    return wrapper


def get_all_filename(path):
    return os.listdir(path)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值