首页 > 其他分享 >Day32.学生选择课程

Day32.学生选择课程

时间:2024-07-10 10:24:04浏览次数:12  
标签:obj name Day32 学生 course 课程 user todo

1.学生选择课程_整体代码及执行流程

2.学生选择课程_学生视图中choice_course选课功能

'''学生视图'''
from lib import common
from interface import student_interface
from lib import common_interface
 # todo 全局记录用户登陆状态  student_info = {'user': None}
# todo 学生选择课程
@common.auth('student')
def choice_course():
    print('学生选择课程')
    while True:
        # todo 1. 先获取`当前学生`所在学校的课程列表
        flag, course_list = student_interface.get_course_list_interface(
            student_info.get('user'))
        if not flag:
            print(course_list)
            break
        # todo 2. 打印课程列表,并让用户选择课程
        for index, course_name in enumerate(course_list):
            print('编号:{}, 课程名:{}'.format(index, course_name))
        # todo 2. 让学生输入课程编号
        choice = input('请输入选择的课程编号:').strip()
        if not choice.isdigit():
            print('输入有误')
            continue
        else:
            choice = int(choice)
        if choice not in range(len(course_list)):
            print('输入编号有误!')
            continue
        # todo 3. 获取选择的课程名称
        course_name = course_list[choice]
        
        # todo 4. 学生选择课程接口
        flag, msg = student_interface.add_course_interface(
            course_name, student_info.get('user'))

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

3.学生选择课程_学生接口层中查询学校课程接口_get_course_list_interface和学生选择课程接口_add_course_interface

'''学生接口层'''
from db import models

# todo 全局记录用户登陆状态
student_info = {'user': None}

# todo 获取学生所在学校所有课程接口
def get_course_list_interface(student_name):
    # todo 1. 获取当前学生对象
    student_obj = models.Student.select(student_name)
    school_name = student_obj.school

    # todo 2. 判断当前学生是否有学校,若没有则返回False
    if not student_obj.school:
        return False, '没有学校,请先选择学校'
    
    # todo 3. 开始获取学校的对象中的课程列表
    school_obj = models.School.select(school_name)

    # todo 3.1 判断当前学校中是否有课程,若没有,则联系管理员
    course_list = school_obj.course_list
    if not school_obj.course_list:
        return False, '没有课程,请先联系管理员创建'
    
    # todo 3.2 若有,则返回课程列表
    return True, course_list

# todo 学生选择课程接口
def add_course_interface(course_name, student_name):
    # todo 1. 先判断当前课程是否已经存在学生课程列表中
    student_obj = models.Student.select(student_name)

    if course_name in student_obj.course_list:
        return False, '该课程已选择!'
    
    else:
        # todo 2. 调用学生对象中添加课程的方法
        student_obj.add_course(course_name)
        
        return True, '{} -- 课程添加成功'.format(course_name)

4.学生选择课程_类层中学校类,学生类和父类

'''用于存放类的
学校类、学员类、课程类、讲师类、管理员类
'''
from db import db_handler


# todo 提供select和save方法写入父类, 让所有子类都继承
class Base:
    # todo 定义一个数据查找方法 ----> 登录、查看数据
    @classmethod
    def select(cls, username):      # 接收到类Admin和username
        # todo obj: 对象 OR None
        obj = db_handler.select_data(
            cls, username)
        return obj

    # todo 定义一个数据保存方法 ----> 注册、保存、更新数据
    def save(self):
        # todo 调用db_handler中的save方法,并且需要对其中的方法做传值,即添加self
        # todo 让db_handler中的save_data进行保存对象数据
        db_handler.save_data(self)

# todo 学校类
class School(Base):
    def __init__(self, name, addr):
        # todo 必须写:self.user, 因为db_handler里面的select_data统一规范
        self.user = name
        self.addr = addr
        # todo 课程列表:每所学校都应该有相应的课程
        self.course_list = []

# todo 学生类
class Student(Base):
    def __init__(self, user, pwd):
        self.user = user
        self.pwd = pwd
        # todo 每个学生只能有一个校区
        self.school = None
        # todo 一个学生可以选择多门课程
        self.course_list = []
        # todo 学生课程分数
        self.score = {}     # todo {"course_name": 0}
    
    # todo 学生选择学校
    def add_school(self, school_name):
        self.school = school_name
        self.save()

    # todo 学生添加课程方法
    def add_course(self, course_name):
        # todo 1. 学生课程列表添加课程
        self.course_list.append(course_name)
        # todo 2. 给学生选择的课程设置默认分数
        self.score[course_name] = 0
        self.save()
        # todo 3. 学生选择的课程对象,添加学生
        course_obj = Course.select(course_name)
        course_obj.student_list.append(self.user)
        course_obj.save()
        return True, '{} -- 课程添加成功'

5.学生选择课程_用户保存对象与获取对象db_handler.py

'''
用于保存对象与获取对象
'''
import os
from conf import settings
import pickle

