亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python實現(xiàn)大學人員管理系統(tǒng)

 更新時間:2019年10月25日 10:31:23   作者:killeri  
這篇文章主要為大家詳細介紹了python實現(xiàn)大學人員管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

python作為一個面對對象的程序設計語言,實現(xiàn)一個人員管理系統(tǒng)有自己關(guān)于類的方法。

首先,通過定義一個人員的類對象,實現(xiàn)對于人員公共特性的支持,公共的特性包括:姓名,性別,出生日期等,用一個Person類來表示。大學里總的來說分為兩種身份的人:學生(Student)和職工(Staff),這兩種有自己的特性,比如學生信息就有學號,課程,成績等;職工有職工號,職位,薪水等。

利用python類對象的繼承機制我們就可以很方便的表示這兩種身份的人。

我們首先定義一個Person類,這個類用于保存共有的特性

import datetime

class PersonValueError(ValueError):
 pass
class PersonTypeError(TypeError):
 pass

class Person:
 _num = 0
 # 類屬性,這個屬性在類內(nèi)使用(_X)屬性一般默認只能在類內(nèi)使用
 def __init__(self, name, sex, birthday, ident):
 if not (isinstance(name, str) and sex in ("女", "男")):
  raise PersonValueError(name, sex)
  # 用于檢查輸入時的實參是否符合要求
 try:
  birthday = datetime.date(*birthday)
  # *birthday表示其參數(shù)是一個可迭代的對象(元祖,列表等)
  # 返回一個日期對象(year,month,day),這個date類的
  # 構(gòu)造函數(shù)會檢查輸入年月日的合法性
 except:
  raise PersonValueError("wrong date:", birthday)
 self._name = name
 self._sex = sex
 self._birthday = birthday
 self._id = ident
 Person._num += 1

 def id(self):return self._id
 def name(self):return self._name
 def sex(self):return self._sex
 def birthday(self):return self._birthday
 def age(self): return (datetime.date.today().year - self._birthday.year)
 # 用于獲取一個單體的某個信息
 # 算出年齡(today方法的year屬性用于給出今年)
 def set_name(self, name): # 修改名字
 if not isinstance(name, str):
  raise PersonValueError("set_name", name)
 self._name = name
 # 用于修改名字
 def __lt__(self, another):
 # 當實例出現(xiàn)在小于號兩邊時會自動調(diào)用
 # 類似的有:__gt__: 大于; __le__:小于等于; __ge__: 大于等于;
 # __eq__: 等于; __ne__: 不等于
 if not isinstance(another, Person):
  raise PersonTypeError(another)
 return self._id < self._id
 # 用于之后的排序使用
 
 @classmethod
 def num(cls):
 return Person._num

 def __str__(self):
 return " ".join((str(self._id), self._name, self._sex, str(self._birthday)))
 # 運算重載符:當實例出現(xiàn)在print函數(shù)中時,自動調(diào)用這個方法

 def details(self):
 return ", ".join(("編號:" + str(self._id),
    "姓名:" + self._name,
    "性別:" + self._sex,
    "出生日期:" + str(self._birthday)))

#
# p1 = Person("謝雨潔", "女", (1995, 7, 30), 1201510111)
# p2 = Person("汪力強", "男", (1990, 2, 17), 1201380324)
# p3 = Person("張子玉", "女", (1974, 10, 14), 3331747032)
# p4 = Person("李國棟", "男", (1962, 5, 24), 1293848593)
#
# plist = [p1, p2, p3, p4]
# for p in plist:
# print(p)
# # 這里就會直接調(diào)用實例方法__str__
#
# print("\nAfter sorting:")
# plist.sort()
# # 這里就調(diào)用的運算重載符__lt__(很重要的一個知識點,如何通過實例方法實現(xiàn)對類多個實例進行排序)
# for p in plist:
# print(p.details())
#
# print("people created:", Person.num(), "\n")

以上實現(xiàn)了一個通用的人信息的類,接下來有學生和職工的類都是繼承自這個基類。

接下來我們看學生類的實現(xiàn):

提前講一下,學生類有一個學號的自動生成函數(shù),在類內(nèi)自動調(diào)用生成學號

class Student(Person):
 _id_num = 0
 
 # 下面這個類方法可以說是很經(jīng)典的使用,對于初學者來說,對于深入理解類有幫助
 @classmethod
 **def _id_gen(cls):
 # 自動生成學號的類內(nèi)部函數(shù)(該函數(shù)只在類的內(nèi)部調(diào)用)
 cls._id_num += 1
 year = datetime.date.today().year
 return "1{:04}{:05}".format(year, cls._id_num)
 # 后面的04, 05代表是位數(shù),不足前面補零**

 def __init__(self, name, sex, birthday, department):
 Person.__init__(self, name, sex, birthday, Student._id_gen())
 # 這里通過調(diào)用之前基類的初始化函數(shù)
 # 這里調(diào)用了之前定義的生成學號的類方法
 self._department = department
 self._enroll_date = datetime.date.today()
 self._courses = {} #實例屬性用來記錄該學生的課程以及成績

 def set_course(self, course_name):
 self._courses[course_name] = None
 # 輸入所有的課程

 def set_score(self, course_name, score):
 if course_name not in self._courses:
  raise PersonValueError("No this course selected:",
     course_name)
 self._courses[course_name] = score
 # 當然我們對于學生的檔案里首先時學生要挑選好課程,然后才有分數(shù)
 # 首先判斷課程在不在已選的課程表里,然后再是給他輸入分數(shù)

 def scores(self):
 return [(cname, self._courses[cname])
  for cname in self._courses]
 # 將課程和分數(shù)用元祖的形式輸出

 def details(self):
 return ", ".join((Person.details(self),
    "入學日期:" + str(self._enroll_date),
    "院系:" + self._department,
    "課程記錄:" + str(self.scores())))

