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空字典穿进去