import pickle
import os
class School:
def __init__(self, city):
self.city = city
self.courses = {}
self.teacheres = {}
self.students = {}
self.classes = {}
class Student:
def __init__(self, name, belong_school, belong_class):
self.name = name
self.password = '123456'
self.school = belong_school
self.classes = belong_class
def check_course(self):
all_classes = self.check_class()
print(all_classes.courses)
def check_class(self):
print(self.classes)
return self.classes
class Course:
def __init__(self, name, period, price, schoolobj):
self.name = name
self.period = period
self.price = price
self.school = schoolobj
class Teacher:
def __init__(self, name, schoolobj):
self.username = name
self.password = "123456"
self.school = schoolobj
def check_class(self):
if os.path.exists('classes.pkl'):
teach_classes = []
with open('classes.pkl', 'rb') as f_teacher:
classes_ret = pickle.load(f_teacher)
all_teachers = classes_ret.teachers
for key in all_teachers:
if all_teachers[key] == self.username:
teach_classes.append(classes_ret.name)
print('你教学的班级: ', teach_classes)
f.close()
return teach_classes
else:
print('目前管理员还未创建班级,请通知管理员创建班级')
def check_courses(self):
if os.path.exists('classes.pkl'):
teach_courses = []
with open('classes.pkl', 'rb') as f_teachers:
classes_ret = pickle.load(f_teachers)
all_teachers = classes_ret.teachers
for key in all_teachers:
if all_teachers[key] == self.username:
teach_courses.append(classes_ret.name)
print('你教学的课程: ', teach_courses)
f.close()
else:
print('目前管理员还未创建课程,请通知管理员创建课程')
def check_students(self):
# 先找到自己负责的班级
# 然后列出该班级中所有的学生
result = {}
all_classes = self.check_class()
with open('students.pkl', 'rb') as f:
all_students = pickle.load(f)
for classes in all_classes:
result[classes] = []
for student in all_students:
if student.classes == classes:
result[classes].append(student.name)
return result
def change_score(self, student, course, score):
# 从pickle文件中找到该学生,然后修改其成绩
all_students = self.check_students()
for st in all_students:
if st == student:
# {"name": {"linux": 80, "python": 90}}
st[course][score] = score
break
print("修改成功!")
class Classes:
def __init__(self, name, courses, teacheres):
self.name = name
self.courses = courses
self.teachers = teacheres
class Admin:
def __init__(self, namename, password):
self.namename = namename
self.password = password
@staticmethod
def create_school(city):
school = School(city)
with open('school.pkl', 'wb') as f:
pickle.dump(school, f)
print('{}校区创建成功!'.format(city))
@staticmethod
def create_teacher(name, password):
teacherobj = Teacher(name, password)
with open('teacher.pkl', 'wb') as f:
pickle.dump(teacherobj, f)
print('{}老师创建成功'.format(name))
@staticmethod
def create_class(classname, course, teacher):
classobj = Classes(classname, course, teacher)
with open('classes.pkl', 'wb') as f:
pickle.dump(classobj, f)
f.close()
print('{}班级创建成功!'.format(classname))
@staticmethod
def create_course(coursename, period, price, school_name):
courseobj = Course(coursename, period, price, school_name)
with open('courses.pkl', 'wb') as f:
pickle.dump(courseobj, f)
f.close()
price('{}课程创建成功!'.format(coursename))
if __name__ == '__main__':
print("=========================================")
print("========== 欢迎使用学校管理系统 =========")
print("=========================================")
# 启动时,初始化管理员的账号密码,然后告诉管理员,让他们自己去操作即可
admins_dic = {}
admin1 = Admin('admin1', '123456')
admin2 = Admin('admin2', '123456')
admins_dic['admin1'] = admin1
admins_dic['admin2'] = admin2
with open('admins.pkl', 'wb') as f:
pickle.dump(admins_dic, f)
f.close()
while True:
print("1.管理员")
print("2.讲师")
print("3.学员")
print("退出请输入Exit!")
option_id = input("请选择你的角色: ")
if option_id == "1":
i = 0
while i < 3:
username = input('请输入账号: ')
password = input('请输入密码: ')
if username == 'admin' and password == '123456':
print('管理员{}登录成功,恭喜!'.format(username))
while True:
print("1. 创建学校")
print("2. 创建课程")
print("3. 创建讲师")
print("4. 创建班级")
print("5. 创建学员")
print("6. 退出")
op_id = input("请选择你要进行的操作: ")
# 这个地方应该调用对象的方法来操作
if op_id == "1":
school_dic = {}
while True:
city_name = input("请输入校区所在地: ")
school = School(city_name)
school_dic[city_name] = school
print("{}校区创建成功!".format(city_name))
ret = input("你还要创建学校吗? Y/N: ")
if ret.lower() == 'n':
break
with open('school.pkl', 'wb') as f:
pickle.dump(school_dic, f)
f.close()
elif op_id == "2":
courses_dic = {}
while True:
course_name = input("请输入课程名: ")
course_price = input("请输入课程价格: ")
course_period = input("请输入课程周期: ")
print("当前的学校有: ")
with open('school.pkl', 'rb') as f:
ret = pickle.load(f)
for key in ret:
print(key)
course_school = input("请输入课程所属学校: ")
course = Course(course_name, course_period, course_price, course_school)
courses_dic[course_name] = course
print("{}课程创建成功!".format(course_name))
ret = input("你还要创建课程吗? Y/N: ")
if ret.lower() == 'n':
break
f.close()
with open('courses.pkl', 'wb') as f:
pickle.dump(courses_dic, f)
f.close()
elif op_id == "3":
teachers_dic = {}
while True:
teacher_name = input("请输入讲师的名字: ")
print("当前的学校有: ")
with open('school.pkl', 'rb') as f:
ret = pickle.load(f)
for key in ret:
print(key)
teacher_school_name = input("请输入讲师所属学校: ")
teacher_school_obj = ret[teacher_school_name]
teacher = Teacher(teacher_name, teacher_school_obj)
teachers_dic[teacher_name] = teacher
print("{}讲师创建成功!".format(teacher_name))
ret = input("你还要创建讲师吗? Y/N: ")
if ret.lower() == 'n':
break
f.close()
with open('teachers.pkl', 'wb') as f:
pickle.dump(teachers_dic, f)
f.close()
elif op_id == "4":
classes_dic = {}
teacher_list = []
courses_list = []
while True:
class_name = input("请输入班级的名字: ")
print("当前的讲师有: ")
with open('teachers.pkl', 'rb') as f:
ret = pickle.load(f)
for key in ret:
print(key)
teacher_name = input("请问要让哪位/哪些讲师负责该班级(多个讲师以逗号隔开): ")
if ',' in teacher_name:
for teacher in teacher_name.split(','):
if teacher != '':
techer_obj = ret[teacher]
teacher_list.append(techer_obj)
else:
techer_obj = ret[teacher_name]
teacher_list.append(techer_obj)
f.close()
print("当前的课程有: ")
with open('courses.pkl', 'rb') as f:
ret = pickle.load(f)
for key in ret:
print(key)
courses_name = input("请问要让该班级学哪些课程(多个课程以逗号隔开): ")
if ',' in courses_name:
for course in courses_name.split(','):
if course != '':
course_obj = ret[course]
courses_list.append(course_obj)
else:
course_obj = ret[courses_name]
courses_list.append(course_obj)
f.close()
class_obj = Classes(class_name, courses_list, teacher_list)
classes_dic[class_name] = class_obj
print("{}班级创建成功!".format(class_name))
ret = input("你还要创建班级吗? Y/N: ")
if ret.lower() == 'n':
break
f.close()
with open('classes.pkl', 'wb') as f:
pickle.dump(classes_dic, f)
f.close()
elif op_id == "5":
students_dic = {}
while True:
student_name = input("请输入学生的名字: ")
print("当前的学校有: ")
with open('school.pkl', 'rb') as f:
ret = pickle.load(f)
for key in ret:
print(key)
student_school_name = input("请输入学生所属学校: ")
student_school_obj = ret[student_school_name]
f.close()
print("当前的班级有: ")
with open('classes.pkl', 'rb') as f:
ret = pickle.load(f)
for key in ret:
print(key)
student_class_name = input("请输入学生所属班级: ")
student_class_obj = ret[student_class_name]
f.close()
student = Student(student_name, student_school_obj, student_class_obj)
students_dic[student_name] = student
print("{}学生创建成功!".format(student_name))
ret = input("你还要创建学生吗? Y/N: ")
if ret.lower() == 'n':
break
f.close()
with open('students.pkl', 'wb') as f:
pickle.dump(students_dic, f)
f.close()
elif op_id == "6":
break
else:
print("你的选择无效,请重新选择!")
print('账号密码错误, 请重试!')
i += 1
print('剩余次数: {}'.format(3 - i))
break
elif option_id == "2":
i = 0
while i < 3:
username = input('请输入账号: ')
password = input('请输入密码: ')
if (username == 'yang' or username == 'wang') and password == '123':
print('讲师{}登录成功,恭喜!'.format(username))
with open('teachers.pkl', 'rb') as f:
ret = pickle.load(f)
teacher_obj = ret[username]
while True:
print("1. 查看班级")
print("2. 查看课程")
print("3. 查看学员")
print("4. 修改学员分数")
print("5. 退出")
op_id = input("请选择你要进行的操作: ")
if op_id == "1":
teacher_obj.check_class()
elif op_id == "2":
teacher_obj.check_courses()
elif op_id == "3":
teacher_obj.check_students()
elif op_id == "4":
teacher_obj.change_score()
elif op_id == "5":
break
else:
print("你的输入无效,请重新输入")
break
print('账号密码错误, 请重试!')
i += 1
print('剩余次数: {}'.format(3 - i))
break
elif option_id == "3":
i = 0
while i < 3:
username = input('请输入账号: ')
password = input('请输入密码: ')
if (username == 'zhangsan' or username == 'lisi') and password == '123':
print('学员{}登录成功,恭喜!'.format(username))
with open('students.pkl', 'rb') as f:
ret = pickle.load(f)
student_obj = ret[username]
while True:
print("1. 查看班级")
print("2. 查看课程")
print("3. 退出")
op_id = input("请选择你要进行的操作: ")
if op_id == "1":
student_obj.check_class()
elif op_id == "2":
student_obj.check_courses()
elif op_id == "3":
break
else:
print("你的输入无效,请重新输入")
break
print('账号密码错误, 请重试!')
i += 1
print('剩余次数: {}'.format(3 - i))
break
elif option_id.lower() == 'exit':
break
else:
continue
# 管理员需要先登录,然后创建相关的数据(管理员的账号密码目前设置成初始化)
# 其他角色才能做后续的操作(其他角色的也是如此)