python选课系统作业,


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

分析:

角色:
管理员:
注册
登录
创建校区
创建老师
创建课程

老师:
登录
选择教授课程
查看课程下学生
修改学生的成绩

学生:
注册
登录
选择校区
选择课程
查看成绩

类:
抽出共有属性方法:Base
学校:School
学员:Student
课程:Course
讲师:Teacher

各个类属性和方法:

Base:
公用方法:
存数据:save
取数据:select

学校:
属性:
学校名字:school_name str
学校地址:school_addr str
开设的课程:course_list list

学员:
属性:
学员名字:student_name str
学员密码:student_pwd str
学员所属校区:school str
学员课程: course_list list
学员成绩: course_score dict

方法:
学员选择校区 choose_school(school_name)
列出所有校区的信息,学员选择
学员选择课程 choose_course(school_name)
学员必须先选择校区,列出该校区包含的课程
选择相应的课程,添加到学员课程列表中,并且将用户绑定给课程

讲师:
属性:
讲师名字:teacher_name str
讲师密码:teacher_pwd str
讲师课程: course_list list

方法:
讲师选择课程: choose_course(school_name, course_name)
先选择校区,列出该校区所有课程,讲师选择课程,如果没有选过,则添加
讲师修改学生的成绩:change_student_score(course, student_name)
通过自身对象中的课程列表,选择相应课程,调用课程下的所有学生信息,更改学生成绩

管理员:
属性:
管理员的名字:admin_name str
管理员的密码:admin_pwd str

方法:
管理员创建学校: create_school(school_name,school_addr)
直接输入学校的名字和地址,然后判断学校是否存在,不存在,则创建
管理员创建讲师: create_teacher(teacher_name)
直接创建讲师,密码为默认
管理员创建课程: create_course(school_name, course_name)
先选择校区,再创建课程名字,如果不存在,则创建这个课程


那个角色登陆了就执行那个角色的功能
进入到角色选项里面了可以随时退出


下面是程序说明程图
-------------------------------------------------------------

目录结构图

 

一 ,下面是业务逻辑代码

1.conf下settings.py下代码

1 import os 2 3 BASE_DIR = os.path.dirname(os.path.dirname(__file__)) 4 BASE_DB = os.path.join(BASE_DIR, 'db') View Code

 2.core下admin.py代码

1 from interface import student_interface, teacher_interface, admin_interface, common_interface 2 from lib import common 3 4 admin_info = { 5 'name': None 6 } 7 8 9 def admin_register(): 10 print('管理员注册') 11 if admin_info['name']: 12 print('管理员已经登陆了不能注册') 13 return 14 while True: 15 name = input('请输入名字:').strip() 16 password = input('请输入密码:').strip() 17 conf_password = input('请确认密码:').strip() 18 if password == conf_password: 19 flag, msg = admin_interface.admin_register_interface(name, password) 20 if flag: 21 print(msg) 22 break 23 else: 24 print(msg) 25 else: 26 print('两次密码不一致') 27 28 29 def admin_login(): 30 print('管理员登陆') 31 if admin_info['name']: 32 print('管理员已经登陆了不能重复登陆') 33 return 34 while True: 35 name = input('请输入名字: ').strip() 36 password = input('请输入密码: ').strip() 37 flag, msg = common_interface.login_interface(name, password, 'admin') 38 if flag: 39 admin_info['name'] = name 40 print(msg) 41 break 42 else: 43 print(msg) 44 45 46 @common.login_auth(user_type='admin') 47 def create_school(): 48 print('创建学校') 49 school_name = input('请输入学校名字: ').strip() 50 address = input('请输入学校地址: ').strip() 51 flag, msg = admin_interface.create_school_interface(admin_info['name'], school_name,address) 52 if flag: 53 print(msg) 54 else: 55 print(msg) 56 57 58 59 60 @common.login_auth(user_type='admin') 61 def create_teacher(): 62 print('创建老师') 63 name = input('请输入老师名字: ').strip() 64 flag, msg = admin_interface.create_teacher_interface(admin_info['name'], name) 65 if flag: 66 print(msg) 67 else: 68 print(msg) 69 70 71 72 73 @common.login_auth(user_type='admin') 74 def create_course(): 75 print('创建课程') 76 while True: 77 school_list = common_interface.check_all_schools() 78 if school_list: 79 for i, school in enumerate(school_list): 80 print('%s: %s' % (i, school)) 81 choose = input('请选择学校: ').strip() 82 if choose.isdigit(): 83 choose = int(choose) 84 if choose >= len(school_list): 85 continue 86 name = input('请输入课程名字:').strip() 87 flag, msg = admin_interface.create_course_interface(admin_info['name'], name, school_list[choose]) 88 if flag: 89 print(msg) 90 break 91 else: 92 print(msg) 93 94 95 96 97 func_dic = { 98 '1': admin_register, 99 '2': admin_login, 100 '3': create_school, 101 '4': create_teacher, 102 '5': create_course, 103 } 104 105 106 def admin_view(): 107 while True: 108 print(""" 109 1 注册 110 2 登陆 111 3 创建学校 112 4 创建老师 113 5 创建课程 114 """) 115 116 choice = input('请选择功能:').strip() 117 if choice == 'q' and 'Q': 118 break 119 120 if choice not in func_dic: 121 continue 122 123 func_dic[choice]() View Code

 

