Python编程:实现简单学生管理系统(二)

大家好!欢迎来到我的博客,今天我们将继续探讨如何用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. 按照屏幕上的提示输入选项,进行相应的操作。

五、总结

通过使用函数封装和数据持久化存储,我们的学生管理系统变得更加模块化和易于维护。未来,你可以继续扩展此系统的功能,例如添加学生成绩管理、课程选择等功能,进一步提升系统的实用性。

希望这篇博文对你有所帮助!如果你有任何问题或建议,欢迎在评论区留言。感谢你的阅读,我们下次再见!

  • 15
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值