选课系统作业:
(一)
#学校
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
浙公网安备 33010602011771号