3.core下student.py代码

1 from interface import student_interface, common_interface 2 from lib import common 3 4 student_info = { 5 'name': None 6 } 7 8 9 def student_register(): 10 print('学生注册') 11 if student_info['name']: 12 print('已经登陆了不能在注册了') 13 return 14 while True: 15 name = input('请输入学生名字: ').strip() 16 password = input('请输入学生密码').strip() 17 conf_password = input('请确认密码: ').strip() 18 if password == conf_password: 19 flag, msg = student_interface.student_register_interface(name, password) 20 if flag: 21 print(msg) 22 break 23 else: 24 print(msg) 25 else: 26 print('两次密码不一致') 27 28 29 def student_login(): 30 print('学生登陆') 31 if student_info['name']: 32 print('已经登陆了不能重复登陆') 33 return 34 while True: 35 name = input('请输入学生名字: ').strip() 36 password = input('请输入学生密码: ').strip() 37 flag, msg = common_interface.login_interface(name, password, 'student') 38 if flag: 39 print(msg) 40 student_info['name'] = name 41 break 42 else: 43 print(msg) 44 45 46 @common.login_auth('student') 47 def choose_school(): 48 print('选择学校') 49 school_list = common_interface.check_all_schools() 50 if not school_list: 51 print('请联系管理员创建学校') 52 return 53 for i, school in enumerate(school_list): 54 print('%s; %s' % (i, school)) 55 choice = input('请选择学校: ').strip() 56 if choice.isdigit(): 57 choice = int(choice) 58 if choice < len(school_list): 59 flag, msg = student_interface.choice_school_interface(student_info['name'], school_list[choice]) 60 print(msg) 61 62 63 @common.login_auth('student') 64 def choose_course(): 65 print('选择课程') 66 flag, course_list = student_interface.get_can_choose_course_interface(student_info['name']) 67 if not flag: 68 print(course_list) 69 return 70 for i, course in enumerate(course_list): 71 print('%s: %s' % (i, course)) 72 choice = input('请选择课程').strip() 73 if choice.isdigit(): 74 choice = int(choice) 75 if choice < len(course_list): 76 _, msg = student_interface.choose_course_interface(student_info['name'], course_list[choice]) 77 print(msg) 78 else: 79 print('请选择已经存在的课程') 80 else: 81 print('必须要输入数字') 82 83 84 @common.login_auth('student') 85 def check_score(): 86 print('查看分数') 87 course_score_dict = student_interface.check_score_interface(student_info['name']) 88 print(course_score_dict) 89 90 91 92 func_dic = { 93 '1': student_register, 94 '2': student_login, 95 '3': choose_school, 96 '4': choose_course, 97 '5': check_score, 98 } 99 100 101 def student_view(): 102 while True: 103 print(""" 104 1 注册 105 2 登陆 106 3 选择学校 107 4 选择课程 108 5 查看成绩 109 """) 110 111 choice = input('请选择功能:').strip() 112 if choice == 'q' and 'Q': 113 break 114 if choice not in func_dic: 115 continue 116 func_dic[choice]() View Code

 

 

4.core下teacher.py代码

