大家好!欢迎来到我的博客,今天我们将继续探讨如何用Python实现一个简单的学生管理系统。我们将主要实现以下几个功能:
1. 添加学生信息
2. 查看所有学生信息
3. 统计学生平均年龄
4. 统计学生性别比例
5. 退出系统
在之前的博文中,我们实现了一个基础的学生管理系统,但那篇博文的实现并没有使用函数,数据也不能持久化存储,导致代码显得非常臃肿。今天,我们将利用函数来封装代码,提高复用性和可读性,并实现数据的持久化存储。让我们开始吧!
一、项目结构
在开始编码之前,我们需要一个简单的项目结构。我们的系统将使用JSON文件来存储学生数据。下面是我们的文件结构:
student_management_system/
│
├── main.py
└── datas.json
二、代码实现
接下来,我们将逐步实现我们的学生管理系统,代码如下:
import json
import os
menu = """输入数字0,退出系统
输入数字1,添加学生信息
输入数字2,查看所有学生信息
输入数字3,统计学生平均年龄
输入数字4,统计学生性别比例
"""
FILE_JSON = "./datas.json"
datas = []
def save_datas():
"""将学生数据保存到JSON文件中"""
with open(FILE_JSON, "w") as f:
json.dump(datas, f)
def load_datas():
"""从JSON文件加载学生数据"""
if os.path.exists(FILE_JSON):
with open(FILE_JSON, mode="r") as f:
global datas
datas = json.load(f)
def show_menu():
"""显示主菜单"""
print(menu)
def option_is_ture():
"""验证用户输入的菜单选项"""
option = input("请输入选择:")
if option not in [f"{i}" for i in range(5)]:
print("请输入正确选项!")
else:
return option
def student_name():
"""输入学生姓名,并验证合法性"""
while True:
name = input("请输入学生姓名:")
if 2 <= len(name) <= 4:
return name
else:
print("输入不合法,姓名长度应在2-4之间")
def student_age():
"""输入学生年龄,并验证合法性"""
while True:
age = input("请输入学生年龄:")
if age not in [f"{i}" for i in range(15, 26)]:
print("输入不合法,年龄应该在15-25之间")
else:
return int(age)
def student_sex():
"""输入学生性别,并验证合法性"""
while True:
sex = input("请输入学生性别:")
if sex not in ["男", "女"]:
print("输入不合法,请输入男或女")
else:
return sex
def yes_no():
"""询问用户是否继续操作"""
while True:
sub_option = input("是否继续:是(Y)/否(N)")
if sub_option in ["Y", "y", "N", "n"]:
return sub_option
else:
print("输入不合法,请输入正确选项Y/N")
def add_students():
"""添加学生信息"""
while True:
sid = 101 if not datas else datas[-1]["id"] + 1
name = student_name()
age = student_age()
sex = student_sex()
items = {
"id": sid,
"name": name,
"age": age,
"sex": sex
}
datas.append(items)
save_datas()
print(f"现在共有学生{len(datas)}人")
sub_option = yes_no()
if sub_option in ["N", "n"]:
break
def show_all_student():
"""查看所有学生信息"""
if datas:
for i in datas:
print(f"id:{i['id']}\tname:{i['name']}\t age:{i['age']}\t sex:{i['sex']}")
else:
print("没有找到学生数据,请先添加学生信息")
def get_avg_age():
"""统计学生平均年龄"""
if datas:
total = 0
for i in datas:
total += i["age"]
print(total / len(datas))
else:
print("没有找到学生信息,计算平均年龄需要先添加学生信息!")
def get_sex_scale():
"""统计学生性别比例"""
if datas:
man = []
woman = []
for i in datas:
if i["sex"] == "男":
man.append(i["id"])
elif i["sex"] == "女":
woman.append(i["id"])
print(f"男生占比:{len(man) / len(datas)}\t 女生占比{len(woman) / len(datas)}")
else:
print("没有找到学生信息,统计学生性别比例需要先添加学生信息!")
def main():
"""主程序入口"""
load_datas() # 加载学生数据
while True:
show_menu() # 显示菜单
option = option_is_ture() # 获取用户选择
if option == "0":
print("感谢使用学生管理系统!")
break # 退出系统
elif option == "1":
add_students() # 添加学生信息
elif option == "2":
show_all_student() # 查看所有学生信息
elif option == "3":
get_avg_age() # 统计学生平均年龄
elif option == "4":
get_sex_scale() # 统计学生性别比例
if __name__ == "__main__":
main() # 运行主程序
三、代码解读
在上面的代码中,我们定义了几个主要的功能模块,下面逐一进行解读:
1. 数据保存与加载:
' save_datas() ' :此函数用于将当前的学生数据保存到一个JSON文件中,以便于下一次程序启动时可以加载这些数据。
' load_datas() ' :此函数用于检查文件是否存在,如果存在则加载JSON文件中的数据到内存中。
2. 菜单显示与用户输入:
' show_menu() ' :打印出系统的操作菜单。
' option_is_ture() ' :验证用户输入的选项是否合法,并返回有效的选项。
3. 学生信息输入:
' student_name() ' 、' student_age() ' 、' student_sex() ' :这三个函数分别用于输入学生的姓名、年龄和性别,并且进行了合法性检查。
' add_students() ' :负责将新学生信息添加到数据库中,并调用 ' save_datas() ' 保存数据。
4. 数据查询与统计:
' show_all_student() ' :展示所有学生的信息。
' get_avg_age() ' :计算并输出学生的平均年龄。
' get_sex_scale() ' :计算并输出男生和女生的比例。
5. 主程序:
' main() ' :程序的入口点,负责调用其他函数并控制程序的运行流程。
四、如何运行程序
1. 确保你的计算机上已经安装了Python,版本推荐使用3.x。
2. 创建一个新的Python文件,如 ' main.py ' ,并将上述代码复制粘贴到该文件中。或者跟着一起写,代码中都写有注释,可以帮助大家理解代码。
3. 在同一目录下创建一个空的 ' datas.json ' 文件(如果文件不存在,程序会自动创建,可以不自己手动创建)。
4. 在命令行中运行程序,或者在pycharm等编辑软件里直接运行:
python main.py
5. 按照屏幕上的提示输入选项,进行相应的操作。
五、总结
通过使用函数封装和数据持久化存储,我们的学生管理系统变得更加模块化和易于维护。未来,你可以继续扩展此系统的功能,例如添加学生成绩管理、课程选择等功能,进一步提升系统的实用性。
希望这篇博文对你有所帮助!如果你有任何问题或建议,欢迎在评论区留言。感谢你的阅读,我们下次再见!