Python开发Day07(学生选课)

#!/usr/bin/python
# -*- coding: utf-8 -*-
__author__ = 'WuYongQi'
import pickle,time,os,sys,random

class Admin:
    def __init__(self,name,age,sex,Class_fees,asset = 0):
        self.name = name #老师名称
        self.age = age #老师年龄
        self.sex = sex  #老师性别
        self.Class_fees = Class_fees #老师课时费
        self.__asset = asset  #老师资产
    def asset(self,money):
        try:
            ssice = pickle.load(open(os.path.join(sys.path[0],'pay',self.name),'rb'))
            self.__asset = int(ssice)
        except FileNotFoundError :
            pass
        self.__asset += money  #上完课后加课时费
        pay = pickle.dumps(self.__asset)
        with open(os.path.join(sys.path[0],'pay',self.name),'wb') as f:
            f.write(pay)
            f.flush()
            f.close()

class Course:
    def __init__(self,Course_name,study_time,Class_fees,Teacher,shangkecishu=0):
        self.Course_name = Course_name #课名称
        self.study_time =study_time  #上课次数
        self.Class_fees = Class_fees    #课时费
        self.Teacher = Teacher  #绑定老师
        self.shangkecishu = shangkecishu #学生上课次数

    def stat_attend(self):
        self.Teacher.asset(self.Class_fees)
        a=""#定义一个空的字符串
        for i in range(4):  #循环4次
            num = random.randrange(0,4)         #生成0-4的随机数
            if num == 3 :      #如果随机数是3那么就在验证码中生成一个0-9的数字
                red2 = random.randrange(0,10)  #自行百度ascii码对照表
                a = a + str(red2)#向a变量中添加当前数字对应的ascii码的字符
            elif num == 2 or num == 1:      #如果随机数等于2或者1的时候生成小写字母
                red3=random.randrange(97,123)#自行百度ascii码对照表
                a = a + chr(red3)#向a变量中添加当前数字对应的ascii码的字符
            else:           #在验证码中生成一个随机的大写字母
                red1 = random.randrange(65,91)#自行百度ascii码对照表
                a = a + chr(red1)#向a变量中添加当前数字对应的ascii码的字符
        j = '#'
        for i in range(0,101):
            j += '#'
            sys.stdout.write(str(int(i))+'%\t |'+j+"\r")
            sys.stdout.flush()
            time.sleep(0.03)
        print()
        self.shangkecishu += 1
        teru = {self.Course_name:{int(self.shangkecishu-1):a}}
        return teru


class Student:
    def __init__(self,username,password,sex,age,args,student_list,student_dict):
        self.username = username #学生用户名
        self.password =password  #学生密码
        self.sex = sex  #学生性别
        self.age =age   #学生年龄
        self.study_list = args  #学生选的课程
        self.student_list = student_list
        self.student_dict = student_dict

    def setout_study(self):
        while True:
            print('请选择要学习的课程!')
            for k,i in enumerate(self.study_list):
                print(k,i)
            print('exit:退出\n'
                  'back:返回选课')
            user_select = input('>>>')
            if user_select.isdigit():
                if len(self.study_list) <= int(user_select):
                    print('输入错误,请重新输入!')
                else:
                    #print(self.study_list[int(user_select)])
                    if self.study_list[int(user_select)] == '数学':
                        a = C1.stat_attend()
                    elif self.study_list[int(user_select)] == '语文':
                        a = C2.stat_attend()
                    elif self.study_list[int(user_select)] == '历史':
                        a = C3.stat_attend()
                    elif self.study_list[int(user_select)] == '英语':
                        a = C4.stat_attend()
                    return a
            elif user_select == 'exit':
                save = {}
                save['user_Cour_list'] = self.student_list
                save['user_Cour_dict'] = self.student_dict
                save2 = pickle.dumps(save)
                with open(os.path.join(sys.path[0],'student_db',username),'wb') as f:
                    f.write(save2)
                    f.flush()
                    f.close()
                exit('Good Bye')
            elif user_select == 'back':
                return 'back'
            else:
                print('请正确输入!')


