选课系统作业:

(一)

#学校
class School:
  def __init__(self,name):
    self.name = name

  def save(self):
    pickle.dump((open(xxxx),'wb'),self)

  def __str__(self):
    return self.name

  @staticmethod
  def get_all():
    obj_list = []
    for item循环,去/home/alex/找所有文件:
      pickle.load(item) #打开文件,拿到一个对象
      obj_list.append(obj) #把对象添加到列表
    return obj_list #返回所有学校对象列表


s1 = School('上海')
s1.save()
# /home/smoke/1
s1 = School('北京')
s2.save()
# /home/smoke/2

school_obj_list = School.get_all() #学校对象列表
for obj in school_obj_list:
  #print("学校名称: %s" % obj.name)
  print(obj)

 

(二)

#学校
class School:
  def __init__(self,name):
    self.name = name
    self.学校的唯一标识 = 随机字符串(不重复)
  def save(self):
    pickle.dump((open(self.学校的唯一标识),'wb'),self)

  def __str__(self):
    return self.name

  @staticmethod
  def get_all():
    obj_list = []
    for item循环,去/home/alex/找所有文件:
      pickle.load(item) #打开文件,拿到一个对象
      obj_list.append(obj) #把对象添加到列表
    return obj_list #返回所有学校对象列表


s1 = School('上海') #999fd834-b047-11e8-b51c-c855de55a6ae
s1.save()
# /home/smoke/999fd834-b047-11e8-b51c-c855de55a6ae
s1 = School('北京') #9a08fbcc-b047-11e8-baa9-c855de55a6ae
s2.save()
# /home/smoke/9a08fbcc-b047-11e8-baa9-c855de55a6ae

school_obj_list = School.get_all() #学校对象列表
for obj in school_obj_list:
  #print("学校名称: %s" % obj.name)
  print(obj)

 

角色:学校、学员、课程、讲师
要求:
1.创建北京、上海 2所学校
2.创建linux,python,go 3个课程,linux\py 在北京开, go 在上海开
3.课程包括,周期,价格,通过学校创建课程
4.通过学校创建半级,半级关联课程、讲师
5.创建学员时,关联半级
6.提供三个角色接口
  6.1 学员视图,可以注册,交学费,选择半级,
  6.2 讲师视图,讲师可管理自己的班级,上课时选择班级,查看班级学员列表,修改所管理的学员成绩
  6.3 管理视图,创建讲师,创建班级,创建课程
7.上面的操作产生的数据都通过pickle序列化保存到文件里

#学校
class School:
  def __init__(self,name):
    self.name = name
    self.学校的唯一标识 = 随机字符串(不重复)
  def save(self):
    pickle.dump((open(self.学校的唯一标识),'wb'),self)

  def __str__(self):
    return self.name

  @staticmethod
  def get_all():
    obj_list = []
    for item循环,去/home/alex/找所有文件:
      pickle.load(item) #打开文件,拿到一个对象
      obj_list.append(obj) #把对象添加到列表
    return obj_list #返回所有学校对象列表


s1 = School('上海') #999fd834-b047-11e8-b51c-c855de55a6ae
s1.save()
# /home/alex/999fd834-b047-11e8-b51c-c855de55a6ae
s1 = School('北京') #9a08fbcc-b047-11e8-baa9-c855de55a6ae
s2.save()
# /home/alex/9a08fbcc-b047-11e8-baa9-c855de55a6ae

school_obj_list = School.get_all() #学校对象列表
for obj in school_obj_list:
  #print("学校名称: %s" % obj.name)
  print(obj)

#班级
class Classes:
  """
  班级
  """
  def __init__(self,name):
  self.name = name
    self.nid = 随机字符串
    def save():
    pickle 保存

  @staticmethod
  def get_all():
    获取所有的班级对象

#学生
class Student:
  """
  学生
  """
  def __init__(self,name,classes_id):
    """
    name: 学生姓名
    classes_name: 班级名称
    """
    self.name = name
    self.classesObj = classes_id #全栈一般对象

  def save():
    学生对象中的所有数据,保存到一个文件

class_obj_list = Classes.get_all()
print(classes_obj_list)

sel = input('请输入选择班级索引:')
# 班级对象 (全站1班对象,全站2班,全站3班)
name = input('请输入名称')
classes_obj = classes_obj_list[sel]

obj = Student(name,class_obj.nid)
obj.save()

班级数据文件夹:
  f7e48b6c - b04d - 11e8 - bb6d - c855de55a6a8(全站1班)
  f7e48b6c - b04d - 11e8 - bb6d - c855de55a6a2(全站2班)
  f7e48b6c - b04d - 11e8 - bb6d - c855de55a6a1(全站3班)

