zoukankan      html  css  js  c++  java
  • Python 大作业4:选课系统

    # 作业详细要求见:
    # 景女神的blog https://www.cnblogs.com/Eva-J/articles/9235899.html
    
    import pickle
    import sys
    
    
    class User:
        def __init__(self, username, password, permission):
            self.username = username
            self.password = password
            self.permission = permission
    
        def view_all_course(self):
            with open(COURSE_PATH, mode='rb') as file_handler:
                for i in range(1, INF):
                    try:
                        ret = pickle.load(file_handler)
                        print(i, ret.name, ret.cycle, ret.teacher)
                    except EOFError:
                        print('-' * 10)
                        break
    
        @staticmethod
        def my_exit():
            global Login_user
            Login_user = False
    
    
    REGISTER_PATH = 'register'
    COURSE_PATH = 'course'
    CHOOSE_PATH = 'choose'
    INF = 0x7FFFFFFF
    Login_user = User(None, None, None)
    
    
    class Course:
        def __init__(self, name, cycle, teacher):
            self.name = name
            self.cycle = cycle
            self.teacher = teacher
    
        @staticmethod
        def Num():
            num = 0
            with open(COURSE_PATH, mode='rb') as file_handler:
                for i in range(INF):
                    try:
                        pickle.load(file_handler)
                        num += 1
                    except EOFError:
                        return num
    
    
    class Student(User):
        Ins = [('查看所有课程', 'view_all_course'), ('选择课程', 'choose_course'),
               ('查看所选课程', 'view_chosen_course'), ('退出程序', 'my_exit')]
    
        def __init__(self, user, password, permission):
            super().__init__(user, password, permission)
            self.course = []
    
        def choose_course(self):
            while True:
                self.view_all_course()
                choose_course = input('choose ur course (input Q or q to exit). >>>')
                if choose_course.isdecimal():
                    if int(choose_course) > 0 and int(choose_course) <= Course.Num():
                        with open(COURSE_PATH, mode='rb') as file_handler:
                            for i in range(int(choose_course)):
                                ret = pickle.load(file_handler)
                            self.course.append(ret)
                elif choose_course.upper() == 'Q':
                    with open(CHOOSE_PATH, encoding='utf-8', mode='a') as file_handler:
                        file_handler.write(self.username)
                        for c in self.course:
                            file_handler.write(' ' + c.name)
                        file_handler.write('
    ')
                        print('Save success.
    ' + 10 * '-')
                        return
                else:
                    print('Illegal input.
    ' + 10 * '-')
    
        def view_chosen_course(self):
            with open(CHOOSE_PATH, encoding='utf-8', mode='r') as file_handler:
                flag = False
                for line in file_handler:
                    if self.username in line:
                        print(line.strip())
                        print(10 * '-')
                        flag = True
                if flag == False: print('No course.
    ' + 10 * '-')
    
        @staticmethod
        def get_student_list():
            student_list = []
            with open(REGISTER_PATH, mode='rb') as file_handler:
                for i in range(INF):
                    try:
                        ret = pickle.load(file_handler)
                        if ret.permission == 'student':
                            student_list.append(ret)
                    except EOFError:
                        return student_list
    
    
    class Administrator(User):
        Ins = [('创建课程', 'new_course'), ('创建学生学生账号', 'new_stu'), ('查看所有课程', 'view_all_course'),
               ('查看所有学生', 'view_all_stu'), ('查看所有学生选课情况', 'view_course_selection'), ('退出程序', 'my_exit')]
    
        def new_course(self):
            course_name = input('new course name. >>>')
            course_cycle = input('new course cycle. >>>')
            course_teacher = input('new course teacher. >>>')
            new_cour = Course(course_name, course_cycle, course_teacher)
            with open(COURSE_PATH, mode='ab') as file_handler:
                pickle.dump(new_cour, file_handler)
                print('-' * 10)
    
        @staticmethod
        def new_stu():
            new_user('Student')
    
        def view_all_stu(self):
            with open(REGISTER_PATH, mode='rb') as file_handler:
                for i in range(INF):
                    try:
                        ret = pickle.load(file_handler)
                        if ret.permission == 'Student':
                            print(i, ret.username)
                    except EOFError:
                        print('-' * 10)
                        break
    
        @staticmethod
        def view_course_selection():
            with open(CHOOSE_PATH, encoding='utf-8', mode='r') as file_handler:
                for line in file_handler:
                    print(line.strip())
                print('-' * 10)
    
    
    def check_admin():
        with open(REGISTER_PATH, mode='rb') as file_handler:
            for i in range(INF):
                try:
                    ret = pickle.load(file_handler)
                    if ret.permission == 'Administrator':
                        return True
                except EOFError:
                    return False
    
    
    def new_user(permission):
        while True:
            flag = True
            user_username = input('new student username. >>>')
            user_password = input('new student password. >>>')
            with open(REGISTER_PATH, mode='rb') as file_handler:
                for i in range(INF):
                    try:
                        ret = pickle.load(file_handler)
                        if ret.username == user_username:
                            print('Username Exist.')
                            print('-' * 10)
                            flag = False
                    except EOFError:
                        break
                if flag == True:
                    break
        if permission == 'Student':
            new_u = Student(user_username, user_password, permission)
            with open(REGISTER_PATH, mode='ab') as file_handler:
                pickle.dump(new_u, file_handler)
                print('Create success.')
                print('-' * 10)
        elif permission == 'Administrator':
            new_u = Administrator(user_username, user_password, permission)
            with open(REGISTER_PATH, mode='ab') as file_handler:
                pickle.dump(new_u, file_handler)
                print('Create success.')
                print('-' * 10)
        else:
            return False
    
    
    def login():
        for i in range(3):
            username = input('username:')
            password = input('password:')
            with open(REGISTER_PATH, mode='rb') as file_handler:
                for i in range(INF):
                    try:
                        ret = pickle.load(file_handler)
                        if ret.username == username and ret.password == password:
                            global Login_user
                            Login_user = ret
                            print(f'welcome {Login_user.username} Permission: {Login_user.permission}')
                            print('-' * 10)
                            return True
                    except EOFError:
                        break
            print('Incorrect account or password.')
            print('-' * 10)
        return False
    
    
    def run():
        if check_admin() == False:
            print('NO found Administrator, we have to create a new Administrator.')
            new_user('Administrator')
        if not login():
            return
        if hasattr(sys.modules['__main__'], Login_user.permission):
            if callable(getattr(sys.modules['__main__'], Login_user.permission)):
                while Login_user:
                    for i, choose in enumerate(getattr(sys.modules['__main__'], Login_user.permission).Ins, 1):
                        print(f'{i}、{choose[0]}')
                    ins = input('choose ins. >>>')
                    if hasattr(Login_user, getattr(sys.modules['__main__'], Login_user.permission).Ins[int(ins) - 1][1]):
                        if callable(getattr(Login_user,
                                            getattr(sys.modules['__main__'], Login_user.permission).Ins[int(ins) - 1][1])):
                            getattr(Login_user,
                                    getattr(sys.modules['__main__'], Login_user.permission).Ins[int(ins) - 1][1])()
        return
    
    
    if __name__ == '__main__':
        run()
    
  • 相关阅读:
    递归
    HDU_oj_2041 超级楼梯
    树与森林——树与森林的遍历
    HUD_oj_2040 亲和数
    HDU_oj_2039 判定三角形
    HDU_oj_2037 今年暑假不AC
    多边形面积
    HDU_oj_2036 改革春风吹满地(多边形面积)
    【转发】【composer】composer 命令行介绍
    【chm】【windows】win7下chm打开不显示内容
  • 原文地址:https://www.cnblogs.com/raygor/p/13386061.html
Copyright © 2011-2022 走看看