【名字无关紧要,实战才是唯一】——吾神·娜迦卡布洛斯

【名字无关紧要,实战才是唯一】——吾神·娜迦卡布洛斯

今天我们来运用python进行实战,做一个学生管理系统项目,顺便对以前的知识点进行汇总和练习!

  • 首先做一个项目不单单只是和我们以前一样,上去就打代码

  • 而是需要我们对这个项目进行具体的分析以后,才去使用代码进行具体的实现

  • 最后运用代码实现完毕以后,在对其项目进行调试更改才算完成

接下来就由鄙人带大家对这个学生管理系统项目进行逐步的实现.

需求分析

作用:

客户和开发人员双向的一个说明书

对于客户而言:

这个需求分析就是一个基本的说明书,和客户进行协商(产品经理主要就是和客户对接)

对于开发人员而言:

这个需求分析就是系统开发的一个核心思想路线开发工作主要就是围绕着需求分析进行开展(关键字(变量、函数、类名称)之类)

学生信息

  • 学号、姓名、年龄、Python成绩

系统的功能分析

系统功能

  1. 添加学生

  2. 删除学生

  3. 修改学生

  4. 查询学生

  5. 展现所有学生信息

  6. 统计平均分

  7. 统计及格率

  8. 退出程序

  9. 保存数据

数据的保存地址

我们都知道数据保存在什么地方?取决于数据的重要层次

学生信息显而易见是比较重要的信息,所以我们把这些信息保存在硬盘中的文件中

数据的保存方式

我们只能从元祖、列表、集合、字典中选择字典,其原因是方便我们对学生信息进行保存,记录

使用学号作为每个学生字典的键值,方便我们对信息进行查询和修改

系统架构搭建

  1. 将数据写入文件.分别定义功能函数、
  2. 显示操作菜单,并且监听用户的选择
  3. 通过用户的选择进行条件判断
  4. 按照需求分析实现功能

项目分析完以后,然后就是使用Python去实现学生管理系统.

实践

写入初始数据

# 导入os模块包
import os

# 创建一个字典,在其中放入初始数据,以学号做为学生信息的键
# all_dict = {"123": {"num": 123, "name": "张三", "age": 15, "python": 98},
#             "223": {"num": 223, "name": "李四", "age": 78, "python": 2}}
# 将初始字典中已有的数据进行写入到硬盘的文件中进行保存
# 如果文件夹中没有我们目标文件的话,w操作可以创建一个
# with open("学生管理系统.txt","w",encoding="utf-8") as fing:
#     fing.write(str(all_dict))

读取到字典中

# 再定义一个新的空字典
all_dict = {}


# 定义一个函数,将文件中的数据读取到定义的新的空字典中
def fangfa():
    # os.path.exists的意思是判断括号里的文件是否存在
    if os.path.exists("学生管理系统.txt"):
        # 将文件中的数据读取到新的字典中,使用utf-8进行读取
        with open("学生管理系统.txt", "r", encoding="utf-8") as file:
            ret = file.read()
            # 由于新的字典是在函数外部,我们要对其进行更改的话
            # 需要使用global函数  对其更改
            global all_dict
            # 将数据读取到以后,用eval函数返回到原来的类型.
            # 将数据存到新的字典中
            all_dict = eval(ret)
        print("数据加载完成")

定义添加学生功能函数

def add_func():
    # while循环可以使用户操作完本功能以后,选择是否继续进行操作本功能
    while True:
        # 引导用户输入学号
        little_put = input("请输入你的学号: ")
        if little_put in all_dict:
            # 如果已经存在,则无法添加
            print("该用户已存在,无法添加")
        else:
            # 如果不存在的话,就引导用户进行注册
            print("该用户不存在,请注册一个用户")
            num_put = input("请输入你的学号: ")
            name_put = input("请输入你的姓名: ")
            age_put = input("请输入你的年龄: ")
            python_put = input("请输入你的成绩: ")
            # 输入完信息以后将信息添加到新的字典中
            all_dict[num_put] = {"num": num_put, "name": name_put, "age": age_put, "python": python_put}
            # 然后把添加以后的字典写入到文件中,w操作会对文件中的数据进行重新书写
            # 刚好完成我们的添加功能
            with open("学生管理系统.txt", "w", encoding="utf-8") as fing:
                fing.write(str(all_dict))
            print("上传信息成功")
            re_minu = input("是否返回主菜单?是的话请输入1不返回的话输入任意值")
            if re_minu == "1":
                return
            else:
                continue

定义删除学生功能函数

def del_func():
    while True:
        little_put = input("请输入你的学号: ")
        if little_put in all_dict:
            # 如果学号存在的话,删除该学生信息
            del all_dict[little_put]
            print("该用户已删除")
            # 并且同步文件中的数据
            with open("学生管理系统.txt", "w", encoding="utf-8") as fing:
                fing.write(str(all_dict))
            print("上传信息成功")
        else:
            # 如果不存在的话,那么则显示已经删除
            print("该用户已经删了")
            re_minu = input("是否返回主菜单?是的话请输入1不返回的话输入任意值")
            if re_minu == "1":
                return
            else:
                continue

定义修改学生功能函数