学生的数据文件夹:
  f7e48b6c - b04d - 11e8 - bb6d - c855de55a6a8(小虎,f7e48b6c - b04d - 11e8 - bb6d - c855de55a6a8)
  f7e48b6c - b04d - 11e8 - bb6d - c855de55a6a2(中虎,f7e48b6c - b04d - 11e8 - bb6d - c855de55a6a8)
  f7e48b6c - b04d - 11e8 - bb6d - c855de55a6a1(大虎,f7e48b6c - b04d - 11e8 - bb6d - c855de55a6a8)

 

#学校
class School:
  def __init__(self,name):
    self.name = name
    self.学校的唯一标识 = 随机字符串(不重复)
  def save(self):
    pickle.dump((open(self.学校的唯一标识),'wb'),self)

  def __str__(self):
    return self.name

  @staticmethod
  def get_all():
    obj_list = []
    for item循环,去/home/alex/找所有文件:
      pickle.load(item) #打开文件,拿到一个对象
      obj_list.append(obj) #把对象添加到列表
    return obj_list #返回所有学校对象列表


s1 = School('上海') #999fd834-b047-11e8-b51c-c855de55a6ae
s1.save()
# /home/alex/999fd834-b047-11e8-b51c-c855de55a6ae
s1 = School('北京') #9a08fbcc-b047-11e8-baa9-c855de55a6ae
s2.save()
# /home/alex/9a08fbcc-b047-11e8-baa9-c855de55a6ae

school_obj_list = School.get_all() #学校对象列表
for obj in school_obj_list:
  #print("学校名称: %s" % obj.name)
  print(obj)

#班级
class Classes:
  """
  班级
  """
  def __init__(self,name):
    self.name = name
    self.nid = 随机字符串
  def save():
    pickle 保存

  @staticmethod
  def get_all():
    获取所有的班级对象

#学生
class Student:
  """
  学生
  """
  def __init__(self,name,classes_id):
    """
    name: 学生姓名
    classes_name: 班级名称
    """
    self.name = name
    self.classesObj = classes_id #全栈一般对象

  def save():
    学生对象中的所有数据,保存到一个文件

class_obj_list = Classes.get_all()
print(classes_obj_list)

sel = input('请输入选择班级索引:')
# 班级对象 (全站1班对象,全站2班,全站3班)
name = input('请输入名称')
classes_obj = classes_obj_list[sel]

obj = Student(name,class_obj.nid)
obj.save()

class Nid:
  def __init__(self,nid):
    self.nid = nid

  def get_obj_by_nid(self):
    obj = pickle.load打开os.path.json(slef.db_path,self.nid)文件,获取内容,并返回
    return obj

class ClassesNid(Nid):
  def __init__(self,nid):
    self.db_path = "班级对象存储文件夹路径"
    super(classesNid,)self.__init__(nid)

class StudentNid(Nid):
  def __init__(self,nid):
    self.db_path = "学生对象存储文件路径"
    super(ClassesNid,self).__init__(nid)

班级数据文件夹:
  f7e48b6c - b04d - 11e8 - bb6d - c855de55a6a8(全站1班)
  f7e48b6c - b04d - 11e8 - bb6d - c855de55a6a2(全站2班)
  f7e48b6c - b04d - 11e8 - bb6d - c855de55a6a1(全站3班)

