zoukankan      html  css  js  c++  java
  • 学员选课系统(进阶)

    从“学生选课系统” 这几个字就可以看出来,我们最核心的功能其实只有 选课。
    角色:
        学生、管理员
    功能:
        登陆 : 管理员和学生都可以登陆,且登陆之后可以自动区分身份
        选课 : 学生可以自由的为自己选择课程
        创建用户 : 选课系统是面向本校学生的,因此所有的用户都应该由管理员完成
        查看选课情况 :每个学生可以查看自己的选课情况,而管理员应该可以查看所有学生的信息
    工作流程:
        登陆 :用户输入用户名和密码
        判断身份 :在登陆成果的时候应该可以直接判断出用户的身份 是学生还是管理员
    
        学生用户 :对于学生用户来说,登陆之后有三个功能
            1、查看所有课程
            2、选择课程
            3、查看所选课程
            4、退出程序
        管理员用户:管理员用户除了可以做一些查看功能之外,还有很多创建工作
            1、创建课程
            2、创建学生学生账号
            3、查看所有课程
            4、查看所有学生
            5、查看所有学生的选课情况
            6、退出程序
    '''直接运行即可,注意细节'''
    '''注意管理员为自动创建,user=admin, pass=123,直接登录即可'''
    
    import os
    import json
    
    
    class User:
        def __init__(self, name):  # 传入用户名
            self.name = name
    
        dic = {"查看课程": 'User_see', '选择课程': 'Choice_course', "查看所选课程": 'Selected', "退出": 'Exit'}
    
        def User_see(self):  # 查看所有课程
            with open('class_all.txt', encoding='utf-8') as file:
                tmp = {}  # 通过字典添加值
                for index, i in enumerate(file.read().split('|')[:-1], 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('欢迎下次再来。。。')
    
    
    class Admin:
        dic = {"创建课程": 'Create_course', '创建学生学生账号': 'Create_user',
               "创建讲师账号": 'Create_teacher', "为讲师指定班级": "Appoint_class",
               "为学生指定班级": "Student_class", "查看所有课程": 'Select_all_course',
               "创建班级": "Create_class", "查看所有学生": 'Select_user_all',
               "查看所有学生的选课情况": 'Select_course_user', '退出程序': 'Exit'}
    
        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 + '|')
            print('创建{}课程成功'.format(Choice))
    
        def Create_user(self):  # 创建学生账号
            stu_name = input('请输入学生账号:').strip()
            stu_pwd = input('请输入学生密码:').strip()
            with open('user.txt', encoding='utf-8', mode='a') as file:
                file.write('
    {}|{}|student'.format(stu_name, stu_pwd))
            print('{}同学创建成功'.format(stu_name))
    
        def Create_teacher(self):  # 创建讲师账号
            stu_name = input('请输入讲师账号:').strip()
            stu_pwd = input('请输入讲师密码:').strip()
            with open('user.txt', encoding='utf-8', mode='a') as file:
                file.write('
    {}|{}|Teacher'.format(stu_name, stu_pwd))
            with open('teacher.txt', encoding='utf-8', mode='a') as file:  # 创建完成后把name写入teacher.txt文件中
                file.write(stu_name + '|')
            print('{}讲师创建成功'.format(stu_name))
    
        def Appoint_class(self):  # 为讲师指定班级
            with open('Create_class.txt', encoding='utf-8') as file:
                p1 = json.load(file)  # 把班级文件序列化出来
            tmp1 = []
            if os.path.exists('teacher.txt'):  # 判断文件是否存在
                with open('teacher.txt', encoding='utf-8', mode='r') as file:
                    for i in file.readlines():
                        tmp1 = i.strip().split('|')[:-1]  # 把值添加到tmp1列表中
                for i, index in enumerate(tmp1, 1):  # 显示老师名称
                    print(i, index)
                for i, index in enumerate(p1, 1):  # 显示班级名称
                    print(i, index)
                choice_tracher = int(input('输入你选择的讲师')) - 1
                with open('teacher_class.txt', encoding='utf-8', mode='r') as file:
                    l1 = json.load(file)
                if p1 == []:  # 判断是否有班级存在
                    print('如果要添加则请先创建班级')
                else:
                    choice_class = int(input('输入你选择的班级')) - 1
                    if l1.get(tmp1[choice_tracher]):  # 判断l1字典中是否为新用户
                        l1.get(tmp1[choice_tracher]).append(p1[choice_class])  # 追加到后面list中
                    else:
                        l1.setdefault(tmp1[choice_tracher], [p1[choice_class]])  # 单个key value
                    l1[tmp1[choice_tracher]] = list(set(l1[tmp1[choice_tracher]]))  # 去重
                    with open('teacher_class.txt', encoding='utf-8', mode='w') as file:
                        json.dump(l1, file, ensure_ascii=False)  # 写入文件
                    print('{}老师指定{}成功'.format(tmp1[choice_tracher], p1[choice_class]))
            else:
                print('清先创建讲师')
    
        def Student_class(self):  # 为学生指定班级
            p1 = self.Select_user_all()  # 调用Select_user_all方法,查看出有哪些学生,p1为列表
            if p1 == []:  # 是否有学生存在
                print('清先创建学生后在来添加')
            else:
                if os.path.exists('Create_class.txt'):
                    print('所有班级为:')
                    with open('Create_class.txt', encoding='utf-8') as file:
                        tmp1 = json.load(file)
                        for i, index in enumerate(tmp1, 1):
                            print(i, index)
                    user = int(input('输入你添加的学生序号')) - 1
                    student = int(input('输入你添加的班级序号')) - 1
                    with open('student_class.txt', encoding='utf-8', mode='r') as file:
                        l1 = json.load(file)
    
                    if l1.get(tmp1[student]):  # 判断l1中key是否有此用户
                        l1.get(tmp1[student]).append(p1[user])
                    else:
                        l1.setdefault(tmp1[student], [p1[user]])
                    l1[tmp1[student]] = list(set(l1[tmp1[student]]))  # 去重
                    with open('student_class.txt', encoding='utf-8', mode='w') as file:
                        json.dump(l1, file, ensure_ascii=False)
                    print('{}添加{}学生成功'.format(tmp1[student], p1[user]))
    
                else:
                    print('请先创建班级后再来添加')
    
        def Create_class(self):  # 创建班级
            Test_class = input('输入你创建班级的名称如(-年级-班)')
            if os.path.exists('Create_class.txt'):  # 判断文件是否存在
                with open('Create_class.txt', encoding='utf-8') as file:
                    p1 = json.load(file)
                    p1.append(Test_class)  # 添加班级
    
            else:
                with open('Create_class.txt', encoding='utf-8', mode='w') as file:
                    file.write('[]')  # 创建文件,添加 []
                with open('Create_class.txt', encoding='utf-8') as file:
                    p1 = json.load(file)
                    p1.append(Test_class)
    
            with open('Create_class.txt', encoding='utf-8', mode='w') as file:
                json.dump(p1, file, ensure_ascii=False)  # 写入文件
            print('创建{}成功'.format(Test_class))
            return p1  # 把列表返回出去
    
        def Select_all_course(self):  # 查看所有课程
            print('查看的课程为')
            with open('class_all.txt', encoding='utf-8') as f:
                tmp = {}
                for index, i in enumerate(f.read().split('|')[:-1], 1):
                    print(index, i, )
                    tmp.setdefault(str(index), i)
                return tmp  # 方便后面方法使用
    
        def Select_user_all(self):  # 查看所有学生
            student = []
            with open('user.txt', encoding='utf-8') as file:
                print('学生用户为:')
                for i, index in enumerate(file.readlines()):
                    if index.strip().split('|')[-1] == 'student':  # 取出学生
                        print(i, index.strip().split('|')[0])
                        student.append(index.strip().split('|')[0])
            return student
    
        def Select_course_user(self):  # 查看所有学生的选课情况
            if os.path.exists('choice_class.txt'):
                with open('choice_class.txt', encoding='utf-8') as file:
                    for i in file.readlines():  # 列出文件的每行类容
                        print(i)
            else:
                print('清先登录学生账号添加课程后查看')
    
        def Exit(self):  # 退出
            exit('欢迎下次再来。。。')
    
    
    class Teacher:
        def __init__(self, name):
            self.name = name
    
        dic = {'查看所有课程': 'Select_choice', '查看所教班级': 'Select_student',
               '查看班级中的学生': 'Select_class_student', '退出': 'Exit'}
    
        def Select_choice(self):  # 查看所有课程
            if os.path.exists('class_all.txt'):  # 判断课程是否存在
                with open('class_all.txt', encoding='utf-8') as file:
                    for i in file.readlines():
                        print(i.strip().split('|')[:-1])
    
            else:
                print('请先登录管理员创建课程')
    
        def Select_student(self):  # 查看所教班级
            if os.path.exists('teacher_class.txt'):
                with open('teacher_class.txt', encoding='utf-8') as file:
                    tmp1 = json.load(file).get(self.name)
                    print(tmp1)
                    return tmp1
            else:
                print('目前暂无,请登录管理员添加')
    
        def Select_class_student(self):  # 查看班级中的学生
            if os.path.exists('teacher_class.txt') and os.path.exists('student_class.txt'):
                tmp = self.Select_student()  # 先调用Select_student方法查看,tmp得到返回值
                with open('student_class.txt', encoding='utf-8') as file:
                    student = json.load(file)
                if tmp == None:
                    print('当前老师班级没有学生')
                else:
                    for i in tmp:
                        if student.get(i):
                            print(i, student[i])
    
            else:
                print('目前暂无,请登录管理员添加')
    
        def Exit(self):  # 退出
            exit('欢迎下次再来。。。')
    
    
    class login_Test:  # 判断登录账户
        print('欢迎来到学员管理系统')
    
        def __init__(self, username, password):
            self.username = username
            self.password = password
    
        def login(self):
            with open('user.txt', encoding='utf-8') as file:
                for i in file.readlines(): # 取出每一行
                    '''判断用户密码是否正确'''
                    if self.username == i.strip().split('|')[0] and self.password == i.strip().split('|')[1]:
                        if i.strip().split('|')[-1] == 'admin':
                            return 'admin'
                        elif i.strip().split('|')[-1] == 'student':
                            return 'student'
                        elif i.strip().split('|')[-1] == 'Teacher':
                            return 'teacher'
                else:
                    print('用户名密码错误')
    
    
    def log_status():  # 方便后面调用
        tmp = []
        username = input('请输入用户名')
        password = input('请输入密码')
        p1 = login_Test(username, password)
        tmp.append(username)
        tmp.append(p1.login())
        return tmp
    
    
    def func(class_func):
        tmp = {}
        while 1:
            for index, i in enumerate(class_func.dic, 1):
                print(index, i)
                tmp.setdefault(str(index), class_func.dic[i])
            p2 = input("输入你选择的序号")
            getattr(class_func, tmp[p2])()
    
    '''用于文件创建'''
    if os.path.exists('user.txt') == False:
        with open('user.txt', encoding='utf-8', mode='w') as file:
            file.write('admin|123|admin')
    if os.path.exists('teacher_class.txt') == False:
        with open('teacher_class.txt', encoding='utf-8', mode='w') as file:
            file.write('{}')
    if os.path.exists('choice_class.txt') == False:
        with open('choice_class.txt', encoding='utf-8', mode='w') as file:
            file.write('{}')
    if os.path.exists('Create_class.txt') == False:
        with open('Create_class.txt', encoding='utf-8', mode='w') as file:
            file.write('[]')
    if os.path.exists('class_all.txt') == False:
        with open('class_all.txt', encoding='utf-8', mode='w') as file:
            pass
    if os.path.exists('student_class.txt') == False:
        with open('student_class.txt', encoding='utf-8', mode='w') as file:
            file.write('{}')
    login_status = log_status()  # class_all.txt
    while True:
        if login_status[1] == 'student':
            p1 = User(login_status[0])
            func(p1)
    
        elif login_status[1] == 'admin':
            p1 = Admin(login_status[0])
            func(p1)
        elif login_status[1] == 'teacher':
            p1 = Teacher(login_status[0])
            func(p1)
        else:
            break


    努力到无能为力,拼搏到感动自己。
  • 相关阅读:
    jQuery EasyUI API 中文文档 可调整尺寸
    jQuery EasyUI API 中文文档 链接按钮(LinkButton)
    jQuery EasyUI API 中文文档 手风琴(Accordion)
    jQuery EasyUI API 中文文档 表单(Form)
    jQuery EasyUI API 中文文档 组合(Combo)
    jQuery EasyUI API 中文文档 布局(Layout)
    jQuery EasyUI API 中文文档 拆分按钮(SplitButton)
    jQuery EasyUI API 中文文档 菜单按钮(MenuButton)
    jQuery EasyUI API 中文文档 搜索框
    jQuery EasyUI API 中文文档 验证框(ValidateBox)
  • 原文地址:https://www.cnblogs.com/jin-yuana/p/10002674.html
Copyright © 2011-2022 走看看