需求:

实现代码:

# Author: Severenimport pickleclass Course(object): # 课程类def __init__(self, type, price, time, id):self.id = idself.type = typeself.price = priceself.time = timeself.classrooms = []def add_classroom(self, obj):self.classrooms.append(obj)print("%s加入了%s" % (self.type, obj.name))class Classroom(object): # 教室类def __init__(self, name, id):self.name = nameself.id = idself.courses = []self.stus = []def add_course(self, obj):self.courses.append(obj)print("为%s添加了一门%s课程" % (self.name, obj.type))def add_stu(self, obj):self.stus.append(obj)print("为%s添加了一个学生-%s" % (self.name, obj.name))class School(object): # 学校类def __init__(self, id, name, addr):self.id = idself.name = nameself.addr = addrself.students = []self.staffs = []self.courses = []self.classrooms = []def enroll(self, stu_obj):self.students.append(stu_obj)print("为学员%s办理注册手续" % stu_obj.name)def hire(self, staff_obj):self.staffs.append(staff_obj)print("雇佣%s" % staff_obj.name)def create_course(self, course_type, price, time, course_id):course = Course(course_type, price, time, course_id)self.courses.append(course)print("新增一门%s课程成功!" % course_type)def create_classroom(self, name, id):self.classrooms.append(Classroom(name, id))print("新增%s成功!" % name)class SchoolMember(object): # 成员类def __init__(self, name, age, sex):self.name = nameself.age = ageself.sex = sexdef tell(self):passclass Teacher(SchoolMember): # 老师类def __init__(self, name, age, sex, salary, course_obj, school, id):super(Teacher, self).__init__(name, age, sex)self.id = idself.salary = salaryself.course_obj = course_objself.school =schooldef tell(self):print("""--- info of Teacher:Name: %sAge: %sSex: %sSalary: %sCourse: %s""" % (self.name, self.age, self.sex, self.salary, self.course_obj.type))def teach(self):print("%s is teaching course[%s]" % (self.name, self.course_obj.type))class Student(SchoolMember): # 学生类def __init__(self, name, age, sex, grade, id):super(Student, self).__init__(name, age, sex)self.stu_id = idself.grade = gradeself.classroom = Nonedef tell(self):print("""--- info of Student:Name: %sAge: %sSex: %sStu_id: %sGrade: %s""" % (self.name, self.age, self.sex, self.stu_id, self.grade))def pay_tuition(self): # 学费tuition = 0for course in self.classroom.courses:print(course.type, course.price, course.time)tuition += int(course.price)print("%s需要支付学费$%s" % (self.name, str(tuition)))x = input("请确认并输入支付密码: ")def schoolView(schools): # 学校视图for i in schools:print(i.id, i.name)sc_id = input("请选择要管理的学校(输入学校编号): ")while 1:print("1、新增课程; 2、新增班级; 3、雇佣教师; 4、班级管理")choice_type = input("请选择要进行的操作(输入编号): ")if choice_type == '1':if schools[int(sc_id)].courses == []:course_id = 0else:course_id = int(schools[int(sc_id)].courses[-1].id)course_type = input("课程类型: ")price = input("课程价格: ")time = input("课程周期: ")schools[int(sc_id)].create_course(course_type, price, time, (course_id+1))elif choice_type == '2':if schools[int(sc_id)].classrooms == []:room_id = 0else:room_id = int(schools[int(sc_id)].classrooms[-1].id)classroom_name = input("班级名称: ")schools[int(sc_id)].create_classroom(classroom_name, (room_id+1))elif choice_type == '3':if schools[int(sc_id)].staffs == []:staff_id = 0else:staff_id = int(schools[int(sc_id)].staffs[-1].id)for x in schools[int(sc_id)].courses:print(x.id, x.type)course_id = int(input("教师教授课程编号: "))name = input("教师姓名: ")age = input("教师年龄: ")sex = input("教师性别: ")salary = input("教师薪水: ")t = Teacher(name, age, sex, salary, schools[int(sc_id)].courses[course_id-1], schools[int(sc_id)], (staff_id+1))schools[int(sc_id)].hire(t)elif choice_type == '4':for classroom in schools[int(sc_id)].classrooms:print(classroom.id, classroom.name)classroom_id = input("输入选择管理的班级的编号:")classroom_id = int(classroom_id)print("请选择要添加的课程编号:")for course in schools[int(sc_id)].courses:print(course.id, course.type)while 1:c = input("输入课程编号:")if c == "q":print("已选课程:")for x in schools[int(sc_id)].classrooms[classroom_id-1].courses:print(x.type)breakschools[int(sc_id)].classrooms[classroom_id-1].add_course(schools[int(sc_id)].courses[int(c)-1])schools[int(sc_id)].courses[int(c)-1].add_classroom(schools[int(sc_id)].classrooms[classroom_id-1])elif choice_type == "q":breakdef stuView(schools): # 学生视图for i in schools:print(i.id, i.name)sc_id = input("请选择您的学校(输入学校编号): ")if schools[int(sc_id)].students == []:stu_id = 0else:stu_id = int(schools[int(sc_id)].students[-1].stu_id)name = input("请输入姓名:")age = input("请输入年龄:")sex = input("请输入性别:")grade = input("请输入年级:")stu = Student(name, age, sex, grade, stu_id+1)schools[int(sc_id)].enroll(stu)print("请选择班级(输入班级编号):")for classroom in schools[int(sc_id)].classrooms:print(classroom.id, classroom.name)id = input("班级编号:")schools[int(sc_id)].classrooms[int(id)-1].add_stu(stu)stu.classroom = schools[int(sc_id)].classrooms[int(id)-1]stu.pay_tuition()def teacherView(schools): # 老师视图for i in schools:print(i.id, i.name)sc_id = input("请选择要您的学校编号: ")for x in schools[int(sc_id)].staffs:print(x.id, x.name)tc_id = int(input("请选择您的教师编号:"))print("您的班级如下:")for x in schools[int(sc_id)].staffs[tc_id-1].course_obj.classrooms:print(x.id, x.name)i = input("输入班级编号查看班级成员:")for x in schools[int(sc_id)].staffs[tc_id-1].course_obj.classrooms[int(i)-1].stus:print(x.stu_id, x.name)schools = []
with open("test.txt", 'rb') as f:try:schools = pickle.loads(f.read()) #data = pickle.load(f)except EOFError as e:print("little thing...")if schools == []:schools.append(School(0, '北京大学', 'beijing'))schools.append(School(1, '上海交大', 'shanghai'))print("add_done...")
while 1:print("1、学校入口; 2、学生入口; 3、教师入口")choice = input("请输入您要进行的操作(输入编号): ")if choice == '1':schoolView(schools)elif choice == '2':stuView(schools)elif choice == '3':teacherView(schools)elif choice == "q":with open("test.txt", "wb") as f:f.write(pickle.dumps(schools))break

