类定义实例:学校人事管理系统

为一个学校的人员管理系统定义所需要的表示人员信息的类,它们都是数据抽象(ADT)

问题分析和设计

学校首先有两大类员工,学生与教职工,他们都是需要在系统里面表示的对象。分析这两类人员需要记录的信息,我们可以发现其具有的很多异同点:

  • 姓名,性别、年龄,学号,教职工号
  • 学生又有院系、注册时间,所修课程
  • 教职工有入职时间、院系、职位和工资等信息

由于这两类人员的信息既有共性又有特殊性,特别适合采用面向对象的类继承机制处理

基本人员Person的ADT的设计:

学生类ADT的设计:

教职工 ADT的设计:

import datetimeclass PersonValueError(ValueError):passclass PersonTypeError(TypeError):passclass Person:_num = 0# 类属性,这个属性在类内使用(_X)属性一般默认只能在类内使用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表示其参数是一个可迭代的对象(元祖,列表等)# 返回一个日期对象(year,month,day),这个date类的# 构造函数会检查输入年月日的合法性except:raise PersonValueError("wrong date:", birthday)self._name = nameself._sex = sexself._birthday = birthdayself._id = identPerson._num += 1def id(self):return self._iddef name(self):return self._namedef sex(self):return self._sexdef birthday(self):return self._birthdaydef 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):# 当实例出现在小于号两边时会自动调用# 类似的有:__gt__: 大于; __le__:小于等于; __ge__: 大于等于;# __eq__: 等于; __ne__: 不等于if not isinstance(another, Person):raise PersonTypeError(another)return self._id < self._id# 用于之后的排序使用@classmethoddef num(cls):return Person._numdef __str__(self):return " ".join((str(self._id), self._name, self._sex, str(self._birthday)))# 运算重载符:当实例出现在print函数中时,自动调用这个方法def details(self):return ", ".join(("编号:" + str(self._id),"姓名:" + self._name,"性别:" + self._sex,"出生日期:" + str(self._birthday)))class Student(Person):_id_num = 0# 下面这个类方法可以说是很经典的使用,对于初学者来说,对于深入理解类有帮助@classmethoddef _id_gen(cls):# 自动生成学号的类内部函数(该函数只在类的内部调用)cls._id_num += 1year = datetime.date.today().yearreturn "1{:04}{:05}".format(year, cls._id_num)# 后面的04, 05代表是位数,不足前面补零**def __init__(self, name, sex, birthday, department):Person.__init__(self, name, sex, birthday, Student._id_gen())# 这里通过调用之前基类的初始化函数# 这里调用了之前定义的生成学号的类方法self._department = departmentself._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# 当然我们对于学生的档案里首先时学生要挑选好课程,然后才有分数# 首先判断课程在不在已选的课程表里,然后再是给他输入分数def scores(self):return [(cname, self._courses[cname])for cname in self._courses]# 将课程和分数用元祖的形式输出def details(self):return ", ".join((Person.details(self),"入学日期:" + str(self._enroll_date),"院系:" + self._department,"课程记录:" + str(self.scores())))class Staff(Person):_id_num = 0@classmethoddef _id_gen(cls, birthday):cls._id_num += 1birth_year = datetime.date(*birthday).yearreturn "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 = 1720self._department = "未定"self._position = "未定"def set_salary(self, amount):if not type(amount) is int:raise TypeErrorself._salary = amountdef set_position(self, position):self._position = positiondef set_department(self, department):self._department = departmentdef 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("数学")
p1.set_position("副教授")
p1.set_salary(8400)print(p1.details())
print(p2.details())
print(p1.age())

代码参考《数据结构与算法 python语言描述》

