zoukankan      html  css  js  c++  java
  • 自己琢磨的学生选课系统

    import hashlib
    import pickle
    import os
    
    
    class Iden:
        # 用户的父类
        def __init__(self, user, pwd, ):
            self.user = user
            self.pwd = pwd
    
    
    #  学生类
    class Normal(Iden):
        def __init__(self, user, pwd, course=''):
            super().__init__(user, pwd)
            self.groupwork = 'student'
    
        #  普通用户的注册
        def normal_regedist(user, pwd, ):
            pwd = hashli(user, pwd)
            person = Normal(user, pwd)
            picke_write(person, f'./user/{user}')
            return True
    
        #  学生选择课程
        def use_course(self, course):
            self.course = course
            picke_write(self, f'./user_course/{self.user}_course')
            return '添加成功'
    
        #  读取自己的课程
        def read_course(self):
            student_user_course = os.listdir('./user_course/')
            if f'{self.user}_course' in student_user_course:
                return picke_read(f'./user_course/{self.user}_course')
            return False
    
    
    #  管理员类
    class Admin(Iden):
        def __init__(self, user, pwd, ):
            super().__init__(user, pwd)
            self.groupwork = 'administrator'
    
        #  管理员的注册,
        def __admin_regedist(user, pwd):
            pwd = hashli(user, pwd)
            person = Admin(user, pwd, )
            picke_write(person, f'./user/{user}')
            return True
    
        # 查看所有的学生
        def see_all_student(self):
            student_user = os.listdir('./user/')
            for us in student_user:
                if us != self.user:
                    print(f"账号:{picke_read(f'./user/{us}').user}")
    
        # 查看所有的学生的课程
        def see_all_student_course(self):
            student_user_course = os.listdir('./user_course/')
            for us in student_user_course:
                course_read(picke_read(f'./user_course/{us}'))
    
    
    #  使用picke读取文件
    def picke_read(path):
        with open(path, 'rb')as f:
            a = pickle.load(f)
            return a
    
    
    #  使用picke写入文件
    def picke_write(self, path):
        with open(path, 'wb')as f:
            pickle.dump(self, f)
    
    
    #  打印课程信息,格式化
    def course_read(a): print(f'账号:{a.user},课程名称:{a.course.name},课程价格:{a.course.price},'
                              f'课程周期:{a.course.month},课程讲师:{a.course.teacher}')
    
    
    #  课程类
    class Course:
        def __init__(self, name, price, month, teacher):
            self.name = name
            self.price = price
            self.month = month
            self.teacher = teacher
    
        @staticmethod
        #  创建课程
        def create_course(name, price, month, teacher):
            course = Course(name, price, month, teacher)
            print(course.name)
            with open('./course/course', 'ab') as f:
                pickle.dump(course, f)
            return True
    
        @staticmethod
        # 读取所有的课程,并将结果以列表的形式返回
        def read_all_course():
            li = []
            with open('./course/course', 'rb') as f:
                while True:
                    try:
                        li.append(pickle.load(f).__dict__)
                    except:
                        break
                return li
    
    
    #  查看所有的课程
    def see_course():
        course = Course.read_all_course()
        for i in range(len(course)):
            print(f'序号{i + 1}   课程名称{course[i]["name"]},课程价格{course[i]["price"]},
          课程周期{course[i]["month"]},课程讲师{course[i]["teacher"]}')
        return course
    
    
    # 数据加密
    def hashli(user, pwd):
        md5 = hashlib.sha256(user.encode('utf-8'))
        md5.update(pwd.encode('utf-8'))
        return md5.hexdigest()
    
    
    #   登录验证,正确就返回账户的信息(包含类中的方法)
    def login(user, pwd):
        lisdis = os.listdir('./user/')
        if user in lisdis:
            with open(f'./user/{user}', 'rb') as f:
                user_pwd_dic = pickle.load(f)
                if user == user_pwd_dic.user and hashli(user, pwd) == user_pwd_dic.pwd:
                    return user_pwd_dic
                else:
                    return
        else:
            return
    
    
    # 用户登录输入
    def login_input():
        while 1:
            user = input('请输入用户名>>>').replace(' ', '')
            pwd = input('请输入密码>>>').replace(' ', '')
            if user and pwd:
                break
            else:
                print('输入有误,请重新输入')
        return user, pwd
    
    
    #  创建课程输入
    def courese_input():
        name = input('请输入课程名称>>>').replace(' ', '')
        price = int(input('请输入课程价格>>>').replace(' ', ''))
        month = input('请输入课程周期>>>').replace(' ', '')
        teacher = input('请输入授课老师>>>').replace(' ', '')
        Course.create_course(name, price, month, teacher)
        return
    
    
    flag = True
    while flag:
        user, pwd = login_input()  # 输入用户密码
        a = login(user, pwd)  # 登录验证
        if a:
            if a.groupwork == 'administrator':  # 如果身份是管理员身份
                print(f'欢迎管理员{a.user}登录')
                while flag:
                    print('1,创建用户。 2,创造课程  3,查看课程 4,查看学生 5,查看学生选课 6,退出程序  ')
                    choose = input('请输入你要选择的操作').replace(' ', '')
                    if choose and choose.isnumeric() and int(choose) <= 6 and int(choose) > 0:
                        if choose == '1':
                            user, pwd = login_input()
                            if Normal.normal_regedist(user, pwd): print(f'创建学生用户{user}成功')
                        elif choose == '2':
                            b = courese_input()
                        elif choose == '3':
                            look_course = see_course()
                        elif choose == '4':
                            a.see_all_student()
                        elif choose == '5':
                            a.see_all_student_course()
                        elif choose == '6':
                            print('欢迎下次使用')
                            flag = False
                            break
                    else:
                        print('输入不正确,请重新输入')
    
            elif a.groupwork == 'student':
                print(f'欢迎学生{a.user}')
                while True:
                    print('1,查看课程  2,选择课程  3,查看所选课程 4,退出程序 ')
                    choose = input('请输入你要选择的操作').replace(' ', '')
                    if choose and choose.isnumeric() and int(choose) <= 4 and int(choose) > 0:
                        if choose == '1':
                            look_course = see_course()
                        elif choose == '2':
                            while flag:
                                course = see_course()
                                n = input('请输入课程编号(输入q退出)>>>').replace(' ', '')
                                if n and n.isnumeric() and int(n) <= len(course) and int(n) > 0:
                                    n = int(n) - 1
                                    choose_course = Course(course[n]['name'], course[n]['price'], course[n]['month'],
                                                           course[n]['teacher'])
                                    a_course = a.use_course(choose_course)
                                    print(a_course)
                                elif n.lower() == 'q':
                                    break
                                else:
                                    print('输入有误,请重新输入')
                        elif choose == '3':
                            is_course = (a.read_course())
                            if is_course == False:
                                print('你现在还没有选择课程')
                            else:
                                course_read(is_course)
                        elif choose == '4':
                            print('欢迎下次使用')
                            flag = False
                            break
                    else:
                        print('输入有误,请重新输入')
        else:
            print('用户不存在,或者密码错误')
  • 相关阅读:
    第三方控件netadvantage UltraWebGrid如何生成带加号多级表数据也就是带子表
    第三方控件netadvantage UltraWebGrid如何生成多级跨行表头个人总结
    win8安装tfs2010提示未启用iis6.0未启用兼容模式需要静态内容组件
    wp7学习笔记
    Jqury笔记
    zookeeper 食谱
    dubbo 框架和 tomcat 的比较
    zookeeper 的心跳
    dubbo 自定义 Filter
    ActiveMQ producer 提交事务时突然宕机,会发生什么
  • 原文地址:https://www.cnblogs.com/mk-lovefreedom/p/10624110.html
Copyright © 2011-2022 走看看