学生管理系统 - 面向对象版本
项目简介
学生管理系统旨在提供一个简洁、高效的解决方案,用于管理学校中学生的个人信息。该系统将支持学生数据的增删改查操作,并以科学化、系统化和规范化的方式维护信息。
实现方式
以面向对象思想及方式完成代码开发。
知识点
- 输入和输出
- 变量
- 列表
- 字符串
- 流程控制
- 面向对象概念
- 类和对象
- 实例属性
- 实例方法
- 访问控制权限
- 初始化方法
- 对象描述方法
项目要求
-
定义学生类
Student
,学生信息包含:- 编号:
sid
- 姓名:
name
- 年龄:
age
- 性别:
gender
- 编号:
-
实现构造方法及对象描述方法
__init__
: 初始化方法,接收对应参数初始化对象属性__str__
: 实现对象描述方法,输出学生信息
- 定义管理类
StudentManagement
,用来实现整体业务逻辑。- 使用列表做为属性保存学生对象信息
- 定义
manager
方法管理业务逻辑- 对用户输入内容进行输入校验
- 根据用户输入内容选择不同功能执行
-
实现菜单方法
__menu
,输出下列菜单信息,并返回用户输入的编号print("*****************************") print("* 学生管理系统 *") print("* 1. 添加新学生信息 *") print("* 2. 通过学号修改学生信息 *") print("* 3. 通过学号删除学生信息 *") print("* 4. 通过姓名删除学生信息 *") print("* 5. 通过学号查询学生信息 *") print("* 6. 通过姓名查询学生信息 *") print("* 7. 显示所有学生信息 *") print("* 8. 退出系统 *") print("*****************************")
-
因程序中需要多次对编号及姓名进行输入,故抽取方法获取对应的数据。
- 获取编号方法
__get_sid
, 输入编号并返回(字符串类型)eg. s01
- 获取姓名方法
__get_name
, 输入姓名并返回(字符串类型) - 获取姓名方法
__get_age
, 输入年龄并返回(整型) - 获取姓名方法
__get_gender
, 输入性别并返回(字符串类型)
- 获取编号方法
-
实现添加学生方法
add_student
- 方法参数为
编号
,姓名
,年龄
,性别
四个参数 - 输出添加操作的结果提示信息
- 返回对应结果信息
- 要求编号不可重复。
- 方法参数为
- 实现通过编号修改学生信息方法
modify_student_by_id
- 参数为
学号
- 如果学生存在,则进行修改,不存在输出提示信息
- 返回是否修改成功
- 参数为
-
实现通过学号删除学生方法
delete_student_by_id
- 参数为
学号
- 如果学生存在,则进行删除并输出提示信息,不存在则仅输出提示
- 返回是否删除成功
- 参数为
- 实现通过姓名删除学生方法
delete_student_by_name
- 参数为
姓名
- 如果学生存在,则进行删除(同名学生全部删除)并输出提示信息,不存在则仅输出提示
- 返回是否删除成功
- 参数为
-
实现通过学号查询学生方法
query_student_by_id
- 参数为
学号
- 如果学生存在,则输出学生信息,不存在输出提示信息
- 返回是否查询成功
- 参数为
-
实现通过姓名查询学生方法
query_student_by_name
- 参数为
姓名
- 如果学生存在,则输出学生信息(同名学生全部输出),不存在输出提示信息
- 返回是否查询成功
- 参数为
- 实现显示所有学生信息方法
__show
- 输出所有学生信息
实战思路
实战代码
# 定义一个学生类
class Student:
# 使用构造函数,接收实例化类时需要传入的参数
def __init__(self, sid, name, age, gender):
# 使用实例属性接收传入的值
self.sid = sid
self.name = name
self.age = age
self.gender = gender
# 重写对象的显示格式方法
def __str__(self):
return f"SID: {self.sid} --- Name: {self.name} --- Age: {self.age} --- Gender: {self.gender}"
# 封装管理类
class StudentManagement:
def __init__(self):
# 定义一个实例变量,用来保存学生的信息,方法各个方法之间进行访问
# 把这个实例变量设置为私有,只能让类中方法对其进行操作
self.__students = []
def __menu(self):
'''
菜单函数:展示学生管理系统菜单信息,并获取用户输入
:return: 用户输入的编号字符串
'''
print("****************************************")
print("* 学生管理系统 *")
print("* 1. 添加新学生信息 *")
print("* 2. 通过学号修改学生信息 *")
print("* 3. 通过学号删除学生信息 *")
print("* 4. 通过姓名删除学生信息 *")
print("* 5. 通过学号查询学生信息 *")
print("* 6. 通过姓名查询学生信息 *")
print("* 7. 显示所有学生信息 *")
print("* 8. 退出系统 *")
print("****************************************")
select_op = input("输入编号选择操作:")
return select_op
def __get_sid(self):
'''
获取用户输入的学号
:return: 返回学号字符串
'''
sid = input("请输入学生ID:")
return sid
def __get_name(self):
'''
获取用户输入的姓名
:return: 返回姓名字符串
'''
name = input("请输入学生名称:")
return name
def __get_age(self):
'''
获取用户输入的年龄
:return: 返回年龄字符串
'''
while True:
age = input("请输入学生年龄:")
if age.isdigit():
return int(age)
else:
print("输入年龄不合法,请输入数字")
def __get_gender(self):
'''
获取用户输入的性别
:return: 返回性别字符串
'''
gender = input("请输入学生性别:")
return gender
def add_student(self, sid, name, age, gender):
'''
添加学生
:param sid: 学生 id
:param name: 学生姓名
:param age: 学生年龄
:param gender: 学生性别
:return: 操作提示信息
'''
for s in self.__students:
if s.sid == sid:
print("学生编号已存在,添加失败")
return "添加失败"
else:
student = Student(sid, name, age, gender)
self.__students.append(student)
print("添加学生信息成功")
return '添加成功'
def modify_student_by_id(self, sid, name, age, gender):
'''
通过学号修改学生信息
:param sid: 学生学号
:return: 操作提示信息
'''
for s in self.__students:
if s.sid == sid:
s.name = name
s.age = age
s.gender = gender
print("修改成功")
return "修改成功"
else:
print(f'没有 {sid} 对应的学生信息')
return "修改失败"
def delete_student_by_id(self, sid):
'''
通过ID删除学生信息
:param sid: 学生学号
:return: 操作提示信息
'''
for s in self.__students:
if s.sid == sid:
self.__students.remove(s)
print("删除成功")
return "删除成功"
else:
print(f'没有 {sid} 对应的学生信息')
return "删除失败"
def delete_student_by_name(self, name):
'''
通过学生姓名 删除所有符合的学生
:param name: 学生姓名
:return: 操作提示信息
'''
exist_s = []
# 找出所有要删除的学生
for s in self.__students:
if s.name == name:
exist_s.append(s)
# 开始删除
if len(exist_s) > 0:
for s in exist_s:
self.__students.remove(s)
print(f"名称为 { name } 的学生删除成功")
else:
print(f"成功删除 {len(exist_s)} 个学生")
return "删除成功"
else:
print(f"学生【{name}】不存在,无法删除")
return "删除失败"
def query_student_by_id(self, sid):
'''
通过学号查询学生信息
:param sid: 学生学号
:return: 操作提示信息
'''
for s in self.__students:
if s.sid == sid:
print(f"学生编号 {sid} 的学生信息如下:")
print(f"学号:{s.sid},姓名:{s.name},年龄:{s.age},性别:{s.gender}")
return "查询成功"
else:
print(f"学生编号 {sid} 的学生不存在")
return "查询失败"
def query_student_by_name(self, name):
'''
通过姓名查询学生信息
:param name:
:return: 操作提示信息
'''
exist_s = []
for s in self.__students:
if s.name == name:
exist_s.append(s)
if len(exist_s) > 0:
print(f"名称为 {name} 的学生共 {len(exist_s)} 名,信息如下:")
for s in exist_s:
print(f"学号:{s.sid},姓名:{s.name},年龄:{s.age},性别:{s.gender}")
return "查询成功"
else:
print(f"名称为 {name} 的学生不存在")
return "查询失败"
def show(self):
'''
显示所有学生信息
:return: 格式化的学生信息
'''
print("所有学生信息如下:")
for s in self.__students:
print(f"学号:{s.sid},姓名:{s.name},年龄:{s.age},性别:{s.gender}")
def manager(self):
'''
管理方法
:return:
'''
while True:
select_op = self.__menu()
if len(select_op) == 1 and select_op in "12345678":
if select_op == "1":
sid = self.__get_sid()
name = self.__get_name()
age = self.__get_age()
gender = self.__get_gender()
self.add_student(sid, name, age, gender)
elif select_op == "2":
sid = self.__get_sid()
name = self.__get_name()
age = self.__get_age()
gender = self.__get_gender()
self.modify_student_by_id(sid, name, age, gender)
elif select_op == "3":
sid = self.__get_sid()
self.delete_student_by_id(sid)
elif select_op == "4":
name = self.__get_name()
self.delete_student_by_name(name)
elif select_op == "5":
sid = self.__get_sid()
self.query_student_by_id(sid)
elif select_op == "6":
name = self.__get_name()
self.query_student_by_name(name)
elif select_op == "7":
self.show()
else:
break
else:
print("输入的数据不合法,请输入在合法范围内的操作编号!!!")
# 程序入口
if __name__ == '__main__':
# 获取学生管理系统实例
sm = StudentManagement()
# 通过实例调用实例方法
sm.manager()
总结
- 项目简介
- 实现方式
- 实战思路
- 功能拆解
- 实战代码