def Teacher():
    Teacher_pay =  os.listdir(os.path.join(sys.path[0],'pay'))
    if Teacher_pay:
        for i in Teacher_pay:
            if i == '__init__.py':
                continue
            T_pay = pickle.load(open(os.path.join(sys.path[0],'pay',i),'rb'))
            print('老师姓名: %s\t\t当前薪资%s'%(i,T_pay))
    else:
        print('还没有教师工作!!!')

def login(username,password):
    with open(os.path.join(sys.path[0])+'\\user','r',encoding='utf-8') as a:
        for i in a:
            if username == 'admin':
                Teacher()
                exit('Good Bye')
            i=i.strip()#去掉两边的空格或其他字符串
            i=i.split('#')#以#号分割
            if username == i[0] and password == i[1]:  #判断用户输入的账号密码是用索引去对应的位置是否一样
                print('登陆成功!')
                return i[0],i[1],i[2],i[3] #'#自定义返回值
        else:
            exit('对不起登录账号密码有误!')


def start(obj):
    user_Cour_list = []
    user_Cour_dict = {}
    for i in obj:
        if i == 'user_Cour_list':
            user_Cour_list = obj[i]
        elif i == 'user_Cour_dict':
            user_Cour_dict = obj[i]
    while True:
        Course_list = ['数学','语文','历史','英语','学习状况']
        time.sleep(0.7)
        print('________________________________________________________\n'
              '请选择要修的课程:(一次选一个)\n'
              '1.数学\n'
              '2.语文\n'
              '3.历史\n'
              '4.英语\n'
              '5.查看自己学习情况\n'
              'Go:去学习\n'
              'exit.退出\n'
              '________________________________________________________')
        use_inp = input('请输入:')
        if use_inp.isdigit():
            if int(use_inp) > len(Course_list):
                print('你输入的数字过大!')
            else:
                if int(use_inp) == 5:
                    print('________________________________________________________\n'
                          '您选的课有:')
                    for i in user_Cour_list:
                        if i == '数学':
                            print('%s\t一共%d课时'%(i,C1.study_time))
                        elif i == '语文':
                            print('%s\t一共%d课时'%(i,C2.study_time))
                        elif i == '历史':
                            print('%s\t一共%d课时'%(i,C3.study_time))
                        else:
                            print('%s\t一共%d课时'%(i,C4.study_time))
                    print('学习状况:')
                    for k2,i2 in user_Cour_dict.items():
                        print('%s\t%s'%(k2,i2))
                    print('_________________________________________________________')
                    time.sleep(3)

                elif Course_list[int(use_inp)-1] in user_Cour_list:
                    print('您以选择过该课程请重新选择!')
                else:
                    print(Course_list[int(use_inp)-1])
                    user_Cour_list.append(Course_list[int(use_inp)-1])
        else:
            if use_inp == 'exit':
                save = {}
                save['user_Cour_list'] = user_Cour_list
                save['user_Cour_dict'] = user_Cour_dict
                save2 = pickle.dumps(save)
                with open(os.path.join(sys.path[0],'student_db',username),'wb') as f:
                    f.write(save2)
                    f.flush()
                    f.close()
                exit('Good Bye')
            elif use_inp.lower() == 'go':
                print(a)
                obj = Student(a[0],a[1],a[2],a[3],user_Cour_list,user_Cour_list,user_Cour_dict)
                ret = obj.setout_study()
                if ret == 'back':
                    continue
                print(ret)
                if user_Cour_dict:
                    yuan = []
                    xin = []
                    for i in ret:
                        xin.append(i)
                        for i2 in user_Cour_dict:
                            yuan.append(i2)
                            if i == i2:
                                user_Cour_dict[i].update(ret[i2])
                                break
                        break
                    if xin[0] not in yuan:
                        user_Cour_dict.update(ret)
                else:
                    user_Cour_dict.update(ret)
                print(user_Cour_dict)

            else:
                print('请正确输入')

