Python - Programmation orientée objet - pratique (6)

python programmation orient objet pratique


Besoins

Concevoir un système de gestion des établissements de formation,Il y a un quartier général、Campus,Il y a des cadets、Professeur.、Personnel,Réaliser les exigences spécifiques suivantes:

  • Il y a plusieurs cours,Les cours doivent être tarifés
  • Il y a plusieurs classes,La classe est liée au programme
  • Il y a plusieurs étudiants,Les élèves s'inscrivent en classe,Payer les frais du cours correspondant à cette classe
  • Il y a plusieurs professeurs,Peut être distribué sur différents Campus,Prendre des cours dans différentes classes
  • Il y a plusieurs employés,Peut être distribué sur différents Campus,Il est possible de faire des statistiques sur les soldes des comptes de chaque campus au siège social、Nombre de salariés、Nombre de stagiaires
  • Les étudiants peuvent abandonner l'école

Diagramme de classe

Code de mise en œuvre

Ce n'est certainement pas le Code optimal, Si quelqu'un a une meilleure solution, Commentez - moi

#!usr/bin/env python
# -*- coding:utf-8 _*-
"""
# author: Notes de test pour petit ananas
# blog: https://www.cnblogs.com/poloyy/
# time: 2021/9/7 11:18 Après - midi
# file: 18_Sur le terrain6.py
"""
# Cours
class Course(object):
def __init__(self, name, price):
# Nom du cours、Prix des cours:Propriété privée
self.__name = name
self.__price = price
@property
def name(self):
return self.__name
@name.setter
def name(self, name):
self.__name = name
@property
def price(self):
return self.__price
@price.setter
def price(self, price):
self.__price = price
# Les humains
class Person(object):
def __init__(self, name, sex, phone):
self.name = name
self.sex = sex
self.phone = phone
def __str__(self):
return f"Nom:{self.name}, Sexe{self.sex}, Téléphone:{self.phone}"
# Classe d'étudiants
class Student(Person):
def __init__(self, name, sex, phone, balance):
super(Student, self).__init__(name, sex, phone)
# Solde étudiant、Classe inscrite:Propriété privée
self.__balance = balance
self.__class_list = []
@property
def classList(self):
return [class_.name for class_ in self.__class_list]
# Inscription en classe
def addClass(self, class_):
price = class_.price
# 1、Si le solde étudiant est supérieur aux frais de classe
if self.__balance > price:
# 2、Inscription réussie
self.__class_list.append(class_)
# 3、Moins les frais d'inscription
self.__balance -= price
# 4、Les élèves actuels doivent également être ajoutés à la liste des élèves de la classe.
class_.addStudent(self)
# 5、Augmentation du nombre total de classes
class_.totalBalance()
return
print("Solde insuffisant,Impossible de s'inscrire à la classe")
# Abandon scolaire
def removeClass(self, class_):
if class_ in self.__class_list:
# 1、Supprimer la liste des classes d'inscription
self.__class_list.remove(class_)
# 2、Liste des élèves de la classe supprimer l'étudiant actuel
class_.removeStudent(self)
print("La classe n'existe pas,Impossible d'abandonner l'école")
# Catégorie de personnel
class Employ(Person):
def __init__(self, name, sex, phone):
super(Employ, self).__init__(name, sex, phone)
# Salaire:Propriété privée
self.money = 0
# Enseignants
class Teacher(Employ):
def __init__(self, name, sex, phone):
super(Teacher, self).__init__(name, sex, phone)
# Classe d'enseignement:Propriété privée
self.__class_list = []
@property
def classList(self):
return [class_.name for class_ in self.__class_list]
# Enseignement
def teachClass(self, class_):
# 1、Ajouter une classe à la liste des conférences
self.__class_list.append(class_)
# 2、Classe ajouter un instructeur
class_.teacher = self
# Classe
class Class(object):
def __init__(self, name):
# Nom de la classe、Frais de classe、Liste des cours、Liste des catégories d'étudiants、Professeur de classe、École:Propriété privée
self.__name = name
self.__price = 0
self.__course_list = []
self.__student_list = []
self.__teacher = None
self.__balance = 0
self.__school = None
@property
def name(self):
return self.__name
@name.setter
def name(self, name):
self.__name = name
@property
def school(self):
return self.__school.name
@school.setter
def school(self, school):
self.__school = school
@property
def price(self):
return self.__price
@property
def courseList(self):
return self.__course_list
def addCourse(self, course):
# 1、Frais de classe
self.__price += course.price
# 2、Ajouter à la liste des cours
self.__course_list.append(course)
@property
def studentList(self):
return [stu.name for stu in self.__student_list]
def addStudent(self, student):
self.__student_list.append(student)
def removeStudent(self, student):
self.__student_list.remove(student)
@property
def teacher(self):
return self.__teacher
@teacher.setter
def teacher(self, teacher):
self.__teacher = teacher
@property
def balance(self):
return self.__balance
# Compter le revenu d'une classe
def totalBalance(self):
self.__balance = len(self.__student_list) * self.__price
# Classe scolaire
class School(object):
def __init__(self, name, balance):
# Nom de l'école、Solde scolaire、Liste des employés de l'école:Propriété publique
self.name = name
self.balance = balance
self.employ_list = []
# Liste des campus:Propriété privée
self.__school_list = []
def __str__(self):
return f"L'école:{self.name} Solde:{self.balance}"
# Obtenir la liste des écoles secondaires
@property
def schoolList(self):
return [school.name for school in self.__school_list]
# Ajouter une branche
def addBranchSchool(self, school):
self.__school_list.append(school)
# Ajouter un employé
def addEmploy(self, employ):
self.employ_list.append(employ)
# Voir la liste des employés
def getEmploy(self):
return [emp.name for emp in self.employ_list]
# Statistiques du solde des comptes de chaque branche
def getTotalBalance(self):
res = {}
sum = 0
for school in self.__school_list:
# 1、Régler le solde de la branche primaire
school.getTotalBalance()
res[school.name] = school.balance
# 2、Solde cumulé des campus
sum += school.balance
res[self.name] = sum
return res
# Nombre d'employés
def getTotalEmploy(self):
sum_emp = 0
for school in self.__school_list:
sum_emp += len(school.employ_list)
sum_emp += len(self.employ_list)
return sum_emp
# Nombre total d'étudiants
def getTotalStudent(self):
sum_stu = 0
for school in self.__school_list:
sum_stu += school.getTotalStudent()
return sum_stu
# Branche
class BranchSchool(School):
def __init__(self, name, balance):
super(BranchSchool, self).__init__(name, balance)
# Liste des classes de l'école:Propriété privée
self.__class_list = []
# Obtenir la liste des classes
@property
def classList(self):
return [class_.name for class_ in self.__class_list]
# Ajouter une classe
def addClass(self, class_):
# 1、Ajouter une classe
self.__class_list.append(class_)
# 2、Ajouter un employé enseignant
self.addEmploy(class_.teacher)
# Obtenir le solde total
def getTotalBalance(self):
for class_ in self.__class_list:
# 1、Recettes de la classe de règlement
class_.totalBalance()
# 2、Revenu cumulé de la classe
self.balance += class_.balance
# Obtenir le nombre total d'étudiants
def getTotalStudent(self):
sum_stu = 0
for class_ in self.__class_list:
sum_stu += len(class_.studentList)
return sum_stu
# École générale
school = School("Junior ananas General School", 100000)
# Campus
bj1 = BranchSchool("Xiaochuanhuan Beijing Branch", 2222)
sz1 = BranchSchool("Shenzhen Nanshan University City Branch", 5555)
# Ajouter une branche
school.addBranchSchool(bj1)
school.addBranchSchool(sz1)
# Classe d'initialisation
class1 = Class("Python Cours de base")
class2 = Class("Python Classe avancée")
# Cours d'initialisation
c1 = Course("Python Base", 666)
c2 = Course("Python Niveau avancé", 1666)
c3 = Course("Python Sur le terrain", 2666)
# Ajouter un cours
class1.addCourse(c1)
class1.addCourse(c2)
class2.addCourse(c2)
class2.addCourse(c3)
# Initialiser le professeur
tea1 = Teacher("Petit professeur d'ananas", "girl", 1355001232)
tea2 = Teacher("Grand professeur d'ananas", "boy", 1355001232)
# Enseignement par les enseignants
tea1.teachClass(class1)
tea2.teachClass(class2)
bj1.addClass(class1)
sz1.addClass(class2)
# Initialiser l'étudiant
stu1 = Student("Petit ananas", "girl", 1355001232, 50000)
stu2 = Student("Gros ananas", "boy", 1355001231, 50000)
stu3 = Student("Gros ananas", "girl", 1355001233, 10000)
# Inscription des étudiants
stu1.addClass(class1)
stu1.addClass(class2)
stu2.addClass(class1)
stu3.addClass(class2)
# Personnel ordinaire
emp1 = Employ("Petit employé ananas", "girl", 1355001232)
emp2 = Employ("Big ananas staff", "boy", 1355001231)
emp3 = Employ("Petit employé ananas", "girl", 1355001233)
print(bj1.getTotalStudent())
print(school.getTotalBalance())
print(school.getTotalEmploy())

