从“学生选课系统” 这几个字就可以看出来,我们最核心的功能其实只有 选课。
角色:
学生、管理员
功能:
登陆 : 管理员和学生都可以登陆,且登陆之后可以自动区分身份
选课 : 学生可以自由的为自己选择课程
创建用户 : 选课系统是面向本校学生的,因此所有的用户都应该由管理员完成
查看选课情况 :每个学生可以查看自己的选课情况,而管理员应该可以查看所有学生的信息
工作流程:
登陆 :用户输入用户名和密码
判断身份 :在登陆成果的时候应该可以直接判断出用户的身份 是学生还是管理员
学生用户 :对于学生用户来说,登陆之后有三个功能
1、查看所有课程
2、选择课程
3、查看所选课程
4、退出程序
管理员用户:管理员用户除了可以做一些查看功能之外,还有很多创建工作
1、创建课程
2、创建学生学生账号
3、查看所有课程
4、查看所有学生
5、查看所有学生的选课情况
6、退出程序
注意:
'''代码还有待完善,写了两遍emmmm'''
'''注意:在执行前先创建一个user.txt文件用于存放账号,还得进入里面编辑一行:admin|123|admin,
这个用作后面的管理员与用户区分。
还得创建两个空文件:class_all.txt 用于存放所有课程名
choice_class.txt 用于存放用户所选课程,注意还得在里面添加一个 {} 用于序列化
注意管理员为:admin pass:123'''
import os
import json
class User:
def __init__(self, name): # 传入用户名
self.name = name
def User_see(self): # 查看所有课程
with open('class_all.txt', encoding='utf-8') as file:
tmp = {} # 通过字典添加值
for index, i in enumerate(file.read().split('|'), 1):
print(index, i)
tmp.setdefault(str(index), i) # 把得到的结果放入到tmp中
return tmp # 把返回值return出去
def Choice_course(self): # 选择课程
tmp = self.User_see() # 调用查看课程的方法显示
Choice = input('请输入你选择的课程序号')
if Choice in tmp: # 判断选的课在不在列表里
with open('choice_class.txt', encoding='utf-8') as file:
chice_class = json.load(file) # 把chice_class.txt序列化出来,得到字典
if chice_class.get(self.name): # 判断用户和课程里有没有那个用户
chice_class.get(self.name).append(tmp[Choice]) # 添加到字典中
else:
chice_class.setdefault(self.name, [tmp[Choice]])
with open('choice_class.txt', encoding='utf-8', mode='w') as file:
json.dump(chice_class, file, ensure_ascii=False) # 再把chice_class值放入到文件中
else:
print('不在范围内')
def Selected(self): # 查看所选课程
with open('choice_class.txt', encoding='utf-8') as file:
user_course = json.load(file) # 把chice_class.txt序列化出来,得到字典
print(user_course.get(self.name))
def Exit(self): # 退出
exit()
def Show(self):
# see_all 这个字典是功能名和要执行的函数
see_all = {"查看课程": self.User_see, '选择课程': self.Choice_course, "查看所选课程": self.Selected, "退出": self.Exit}
while True:
tmp = {} # 修改see_all这个字典,保留索引和函数
for index, i in enumerate(see_all, 1):
print(index, i)
tmp[str(index)] = see_all[i]
Choice = input('请输入你选择') # 根据不同的选择执行不同的函数
if Choice in tmp:
tmp[Choice]()
class Admin:
def __init__(self, name):
self.name = name
def Create_course(self): # 创建课程
Choice = input('输入创建课程名称')
with open('class_all.txt', encoding='utf-8', mode='a') as file:
file.write(Choice + '|')
def Create_user(self): # 创建学生账号
stu_name = input('请输入学生账号:').strip()
stu_pwd = input('请输入学生密码:').strip()
# stu_pwd_md5 = get_pwd(stu_pwd)
with open('user.txt', encoding='utf-8', mode='a') as file:
file.write('
{}|{}'.format(stu_name, stu_pwd))
def Select_all_course(self): # 查看所有课程
with open('class_all.txt', encoding='utf-8') as f:
tmp = {}
for index, i in enumerate(f.read().split('|'), 1):
print(index, i)
tmp.setdefault(str(index), i)
return tmp
def Select_user_all(self): # 查看所有学生
with open('user.txt', encoding='utf-8') as file:
for i in file.readlines():
print(i.strip())
def Select_course_user(self): # 查看所有学生的选课情况
with open('choice_class.txt', encoding='utf-8') as file:
for i in file.readlines(): # 列出文件的每行类容
print(i)
def Exit(self): # 退出
exit()
def Show(self): # 宗上所述
see_all = {"创建课程": self.Create_course, '创建学生学生账号': self.Create_user, "查看所有课程": self.Select_all_course,
"查看所有学生": self.Select_user_all, "查看所有学生的选课情况": self.Select_course_user, '退出程序': self.Exit}
while True:
tmp = {}
for index, i in enumerate(see_all, 1):
print(index, i)
tmp[str(index)] = see_all[i]
Choice = input('请输入你选择')
if Choice in tmp:
tmp[Choice]()
user = {'user': None,
'status': False}
def login():
print('欢迎来到学员管理系统')
flag = True
while flag:
if user['status']:
print('你已经登录')
break
else:
username = input('输入用户名')
password = input('输入密码')
with open('user.txt', encoding='utf-8') as f1:
for i in f1:
p1 = i.strip().split('|')
p2 = len(p1)
if username == p1[0] and password == p1[1]:
if p2 == 2: # 用于判断是否为普通用户
user['user'] = username
user['status'] = True
flag = False
return username # 返回登录名
elif p2 == 3: # 判断是否为管理员
user['user'] = username
user['status'] = True
flag = False
return 2 # 返回2 用于下面判断
else:
print('输入的用户名或者密码错误,请再次输入')
continue
ret = login()
while True:
if ret == 2: # 执行管理员class
p1 = Admin('admin')
p1.Show()
else: # 执行用户class
p2 = User(ret)
p2.Show()