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