'''
从“学生选课系统” 这几个字就可以看出来,我们最核心的功能其实只有 选课。
角色:
学生、管理员
功能:
登陆 : 管理员和学生都可以登陆,且登陆之后可以自动区分身份
选课 : 学生可以自由的为自己选择课程
创建用户 : 选课系统是面向本校学生的,因此所有的用户都应该由管理员完成
查看选课情况 :每个学生可以查看自己的选课情况,而管理员应该可以查看所有学生的信息
工作流程:
登陆 :用户输入用户名和密码
判断身份 :在登陆成果的时候应该可以直接判断出用户的身份 是学生、讲师还是管理员
学生用户 :对于学生用户来说,登陆的工作几乎不变
1、查看所有课程
2、选择课程
3、查看所选课程
4、退出程序
管理员用户:管理员用户也可以做更多的事情
1、创建课程
2、创建学生学生账号
3、查看所有课程
4、查看所有学生
5、查看所有学生的选课情况
6、创建讲师
7、为讲师指定班级
8、创建班级
9、为学生指定班级
10、退出程序
讲师用户 :对于讲师用户来说,可以完成的功能如下
1、查看所有课程
2、查看所教班级
3、查看班级中的学生
4、退出程序
'''
import json
class Student: # 定义学生类
def __init__(self, name):
self.name = name
def check_course(self): # 查看所有课程
with open("course", 'r', encoding="utf-8") as f: # course是课程文件
tmp = {}
for index, i in enumerate(f.read().split("|"), 1):
print(index, i)
tmp[str(index)] = i
return tmp
def select_course(self): # 选择课程
tmp = self.check_course()
n = input("请选择你要选的课程的序号")
if n in tmp: # 判断选的课在不在课程列表里
with open("user_course", 'r', encoding="utf8") as f: # user_course是用户和所选课程的文件,
user_course = json.load(f) # 是一个字典, 键是用户名, 值是所选课的列表
if user_course.get(self.name): # 用户和课程里有没有那个用户
user_course.get(self.name).append(tmp[n])
else:
user_course.setdefault(self.name, [tmp[n]])
with open("user_course", 'w', encoding="utf-8") as f:
json.dump(user_course, f, ensure_ascii=False)
def check_select_course(self): # 查看所选课程
with open("user_course", 'r', encoding="utf8") as f:
user_course = json.load(f)
print(user_course.get(self.name))
def exit(self): # 退出程序
exit()
def show(self):
# student_func 这个字典是功能名和要执行的函数
student_func = {"查看课程": self.check_course, '选择课程': self.select_course, "查看所选课程": self.check_select_course,
"退出": self.exit}
while 1:
tmp = {} # 修改gongneng这个字典, 保留索引和函数
for index, i in enumerate(student_func, 1):
print(index, i)
tmp[str(index)] = student_func[i]
C = input("请输入你的选择") # 根据不同的选择, 执行不同的函数
if C in tmp:
tmp[C]()
class Administrator: # 定义管理员类
def __init__(self, name):
self.name = name
def create_course(self): # 创建课程
with open("course", 'r+', encoding="utf-8") as f:
flag = 0
name = input('请输入需创建课程的名称:').strip()
tmp = f.read().split("|")
for i in range(len(tmp)):
if tmp[i] == name:
print('您创建的课程已经存在')
flag = 1
break
else:
continue
if flag == 0:
f.write('|' + name)
print('恭喜你课程创建成功')
def create_student_account(self): # 创建学生账号
with open('user', encoding="utf-8", mode='r+') as f:
name = input("请输入学生的姓名:").strip()
password = input("请输入学生的密码:").strip()
tmp = f.readlines()
while 1:
flag = 0
for i in range(len(tmp)):
tmp[i] = tmp[i].split("|")
if tmp[i][0] == name:
print('您创建的用户名已存在,请重新输入')
flag = 1
break
else:
continue
if flag == 0:
f.write(name + '|' + password + '|' + 'S' + '\n')
print("恭喜你,学生用户创建成功")
break
else:
break
def check_all_course(self): # 查看所有课程
with open("course", 'r', encoding="utf-8") as f: # course是课程文件
for index, i in enumerate(f.read().split("|"), 1):
print(index, i)
def check_all_student(self): # 查看所有学生
with open('user', encoding="utf-8", mode='r+') as f:
l1 = []
tmp = f.readlines()
for i in range(len(tmp)):
tmp[i] = tmp[i].split("|")
l1.append(tmp[i][0])
for i in range(len(l1)):
print(l1[i])
def check_all_select_course(self): # 查看所有学生的选课情况(每个学生的选课情况)
with open("user_course", 'r', encoding="utf8") as f:
user_course = json.load(f)
print(user_course)
def create_teacheer(self): # 创建讲师
with open('user', encoding="utf-8", mode='r+') as f:
name = input("请输入讲师的姓名:").strip()
password = input("请输入讲师的密码:").strip()
tmp = f.readlines()
while 1:
flag = 0
for i in range(len(tmp)):
tmp[i] = tmp[i].split("|")
if tmp[i][0] == name:
print('您创建的用户名已存在,请重新输入')
flag = 1
break
else:
continue
if flag == 0:
f.write(name + '|' + password + '|' + 'T' + '\n')
print("恭喜你,讲师用户创建成功")
break
else:
break
def create_class(self): # 创建班级
with open("class", 'r+', encoding="utf-8") as f:
flag = 0
name = input('请输入需创建班级的名称:').strip()
tmp = f.read().split("|")
for i in range(len(tmp)):
if tmp[i] == name:
print('您创建的班级已经存在')
flag = 1
break
else:
continue
if flag == 0:
f.write('|' + name)
print('恭喜你班级创建成功')
def assign_class_teachaer(self): # 为讲师指定班级
with open('user', encoding="utf-8", mode='r+') as f:
l1 = []
tmp = f.readlines()
for i in range(len(tmp)):
tmp[i] = tmp[i].strip().split("|")
if tmp[i][2] == 'T':
l1.append(tmp[i][0])
print(l1)
name = input("请选择需要分配的讲师:").strip()
if name in l1:
class_name = input("请输入分配的班级:").strip()
with open("teacher_class", 'r', encoding="utf8") as f: # teacher_class是保存教师和课程的关系表。
teacher_class = json.load(f)
if teacher_class.get(name): # 用户和课程里有没有那个用户
if teacher_class.get(class_name):
print('教师%s已经分配了%s' % (name, class_name))
else:
teacher_class.get(name).append(class_name)
else:
teacher_class.setdefault(name, [class_name])
with open("teacher_class", 'w', encoding="utf-8") as f:
json.dump(teacher_class, f, ensure_ascii=False)
print('恭喜您,讲师分配课程成功')
else:
print('您输入的讲师姓名错误,请重新输入。')
def assign_class_student(self): # 为学生指定班级
with open('user', encoding="utf-8", mode='r+') as f:
l1 = []
tmp = f.readlines()
for i in range(len(tmp)):
tmp[i] = tmp[i].strip().split("|")
if tmp[i][2] == 'S':
l1.append(tmp[i][0])
print(l1)
name = input("请选择需要分配的学生:").strip()
if name in l1:
class_name = input("请输入分配的班级:").strip()
with open("student_class", 'r', encoding="utf8") as f: # teacher_class是保存教师和课程的关系表。
student_class = json.load(f)
if student_class.get(name): # 用户和课程里有没有那个用户
if student_class.get(class_name):
print('学生%s已经分配了%s' % (name, class_name))
else:
student_class.get(name).append(class_name)
else:
student_class.setdefault(name, [class_name])
with open("student_class", 'w', encoding="utf-8") as f:
json.dump(student_class, f, ensure_ascii=False)
print('恭喜您,学生分配课程成功')
else:
print('您输入的学生姓名错误,请重新输入。')
def exit(self): # 退出程序
exit()
def show(self):
# administrator_func 这个字典是功能名和要执行的函数
administrator_func = {"创建课程": self.create_course, '创建学生账号': self.create_student_account,
"查看所有课程": self.check_all_course, '查看所有学生': self.check_all_student,
'查看所有学生的选课情况': self.check_all_select_course, '创建讲师': self.create_teacheer,
'为讲师指定班级': self.assign_class_teachaer, '创建班级': self.create_class,
'为学生指定班级': self.assign_class_student, "退出": self.exit
}
while 1:
tmp = {} # 修改gongneng这个字典, 保留索引和函数
for index, i in enumerate(administrator_func, 1):
print(index, i)
tmp[str(index)] = administrator_func[i]
C = input("请输入你的选择") # 根据不同的选择, 执行不同的函数
if C in tmp:
tmp[C]()
class Teacher: # 定义讲师类
def __init__(self, name):
self.name = name
def check_all_course(self): # 定义查看所有课程
with open("course", 'r', encoding="utf-8") as f: # course是课程文件
for index, i in enumerate(f.read().split("|"), 1):
print(index, i)
def check_assign_class(self): # 定义查看讲师所教班级
with open("teacher_class", 'r', encoding="utf-8") as f:
b = json.load(f)
if b.get(self.name):
print(b[self.name])
else:
print('您好,您未分配班级。')
def check_class_studet(self): # 定义查看班级中的学生
with open("teacher_class", 'r', encoding="utf-8") as f:
a = json.load(f)
if a.get(self.name):
b = a[self.name]
with open("student_class", 'r', encoding="utf-8") as f1:
c = json.load(f1)
if c.get(self.name):
l2 = []
for k in a:
if c[k] == b:
l2.append(k)
print(l2)
else:
print('该班级中还未分配学生')
else:
print('您好,您还未分配班级')
def exit(self): # 退出程序
exit()
def show(self):
# student_func 这个字典是功能名和要执行的函数
student_func = {"查看所有课程": self.check_all_course, '查看讲师所教班级': self.check_assign_class,
"查看班级中的学生": self.check_class_studet, "退出": self.exit}
while 1:
tmp = {} # 修改gongneng这个字典, 保留索引和函数
for index, i in enumerate(student_func, 1):
print(index, i)
tmp[str(index)] = student_func[i]
C = input("请输入你的选择") # 根据不同的选择, 执行不同的函数
if C in tmp:
tmp[C]()
with open('user', encoding='utf-8', mode='r') as f:
tmp = f.readlines()
while 1:
name = input("请输入姓名:").strip()
password = input("请输入密码:").strip()
for i in range(len(tmp)):
l2 = tmp[i].strip().split("|")
# print(l2)
if l2[0] == name and l2[1] == password and l2[2] == 'S':
print('%s恭喜你登录成功' % (name))
s = Student(name)
s.show()
elif l2[0] == name and l2[1] == password and l2[2] == 'A':
print('%s恭喜你登录成功' % (name))
a = Administrator(name)
a.show()
elif l2[0] == name and l2[1] == password and l2[2] == 'T':
print('%s恭喜你登录成功' % (name))
t = Teacher(name)
t.show()
else:
print('账号或者密码输入错误,请重新输入')