博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
学生选课大作业
阅读量:5307 次
发布时间:2019-06-14

本文共 8309 字,大约阅读时间需要 27 分钟。

两个版本 :

     写if 的可以写出来代码长 若多了 不适用

    写反射的可以极大的减少了代码且方便查看

一点点拆分

(共用的)管理员和用户登录模块

# 出错点 # 之前 一直把他放里面和 if 构成一体  每一次执行 因为return 都会退出 for 循环 就不对def login(user,pwd):      #文件里的值(第三个写的好提供以后判断)  return随时跳出{字典}用的好  for else 好    with open('userinfo', encoding='utf-8')as f:        for line in f:            username,password,ident  =  line.strip().split('|')            # print(user , username , get_md5(user,pwd), password)    #这个可以用来判断对错            if user == username and get_md5(user,pwd)==password:    #判断user不等 都不去判断密码                # if  里的 return 找到值了 返回+退出for循环                return {
'result':True,'identify':ident,'username':username} #默认返回元组 最好返回字典 更清晰 else: #返回result 做判断 返回username 做实例化 返回identify(值)对应的键 判断学生、管理员 return {
'result':False} #else 放在外面 和 for 构成一体 当for循环完后 还没有找到返回错误

认证模块 return 用的也很好

def auth():    # opt_lst1 = [('登录', login), ('退出', exit)]    opt_lst1 = ['登录', '退出']    while True:        for index , opt in enumerate(opt_lst1,1):            print(index ,opt)        num = int(input('请输入你做的操作:'))        # ret = opt_lst1[num - 1][1]()            # opt_lst1[num-1][1]()       #执行  有可能是内置函数也有可能是login函数        if num ==1 :            user = input('username:')            pwd = input('password:')            ret = login(user,pwd)            if ret['result']:                print('登录成功')                return ret            else:                print('登录失败')        elif num ==2:            exit()

小清晰的枚举 显示数字和功能

class Manager:   #管理员用户    opt_lst = ['创建课程', ' 给学生创建帐号 ', ' 查看所有课程','  查看所有学生]']for index, opt in enumerate(Manager.opt_lst,1):    print(index , opt)

只用if的版本

  类列表

class Manager:   #管理员用户    opt_lst = ['创建课程', ' 给学生创建帐号 ', ' 查看所有课程','  查看所有学生]']class Student:   #管理员用户    opt_lst = ['创建课程', ' 给学生创建帐号 ', ' 查看所有课程','  查看所有学生]']

  判断登录者  判断执行功能的片段

    多次写判断登录者(每次都写) 多次判断执行各个函数(每次都写)

if ret['result']:    if ret['identify'] =='Manager':        manager = Manager(ret['username'])        print('1',manager)        while True:            for index, opt in enumerate(Manager.opt_lst,1):                print(index , opt)            num = int(input('请选择您要操作的序号'))            if num ==1:                manager.create_course()            elif num == 2:                manager.create_student()

 

用反射方法

  类列表

class Manager:   #管理员用户     # 不同  列表不同一方面显示 一方面反射  用了类反射 sys getattr(sys.[__modules__],ret['indentify'])                # 用了 不一样的 列表[输入数][1] 进行反射 反射的哥俩内容差不多 区别()    opt_lst = [('创建课程', 'show_courses'), (' 给学生创建帐号', 'show_course'),               (' 查看所有课程', 'show_selected_course'), ('  查看所有学生]', 'choose_courses')class Student:   #管理员用户    opt_lst = [('创建课程','show_courses'), (' 给学生创建帐号','show_course'),               (' 查看所有课程','show_selected_course'),('  查看所有学生]','choose_courses')]

  不必判断用户 传过来可以用 反射类方法 执行相应功能 

    用列表的索引值确定执行的方法

if ret['result']:    cls  = getattr(sys.modules[__name__],ret['identify'])    obj = cls(ret['username'])    while True:        for index, opt in enumerate(Manager.opt_lst,1):            print(index , opt[0])        num = int(input('请选择您要操作的序号'))        if hasattr(obj,cls.opt_lst[num-1][1]):            getattr(obj,cls.opt_lst[num-1][1])()

写入文件的固定值:

liuyang|593c46524e137f0e5fdf58ffe03271b9|Managerwanger|4c051a1a81ed1e26d9a05e109da5a3dd|Student

完整版的if 版