学生的数据文件夹:
  f7e48b6c - b04d - 11e8 - bb6d - c855de55a6a8(小虎,Nid(f7e48b6c - b04d - 11e8 - bb6d - c855de55a6a8))
  f7e48b6c - b04d - 11e8 - bb6d - c855de55a6a2(中虎,Nid(f7e48b6c - b04d - 11e8 - bb6d - c855de55a6a8))
  f7e48b6c - b04d - 11e8 - bb6d - c855de55a6a1(大虎,Nid(f7e48b6c - b04d - 11e8 - bb6d - c855de55a6a8)

一个学生
学生对象 --> load打开文件f7e48b6c - b04d - 11e8 - bb6d - c855de55a6a8
学生对象.name #小虎
学生对象.classes_id.nid
学生对象.classes_id.get_obj_by_nid() #班级对象
班级对象 --> load(学生对象.classes_id)
班级对象.name #全栈11班

 

选课系统目录结构

smoke@smoke-GS70-2PC-Stealth:~/文档/DocumentFile/PycharmProjects$ tree 选课系统Demo/
选课系统Demo/
└── Jaime
    ├── bin
    │   ├── admin.py
    │   ├── initialize.py
    │   ├── student.py
    │   └── teacher.py
    ├── config
    │   ├── __pycache__
    │   │   └── settings.cpython-35.pyc
    │   └── settings.py
    ├── db
    │   ├── admin
    │   │   └── 592a4826-86f7-11e6-85a0-005056c00008
    │   ├── course
    │   │   ├── 75034a68-86f7-11e6-8403-005056c00008
    │   │   └── 811426c2-86f7-11e6-bade-005056c00008
    │   ├── course_to_teacher
    │   ├── school
    │   │   ├── 5f7b8034-86f7-11e6-a7f0-005056c00008
    │   │   └── 63506452-86f7-11e6-af3e-005056c00008
    │   ├── student
    │   └── teacher
    ├── lib
    │   ├── commons.py
    │   └── __pycache__
    │       └── commons.cpython-35.pyc
    ├── log
    ├── readme
    └── src
        ├── identifier.py
        ├── models.py
        ├── __pycache__
        │   ├── identifier.cpython-35.pyc
        │   └── models.cpython-35.pyc
        └── service
            ├── admin_service.py
            ├── initialize_service.py
            ├── __pycache__
            │   ├── admin_service.cpython-35.pyc
            │   └── initialize_service.cpython-35.pyc
            ├── student_service.py
            └── teacher_service.py

18 directories, 24 files

Jaime目录

bin目录

admin.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
    用于为管理员用户提供相关操作,如:学校、课程、老师等相关操作
"""
from src.service import admin_service


def execute():

    admin_service.main()

if __name__ == '__main__':
    execute()

initialize.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
    用于初始化管理员账户
"""
from src.service import initialize_service


def execute():

    initialize_service.main()

if __name__ == '__main__':
    execute()

student.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import os
import sys

BASEDIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
os.path.join(BASEDIR)


r = os.listdir(BASEDIR)
print(r)

import uuid


r = uuid.uuid1()
print(r,type(r),len(str(r)))

teacher.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import os
BASEDIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))


path = os.path.join(BASEDIR, 'db', 'admin')
r = os.listdir(path)
print(r)

config目录

settings.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import os
BASEDIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

ADMIN_DB = os.path.join(BASEDIR, 'db', 'admin')
COURSE_DB = os.path.join(BASEDIR, 'db', 'course')
COURSE_TO_TEACHER_DB = os.path.join(BASEDIR, 'db', 'course_to_teacher')
CLASSES_DB = os.path.join(BASEDIR, 'db', 'classes')

STUDENT_DB = os.path.join(BASEDIR, 'db', 'student')
TEACHER_DB = os.path.join(BASEDIR, 'db', 'teacher')
SCHOOL_DB = os.path.join(BASEDIR, 'db', 'school')

db目录

admin目录

course目录

course_to_teacher目录

school目录

student目录

teacher目录

lib目录

commons.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import time
import uuid
import hashlib


def create_uuid():
    return str(uuid.uuid1())


def create_md5():
    m = hashlib.md5()
    m.update(bytes(str(time.time()), encoding='utf-8'))
    return m.hexdigest()

log目录

src目录

identifier.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import os
import pickle
from lib import commons


class Nid:
    def __init__(self, role, db_path):
        """
        该对象用于标识唯一ID
        :param role: 角色:school,teacher,
        :return:
        """
        role_list = [
            'admin', 'school', 'teacher', 'course', 'course_to_teacher', 'classes', 'student'
        ]
        if role not in role_list:
            raise Exception('用户角色定义错误,选项为:%s' % ','.join(role_list))
        self.role = role
        # uuid= b515bd9e-86e5-11e6-9cf4-005056c00008
        self.uuid = commons.create_uuid()
        self.db_path = db_path

    def __str__(self):
        return self.uuid

    def get_obj_by_uuid(self):
        """
        获取当前id对应的对象
        :return:
        """
        for name in os.listdir(os.path.join(self.db_path)):
            if name == self.uuid:
                return pickle.load(open(os.path.join(self.db_path, self.uuid),'rb'))


class AdminNid(Nid):
    def __init__(self, db_path):
        super(AdminNid, self).__init__('admin', db_path)


class SchoolNid(Nid):
    def __init__(self, db_path):
        super(SchoolNid, self).__init__('school', db_path)


class TeacherNid(Nid):
    def __init__(self, db_path):
        super(TeacherNid, self).__init__('teacher', db_path)


class CourseNid(Nid):
    def __init__(self, db_path):
        super(CourseNid, self).__init__('course', db_path)


