需求:
實現代碼:
# 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