1 from interface import common_interface, teacher_interface 2 from lib import common 3 4 5 teacher_info = { 6 'name': None 7 } 8 9 10 def teacher_login(): 11 print('老师登陆') 12 if teacher_info['name']: 13 print('老师已经登陆了不能重复登陆') 14 return 15 while True: 16 name = input('请输入老师名字: ').strip() 17 password = input('请输入老师密码: ').strip() 18 flag, msg = common_interface.login_interface(name, password, 'teacher') 19 if flag: 20 print(msg) 21 teacher_info['name'] = name 22 break 23 else: 24 print(msg) 25 26 27 @common.login_auth('teacher') 28 def choose_teach_course(): 29 print('选择要教授的课程') 30 while True: 31 course_list = teacher_interface.get_all_course() 32 if not course_list: 33 print('现在还没有课程,请联系管理员创建课程') 34 break 35 else: 36 for i, course_list in enumerate(course_list): 37 print('%s; %s' % (i, course_list)) 38 choice = input('请选择课程: ').strip() 39 if choice.isdigit(): 40 choice = int(choice) 41 if choice >= len(course_list): continue 42 flag, msg = teacher_interface.choose_teacher_course_interface(teacher_info['name'], course_list[choice]) 43 if flag: 44 print(msg) 45 break 46 else: 47 print(msg) 48 else: 49 print('必须输入数字') 50 51 52 @common.login_auth('teacher') 53 def check_course(): 54 print('查看教授的课程') 55 course_list = teacher_interface.check_all_teacher_course(teacher_info['name']) 56 if course_list: 57 for course in course_list: 58 print(course) 59 else: 60 print('你还没有选择课程, 先去选择课程吧') 61 62 63 @common.login_auth('teacher') 64 def check_student(): 65 count = 0 66 print('查看学生') 67 course_list = teacher_interface.check_all_teacher_course(teacher_info['name']) 68 if course_list: 69 for i, course in enumerate(course_list): 70 print(i, course) 71 choice = input('选择要查看课程下的学生: ').strip() 72 if choice.isdigit(): 73 choice = int(choice) 74 if choice < len(course_list): 75 student_list = teacher_interface.check_student_in_course(course_list[choice]) 76 for j, student in enumerate(student_list): 77 count += j 78 print('%s : %s 一共有%s个学生' % (j, student, count)) 79 else: 80 print('请选择的课程') 81 else: 82 print('请输入数字') 83 84 85 @common.login_auth('teacher') 86 def modify_score(): 87 count = 0 88 print('查看学生') 89 course_list = teacher_interface.check_all_teacher_course(teacher_info['name']) 90 if course_list: 91 for i, course in enumerate(course_list): 92 print(i, course) 93 choice = input('选择要查看课程下的学生: ').strip() 94 if choice.isdigit(): 95 choice = int(choice) 96 if choice < len(course_list): 97 student_list = teacher_interface.check_student_in_course(course_list[choice]) 98 for j, student in enumerate(student_list): 99 count += j 100 print('%s : %s 一共有%s个学生' % (j, student, count)) 101 choose = input('请选择学生: ').strip() 102 if choose.isdigit(): 103 choose = int(choose) 104 if choose < len(student_list): 105 score = input('请输入学生要修改的的分数: ').strip() 106 if score.isdigit(): 107 score = int(score) 108 flag, msg = teacher_interface.modify_score(teacher_info['name'], 109 course_list[choice], 110 student_list[choose], score) 111 print(msg) 112 else: 113 print('分数必须输入数字') 114 else: 115 print('请选择存在的学生') 116 else: 117 print('请选择存在的课程') 118 else: 119 print('请输入数字') 120 else: 121 print('请选择课程') 122 123 124 func_dic = { 125 '1': teacher_login, 126 '2': choose_teach_course, 127 '3': check_course, 128 '4': check_student, 129 '5': modify_score, 130 } 131 132 133 def teacher_view(): 134 while True: 135 print(""" 136 1 登陆 137 2 选择课程 138 3 查看课程 139 4 查看学生 140 5 修改学生成绩 141 """) 142 143 choice = input('请选择功能:').strip() 144 if choice == 'q' and 'Q': 145 break 146 if choice not in func_dic: 147 continue 148 func_dic[choice]() View Code

 

5.core下src.py代码

1 from core import admin, student, teacher 2 3 func_dic = { 4 '1': admin.admin_view, 5 '2': student.student_view, 6 '3': teacher.teacher_view 7 8 } 9 10 11 def run(): 12 while True: 13 print(""" 14 1 管理员视图 15 2 学生视图 16 3 老师视图 17 """) 18 choice = input('请选择:').strip() 19 if choice not in func_dic: 20 continue 21 func_dic[choice]() View Code

 

二 ,下面是db文件代码

1.db_handler.py代码