class CourseToTeacherNid(Nid):
    def __init__(self, db_path):

        super(CourseToTeacherNid, self).__init__('course_to_teacher', db_path)

    def get_course_teacher_by_uuid(self):
        """
        获取课程对象和老师对象
        :return:
        """
        for name in os.listdir(os.path.join(self.db_path)):
            if name == self.uuid:
                obj = pickle.load(os.path.join(self.db_path, self.uuid))
                return [obj.courseId.get_obj_by_uuid(), obj.teacherId.get_obj_by_uuid(), ]
        return [None, None]


class ClassesNid(Nid):
    def __init__(self, db_path):
        super(ClassesNid, self).__init__('classes', db_path)


class StudentNid(Nid):
    def __init__(self, db_path):
        super(StudentNid, self).__init__('student', db_path)

models.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import os
import time
import pickle
from config import settings
from src import identifier


class BaseModel:
    def save(self):
        """
        使用pickle将用户对象保存到文件
        :return:
        """
        nid = str(self.nid)
        file_path = os.path.join(self.db_path, nid)
        pickle.dump(self, open(file_path, 'wb'))

# obj = Admin('root', 123)
# 将obj写入到db/admin目录
class Admin(BaseModel):
    db_path = settings.ADMIN_DB

    def __init__(self, username, password):
        """
        创建管理员对象
        :param username:
        :param password:
        :return:
        """
        # nid唯一ID,随机字符串
        #
        self.nid = identifier.AdminNid(Admin.db_path)
        self.username = username
        self.password = password
        self.create_time = time.strftime('%Y-%m-%d')

    @staticmethod
    def login(user, pwd):
        """
        管理员登陆,去遍历/db/admin/,pickle.load()
        for item 循环/db/admin/所有文件:
            obj = pickle.load(open(os.path.join(/db/admin/, item)))
            if user == obj.username and pwd == obj.password:
                return obj

        return None

        :param user: 管理员用户名
        :param pwd: 管理员密码
        :return: 如果登陆成功,获取管理员对象,否则 None
        """


class School(BaseModel):
    db_path = settings.SCHOOL_DB

    def __init__(self, name):
        self.nid = identifier.SchoolNid(School.db_path)
        self.schoolName = name
        self.income = 0

    def __str__(self):
        return self.schoolName

    @staticmethod
    def get_all_list():
        ret = []
        for item in os.listdir(os.path.join(School.db_path)):
            obj = pickle.load(open(os.path.join(School.db_path, item), 'rb'))
            ret.append(obj)
        return ret


class Teacher(BaseModel):
    db_path = settings.TEACHER_DB

    def __init__(self, name, level):
        """
        :param name: 老师姓名
        :param level: 老师级别
        """

        self.nid = identifier.TeacherNid(Teacher.db_path)
        self.teacherName = name
        self.teacherLevel = level
        self.__account = 0

# obj.courseName  课程名
# obj.coursePrice 课程价格
# obj.school_id表示学校唯一ID对象() identifier.SchoolNid(School.db_path)
# obj.school_id.get_obj_by_uuid().schoolName 表示学校唯一ID对象() identifier.SchoolNid(School.db_path)

class Course(BaseModel):
    db_path = settings.COURSE_DB

    def __init__(self, name, price, period, school_id):
        """
        :param name: 课程名
        :param price: 课程价格
        :param period: 课程周期
        :param school_id: 关联学校Id,学校ID具有get_obj_by_uuid方法,以此获取学校对象(其中包含学校信息)
        """
        self.nid = identifier.CourseNid(Course.db_path)
        self.courseName = name
        self.coursePrice = price
        self.coursePeriod = period
        self.schoolId = school_id

    def __str__(self):
        return "课程名:%s;课程价格:%s;课程周期:%s;所属学校:%s" % (
            self.courseName, self.coursePrice, self.coursePeriod, self.schoolId.get_obj_by_uuid().name, )

    @staticmethod
    def get_all_list():
        """
        获取所有课程对象
        """
        ret = []
        for item in os.listdir(os.path.join(Course.db_path)):
            obj = pickle.load(open(os.path.join(Course.db_path, item), 'rb'))
            ret.append(obj)
        return ret

# 语文id - Alexid
# 语文 - SB
# 体育 - Eric
# 英语 - Alex

class CourseToTeacher(BaseModel):
    db_path = settings.COURSE_TO_TEACHER_DB

    def __init__(self, course_id, teacher_id):
        self.nid = identifier.CourseToTeacherNid(CourseToTeacher.db_path)
        self.courseId = course_id
        self.teacherId = teacher_id


    @staticmethod
    def course_teacher_list():
        pass