选课系统(面向对象的编程方法)相关推荐

  1. python编写学生选课系统程序_python面向对象编程小程序- 选课系统

    选课系统 花了一晚上写的,可能还存在不足 1.程序框架 2.文件夹建立D:/选课系统 |___api | |___common_api.py |___bil | |___common.py |___c ...

  2. 【原创】面向对象作业:选课系统中用pickle储存多个对象间组合引用关系的那些坑...

    转载请注明出处:https://www.cnblogs.com/oceanicstar/p/9030121.html 想直接看结论先提前列出: 1.存储一个对象,文件不是真的给你存储的了对象这种东西, ...

  3. python完全支持面向对象编程思想_面向对象的编程思想和Python的继承和多态,特殊方法,引用计数...

    面向对象的编程思想和Python的类,访问和属性,继承 在上一文中我们了解到了,私有的属性的访问方式:实例名._类名__私有属性名. 一.私有的属性如何对外提供公有的取值和赋值方法呢?提供公有的方法作 ...

  4. 网上选课系统java大作业_Java面向对象设计大作业——公选课选课系统

    功能调查与系统功能框架图 功能 本系统模拟公选课选课系统,由学生或管理员使用该系统,管理员可以自定义增加或删除课程,学生可以进行选课和查看已选课程. 系统功能框架图 类的设计(UML类图) 类说明 A ...

  5. android 自定义menu背景,Android编程实现自定义系统菜单背景的方法

    本文实例讲述了Android编程实现自定义系统菜单背景的方法.分享给大家供大家参考,具体如下: 不多说,上图,见代码. package lab.sodino.menutest; import andr ...

  6. micropython plc_PLC线到底该怎么接?PLC系统如何设计?PLC软编程方法

    PLC和变频器屏蔽线的接法原则 为防止plc和变频器之间的控制信号线受空间电磁场的干扰,可在这些控制信号线的外层接屏蔽线,以提高系统的抗干扰能力.此种接线一定要注意,对屏蔽的接地点只能选取一点.不管是 ...

  7. C语音面向对象编程方法及应用

    ![C语音面向对象编程方法及应用] 在这里插入图片描述 ](https://img-blog.csdnimg.cn/20210301224403927.jpg?x-oss-process=image/ ...

  8. java语言基础-面向对象编程-方法(廖雪峰老师官网学习记录)

    Java是一种面向对象的编程语言. 面向对象编程,英文是Object-Oriented Programming,简称OOP. 面向对象编程,是一种通过对象的方式,把现实世界映射到计算机模型的一种编程方 ...

  9. 面向对象的需求分析方法

    面向对象的需求分析方法 面向对象的需求分析方法的核心是利用面向对象的概念和方法为软件需求建造模型.它包含面向对象风格的图形语言机制和用于指导需求分析的面向对象方法学. 面向对象的思想最初起源于 20世 ...

最新文章

  1. 《LoadRunner 没有告诉你的》之三——理发店模型
  2. 提示语_《流浪地球》里洗脑的交通提示语怎么来的?吴京可能要“负全责”
  3. spark on yarn参数: 任务优先级
  4. 爱情,是我一生中最虔诚的信仰
  5. css块元素与行内元素特点,CSS区分块级元素和行内元素
  6. Java基础——分隔符
  7. Cheat Engine(CE)的下载和安装指南以及相关教程
  8. 进入mariadb_MariaDB基础操作
  9. 【解读黑客】何为Rootkit?
  10. 前端换肤功能如何实现
  11. linux——搭建NTP服务器
  12. 经历与价值(刘学愚)
  13. [2020-07-23]备战考博的一点点经历
  14. 单片机---12---DMX512
  15. 转了一个女人的帖子。呵呵,我们也多学学如何做生意!
  16. 草图大师自带模型库在哪里_大师在20分钟或更短的时间内创建您的第一个神经网络模型...
  17. Qt实践3: 图片浏览器
  18. 浅谈搜索引擎SEO(HTML/CSS)
  19. 项目13 路由器与网桥的设置
  20. 番外1索尔港的一分钟——《地与光》

热门文章

  1. 沉痛悼念“中国航天之父”、我校创始人之一、近代力学系首任系主任钱学森先生
  2. 横冲直撞html5,6系横冲直撞 5系列最后的疯狂
  3. Bonobo.Git.Server 401 Error
  4. A Survey of Symbolic Execution Techniques 符号执行综述
  5. 开放科研:数据科学场景下如何让研究更加开放?
  6. 数据湖常用查询优化技术
  7. 好色机器人的艳遇_机器人艳遇:《机器人的旅行》
  8. php相册管理系统实验总结,【美优 php 单用户相册管理系统怎么用】美优 php 单用户相册管理系统好不好_使用技巧-ZOL软件百科...
  9. MySQL like模糊匹配是否走索引
  10. 音频codec调试心得