python用面向對象的編程方法開發選課系統

需求:
在這裏插入圖片描述
實現代碼:

# Author: Severen

import pickle

class Course(object): # 課程類
    def __init__(self, type, price, time, id):
        self.id = id
        self.type = type
        self.price = price
        self.time = time

        self.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 = name
        self.id = id

        self.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 = id
        self.name = name
        self.addr = addr

        self.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 = name
        self.age = age
        self.sex = sex

    def tell(self):
        pass


class Teacher(SchoolMember): # 老師類
    def __init__(self, name, age, sex, salary, course_obj, school, id):
        super(Teacher, self).__init__(name, age, sex)
        self.id = id
        self.salary = salary
        self.course_obj = course_obj
        self.school =school

    def tell(self):
        print("""
		--- info of Teacher:
		Name: %s
		Age: %s
		Sex: %s
		Salary: %s
		Course: %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 = id
        self.grade = grade

        self.classroom = None

    def tell(self):
        print("""
		--- info of Student:
		Name: %s
		Age: %s
		Sex: %s
		Stu_id: %s
		Grade: %s
		""" % (self.name, self.age, self.sex, self.stu_id, self.grade))

    def pay_tuition(self): # 學費
        tuition = 0
        for 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 = 0
            else:
                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 = 0
            else:
                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 = 0
            else:
                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)
                    break
                schools[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":
            break

def stuView(schools): # 學生視圖
    for i in schools:
        print(i.id, i.name)
    sc_id = input("請選擇您的學校(輸入學校編號): ")
    if schools[int(sc_id)].students == []:
        stu_id = 0
    else:
        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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章