Participation à cet articleTencent Cloud Self - media Sharing Plan,Bienvenue à la lecture,Partager ensemble.

版权声明
本文为[Notes de test pour les petits ananas]所创,转载请带上原文链接,感谢
https://javamana.com/2021/09/20210914180056941f.html

  1. Java 16 is coming online. You can't even use the features of Java 8, can you?
  2. Java (3) basic data types and their type conversion
  3. 一位Java大牛的BAT面试心得与经验总结,2021年Java春招面试经历,
  4. 一举拿下腾讯美团滴滴offer,快来瞧瞧这份Spring面试小抄!
  5. 一个Java应届生从上海离职,万字长文总结Java多进程,
  6. Seven design principles of java object-oriented design pattern
  7. 一個Java應届生從上海離職,萬字長文總結Java多進程,
  8. Un nouvel étudiant Java a quitté Shanghai et a résumé plusieurs processus Java.
  9. Prenez d'un coup l'offre de Tencent meituan et jetez un coup d'oeil à cette copie de l'entrevue de printemps!
  10. L'expérience et l'expérience d'un Maverick Java en matière d'entrevue sur les MTD, l'expérience de l'entrevue d'embauche du printemps Java en 2021,
  11. Interface graphique X: mise à jour des tables de rendu et optimisation du Code (compilation intégrée 10)
  12. Widget de vérification de fichiers personnalisés Linux
  13. Java thread pool - work queue
  14. [Part 7] - Summary of B2B2C e-commerce technology of spring cloud live mall managed by git branch
  15. Reflection type of Java Foundation
  16. Want to get started with data structures, but always fall under the pomegranate skirt of the linked list?
  17. Interviewer: do redis transactions satisfy atomicity?
  18. 一篇文章教你搞定计算机网络面试,350道Java面试真题分享,
  19. 一条正确的Java职业生涯规划,揭秘今年Java春招面试必问问题有哪些?
  20. 一名毕业三年的女程序媛面试头条经验,关于Redis主从节点数据过期一致性的思考,
  21. Huawei cloud guassdb (for redis) released a new version: Lua script and SSL connection encryption
  22. Java thread pool - work queue
  23. 一名畢業三年的女程序媛面試頭條經驗,關於Redis主從節點數據過期一致性的思考,
  24. Trois ans d'expérience d'entrevue avec une femme de programmation diplômée, une réflexion sur la cohérence de l'expiration des données de redis Master slave Node,
  25. Un plan de carrière Java correct, découvrez les questions que vous devez poser lors de l'entrevue d'embauche du printemps Java de cette année.
  26. 万字详解微服务的哨兵机制,架构师带你玩转Redis高性能缓存设计实战,
  27. Un article vous a appris à gérer les entrevues sur le Web, à partager 350 vraies questions d'entrevue Java,
  28. Jquery Tools Methodology collation, Sharing a little interview Experience
  29. Tutoriel de développement Java, compétences de base nécessaires pour interviewer un programmeur Java dans une grande usine,
  30. "Anti Mafia storm" has just finished, another criminal investigation play has come, and the supporting actor is more popular than the protagonist
  31. 萬字詳解微服務的哨兵機制,架構師帶你玩轉Redis高性能緩存設計實戰,
  32. L'architecte vous guidera dans la conception de cache haute performance de redis.
  33. Linux驱动开发: 杂项字符设备
  34. Jquery plug - in urianchor, app front end Development
  35. Linux驅動開發: 雜項字符設備
  36. Développement de pilotes Linux: périphériques de caractères divers
  37. Utilisez @ async dans Spring boot pour effectuer des appels asynchrones et accélérer l'exécution des tâches!
  38. $in jquery, Visualized Web Development Tool
  39. Le développement Java doit être fait. Les entrevues https demandent souvent une analyse complète.
  40. 不明白JVM虚拟机还怎么面试,一起刷完了这份1307页的Java面试宝典吧,
  41. 不断提升自己创造溢价的能力,字节跳动 阿里 华为 腾讯等大厂Java面试题,
  42. Jdk's Past Life: The Classic Features of Thin Number - java5 - - - 15 -, webfront Development
  43. Résumé des questions d'entrevue pour les ingénieurs en développement Java, analyse des questions d'entrevue à haute fréquence Dubbo,
  44. Améliorer continuellement leur capacité à créer des primes, et les questions d'entrevue Java d'Alibaba Huawei Tencent et d'autres grandes usines sont sautées en octets.
  45. Install docker YJ version of openSUSE 11.3
  46. Je ne comprends pas comment la machine virtuelle JVM peut encore interviewer, et j'ai terminé ce dictionnaire d'entrevue Java de 1307 pages.
  47. 中软国际Java机试,如何写出高效率的SQL?
  48. 中级Java工程师面试,阿里 头条 腾讯等大厂Java笔试题目分享,
  49. 两年Java开发经验,为什么spring能最好地改变Java?
  50. Echarts realizes the rotation of the moon (super simple, you can see it at a glance)
  51. Deux ans d'expérience dans le développement de Java, pourquoi Spring peut - il le mieux changer Java?
  52. Entretien d'ingénieur Java intermédiaire, partage de sujets d'examen écrit Java de grandes usines comme Alibaba headline Tencent,
  53. Zhongsoft International Java Machine test, comment écrire un SQL efficace?
  54. Reflection type of Java Foundation
  55. Comment gérer efficacement les changements dans les ressources k8s?Analyse du mécanisme de mise en œuvre de k8s informer
  56. Installation de jdk1.8
  57. MySQL column - Linux underlying interaction and RAID storage architecture
  58. Interviewer: do redis transactions satisfy atomicity?
  59. 兩年Java開發經驗,為什麼spring能最好地改變Java?
  60. Migration practice from zookeeper to Nacos