# todo 保存数据
def save_data(obj):
    # todo 1. 获取对象的保存文件夹路径
    # todo 以类名 当作 文件夹的名字
    # todo obj.__class__:获取当前对象的类,即models.py中调用该方法的类
    # todo obj.__class__.__name__:获取当前类的名字,即models.py中调用该方法的类名
    class_name = obj.__class__.__name__
    user_dir_path = os.path.join(
        settings.DB_PATH, class_name
    )

    # todo 2.判断文件夹是否存在,不存在则创建文件夹
    if not os.path.exists(user_dir_path):
        os.mkdir(user_dir_path)

    # todo 3.拼接当前用户的pickle文件路径,以用户作为文件名
    user_path = os.path.join(
        user_dir_path, obj.user     # 当前用户名字
    )

    # todo 4.打开文件,保存对象,通过pickle
    with open(user_path, 'wb') as f:
        pickle.dump(obj, f)
    
# todo 查看数据
def select_data(cls, username):  # 拿到models.py中刚传过来的类名(即文件夹名称)和username,
    # todo 有cls获取类名
    class_name = cls.__name__
    user_dir_path = os.path.join(
        settings.DB_PATH, class_name
    )
    # todo 2.判断文件夹是否存在,不存在则创建文件夹
    if not os.path.exists(user_dir_path):
        os.mkdir(user_dir_path)

    # todo 3.拼接当前用户的pickle文件路径,以用户作为文件名
    user_path = os.path.join(
        user_dir_path, username     # 当前用户名字
    )

    # todo 4.判断文件如果存在,再打开,并返回,若不存在,则代表用户不存在
    if os.path.exists(user_path):
        # todo 5.打开文件,获取对象
        with open(user_path, 'rb') as f:
            obj = pickle.load(f)
            return obj
    else:
        return None
        

6.学生选择课程_运行结果

 

 

标签:obj,name,Day32,学生,course,课程,user,todo
From: https://www.cnblogs.com/vless/p/18293335

相关文章

  • 计算机毕业设计项目:18655 课程题库管理系统(开题答辩+程序定制+全套文案 )上万套实战教
    摘 要随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于课程题库管理系统当然也不能排除在外,随着网络技术的不断成熟,带动了课程题库管理系统,它彻底改变了过去传统的管理方式,不仅使服务管理难度变低了,还提升了管理的灵活性。这种个......
  • [学生宿舍管理]模块详述
    新生报道,大屏展示趣味的动态迎新数据;打造专业高规格迎新现场,家长放心领导查宿,大屏展示详细的动态入住信息;提供卫生安全等隐患数据,决策靠谱宿舍管理平台内,学生住宿信息及人脸标签同步收录,为宿舍管理提供可靠信息基础宿舍内,学生住宿信息及人脸标签贴墙公示,为查宿现场提供真实信......
  • 暑期课程学一学XSS攻击,以及开源项目
    XSS存储型本文主要是使用vulstudy直接搭建的漏洞环境,是其中的DVWA。然后随手记一个反弹shell的工具反弹shell工具。原理存储型XSS,也叫持久型XSS,主要是将XSS代码发送到服务器(不管是数据库、内存还是文件系统等。),然后在下次请求页面的时候就不用带上XSS代码了。最典型的就是留言......
  • 回溯算法-以学生就业管理系统为例
    1.回溯算法介绍1.来源回溯算法也叫试探法,它是一种系统地搜索问题的解的方法。用回溯算法解决问题的一般步骤:1、针对所给问题,定义问题的解空间,它至少包含问题的一个(最优)解。2、确定易于搜索的解空间结构,使得能用回溯法方便地搜索整个解空间。3、以深度优先的方式搜索......
  • 基于Springboot的学生选课系统
    全文内容包括:1、采用技术;2、系统功能;3、系统截图;4、配套内容。索取方式见文末微信号,欢迎关注收藏!一、采用技术语言:Java1.8框架:SpringBoot数据库:MySQL5.7、8.0开发工具:IntelliJIDEA旗舰版其他:Maven3.8以上二、系统功能教师管理:负责教师信息的录入、编辑、删除及权限分配......
  • Day32.学生选择学校
    1.学生选择学校_详细代码及执行流程2.学生选择学校_学生视图(student.py)中choice_school功能 '''学生视图'''fromlibimportcommonfrominterfaceimportstudent_interfacefromlibimportcommon_interface#todo全局记录用户登陆状态student_info={'user':......
  • 基于java ssm springboot vue学生会组织管理系统毕业设计实战项目分享
    前言......
  • lua课程学习笔记
    Learning-Lualua课程学习笔记整体结构节点内容难点AB包AB包浏览器下载,AB打包,AB加载,ABMgrLua语法lua逻辑,表,方法,面向对象模拟,协程面向对象模拟需要熟悉表、元表、全局表xLualua与C#互相调用,lua使用C#数据结构,lua无法直接调用的类需要标记特性Hotfix标......
  • 【大学生】如何写好技术博客?
    我其实还是很羡慕,每天可以互动的,写博客的大学生们的。如果我当年也可以像你们一样,在校的时候也专心学习,也努力写博客,我想我也不至于整天沉迷于热血江湖和DNF,我也可以像你们一样优秀。所以,我想给你们提出几点小建议,希望可以帮你们更好的写好博客。目录1持续的写2你可以实......
  • GLFLS课程:线段树进阶
    线段树合并与分裂线段树合并两个权值线段树\(T_1\)和\(T_2\)的合并是一个递归的过程。我们不妨设要合并的子树为\(x\)和\(y\),其对应区间均为\([l,\r]\)那么分类讨论如下:  \((1)\)首先若\(x=0\)或\(y=0\),则\(x\),\(y\)中有空节点,直接返回\(x+y\)即可......