import hashlibclass Manager:    opt = ['创建课程','创建学生','查看所有学生','查看所有课程']    def __init__(self,name):        self.name = name    def create_course(self):        print(self.name,'创建了课程')    def create_student(self):        print(self.name, '创建了学生')    def show_course(self):        print(self.name, '查看了课程')    def show_student(self):        print(self.name, '查看了学生')    def quit(self):        exit()class Student:    opt = ['选择课程','创建','查看所有课程']    def __init__(self,name):        self.name = name    def choose_course(self):        print(self.name,'选择了课程')    def create(self):        print(self.name, '创建了')    def show_course(self):        print(self.name, '查看了课程')    def quit(self):        exit()def md5(user,pwd):    md5 = hashlib.md5(user.encode('utf-8'))    md5.update(pwd.encode('utf-8'))    return md5.hexdigest()def login(user,pwd):    with open('userinfo',encoding='utf-8') as f:        for line in f:            username , password , ident = line.strip().split('|')            # print(username,user,password,md5(user,pwd))  #第二次写pwd 变量写错了 运行挺正常的            if username == user and password == md5(user,pwd):                # print('匹配成功F')                return {
'result':True,'manager':ident,'name':username} else: return {
'result':False} #挺棒的 提供多个判断条件def auth(): while 1: log_opt = ['登录','退出'] for index , log in enumerate(log_opt,1): print(index,log) num = int(input('请输入序号')) if num==1: user = input('user>>') pwd = input('pwd>>') ret = login(user,pwd) if ret['result']: print('登录成功') return ret else: print('登录失败') if num==2: exit()ret = auth()if ret['result']: if ret['manager'] == 'Manager': while 1: manager = Manager(ret['name']) for index , log in enumerate(manager.opt,1): print(index,log) num = int(input('请输入序号')) if num == 1: manager.create_student() elif num == 2: manager.create_course() elif num == 3: manager.show_course() elif num == 4: manager.show_student() else : print('重新输入') if ret['manager'] == 'Student': while 1: student = Student(ret['name']) for index, log in enumerate(student.opt, 1): print(index, log) num = int(input('请输入序号')) if num == 1: student.show_course() elif num == 2: student.choose_course() elif num == 3: student.show_course() else: print('重新输入')
View Code

完整版的反射版

import hashlibclass Manager:    opt = [('创建课程','create_course'),('创建学生','create_student'),('查看所有学生','show_student'),('查看所有课程','show_course') ]    def __init__(self,name):        self.name = name    def create_course(self):        print(self.name,'创建了课程')    def create_student(self):        print(self.name, '创建了学生')    def show_course(self):        print(self.name, '查看了课程')    def show_student(self):        print(self.name, '查看了学生')    def quit(self):        exit()class Student:    opt = [('选择课程','choose_course'),('创建了','create'),('查看课程','show_course') ]    def __init__(self,name):        self.name = name    def choose_course(self):        print(self.name,'选择了课程')    def create(self):        print(self.name, '创建了')    def show_course(self):        print(self.name, '查看了课程')    def quit(self):        exit()def md5(user,pwd):    md5 = hashlib.md5(user.encode('utf-8'))    md5.update(pwd.encode('utf-8'))    return md5.hexdigest()def login(user,pwd):    with open('userinfo',encoding='utf-8') as f:        for line in f:            username , password , ident = line.strip().split('|')            # print(username,user,password,md5(user,pwd))  #第二次写pwd 变量写错了 运行挺正常的            if username == user and password == md5(user,pwd):                # print('匹配成功F')                return {
'result':True,'manager':ident,'name':username} else: return {
'result':False} #挺棒的 提供多个判断条件def auth(): while 1: log_opt = ['登录','退出'] for index , log in enumerate(log_opt,1): print(index,log) num = int(input('请输入序号')) if num==1: user = input('user>>') pwd = input('pwd>>') ret = login(user,pwd) if ret['result']: print('登录成功') return ret else: print('登录失败') if num==2: exit()ret = auth()import sysif ret['result']: cls = getattr(sys.modules[__name__],ret['manager'])#忽然间 原来是个名 但是写不出 有提示.modules obj = cls(ret['name']) while 1: for index, opt1 in enumerate(obj.opt, 1): print(index, opt1[0]) num = int(input('请输入序号')) if hasattr(obj,obj.opt[num-1][1]): getattr(obj,obj.opt[num-1][1])()
View Code

 

转载于:https://www.cnblogs.com/Doner/p/10639856.html

你可能感兴趣的文章
【python】--迭代器生成器装饰器
查看>>
Pow(x, n)
查看>>
安卓当中的线程和每秒刷一次
查看>>
每日一库:Modernizr.js,es5-shim.js,es5-safe.js
查看>>
ajax连接服务器框架
查看>>
wpf样式绑定 行为绑定 事件关联 路由事件实例
查看>>
利用maven管理项目之POM文件配置
查看>>
TCL:表格(xls)中写入数据
查看>>
Oracle事务
查看>>
String类中的equals方法总结(转载)
查看>>
属性动画
查看>>
标识符
查看>>
给大家分享一张CSS选择器优选级图谱 !
查看>>
Win7中不能调试windows service
查看>>
通过httplib2 探索的学习的最佳方式
查看>>
快来熟练使用 Mac 编程
查看>>
Node.js 入门:Express + Mongoose 基础使用
查看>>
一步步教你轻松学奇异值分解SVD降维算法
查看>>
使用pager进行分页
查看>>
UVA - 1592 Database
查看>>