1 from conf import settings 2 import os 3 import pickle 4 5 6 def save(obj): 7 path_dir = os.path.join(settings.BASE_DB, obj.__class__.__name__.lower()) 8 if not os.path.isdir(path_dir): 9 os.mkdir(path_dir) 10 path_obj = os.path.join(path_dir, obj.name) 11 with open(path_obj, 'wb') as f: 12 pickle.dump(obj, f) 13 14 15 def select(name, dir_type): 16 path_dir = os.path.join(settings.BASE_DB, dir_type) 17 if not os.path.isdir(path_dir): 18 os.mkdir(path_dir) 19 path_obj = os.path.join(path_dir, name) 20 if os.path.exists(path_obj): 21 with open(path_obj, 'rb')as f: 22 return pickle.load(f) 23 else: 24 return None View Code

2.modles.py

1 from db import db_handler 2 3 4 class BaseClass: 5 def save(self): 6 db_handler.save(self) 7 8 @classmethod 9 def get_obj_by_name(cls, name): 10 return db_handler.select(name, cls.__name__.lower()) 11 12 13 class Admin(BaseClass): 14 def __init__(self, name, password): 15 self.name = name 16 self.password = password 17 self.save() 18 19 20 def create_school(self, school_name, addr): 21 School(school_name, addr) 22 23 24 def create_course(self, name): 25 Course(name) 26 27 28 def create_teacher(self, name, password): 29 Teacher(name, password) 30 31 32 class Teacher(BaseClass): 33 def __init__(self, name, password): 34 self.name = name 35 self.password = password 36 self.course_list = [] 37 self.save() 38 39 def add_course(self, course_name): 40 self.course_list.append(course_name) 41 self.save() 42 43 def modify_score(self, student, course_name, score): 44 student.score[course_name] = score 45 student.save() 46 47 48 class Student(BaseClass): 49 def __init__(self, name, password): 50 self.name = name 51 self.password = password 52 self.score = {} 53 self.school = None 54 self.course_list = [] 55 self.save() 56 57 def get_school(self): 58 return self.school 59 60 def choose_school(self, school_name): 61 self.school = school_name 62 self.save() 63 64 def add_course(self, course_name): 65 self.course_list.append(course_name) 66 self.score[course_name] = 0 67 self.save() 68 69 70 71 72 class School(BaseClass): 73 def __init__(self, name, addr): 74 self.name = name 75 self.addr = addr 76 self.course_list = [] 77 self.save() 78 79 def add_course(self, course_name): 80 self.course_list.append(course_name) 81 self.save() 82 83 84 85 class Course(BaseClass): 86 def __init__(self, name): 87 self.name = name 88 self.student_list = [] 89 self.save() View Code

 

 

三 ,下面是接口api文件 interface

1.admin_interface

1 from db import modles 2 3 4 def admin_register_interface(name, password): 5 admin_obj = modles.Admin.get_obj_by_name(name) 6 if admin_obj: 7 return False, '管理员已经存在' 8 else: 9 modles.Admin(name, password) 10 return True, '注册成功' 11 12 13 def create_school_interface(admin_name, school_name, addr): 14 school_obj = modles.School.get_obj_by_name(school_name) 15 if school_obj: 16 return False, '学校已经存在' 17 else: 18 admin_obj = modles.Admin.get_obj_by_name(admin_name) 19 admin_obj.create_school(school_name, addr) 20 return True, '学校创建成功' 21 22 23 def create_teacher_interface(admin_name, name, password = '666'): 24 obj = modles.Teacher.get_obj_by_name(name) 25 if obj: 26 return False, '老师已经存在' 27 else: 28 admin_obj = modles.Admin.get_obj_by_name(admin_name) 29 admin_obj.create_teacher(name, password) 30 return True, '老师创建成功' 31 32 33 def create_course_interface(admin_name, course_name, school_name): 34 obj = modles.Course.get_obj_by_name(course_name) 35 if obj: 36 return False, '课程已经存在' 37 else: 38 admin_obj = modles.Admin.get_obj_by_name(admin_name) 39 admin_obj.create_course(course_name) 40 school_obj = modles.School.get_obj_by_name(school_name) 41 school_obj.add_course(course_name) 42 return True, '课程已经创建成功' View Code

 

2.common_interface

