学校人事管理系统python实现
类定义实例:学校人事管理系统
为一个学校的人员管理系统定义所需要的表示人员信息的类,它们都是数据抽象(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实现相关推荐
- nodejs+vue+elementui小微企业人事管理系统python/php/java/nodejs
管理员功能模块 登录页面 登录首页页面功能 员工管理我们可以看到员工的一些基本情况 部门信息管理我们可以看到一些部门的情况等 薪资信息管理中我们可以看到企业的薪资情况 签到打卡管理我们可以看到员工打卡 ...
- 【附源码】Python计算机毕业设计企业人事管理系统
项目运行 环境配置: Pychram社区版+ python3.7.7 + Mysql5.7 + HBuilderX+list pip+Navicat11+Django+nodejs. 项目技术: dj ...
- java/php/net/python学校助学金管理系统的设计
本系统带文档lw1万字+答辩PPT+查重 如果这个题目不合适,可以去我上传的资源里面找题目,找不到的话,评论留下题目,或者站内私信我, 有时间看到机会给你发 1.关于学校助学金管理系统的设计的基本要求 ...
- JAVA设计学校的人事管理系统,java课程设计(人事管理系统).doc
可编辑版 PAGE Word完美格式 人事管理系统 TOC \o "1-3" \h \z \u HYPERLINK \l "_Toc343718074" 一.系 ...
- java计算机毕业设计基于springboo+vue的人事管理系统
项目介绍 人事管理系统理工作是一种繁琐的,务求准确迅速的信息检索工作.随着计算机信息技术的飞速发展,人类进入信息时代,社会的竞争越来越激烈,人事管理系统就越显示出其不可或缺性,成为学校一个非常重要的模 ...
- 简易人事管理系统(pyqt5+mysql)
目录 前言 1 系统概述 2 相关技术 3 系统分析 3.1需求分析 3.2数据库设计 3.2.1数据库概念模型 3.2.2数据库逻辑模型 3.2.3 数据库物理模型 4 系统功能设计 5 系统主界面 ...
- springboot海纳部门人事管理系统毕业设计源码
目 录 摘要 1 绪论 1.1研究背景及意义 1.2开发现状 1.3系统开发技术的特色 1.4论文结构与章节安排 2海纳部门人事管理系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 ...
- JAVA毕业设计高校人事管理系统计算机源码+lw文档+系统+调试部署+数据库
JAVA毕业设计高校人事管理系统计算机源码+lw文档+系统+调试部署+数据库 JAVA毕业设计高校人事管理系统计算机源码+lw文档+系统+调试部署+数据库 本源码技术栈: 项目架构:B/S架构 开发语 ...
- 计算机毕业设计Java企业人事管理系统(源码+系统+mysql数据库+lw文档)
计算机毕业设计Java企业人事管理系统(源码+系统+mysql数据库+lw文档) 计算机毕业设计Java企业人事管理系统(源码+系统+mysql数据库+lw文档) 本源码技术栈: 项目架构:B/S架构 ...
最新文章
- rpa操作excel_RPA的功能与技术剖析
- java web每天定时执行任务(四步轻松搞定)
- 解决莫名其妙出现connection closed的错误
- 干货 | SpringBoot注解大全,值得收藏
- android 剪切板广播发送者,Android使用剪切板传递数据
- java 语法 泛型_java-解密泛型语法
- 作者:​高晨旭(1990-),男,北京系统工程研究所研究实习员。
- Qt文档阅读笔记-Qt工作笔记QProcess::finished的解析与实例
- Oracle 安装 与 卸载 以及 使用 plsqldev
- 人机大战简史(第二版)
- 如何从网页下载并播放ts格式的视频
- ElasticSearch常用搜索命令整理(长期更新...)
- 数学基础一:直线方程Ax+By+C=0
- php liger 表格排序,jQuery LigerUI 使用教程表格篇(1)
- stc12串口收发计算机,stc12c5a60s2串口程序
- C语言之Error C2018: unknown character '0x60'
- UIQ 3 概念认识
- Java面试题及答案2019版(上),springboot缓存技术
- 计算机保研要不要刷实习?
- window11 git Bash右击不见得问题
热门文章
- ffmpeg文档中文翻译
- 关于Mac软件不兼容的解决方案(xattr)
- ROS2原始数据类型与接口
- js moment.js 给定时间 获取自然月、周的时间轴
- Android tv 切换应用,Android TV快捷键切换到其他应用后电视声音仍未中止问题的解决...
- 适用于2019的6个最佳WordPress社区插件
- 皇甫懒懒 华清远见Java学习笔记-身份证校验
- 北京市定额发票真假查询地址
- 下一个汽车时代来临——诚迈科技赛道超车,布局“域控软件”
- 微信小程序框架(四)-全面详解(学习总结---从入门到深化)