python基础(五) 作业题

'''
角色:
    学生、管理员
功能:
    登陆 : 管理员和学生都可以登陆,且登陆之后可以自动区分身份
    选课 : 学生可以自由的为自己选择课程
    创建用户 : 选课系统是面向本校学生的,因此所有的用户都应该由管理员完成
    查看选课情况 :每个学生可以查看自己的选课情况,而管理员应该可以查看所有学生的信息
工作流程:
    登陆 :用户输入用户名和密码
    判断身份 :在登陆成果的时候应该可以直接判断出用户的身份 是学生还是管理员

    学生用户 :对于学生用户来说,登陆之后有三个功能
        1、查看所有课程
        2、选择课程
        3、查看所选课程
        4、退出程序
    管理员用户:管理员用户除了可以做一些查看功能之外,还有很多创建工作
        1、创建课程
        2、创建学生学生账号
        3、查看所有课程
        4、查看所有学生
        5、查看所有学生的选课情况
        6、退出程序
'''
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 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 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 check_all_select_course(self):  # 查看所有学生的选课情况(每个学生的选课情况)
        with open("user_course", 'r', encoding="utf8") as f:
            user_course = json.load(f)
            print(user_course)

    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 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 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.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]()

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()
        else:
            print('账号或者密码输入错误,请重新输入')

猜你喜欢

转载自www.cnblogs.com/mayugang/p/9968033.html