1 from db import modles 2 import os 3 from conf import settings 4 from lib import common 5 6 7 def login_interface(name, password, user_type): 8 if user_type == 'admin': 9 obj = modles.Admin.get_obj_by_name(name) 10 elif user_type == 'teacher': 11 obj = modles.Teacher.get_obj_by_name(name) 12 elif user_type == 'student': 13 obj = modles.Student.get_obj_by_name(name) 14 else: 15 return False, '没有这个用户类型' 16 if obj: 17 if obj.name == name and obj.password == password: 18 return True, '%s: %s 登陆成功' % (user_type, name) 19 else: 20 return False, '密码不对' 21 22 else: 23 return False, '用户不存在' 24 25 26 def check_all_schools(): 27 path = os.path.join(settings.BASE_DB, 'school') 28 return common.get_all_dir_obj(path) 29 30 31 def choose_course_interface(student_name, course_name): 32 obj = modles.Student.get_obj_by_name(student_name) 33 obj.add_course(course_name) 34 return True, '选课成功' View Code

 

3.student_interface

1 from db import modles 2 3 4 def student_register_interface(name, password): 5 student_obj = modles.Student.get_obj_by_name(name) 6 if student_obj: 7 return False, '学生已经存在' 8 else: 9 modles.Student(name, password) 10 return True, '注册成功' 11 12 13 def choice_school_interface(student_name, school_name): 14 student_obj = modles.Student.get_obj_by_name(student_name) 15 school = student_obj.get_school() 16 if not school: 17 student_obj.choose_school(school_name) 18 return True, '%s: 选择学校成功' % (student_name) 19 else: 20 return False, '已经选择学校了, 不能重复选择学校' 21 22 23 def get_can_choose_course_interface(student_name): 24 student_obj = modles.Student.get_obj_by_name(student_name) 25 if not student_obj.school: 26 return False, '你没有选择学校,请先选择学校' 27 school_obj = modles.School.get_obj_by_name(student_obj.school) 28 if school_obj.course_list: 29 return True, school_obj.course_list 30 else: 31 return False, "该学校下没有课程" 32 33 34 def choose_course_interface(student_name, course_name): 35 obj = modles.Student.get_obj_by_name(student_name) 36 obj.add_course(course_name) 37 return True, '选课成功' 38 39 40 def check_score_interface(student_name): 41 obj = modles.Student.get_obj_by_name(student_name) 42 return obj.score View Code

 

 

 

 

4.teacher_nterface

1 from db import modles 2 import os 3 from conf import settings 4 from lib import common 5 6 7 def get_all_course(): 8 path = os.path.join(settings.BASE_DB, 'course') 9 return common.get_all_dir_obj(path) 10 11 12 def choose_teacher_course_interface(teacher_name, course_name): 13 teacher_obj = modles.Teacher.get_obj_by_name(teacher_name) 14 if course_name not in teacher_obj.course_list: 15 teacher_obj.add_course(course_name) 16 return True, '选择课程成功' 17 else: 18 return False, '你已经选择了本门课程' 19 20 21 def check_all_teacher_course(teacher_name): 22 teacher_obj = modles.Teacher.get_obj_by_name(teacher_name) 23 return teacher_obj.course_list 24 25 26 def check_student_in_course(course_name): 27 course_obj = modles.Course.get_obj_by_name(course_name) 28 return course_obj.student_list 29 30 31 def modify_score(teacher_name, course_name, student_name, score): 32 teacher_obj = modles.Teacher.get_obj_by_name(teacher_name) 33 student_obj = modles.Student.get_obj_by_name(student_name) 34 teacher_obj.modify_score(student_obj, course_name, score) 35 return True, '修改分数成功' View Code

 

四 , 下面是lib代码

1.common下代码

1 import os 2 3 4 def login_auth(user_type): 5 from core import admin, student, teacher 6 7 def auth(func): 8 9 def wrapper(*args, **kwargs): 10 if user_type == 'admin': 11 if not admin.admin_info['name']: 12 admin.admin_login() 13 else: 14 return func(*args, **kwargs) 15 if user_type == 'teacher': 16 if not teacher.teacher_info['name']: 17 teacher.teacher_login() 18 else: 19 return func(*args, **kwargs) 20 if user_type == 'student': 21 if not student.student_info['name']: 22 student.student_login() 23 else: 24 return func(*args, **kwargs) 25 26 return wrapper 27 28 return auth 29 30 31 def get_all_dir_obj(path): 32 if os.path.exists(path): 33 obj_list = os.listdir(path) 34 return obj_list 35 else: 36 return None View Code

 

 

 

相关内容

    暂无相关文章

评论关闭