# p1 = Student("謝雨潔", "女", (1995, 7, 30), "Physics")
# p2 = Student("汪力強", "男", (1990, 2, 17), "Mathematics")
# p3 = Student("張子玉", "女", (1974, 10, 14), "English")
# p4 = Student("李國棟", "男", (1962, 5, 24), "Comp.Sci")
#
# print(p1.details())
# print(p1) # 繼承的基類Person的方法

最后時職工類,職工類不像前面的學生類,可以直接調(diào)用基類的初始化函數(shù),這里最好用super函數(shù),進行基類方法的調(diào)用

class Staff(Person):
 _id_num = 0
 @classmethod
 def _id_gen(cls, birthday):
 cls._id_num += 1
 birth_year = datetime.date(*birthday).year
 return "0{:04}{:05}".format(birth_year, cls._id_num)

 def __init__(self, name, sex, birthday, entry_date=None):
 super().__init__(name, sex, birthday,Staff._id_gen(birthday))
 if entry_date:
  try:
  self._entry_date = datetime.date(*entry_date)
  except:
  raise PersonValueError("Wrong date:", entry_date)
 else:
  self._entry_date = datetime.date.today()
 self._salary = 1720
 self._department = "未定"
 self._position = "未定"

 def set_salary(self, amount):
 if not type(amount) is int:
  raise TypeError
 self._salary = amount

 def set_position(self, position):
 self._position = position
 def set_department(self, department):
 self._department = department

 def details(self):
 return ", ".join((super().details(),
    "入職時間:" + str(self._entry_date),
    "院系:" + self._department,
    "職位:" + self._position,
    "工資:" + str(self._salary)))

p1 = Staff("張子玉", "女", (1974, 10, 16))
p2 = Staff("李國棟", "男", (1962, 5, 24))

print(p1)
print(p2)

p1.set_department("數(shù)學")
p1.set_position("副教授")
p1.set_salary(8400)

print(p1.details())
print(p2.details())

代碼參考《數(shù)據(jù)結(jié)構(gòu)與算法 python語言描述》
強推這本書,對于深入理解python很有幫助。

更多學習資料請關(guān)注專題《管理系統(tǒng)開發(fā)》。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python中count統(tǒng)計指定字符、元素出現(xiàn)次數(shù)的實現(xiàn)

    Python中count統(tǒng)計指定字符、元素出現(xiàn)次數(shù)的實現(xiàn)

    本文主要介紹了Python中count統(tǒng)計指定字符、元素出現(xiàn)次數(shù)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • 關(guān)于jupyter代碼自動補全設置方式

    關(guān)于jupyter代碼自動補全設置方式

    這篇文章主要介紹了關(guān)于jupyter代碼自動補全設置方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • python 怎樣進行內(nèi)存管理

    python 怎樣進行內(nèi)存管理

    這篇文章主要介紹了python 是如何進行內(nèi)存管理的,幫助大家更好的理解和學習python,感興趣的朋友可以了解下
    2020-11-11
  • 詳解python uiautomator2 watcher的使用方法

    詳解python uiautomator2 watcher的使用方法

    這篇文章主要介紹了python uiautomator2 watcher的使用方法,該方是基于uiautomator2如下版本進行驗證,本文給大家介紹的非常詳細,需要的朋友可以參考下
    2019-09-09
  • 深入理解python中的atexit模塊

    深入理解python中的atexit模塊

    atexit模塊很簡單,只定義了一個register函數(shù)用于注冊程序退出時的回調(diào)函數(shù),我們可以在這個回調(diào)函數(shù)中做一些資源清理的操作。下面這篇文章主要介紹了python中atexit模塊的相關(guān)資料,需要的朋友可以參考下。
    2017-03-03
  • Django實現(xiàn)一對多表模型的跨表查詢方法

    Django實現(xiàn)一對多表模型的跨表查詢方法

    今天小編就為大家分享一篇Django實現(xiàn)一對多表模型的跨表查詢方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • python獲取對象信息的實例詳解

    python獲取對象信息的實例詳解

    在本篇文章和里小編給大家整理的是一篇關(guān)于python獲取對象信息的實例詳解內(nèi)容,有興趣的朋友們可以學習參考下。
    2021-07-07
  • Python3enumrate和range對比及示例詳解

    Python3enumrate和range對比及示例詳解

    這篇文章主要介紹了Python3enumrate和range對比及示例詳解,在Python中,enumrate和range都常用于for循環(huán)中,enumrate函數(shù)用于同時循環(huán)列表和元素,而range()函數(shù)可以生成數(shù)值范圍變化的列表,而能夠用于for循環(huán)即都是可迭代的,需要的朋友可以參考下
    2019-07-07
  • Ubuntu下使用Python實現(xiàn)游戲制作中的切分圖片功能

    Ubuntu下使用Python實現(xiàn)游戲制作中的切分圖片功能

    這篇文章主要介紹了Ubuntu下使用Python實現(xiàn)游戲制作中的切分圖片功能,涉及Python針對圖片的讀取、載入、切分運算等相關(guān)操作技巧,需要的朋友可以參考下
    2018-03-03
  • Python數(shù)學建模StatsModels統(tǒng)計回歸可視化示例詳解

    Python數(shù)學建模StatsModels統(tǒng)計回歸可視化示例詳解

    圖形總是比數(shù)據(jù)更加醒目、直觀。解決統(tǒng)計回歸問題,無論在分析問題的過程中,還是在結(jié)果的呈現(xiàn)和發(fā)表時,都需要可視化工具的幫助和支持
    2021-10-10

最新評論