Python综合案例:学生管理系统

目录

需求说明:

功能:

创建入口函数:

实现菜单函数:

实现增删查操作:

[1. 新增学生](#1. 新增学生)

[2. 展示学生](#2. 展示学生)

[3. 查找学生](#3. 查找学生)

[4. 删除学生](#4. 删除学生)

加入存档读档:

[1. 约定存档格式](#1. 约定存档格式)

[2. 实现存档函数](#2. 实现存档函数)

[3. 实现读档函数](#3. 实现读档函数)

[打包成 exe 程序发布](#打包成 exe 程序发布)

[1. 安装 pyinstaller](#1. 安装 pyinstaller)

[2. 打包程序](#2. 打包程序)


需求说明:

实现一个命令行版本的学生管理系统

功能:

  • 新增学生
  • 显示学生
  • 查找学生
  • 删除学生
  • 存档到文件

创建入口函数:

  • 使用一个全局列表 students 表示所有学生信息。

  • 使用 menu 函数和用户交互,这是一个自定义函数。

  • 使用 insert , show , find , delete 这几个自定义函数完成增删查操作。

  • 使用 sys.exit 实现程序退出。

    使用列表表示所有的学生

    students = []
    def main():
    """
    程序的入口函数
    """
    print('+--------------------------+')
    print('| 欢迎来带学生管理系统! |')
    print('+--------------------------+')
    while True:
    choice = menu()
    if choice == 0:
    sys.exit()
    if choice == 1:
    insert()
    elif choice == 2:
    show()
    elif choice == 3:
    find()
    elif choice == 4:
    delete()
    else:
    print('您的输入有误! 请重新输入!')
    main()

实现菜单函数:

复制代码
def menu():
    """
   显示程序菜单
   """
    print(" 1. 新增学生信息")
    print(" 2. 显示所有同学信息")
    print(" 3. 根据名字查找学生信息")
    print(" 4. 删除学生信息")
    print(" 0. 退出程序")
    choice = input(" 请输入您的选择: ")
    return int(choice)

实现增删查操作:

1. 新增学生

复制代码
def insert():
    print("[新增学生] 开始!")
    studentId = input("请输入学生的学号: ")
    name = input("请输入学生的姓名: ")
    gender = input("请输入学生的性别: ")
    if gender not in ('男', '女'):
        print("性别不符合要求! 新增学生失败!")
        return
    className = input("请输入学生的班级: ")
    # 使用一个字典表示学生信息
    student = {
        'studentId': studentId,
        'name': name,
        'gender': gender,
        'className': className
   }
    # 把字典添加到学生列表中
    global students
    students.append(student)
    print("[新增学生] 完毕!")

2. 展示学生

复制代码
def show():
    print("[显示学生] 开始!")
    for s in students:
        print(f"
[{s['studentId']}]\t{s['name']}\t{s['gender']}\t{s['className']}")
    print(f"[显示学生] 完毕! 共显示了 {len(students)} 条记录!")

3. 查找学生

复制代码
def find():
    print("[查找学生] 开始!")
    name = input("请输入要查找的同学姓名: ")
    count = 0
    for s in students:
        if name == s['name']:
            print(f"
[{s['studentId']}]\t{s['name']}\t{s['gender']}\t{s['className']}")
            count += 1
    print(f"[查找学生] 完毕! 共查找到 {count} 条记录!")

4. 删除学生

复制代码
def delete():
    print("[删除学生] 开始!")
    studentId = input("请输入要删除的同学学号: ")
    count = 0
    for s in students:
        if studentId == s['studentId']:
            print(f"删除 {s['name']} 同学的信息!")
            students.remove(s)
            count += 1
    print(f"[删除学生] 完毕! 共删除 {count} 条记录!")

加入存档读档:

1. 约定存档格式

约定存档文件放到 d:/record.txt 文件中。

并且以行文本的方式来保存学生信息,格式如下:

学号\t名字\t性别\t班级

学号\t名字\t性别\t班级

学号\t名字\t性别\t班级

  • 每个同学占一行。
  • 每个同学的信息之间使用 \t 制表符进行分隔。

2. 实现存档函数

复制代码
def save():
    """
   存档函数
   """
    with open('d:/record.txt', 'w') as f:
        for s in students:
            f.write(f"
{s['studentId']}\t{s['name']}\t{s['gender']}\t{s['className']}\n")
    print(f"[存档成功] 共存储了 {len(students)} 条记录!")

在 insert 和 delete 末尾,调用 save 函数进行存档。

复制代码
# 执行存档
save()

3. 实现读档函数

复制代码
def load():
    """
   读档函数
   """
    # 如果存档文件不存在, 则跳过读档环节
    if not os.path.exists('d:/record.txt'):
        return
    # 先清空全局变量里的数据
    global students
    students = []
    with open('d:/record.txt', 'r') as f:
        for line in f:
            # 去除末尾的换行符
            line = line.strip()
            tokens = line.split('\t')
            if len(tokens) < 4:
                print(f"文件格式有误! line={line}")
                continue
            student = {
                'studentId': tokens[0],
                'name': tokens[1],
                'gender': tokens[2],
                'className': tokens[3]
           }
            students.append(student)
    print(f"[读档成功] 共读取了 {len(students)} 条记录!")

在 main 函数开头的地方,调用 load 加载存档。

复制代码
load()

打包成 exe 程序发布

当前虽然已经实现了一个管理系统,但是 .py 的文件只能在安装了 Python 环境的机器上运行。

为了能够更好的部署到其他主机上,可以借助 pyinstaller 来把 Python 程序打包成 exe 程序。

1. 安装 pyinstaller

复制代码
pip install pyinstaller

2. 打包程序

注意:如果提示找不到 pyinstaller 命令,则需要重启一下 PyCharm。

稍等片刻,很快打包完成。

此时就可以把这个程序拷贝给其他机器使用了,无需 Python 环境即可运行。

相关推荐
wuhen_n6 分钟前
JavaScript内置数据结构
开发语言·前端·javascript·数据结构
AIFarmer6 分钟前
在EV3上运行Python语言——无线编程
python·ev3
不会代码的小测试8 分钟前
UI自动化-POM封装
开发语言·python·selenium·自动化
2401_8414956410 分钟前
【LeetCode刷题】二叉树的层序遍历
数据结构·python·算法·leetcode·二叉树··队列
roman_日积跬步-终至千里14 分钟前
【Java并发】Java 线程池实战:警惕使用CompletableFuture.supplyAsync
java·开发语言·网络
lsx20240619 分钟前
C++ 基本的输入输出
开发语言
ZH154558913120 分钟前
Flutter for OpenHarmony Python学习助手实战:GUI桌面应用开发的实现
python·学习·flutter
B站计算机毕业设计超人26 分钟前
计算机毕业设计Hadoop+Spark+Hive招聘推荐系统 招聘大数据分析 大数据毕业设计(源码+文档+PPT+ 讲解)
大数据·hive·hadoop·python·spark·毕业设计·课程设计
B站计算机毕业设计超人27 分钟前
计算机毕业设计hadoop+spark+hive交通拥堵预测 交通流量预测 智慧城市交通大数据 交通客流量分析(源码+LW文档+PPT+讲解视频)
大数据·hive·hadoop·python·spark·毕业设计·课程设计
Nandeska29 分钟前
15、基于MySQL的组复制
数据库·mysql