#!/usr/bin/python
# -*- coding: utf-8 -*-
__author__ = 'WuYongQi'
import pickle,time,os,sys,randomclass 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 :passself.__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 += 1teru = {self.Course_name:{int(self.shangkecishu-1):a}}return teruclass 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_listself.student_dict = student_dictdef 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 aelif user_select == 'exit':save = {}save['user_Cour_list'] = self.student_listsave['user_Cour_dict'] = self.student_dictsave2 = 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':continueT_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_listsave['user_Cour_dict'] = user_Cour_dictsave2 = 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':continueprint(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])breakbreakif 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('密码确认失败请重新输入')continuepwd = pass2breakwhile 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)breakelse: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()breakelse: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空字典穿进去

转载于:https://www.cnblogs.com/WuYongQi/p/5562742.html

Python开发Day07(学生选课)相关推荐

  1. Web开发项目——学生选课系统

    Web开发项目--学生选课系统完整项目代码+数据库文件(采用springMVC三层架构+MySQL) 学生登录界面 欢迎界面,可进行功能选择个人信息查询 密码修改,修改后数据库数据也会变化 根据教授该 ...

  2. (附源码)mysql+ssm学生选课系统 毕业设计 170920

     摘 要 本论文主要论述了如何使用JAVA语言开发一个学生选课系统,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发.在引言中,作者将论述学生选课系统的当前 ...

  3. 数据库课程设计-----------学生选课管理系统的设计

    由于时间关系,里面许多图片都已经变形或错位 课程设计(学年论文) 题目:学生选课管理系统的设计与实现 系    院计算机科学技术系 专    业计算机科学与技术 班    级 姓    名 学    ...

  4. XX大学学生选课系统需求规格说明书

    软件工程专业实训课作业--软件需求规格说明书.上网查资料,看模板,结合我们小组的选题.我完成了这个需求规格说明书. 1引言 编写目的 该文档是关于用户对于河北经贸大学学生选课系统的功能和性能的要求, ...

  5. 学生选课系统项目设计报告

    设 计 报 告 报告题目:学生选课系统的数据库设计 摘  要 在当下疫情肆虐的时期,线上教学成为了主流方式,各种教学活动都转为线上,网上选课系统成为学生课程分配的主要方式,传统的选课管理模式已经无法满 ...

  6. php选课实验成品_php学生选课管理系统

    学生选课管理系统需要完成这些功能:课程管理人员通过该系统可以对以上信息进行查询和维护并对选课进行管理等功能:学生通过该系统可以进行在线选课,包括管理个人信息.个人在线选课.个人成绩查询等功能. 学生选 ...

  7. 数据库课程设计-学生选课管理系统(实训报告+答辩ppt+源码+sql文件+打包好的程序)springboot项目-javaweb

    作者:ChenZhen 博客地址:https://www.chenzhen.space/ 版权:本文为博主 ChenZhen 的原创文章,本文版权归作者所有,转载请附上原文出处链接及本声明. 如果对你 ...

  8. ssm+mysql+ssm学生选课系统 毕业设计-附源码170920

    摘 要 本论文主要论述了如何使用JAVA语言开发一个学生选课系统,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发.在引言中,作者将论述学生选课系统的当前背 ...

  9. python开发项目:学生选课系统

    程序要求: 1.创建北京.上海两所学校(分析:通过学校类实例化两个学校实例) 2.创建Linux.python.go三个课程,Linux\go在北京开,Linux在上海开(创建Linux.python ...

  10. [附源码]计算机毕业设计Python+uniapp学生选课APP3cnsl(程序+lw+APP+远程部署)

    [附源码]计算机毕业设计Python+uniapp学生选课APP3cnsl(程序+lw+APP+远程部署) 该项目含有源码.文档.程序.数据库.配套开发软件.软件安装教程 项目运行环境配置: Pyth ...

最新文章

  1. python自动化框架pytest pdf_pytest+python下的UI自动化基础框架
  2. java_软件发布版本_Asynch HttpClien 对比发行版本说明_Alpha、Beta、RC、GA版本的区别...
  3. 在c#.net通用权限管理系统组件里的 部门经理,分管副总 的管理方法参考
  4. 设计模式-观察者模式(Observer)
  5. Android如何优雅地防止Bean类混淆
  6. 检索数据_18_按照多个字段排序查询结果
  7. java断言assert
  8. Django04-1: ORM增删改查
  9. spring bean初始化及销毁你必须要掌握的回调方法。
  10. 简述SAS逻辑库的概念及建立方法。什么是临时库和永久库?
  11. 爬取w3c课程—Urllib库使用
  12. Shell 脚本中如何使用make命令
  13. 【转】C# 彻底搞懂async/await
  14. 云图说 | 华为云GPU共享型AI容器,让你用得起,用得好,用的放心
  15. Visual Studio Code 1.49 发布
  16. linux的打包压缩文件,linux打包文件,压缩文件
  17. 获取Winform窗体或Panel下包含的所有控件、根据控件名称获取指定控件
  18. 牛客 华华听月月唱歌 贪心
  19. 第7章第27节:三图排版:三张图片交错对齐排列 [PowerPoint精美幻灯片实战教程]
  20. 如何知晓代理IP所属城市?

热门文章

  1. UNIX Linux网络日志分析与流量监控
  2. 并发---ConcurrentHashMap
  3. 使用redis作为缓存,数据还需要存入数据库中吗?
  4. Java 实现导出excel表 POI
  5. Spring Boot + Thymeleaf + Activiti 快速开发平台项目,附源码!
  6. 再见!RESTful...
  7. AI技术已经如此逆天了,该有时间学学AI了
  8. 2019年9月全国程序员工资统计(参考)
  9. 一幅漫画趣味解读 Linux 内核
  10. ofo 彻底凉凉。。。