day07_final

北冥有鱼 北冥有鱼     2022-09-27     673

关键词:

博客地址:
一、作业需求

程序名称: 选课系统

角色:学校、学员、课程、讲师
要求:
1. 创建北京、上海 2 所学校
2. 创建linux , python , go 3个课程 , linuxpy 在北京开, go 在上海开
3. 课程包含,周期,价格,通过学校创建课程 
4. 通过学校创建班级, 班级关联课程、讲师
5. 创建学员时,选择学校,关联班级
6. 创建讲师角色时要关联学校, 
7. 提供两个角色接口
8. 学员视图, 可以注册, 交学费, 选择班级,
9. 讲师视图, 讲师可管理自己的班级, 上课时选择班级, 查看班级学员列表 , 修改所管理的学员的成绩 
10. 管理视图,创建讲师, 创建班级,创建课程

11. 上面的操作产生的数据都通过pickle序列化保存到文件里

学校视图:
    选择学校:
         1.创建班级
         2.创建讲师
         3.创建讲师
讲师:
   1.查看班级
   2.查看班级学员列表
学生:
   1.注册
   2.报名缴费
   3.选择班级

代码如下:

#/usr/bin/env python3
# -*_ coding:utf-8 -*-
# main.py

import sys
import json

class School(object):   #创建学校类


    def __init__(self, school_name, address):
        self.school_name = school_name
        self.address = address

    def create_class(self):   #创建班级
        print("欢迎创建班级".center(50, -))
        classroom_name = input("请输入班级名称:")
        classroom_period = input("请输入班级周期:")
        classroom_obj = Classroom(classroom_name, classroom_period, choice_school_obj.school_name)  # 班级的实例
        print("班级成功创建,班级信息如下".center(50, -))
        classrooms[classroom_name] = classroom_obj  # 将班级名与班级对象相关联
        classroom_obj.show_classroom_info()

    def hire_teacher(self):  #雇讲师
        print("欢迎雇用讲师".center(50, -))
        # print("已有讲师Name:%s, Course:%s, Classroom:%s")
        teacher_name = input("请输入讲师名字:")
        teacher_sex = input("请输入讲师性别:")
        teacher_age = input("请输入讲师年龄:")
        teacher_course = input("请输入讲师对应课程:")
        teacher_classroom = input("请输入讲师对应班级:")
        teacher = Teacher(teacher_name, teacher_sex, teacher_age, teacher_course,
                          teacher_classroom, choice_school_obj.school_name)  # 实例化讲师对象
        teacher_dict = {"teacher_shcool_name": teacher.teacher_school_name, "teacher_sex": teacher_sex,
                        "teacher_age": teacher_age, "teacher_course": teacher_course,
                        "teacher_classroom": teacher_classroom}  # 用字典来存放讲师信息

        teacher.show_teacher_info()
        # 通过json将讲师的字典反序列化到dic字典中

        if not dic:  # 字典如果为空
            dic[teacher_name] = teacher_dict  # 将讲师名与讲师对象相关联
            # 通过json将讲师的字典序列化到teacher_文件中
            json.dump(dic, open("teacher_db", "w", encoding=utf-8),
                      ensure_ascii=False, indent=2)
        else:  # 如果文件中已有讲师信息
            if dic.get(teacher_name):  # 字典中不存在key,则返回none,不曝错
                print("%s讲师已存在,不能创建名字相同的讲师" % teacher_name)
                flag = True
            elif not dic.get(teacher_name):
                dic[teacher_name] = teacher_dict
                json.dump(dic, open("teacher_db", "w", encoding=utf-8), ensure_ascii=False, indent=2)


    def create_course(self):  #创建课程
        print("迎欢创建课程".center(50, -))
        course_type = input("请输入课程类型[eg:技术/教育/自然科学/艺术...]:")
        course_name = input("请输入课程名称:")
        course_price = input("请输入课程价格:")
        course_period = input("请输入课程周期:")
        course = Course(course_type, course_name, course_price, course_period, choice_school_obj.school_name)
        print("课程成功创建,课程信息如下".center(50, -))
        courses_dict[course_name] = course  # 将课程名与课程对象相关联
        course.show_course_info()


class Course(object):       #课程类

    def __init__(self, course_type, course_name, course_price, course_period, course_place):
        self.course_type = course_type
        self.course_name = course_name
        self.course_price = course_price
        self.course_period = course_period
        self.course_place = course_place

    def show_course_info(self):
        print("课程类型:%s,名称:%s,价格:%s,周期:%s" % (self.course_type,self.course_name,
                                                         self.course_price, self.course_period))