def revise_func():
    while True:
        little_put = input("请输入你的学号: ")
        if little_put in all_dict:
            # 如果学号存在的话
            # 那么就继续输入信息
            name_put = input("请输入你的姓名: ")
            age_put = input("请输入你的年龄: ")
            python_put = input("请输入你的成绩: ")
            new_dict = {'no': little_put, 'name': name_put, 'age': age_put, 'score': python_put}
            # 修改字典中的值
            all_dict[little_put] = new_dict
            print("修改学员信息成功!")
            with open("学生管理系统.txt", "w", encoding="utf-8") as fing:
                fing.write(str(all_dict))
            print("上传信息成功")
        else:
            # 如果不存在的话,就引导用户添加一个
            print("该用户还不存在,请添加一个")
            num_put = input("请输入你的学号: ")
            name_put = input("请输入你的姓名: ")
            age_put = input("请输入你的年龄: ")
            python_put = input("请输入你的成绩: ")
            all_dict[num_put] = {"num": num_put, "name": name_put, "age": age_put, "python": python_put}
            with open("学生管理系统.txt", "w", encoding="utf-8") as fing:
                fing.write(str(all_dict))
            print("上传信息成功")
            re_minu = input("是否返回主菜单?是的话请输入1不返回的话输入任意值")
            if re_minu == "1":
                return
            else:
                continue

定义查询学生功能函数和展现所有学生信息功能函数

def query_func():
    while True:
        little_put = input("请输入你的学号: ")
        if little_put in all_dict:
            # 如果存在直接输出信息
            print("该用户的信息如下: ")
            print(all_dict[little_put])
        else:
            # 不存在的话,无法查询,引导用户注册
            print("该用户不存在无法查询")
            print("请先注册!")
            num_put = input("请输入你的学号: ")
            name_put = input("请输入你的姓名: ")
            age_put = input("请输入你的年龄: ")
            python_put = input("请输入你的成绩: ")
            all_dict[num_put] = {"num": num_put, "name": name_put, "age": age_put, "python": python_put}
            print(all_dict)
            re_minu = input("是否返回主菜单?是的话请输入1不返回的话输入任意值")
            if re_minu == "1":
                return
            else:
                continue

def look_func():
    print("-------所有学员的信息----------")
    for idx in all_dict.values():
        print("学号:%s|姓名:%s|年龄:%d|成绩:%d" % (idx["num"], idx["name"], idx["age"], idx["python"]))
        print("****************************************************")

定义统计平均分功能函数

def avg_func():
    # 定义一个变量c
    c = 0
    print("-------所有学员的平均分----------")
    # for循环遍历字典中的所有的值
    for idx in all_dict.values():
        # 用变量c和python成绩相加求出总成绩
        c += int(idx["python"])
    # 然后用a来储存平均分
    # 总成绩c整除字典中学生的人数得出平均分
    a = c // len(all_dict)
    print(a)
    print("班级的平均分是%d" % a)

定义统计及格率功能函数

def pr_func():
    # 定义一个变量c
    c = 0
    # for循环遍历字典中的所有的值
    for idx in all_dict.values():
        # 用if判断遍历的该学生的成绩是否及格
        if int(idx["python"]) >= 60:
            # 如果及格的话c+1
            c += 1
    # 最后用a来储存最后的及格率
    # 及格的人数除于总人数乘以100加%%就是及格率
    a = c / len(all_dict) * 100
    print("班的及格率是%.f%%" % a)

程序运行主程序

# 调用读取文件中数据功能函数
fangfa()
# while循环进行反复操作
while True:
    # 学生管理系统菜单
    print("*******************************")
    print("**********学生管理系统**********")
    print("1:添加学生")
    print("2:删除学生")
    print("3:修改学生")
    print("4:查询学生")
    print("5:显示所有学生信息")
    print("6:统计平均分")
    print("7:统计及格率")
    print("8:退出程序")
    print("9:保存数据")
    print("*******************************")
    main_put = int(input("请按照序号进行你需要执行的操作: "))
    # 根据菜单输入指定的操作功能,用if判断进行调用相应的函数
    if main_put == 1:
        add_func()
        print("添加成功")
        print(all_dict)
    elif main_put == 2:
        del_func()
        print("删除成功")
        print(all_dict)
    elif main_put == 3:
        revise_func()
        print("修改成功")
        print(all_dict)
    elif main_put == 4:
        query_func()
        print("查询成功")
    elif main_put == 5:
        look_func()
        print("查看所有学员的信息成功")
    elif main_put == 6:
        avg_func()
        print("平均分计算成功")
    elif main_put == 7:
        pr_func()
        print("及格率计算成功")
    elif main_put == 8:
        # 退出程序使用break
        print("程序已退出!")
        break
    elif main_put == 9:
        # 保存数据就是把新的字典中的数据写到文件中
        with open("学生管理系统.txt", "w", encoding="utf-8") as fing:
            fing.write(str(all_dict))
        print("保存信息成功")
        break

最后调式完毕以后,我们的实战Python就算完成了.

***以后鄙人会定期为大家推送实战案例,希望大家对鄙人博客有什么意见和提议可以评论出来,一块学习进步,在此谢过!***

你可能感兴趣的:(学生管理系统,Python实战,循序渐进学Python,python,编程语言)