简介
在本篇博客中,我们将使用Python语言,利用面向对象的编程思想,实现一个简单的学生管理系统。该系统可以实现添加学生信息、查看所有学生信息、统计学生平均年龄以及统计学生性别比例等功能。同时,我们将使用持久化存储技术,使用pickle模块将数据保存到文件中,以实现数据的长期存储和管理。
功能列表
添加学生信息:输入学生的姓名、年龄和性别,系统会自动分配学生ID,并将学生信息保存到系统中。
查看所有学生信息:显示当前系统中所有学生的详细信息。
统计学生平均年龄:计算系统中所有学生的平均年龄并输出。
统计学生性别比例:统计系统中男女学生的比例,并输出。
实现步骤
1. 定义学生类
首先,我们定义一个Student
类,用来表示学生对象,包括学生的ID、姓名、年龄和性别等属性。
class Student:
def __init__(self, sid, name, age, sex):
self.sid = sid
self.name = name
self.age = age
self.sex = sex
def __str__(self):
return f"id:{self.sid}, name:{self.name}, age:{self.age}, sex:{self.sex}"
2. 学生管理类
接下来,定义一个StudentManage
类,用于管理学生对象,包括添加学生、查看所有学生、计算平均年龄和统计性别比例等功能。同时,实现数据的加载和保存功能,利用pickle模块实现持久化存储。
import pickle
class StudentManage:
def __init__(self):
self.student = []
self.load_data()
# 其他方法定义(详见完整代码)
def load_data(self):
try:
with open('./student_data.txt', 'rb') as f:
self.student = pickle.load(f)
except (FileNotFoundError, EOFError):
self.student = []
def save_data(self):
with open('./student_data.txt', 'wb') as f:
pickle.dump(self.student, f)
3. 系统管理类
最后,定义一个SysManage
类作为系统的主控制类,实现系统菜单的显示和用户选项的响应。
class SysManage:
def __init__(self):
self.sm = StudentManage()
def show_main_menu(self):
menu = """输入数字1,添加学生信息(id名字,年纪,性别)
输入数字2,查看所有学生信息
输入数字3,统计学生平均年纪
输入数字4,统计学生性别比例
输入数字0,退出系统"""
return menu
def run(self):
while True:
print(self.show_main_menu())
option = input("请根据列表输入选项:")
if option == "0":
break
elif option == "1":
while True:
self.sm.add_student()
# 添加学生信息后的逻辑判断,是否继续添加学生信息
elif option == "2":
self.sm.show_all_student()
elif option == "3":
self.sm.get_avg_age()
elif option == "4":
self.sm.get_sex_percent()
4. 系统运行
最后,在主程序中实例化SysManage
类,并调用其run
方法,启动学生管理系统。
if __name__ == '__main__':
system_manage = SysManage()
system_manage.run()
总代码
# 1.使用面向对象编写 学生管理,持久化存储
# 输入数字1,添加学生信息(id名字,年纪,性别)
# 输入数字2,查看所有学生信息
# 输入数字3,统计学生平均年纪
# 输入数字4,统计学生性别比例
# 输入数字0,退出系统
import pickle
class Student:
def __init__(self, sid, name, age, sex):
self.sid = sid
self.name = name
self.age = age
self.sex = sex
def __str__(self):
return f"id:{self.sid}, name:{self.name}, age:{self.age}, sex:{self.sex}"
class StudentManage:
def __init__(self):
self.student = []
self.load_data()
def get_student_name(self):
while True:
name = input("请输入姓名:")
if 2 <= len(name) <= 4:
return name
else:
print("名字长度限制在2-4,请重新输入!")
def get_student_age(self):
while True:
age = int(input("请输入本人年龄:"))
if 15 <= age <= 28:
return age
else:
print("年龄要求在15-28岁之间,请重新输入!")
def get_student_sex(self):
while True:
sex = input("请输入本人性别:")
if sex in ["男", "女"]:
return sex
else:
print("只能输入男/女,请重新输入!")
def show_all_student(self):
if len(self.student):
for s in self.student:
print(s)
else:
print("列表中没有数据,请添加。")
def get_avg_age(self):
total = 0
for s in self.student:
total += s.age
print(f"学生的平均年纪为{total / len(self.student)}")
def get_sex_percent(self):
result = {}
for s in self.student:
if s.sex not in result:
result[s.sex] = 1
else:
result[s.sex] += 1
for k, v in result.items():
print(f"性别:{k},占比:{v / len(self.student)}")
def add_student(self):
sid = 101 if not self.student else self.student[-1].sid + 1
student_name = self.get_student_name()
student_age = self.get_student_age()
student_sex = self.get_student_sex()
s = Student(sid, student_name, student_age, student_sex)
self.student.append(s)
self.save_data()
def load_data(self):
try:
with open('./student_data.txt', 'rb') as f:
self.student = pickle.load(f)
except (FileNotFoundError, EOFError):
self.student = []
def save_data(self):
with open('./student_data.txt', 'wb') as f:
pickle.dump(self.student, f)
class SysManage:
def __init__(self):
self.sm = StudentManage()
def show_main_menu(self):
menu = """输入数字1,添加学生信息(id名字,年纪,性别)
输入数字2,查看所有学生信息
输入数字3,统计学生平均年纪
输入数字4,统计学生性别比例
输入数字0,退出系统"""
return menu
def run(self):
while True:
print(self.show_main_menu())
option = input("请根据列表输入选项:")
if option == "0":
break
elif option == "1":
while True:
self.sm.add_student()
while True:
options = input("是否继续添加,继续(Y)退出(N)")
if options not in ["Y", "N", "y", "n"]:
print("输入不合法,只能输入Y/N")
elif options in ["Y", "y"]:
break
else:
break
if options == "Y" or options == "y":
pass
else:
break
elif option == "2":
self.sm.show_all_student()
elif option == "3":
self.sm.get_avg_age()
elif option == "4":
self.sm.get_sex_percent()
if __name__ == '__main__':
system_manage = SysManage()
system_manage.run()
总结
通过以上步骤,我们实现了一个简单的学生管理系统,包括面向对象的设计、持久化存储的实现以及用户交互的设计。这种设计不仅能提高代码的复用性和可维护性,还能有效地管理和操作大量的学生信息。
如果您对具体实现或者Python编程有疑问或建议,欢迎在评论区留言交流!