class Classroom(object):     #班级类
    def __init__(self, classroom_name, classroom_period, classroom_school_name):
        self.classroom_name = classroom_name
        self.classroom_period = classroom_period
        self.classroom_school_name = classroom_school_name

    def show_classroom_info(self):
        print("班级名称:%s
班级周期:%s" % (self.classroom_name, self.classroom_period))


class SchoolMember(object):   # 学校成员类(学生/老师)

    def __init__(self, member_name, member_sex, member_age):
        self.member_name = member_name
        self.member_sex = member_sex
        self.member_age = member_age


class Student(SchoolMember):   #创建学生类(继承学校成员类)


    def __init__(self, stu_school, stu_name, stu_sex, stu_age, stu_id, stu_course, course_price):
        super(Student, self).__init__(stu_name, stu_sex, stu_age)
        self.stu_school = stu_school
        self.stu_id = stu_id
        self.stu_course = stu_course
        self.course_price = course_price

    def show_student_info(self):
        print("""
        ---------------学生%s的信息--------------
        Name:%s
        School:%s
        Sex:%s
        Age:%s
        ID:%s
        Course:%s
        Course_price:%s
        """ % (stu1.member_name,stu1.member_name,stu1.stu_school,stu1.member_sex,
               stu1.member_age, stu1.stu_id, stu1.stu_course,stu1.course_price))



class Teacher(SchoolMember):  #讲师类

    def __init__(self, teacher_name, teacher_sex, teacher_age, teacher_course, teacher_classroom, teacher_school_name):
        super(Teacher, self).__init__(teacher_name, teacher_sex, teacher_age)
        self.teacher_course = teacher_course
        self.teacher_classroom = teacher_classroom
        self.teacher_school_name = teacher_school_name

    def show_teacher_info(self):
        print("""
        -------------讲师%s的信息-------------
        Name:%s
        Sex:%s
        Age:%s
        Course:%s
        Classroom:%s
        School_name:%s
        """ % (self.member_name, self.member_name, self.member_sex, self.member_age,
                                   self.teacher_course, self.teacher_classroom, self.teacher_school_name))

    def show_classroom(self, te_name):    #查看班级信息   传一个班级对象,通过对象查看班级信息
        class_room = Classroom(teachers_dict[te_name].teacher_classroom,
                               courses_dict[teachers_dict[te_name].teacher_course].course_period,
                               choice_school_obj.school_name)
        class_room.show_classroom_info()

    def show_student(self):     #查看学生信息    传一个学生对象,通过对象查看学生信息
        stu_name = input("请输入要查看学生名字:")
        stu_dict[stu_name].show_student_info()


def stu_regiest():  # 学生注册方法,目的是为了生成学生对象
    global stu1          #定义学生变量为全局变量
    stu_name = input("请输入学生姓名:")
    stu_sex = input("请输入学生性别:")
    stu_age = input("请输入学生年龄:")
    stu_id = input("请输入学生序号")
    print("1.%s[%sRMB], 2.%s[%sRMB], 3.%s[%sRMB], 4.返回" % (course1.course_name, course1.course_price,
                                                           course2.course_name, course2.course_price,
                                                           course3.course_name, course3.course_price))
    while True:
        course_num = input("请选择课程:")
        if course_num == 1:
            stu_course = course1.course_name
            stu1 = Student(choice_school_obj.school_name, stu_name, stu_sex,
                           stu_age, stu_id, stu_course,course1.course_price)
            stu_dict[stu_name] = stu1
            break
        elif course_num == 2:
            stu_course = course2.course_name
            stu1 = Student(choice_school_obj.school_name, stu_name, stu_sex,
                           stu_age, stu_id, stu_course, course2.course_price)
            stu_dict[stu_name] = stu1
            break
        elif course_num == 3:
            stu_course = course3.course_name
            stu1 = Student(choice_school_obj.school_name, stu_name, stu_sex,
                           stu_age, stu_id, stu_course, course3.course_price)
            stu_dict[stu_name] = stu1
            break
        elif course_num == 4:
            break
        else:
            continue
    stu1.show_student_info()


def students_view():      #学员视图
    while True:
        print("1.欢迎注册
"
              "2.返回
"
              "3.退出")
        num = input("请选择:")
        if num == 1:
            stu_regiest()        #调用学生注册方法并生成学生对象
        elif num == 2:
            break
        elif num == 3:
            sys.exit()
        else:
            continue


def teacher_view():     #讲师视图
    name = input("请输入讲师姓名:")
    while True:
        if dic.get(name) or teachers_dict.get(name):
            print("欢迎%s讲师".center(50, -) % name)
        elif not dic.get(name) and not teachers_dict.get(name):
            print("%s讲师不存在" % name)
            break
        print("1.查看班级
"
              "2.查看学员信息
"
              "3.返回
"
              "4.退出")
        print("功能未完善,只能输入Alex,cheng")
        num = input("请选择:")
        if num == 1:
            if teachers_dict.get(name):
                teachers_dict[name].show_classroom(name)    #查看班级信息
            else:
                print("功能未完善,只能输入Alex,cheng")
        elif num == 2:
            if teachers_dict.get(name):
                teachers_dict[name].show_student()        #查看学生信息
            else:
                print("功能未完善,只能输入Alex,cheng")

        elif num == 3:
            break
        elif num == 4:
            sys.exit()
        else:
            continue


def school_view():      #学校视图
    flag = False
    while not flag:
        print("1.创建班级
"
              "2.创建课程
"
              "3.雇用讲师
"
              "4.返回")
        num = input("请选择:")
        if num == 1:
            choice_school_obj.create_class()
        elif num == 2:
            choice_school_obj.create_course()
        elif num == 3:
            choice_school_obj.hire_teacher()
        elif num == 4:
            flag = True
        else:
            continue


def main():
    global dic  # 全局变量
    global choice_school_obj
    dic = {}

    while True:
        print("请选择学校".center(50, *))
        choice_school = input("1.%s, 2.%s, 3.返回, 4.退出" % (s1.school_name, s2.school_name))
        if choice_school == 1:
            choice_school_obj = s1  # 将对象引用传给choice_school
        elif choice_school == 2:
            choice_school_obj = s2
        elif choice_school == 3:
            break
        elif choice_school == 4:
            sys.exit()
        else:
            continue
        while True:
            print("1.学员视图
"
                  "2.讲师视图
"
                  "3.学校管理视图
"
                  "4.返回
"
                  "5.退出")
            num = input("请选择视图:")

            if num == 1:
                print("欢迎进入学员视图".center(50, *))
                students_view()
            elif num == 2:
                print("欢迎进入讲师视图".center(50, *))
                teacher_view()
            elif num == 3:
                print("欢迎进入学校管理视图".center(50, *))
                school_view()
            elif num == 4:
                break
            elif num == 5:
                sys.exit()
            else:
                continue




if __name__ == __main__:
    classrooms = {}
    teachers_dict = {}
    courses_dict = {}
    stu_dict = {}
    s1 = School("老男孩", "北京")      #实例化学校
    s2 = School("路飞学院", "上海")
    course1 = Course("技术", "Linux", "11800", "1 year", "北京")
    course2 = Course("技术", "Python", "6400", "7 month", "北京")   #实例化三个课程
    course3 = Course("技术", "CCIE", "2400", "4 month", "广州大学城")
    courses_dict["Linux"] = course1
    courses_dict["Python"] = course2
    courses_dict["CCEI"] = course3
    t1 = Teacher("Alex", "M", "33", "Python", "S13", "Oldboy")
    t2 = Teacher("cheng", "M", "35", "CCIE", "魔鬼训练营", "Pinginglab")    #实例化两个讲师
    teachers_dict["Alex"] = t1
    teachers_dict["cheng"] = t2
    teacher_dict = {"teacher_name": "Alex", "teacher_sex": "M", "teacher_age": "33",
                    "teacher_course": "Python", "teacher_classroom": "S13"}
    teacher_dict = {"teacher_name": "Eric", "teacher_sex": "M", "teacher_age": "35",
                    "teacher_course": "Python", "teacher_classroom": "S14"}
    print(s1,s2)
    main()

 

day04_final

作业需求:模拟实现一个ATM+购物商城程序额度15000或自定义实现购物商城,买东西加入购物车,调用信用卡接口结账可以提现,手续费5%每月22号出账单,每月10号为还款日,过期未还,按欠款总额万分之5每日计息支持多账户登... 查看详情

day37(07/18)锁

2.1.2Thread类继承式创建#继承Thread式创建importthreadingimporttimeclassMyThread(threading.Thread):def__init__(self,num):threading.Thread.__init__(self)self.num=numdefrun(self):print("runningonnumber:%s"%self.num) 查看详情

day07(集合)

集合是一个无序的,不重复的数据组合。作业: 去重,把一个列表变成集合,就自动去重了 关系测试,测试两组数据之前的交集、差集、并集等关系代码:list_1={1,4,65,7,9}list_2={2,5,7,8,9}print(list_1.intersection(list_2))#交集(s&t)print(l... 查看详情

day07:集合的使用0220

list_1=set([4,5,6,7])list_2=set([4,8,9])list_3=set([4,5])list_4=set([6,7])a=(2,3)b=(2)#list_3是list_1的子集则为真:print(list_3.issubset(list_1))#b属于a则为真:print(bina)#找出列表中元素的个数:print(len(list_2))#:a,b中没有任何相同的 查看详情

day07面向对象进阶

类.__init__查看对象的函数属性类.__dict__查看类的属性对象定义在类内部的变量,是所有对象共有的,id相同定义在类内部的函数,是绑定在所有对象上,给对象用的obj.func()就会吧obj传到func(obj)类内部的方法都是绑定方法,绑定到... 查看详情

前端_day07

浮动一.浮动  1.元素脱标:元素脱标是浮动的元素脱离了标准文档流  2.span标签和div标签设置为浮动后就具有了行内块的属性,即可以和其他元素共用一行,也可设置宽高  3.收缩:如果一个block元素浮动之后,宽度就由内容决定... 查看详情

day07_面向对象第二天

 1、构造方法(掌握)1、构造方法的特点(掌握)   A、方法名必须和类名保持一致   B、没有返回值类型并且没有具体的返回值 2、构造方法的作用(掌握)   给对象的属性初始化 3、注意事项... 查看详情

day04_07while循环01

while循环结构:#while条件:print("any")print("any")死循环案例num=1whilenum<=10:print(num)在CMD中按CTRL+C可以中断输出1-10的数字num=1whilenum<=10:print(num)num+=1输出1-100之间所有的偶数num=2whilenum<=100:print(num)num+=2方法二:num 查看详情

day19_07_vue教程之vue表单输入

Vue教程之Vue表单输入一.什么是双向数据绑定Vue.js是一个MVVM框架,即数据双向绑定,即当数据发生变化的时候,视图也就发生变化,当视图发生变化的时候,数据也会跟着同步变化。这也算是Vue.js的精髓之处了。值得注意的是,... 查看详情

day19_07_vue教程之vue表单输入

Vue教程之Vue表单输入一.什么是双向数据绑定Vue.js是一个MVVM框架,即数据双向绑定,即当数据发生变化的时候,视图也就发生变化,当视图发生变化的时候,数据也会跟着同步变化。这也算是Vue.js的精髓之处了。值得注意的是,... 查看详情

面向对象day07:类的属性-继承-经典类

本节内容类的公有属性析构函数类的继承新式类和经典类一、类的公有属性一、概述  前面我们讲了类的私有属性,现在我们来说说类的公有属性,这边很容易被人弄混淆,有人觉的,在__init__()构造方法中,除了私有属性,... 查看详情

java中final,finally和finalize区别

Day11_SHJavaTraing_4-18-2017Java中final,finally和finalize区别1.final—修饰符(关键字)  ①final修饰类,表示该类不可被继承  ②final修饰函数,表示继承这个类的子类中不能重写这个函数  ③final修饰变量,表示该变量的值不可改变... 查看详情

day07

011packagecom.tedu.demo;23publicclassArrayMethodTest_01{45/**6*7*/8publicstaticvoidmain(String[]args){9int[]arr={1,3,56,45,23,78};10//selectSort(arr);11bubbleSort(arr);12printArray(arr);1314}1516//定义方 查看详情

java入门零基础小白教程day07_继承&抽象(代码片段)

day07-JAVAOOP课程目标1.【理解】什么是继承2.【掌握】继承的使用3.【理解】继承中的成员的特点4.【理解】super和this的作用5.【理解】什么是抽象6.【掌握】抽象的使用一.继承1.1继承概述多个类中存在相同属性和行为时,将这... 查看详情

java入门零基础小白教程day07_继承&抽象(代码片段)

day07-JAVAOOP课程目标1.【理解】什么是继承2.【掌握】继承的使用3.【理解】继承中的成员的特点4.【理解】super和this的作用5.【理解】什么是抽象6.【掌握】抽象的使用一.继承1.1继承概述多个类中存在相同属性和行为时,将这... 查看详情

day07-01-面向对象进阶

类:属性(实例变量,类变量,私有属性__var)    方法(构造方法,析构函数:默认就存在,写了就是重构了函数)对象:封装(把一些功能实现细节不对外暴露)      继承(代码重用,单... 查看详情

封装构造方法privatestatic与this关键字main()_day07

1:成员变量和局部变量的区别(理解)     (1)定义位置区别:          成员变量:定义在类中,方法外。          局部变量:定义在方法中,或者方法声明上。&nb... 查看详情

2022-07-23第二第五小组张晟源

JAVA(继承,final,Object)final:最终的可以修饰类,属性和方法final修饰的属性是常量,不能改变常量命名规则(规范):单词大写,多个单词用“_”隔开常量不能只声明不赋值final修饰的类叫最终类,修饰后不能有子类继承(... 查看详情