学校人事管理系统python实现相关推荐

  1. nodejs+vue+elementui小微企业人事管理系统python/php/java/nodejs

    管理员功能模块 登录页面 登录首页页面功能 员工管理我们可以看到员工的一些基本情况 部门信息管理我们可以看到一些部门的情况等 薪资信息管理中我们可以看到企业的薪资情况 签到打卡管理我们可以看到员工打卡 ...

  2. 【附源码】Python计算机毕业设计企业人事管理系统

    项目运行 环境配置: Pychram社区版+ python3.7.7 + Mysql5.7 + HBuilderX+list pip+Navicat11+Django+nodejs. 项目技术: dj ...

  3. java/php/net/python学校助学金管理系统的设计

    本系统带文档lw1万字+答辩PPT+查重 如果这个题目不合适,可以去我上传的资源里面找题目,找不到的话,评论留下题目,或者站内私信我, 有时间看到机会给你发 1.关于学校助学金管理系统的设计的基本要求 ...

  4. JAVA设计学校的人事管理系统,java课程设计(人事管理系统).doc

    可编辑版 PAGE Word完美格式 人事管理系统 TOC \o "1-3" \h \z \u HYPERLINK \l "_Toc343718074" 一.系 ...

  5. java计算机毕业设计基于springboo+vue的人事管理系统

    项目介绍 人事管理系统理工作是一种繁琐的,务求准确迅速的信息检索工作.随着计算机信息技术的飞速发展,人类进入信息时代,社会的竞争越来越激烈,人事管理系统就越显示出其不可或缺性,成为学校一个非常重要的模 ...

  6. 简易人事管理系统(pyqt5+mysql)

    目录 前言 1 系统概述 2 相关技术 3 系统分析 3.1需求分析 3.2数据库设计 3.2.1数据库概念模型 3.2.2数据库逻辑模型 3.2.3 数据库物理模型 4 系统功能设计 5 系统主界面 ...

  7. springboot海纳部门人事管理系统毕业设计源码

    目  录 摘要 1 绪论 1.1研究背景及意义 1.2开发现状 1.3系统开发技术的特色 1.4论文结构与章节安排 2海纳部门人事管理系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 ...

  8. JAVA毕业设计高校人事管理系统计算机源码+lw文档+系统+调试部署+数据库

    JAVA毕业设计高校人事管理系统计算机源码+lw文档+系统+调试部署+数据库 JAVA毕业设计高校人事管理系统计算机源码+lw文档+系统+调试部署+数据库 本源码技术栈: 项目架构:B/S架构 开发语 ...

  9. 计算机毕业设计Java企业人事管理系统(源码+系统+mysql数据库+lw文档)

    计算机毕业设计Java企业人事管理系统(源码+系统+mysql数据库+lw文档) 计算机毕业设计Java企业人事管理系统(源码+系统+mysql数据库+lw文档) 本源码技术栈: 项目架构:B/S架构 ...

最新文章

  1. rpa操作excel_RPA的功能与技术剖析
  2. java web每天定时执行任务(四步轻松搞定)
  3. 解决莫名其妙出现connection closed的错误
  4. 干货 | SpringBoot注解大全,值得收藏
  5. android 剪切板广播发送者,Android使用剪切板传递数据
  6. java 语法 泛型_java-解密泛型语法
  7. 作者:​高晨旭(1990-),男,北京系统工程研究所研究实习员。
  8. Qt文档阅读笔记-Qt工作笔记QProcess::finished的解析与实例
  9. Oracle 安装 与 卸载 以及 使用 plsqldev
  10. 人机大战简史(第二版)
  11. 如何从网页下载并播放ts格式的视频
  12. ElasticSearch常用搜索命令整理(长期更新...)
  13. 数学基础一:直线方程Ax+By+C=0
  14. php liger 表格排序,jQuery LigerUI 使用教程表格篇(1)
  15. stc12串口收发计算机,stc12c5a60s2串口程序
  16. C语言之Error C2018: unknown character '0x60'
  17. UIQ 3 概念认识
  18. Java面试题及答案2019版(上),springboot缓存技术
  19. 计算机保研要不要刷实习?
  20. window11 git Bash右击不见得问题

热门文章

  1. ffmpeg文档中文翻译
  2. 关于Mac软件不兼容的解决方案(xattr)
  3. ROS2原始数据类型与接口
  4. js moment.js 给定时间 获取自然月、周的时间轴
  5. Android tv 切换应用,Android TV快捷键切换到其他应用后电视声音仍未中止问题的解决...
  6. 适用于2019的6个最佳WordPress社区插件
  7. 皇甫懒懒 华清远见Java学习笔记-身份证校验
  8. 北京市定额发票真假查询地址
  9. 下一个汽车时代来临——诚迈科技赛道超车,布局“域控软件”
  10. 微信小程序框架(四)-全面详解(学习总结---从入门到深化)