def user_register():
    urnm = input('请输入姓名:')
    with open(os.path.join(sys.path[0],'user'),'r+',encoding='utf-8') as f:#去读现在又的账号密码
        for i in f: #循环获取数据的每一行
            i = i.strip()#去掉两边的空格或其他字符串
            i = i.split('#')#以#号分割
            if urnm == i[0] :#判断用户输入的账号是否存在
                print('用户账户已存在!')#存在输出并重新执行
                user_register()#重新执行函数
        pwd = ''
        while True:
            pass1 = input('请输入密码')
            pass2 = input('请确认密码')
            if pass1 != pass2:
                print('密码确认失败请重新输入')
                continue
            pwd = pass2
            break
        while True:
            sex = input('请输入性别')
            if sex == '' or sex == '':
                age = input('请输入年龄')
                f.write('\n%s#%s#%s#%s'%(urnm,pwd,sex,age))#成功创建用户,并一#号分割账号密码
                f.close()
                print('注册成功,请登录!')
                time.sleep(0.2)
                break
            else:
                print('对不起,该系统不支持中性人或者其他性别的人类....')

T1 = Admin('小王','23','',2000)#创建老师小王
T2 = Admin('小李','22','',2300)#创建老师小李
T3 = Admin('小红','20','',1800)#创建老师小红
T4 = Admin('小蓝','23','',2000)#创键老师小蓝


if __name__ != "__main__":
    exit('系统错误!')
def init():
    print('1.用户登录\n'
          '2.用户注册\n'
          '3.管理员登录\n'
          'exit:退出')
    user_inp = input('请输入选项:')
    inp_li = ['登录','注册','管理员']
    while True:
        if user_inp.isdigit():
            if int(user_inp) > 3 or int(user_inp) < 1:
                print('输入数值过大或者过小!!')
            else:
                if user_inp == '2':
                    user_register()
                break
        else:
            if user_inp == 'exit':
                exit('Good bye')
            print('输入有误!')
init()
username = input('请输入您的用户名:')#用户输入用户名
password = input('请输入您的密码:')#用户输入密码
a=list(login(username,password))#判断用户名和密码是否正确,并把返回值转成列表类型给变量a
rizhi = os.listdir(os.path.join(sys.path[0],'student_db')) #去student_db目录下把所有的文件名都拿出来
if username in rizhi:#判断用户输入的用户名是否在student_db目录下,如果在
    obj = pickle.load(open(os.path.join(sys.path[0],'student_db',username),'rb'))
    print(obj)
    ass = {'数学':[],'语文':[],'历史':[],'英语':[]}

    for i in obj['user_Cour_dict']:
        if i == '数学':
            for i2 in obj['user_Cour_dict'][i]:
                ass[i].append(i2)
        elif i == '语文':
            for i2 in obj['user_Cour_dict'][i]:
                ass[i].append(i2)
        elif i == '历史':
            for i2 in obj['user_Cour_dict'][i]:
                ass[i].append(i2)
        elif i == '英语':
            for i2 in obj['user_Cour_dict'][i]:
                ass[i].append(i2)
    C1 = Course('数学',20,T3.Class_fees,T3,len(ass['数学'])) #创建课程数学,并绑定老师和课时费
    C2 = Course('语文',27,T1.Class_fees,T1,len(ass['语文'])) #创建课程语文,并绑定老师和课时费
    C3 = Course('历史',18,T2.Class_fees,T2,len(ass['历史'])) #创建课程历史,并绑定老师和课时费
    C4 = Course('英语',20,T4.Class_fees,T4,len(ass['英语'])) #创建课程英语,并绑定老师和课时费
    start(obj)
else:#不在
    C1 = Course('数学',20,T3.Class_fees,T3) #创建课程数学,并绑定老师和课时费
    C2 = Course('语文',27,T1.Class_fees,T1) #创建课程语文,并绑定老师和课时费
    C3 = Course('历史',18,T2.Class_fees,T2) #创建课程历史,并绑定老师和课时费
    C4 = Course('英语',20,T4.Class_fees,T4) #创建课程英语,并绑定老师和课时费
    obj = {}#创建一个空的字典
    start(obj)#执行函数start将obj空字典穿进去

 

posted @ 2016-06-06 09:18  WuYongQi。  阅读(351)  评论(0编辑  收藏  举报