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

Day32.学生选择学校

时间:2024-07-09 17:09:23浏览次数:13  
标签:school obj name Day32 学生 学校 user path todo

1.学生选择学校_详细代码及执行流程

2.学生选择学校_学生视图(student.py)中choice_school功能

 

'''学生视图'''
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_school():
    print('学生选择学校')
    while True:
        # todo 1. 获取所有学校,让学生选择
        flag, school_list = common_interface.get_all_school_interface()
        if not flag:
            print(school_list)
            break
        else:
            for index, school_name in enumerate(school_list):
                print('编号:{}, 学校名:{}'.format(index, school_name))
        
        # todo 2. 让学生输入学校编号
        choice = input('请输入选择的学校编号:').strip()
        if not choice.isdigit():
            print('输入有误')
            continue
        else:
            choice = int(choice)

        if choice not in range(len(school_list)):
            print('输入编号有误!')
            continue

        school_name = school_list[choice]

        # todo 3. 开始调用学生选择学校接口
        flag, msg = student_interface.add_school_interface(
            school_name, student_info.get('user'))
        
        if flag:
            print(msg)
            break
        else:
            print(msg)
            break

 

3.学生选择学校_公共接口(common_interface.py)中获取所有学校名称接口

'''公共接口'''
import os
from conf import settings
from db import models

# todo 获取所有学校名称接口
def get_all_school_interface():
    # todo 1. 获取学校文件夹路径
    school_dir = os.path.join(
        settings.DB_PATH, 'School'
    )

    # todo 2. 判断文件夹是否存在
    if not os.path.exists(school_dir):
        return False, '没有学校,请先联系管理员'
    
    else:
        # todo 3. 文件夹若存在,则获取文件夹中所有的文件的名字
        school_list = os.listdir(school_dir)
        return True, school_list

4.学生选择学校_学生接口层(student_interface.py)中学生选择学校接口

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

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

# todo 学生选择学校接口
def add_school_interface(school_name, student_name):
    # todo 1. 判断当前学生是否存在学校
    student_obj = models.Student.select(student_name)
    
    if student_obj.school:
        return False, '当前学生已经选过学校了'
    
    # todo 2. 若不存在学校,则给调用学生对象中选择学校的方法,实现学生添加学校
    student_obj.add_school(school_name)

    return True, '选择学校!'

5.学生选择学校_类层(models.py)

'''用于存放类的
学校类、学员类、课程类、讲师类、管理员类
'''
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 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()

6.学生选择学校_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
        

7.学生选择学校_运行结果

 

标签:school,obj,name,Day32,学生,学校,user,path,todo
From: https://www.cnblogs.com/vless/p/18292328

相关文章

  • 基于java ssm springboot vue学生会组织管理系统毕业设计实战项目分享
    前言......
  • 【大学生】如何写好技术博客?
    我其实还是很羡慕,每天可以互动的,写博客的大学生们的。如果我当年也可以像你们一样,在校的时候也专心学习,也努力写博客,我想我也不至于整天沉迷于热血江湖和DNF,我也可以像你们一样优秀。所以,我想给你们提出几点小建议,希望可以帮你们更好的写好博客。目录1持续的写2你可以实......
  • 南京外国语学校暑期集训7/8号排序2
    显然,这道题使用快排第k大做,快排第k大思想:(下标从1开始)每次找一个key值,一轮后可以得到key在原数组中的位置(暂且称之为a),把a和n-k+1值比较,一样就返回,小就往左边找,大就往右边找。然后原数组在main里按题目要求初始化一下就行了点击查看代码#include<bits/stdc++.h>usingnamespac......
  • Day32.学生注册
    1.学生注册_详细代码及执行流程2.学生注册_学生视图层(student.py)_学生注册register功能函数'''学生视图'''fromlibimportcommonfrominterfaceimportstudent_interface#todo全局记录用户登陆状态student_info={'user':None}#todo学生注册defregister(......
  • javab毕业设计-基于Java的校园二手交易商城系统设计与实现,基于springboot+vue二手跳蚤
    文章目录背景介绍演示视频(进入B站观看画面更清晰):项目架构和内容获取(文末获取)部分功能展示用户前端系统管理后台项目相关文件为什么我?本章节给大家带来的是一个基于java的大学生二手交易平台系统设计与实现,可适用于校园二手交易系统,基于Java的二手交易商城系统,大学......
  • MySQl数据库课程设计 学生宿舍管理系统
    表的创建(1)createtabledormitory( #宿舍信息表  dormitory_idvarchar(15)notnull,#宿舍号    capacityint,#宿舍人数    bed_idint,#床号    student_namevarchar(20),#姓名    student_sexvarchar(5)#性别);(2)createtablesug......
  • 基于SSM的学校运动会信息管理系统(有报告)。Javaee项目。ssm项目。
    演示视频:基于SSM的学校运动会信息管理系统(有报告)。Javaee项目。ssm项目。项目介绍:采用M(model)V(view)C(controller)三层体系结构,通过Spring+SpringMvc+Mybatis+Jsp+Maven来实现。MySQL数据库作为系统数据储存平台,实现了基于B/S结构的Web系统。报告截图:......
  • 适合学生党性价比高的蓝牙耳机有哪些?几款必看的性价比耳机分享
    蓝牙耳机几乎成为了我们日常生活中不可或缺的一部分,对于学生党来说,找到一款既符合预算又不牺牲品质的蓝牙耳机尤为重要,无论是在学习、运动还是通勤路上,一个好的蓝牙耳机都能带来更佳的音乐体验和便捷的通话功能,在众多的蓝牙耳机款式和品牌里,适合学生党性价比高的蓝牙耳机有哪些......
  • python+flask计算机毕业设计高校学生实习信息管理(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着高等教育的普及与深化,高校学生实习已成为连接理论与实践、校园与社会的关键桥梁。然而,传统的实习信息管理方式往往依赖于纸质文档或简......
  • AI与编程:一个学生的心路历程与思考
    前言大家好,本人是在一个在校的大学生,方向是前端语言。爱好是码代码和看一点小新闻,游戏也是喜爱的。其实本篇文章的想法是源于网上一些人对AI以及对前端的看法,看完网上的评论后我也是有感而发。本篇文章的讨论中心也是围绕着AI和前端,作为一个学生我的观察与思考,但是本人其......