#  # 语文id - Alexid, # 体育 - Eric
class Classes(BaseModel):
    db_path = settings.CLASSES_DB

    def __init__(self, name, tuition, school_id, course_to_teacher_list):
        """
        班级
        :param name: 班级名
        :param tuition: 学费
        :param school_id: 学校NID
        :param course_to_teacher_list:  [CourseToTeacher,CourseToTeacher,]
        """
        self.nid = identifier.ClassesNid(Classes.db_path)
        self.name = name
        self.tuition = tuition
        self.schoolId = school_id
        self.courseToTeacherList = course_to_teacher_list


class Score:
    """
    成绩单
    """

    def __init__(self, student_id):
        self.studentId = student_id
        self.score_dict = {}

    def set(self, course_to_teacher_nid, number):
        self.score_dict[course_to_teacher_nid] = number

    def get(self, course_to_teacher_nid):
        return self.score_dict.get(course_to_teacher_nid, None)


class Student(BaseModel):
    db_path = settings.ADMIN_DB

    def __init__(self, name, age, classes_id):
        self.nid = identifier.StudentNid(Student.db_path)
        self.name = name
        self.age = age
        self.classesId = classes_id
        self.score = Score(self.nid)
        # self.score = {
        #     '# 体育 - Eric': 69,
        #     '语文id - Alexid': 69,
        # }
    @staticmethod
    def register():
        pass

service目录

admin_service.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-

CURRENT_USER_OBJECT = None
from src.models import School
from src.models import Course


def create_school():
    """
    创建学校
    :return:
    """
    name = input('请输入学校名称:')
    obj = School(name)
    obj.save()


def show_school():
    print('======学校======')
    school_list = School.get_all_list()
    for obj in school_list:
        print(obj.schoolName)


def create_teacher():
    """
    创建老师
    :return:
    """


def create_course():
    """
    创建课程
    :return:
    """
    print('======创建课程======')

    school_list = School.get_all_list()
    for k, obj in enumerate(school_list, 1):
        print(k, obj)
    sid = input('请选择学校:')
    sid = int(sid)
    school_obj = school_list[sid - 1]

    name = input('请输入课程名称:')
    price = input('请输入课程价格:')
    period = input('请输入课程周期:')

    obj = Course(name, price, period, school_obj.nid)
    obj.save()
    print('课程【%s】创建成功' % name)


def show_course():
    print('=====查看课程=====')
    course_list = Course.get_all_list()
    for item in course_list:
        print(item.courseName, item.coursePrice, item.coursePeriod,item.schoolId.get_obj_by_uuid().schoolName)


def create_course_teacher():
    """
    为课程分配老师
    :return:
    """


def create_class():
    """
    创建班级
    """


def show_choice():
    show = """
        1. 创建学校
        2. 查看学校
        3. 创建老师
        4. 创建课程
        5. 查看课程
        6. 创建老师课程对应关系
        7. 创建班级
    """
    print(show)


def main():
    choice_dict = {
        '0': show_choice,
        '1': create_school,
        '2': show_school,
        '3': create_teacher,
        '4': create_course,
        '5': show_course,
        '6': create_course_teacher,
        '7': create_class,
    }
    show_choice()
    while True:
        inp = input('请输入选项:')
        if inp not in choice_dict:
            print('选项错误,请重新选择')
            continue
        func = choice_dict[inp]
        result = func()

initialize_service.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import getpass
from src.models import Admin


def initialize():
    try:
        user = input('请输入初始化用户名:')
        # pwd = getpass.getpass('请输入初始化密码:')
        pwd = input('请输入初始化密码:')
        obj = Admin(user, pwd)
        obj.save()
        return True
    except Exception as e:
        print(e)


def main():
    show = """
        1. 初始化管理员账户
    """
    choice_dict = {
        '1': initialize
    }
    while True:
        print(show)
        choice = input('请输入操作选项:')
        if choice not in choice_dict:
            print('选项错误,请重新输入!!!')
        func = choice_dict[choice]
        ret = func()
        if ret:
            print('操作成功')
            return
        else:
            print('操作异常,请重新操作')

student_service.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-
from src.models import Student


class register:
    """
    学生注册
    """


class score:
    """
    学生查看个人成绩
    """


def main():
    pass

teacher_service.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-


def class_info():
    """
    查看班级信息
    """


def student_info():
    """
    查看学生信息
    """


def set_student_score():
    """
    设置学生分数
    """


def main():
    pass