python小项目——学生管理系统

本期我们来综合应用一下以往的python知识点和库的学习,以一个经典的项目:学生管理系统,来巩固我们的python学习

相关代码已经上传至作者的个人gitee:楼田莉子/Python 学习喜欢请点个赞谢谢

目录

需求说明

入口函数

菜单函数

操作函数

增加学生

显示学生

查找学生

删除学生

存档机制

约定存档格式

实现存档函数

打包为.exe文件

[安装 pyinstaller](#安装 pyinstaller)

打包程序

源代码

python拓展学习

[python cookbook](#python cookbook)

awesome-python

[500 Lines or Less](#500 Lines or Less)


需求说明

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

功能:

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

入口函数

使用全局列表表示所有学生的信息

使用menu与用户交互

使用insert、show、find、delete几个自定义函数完成操作

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

python 复制代码
def main():
    #入口函数
    #通过控制台与用户交互
    print("--------------------------")
    print("欢迎来到学生管理系统!!!!!")
    print("--------------------------")
    while True:
        #通过menu创建菜单
        choice=menu()
        if choice=='1':
            #新增学生
            Insert()
        elif choice=='2':
            #展示所有学生
            show()
        elif choice=='3':
            #查找学生
            find()
        elif choice=='4':
            #删除学生
            delete()
        elif choice=='0':
            #推出系统
            print("感谢你的使用,下次再见!")
            sys.exit(0)
        else:
            #进入下次循环,再次输入
            print("输入错误请重新输入>")

菜单函数

python 复制代码
def menu():
    print("1、新增学生")
    print("2、展示学生")
    print("3、查找学生")
    print("4、删除学生")
    print("0、推出程序")
    choice = input("请输入您的选项>")
    return  choice

操作函数

增加学生

python 复制代码
#新增学生
def Insert():
    print("新增学生开始")

    student_name= input("请输入学生的姓名")
    #性别只有男和女
    student_gender=input("请输入学生的性别")
    if student_gender not in('男','女'):
        print("内容不符合要求,新增失败")
        return

    student_class=input("请输入学生的班级")
    student_id=input("请输入学生的学号")
    #使用字典使得这些信息组装起来
    student={
        'student_name':student_name,
        "student_gender":student_gender,
        "student_class":student_class,
        "student_id":student_id,
    }
    global students
    students.append(student)
    print("新增学生结束")

显示学生

python 复制代码
#显示学生
def show():
    #遍历全局列表,把每个学生信息打印出来
    print("显示学生开始")
    for s in students:
        print(f"[{s['student_name']}]\t{s['student_gender']}\t{s['student_class']}\t{s['student_id']}\t")
    print(f"显示学生结束。显示了{len(students)}条数据")

查找学生

python 复制代码
#查找学生
def find():
    print("查找学生开始")
    name =input("请输入查找的学生的名字")
    count=0;
    for s in students:
        if name==s['student_name']:
            print(f"[{s['student_name']}]\t{s['student_gender']}\t{s['student_class']}\t{s['student_id']}\t")
            count+=1
    print(f"共找到{count}个匹配的同学")
    print("查找学生结束")

删除学生

python 复制代码
#删除学生
def delete():
    print("删除学生开始")
    student_id=input("请输入要删除的学生的学号>")
    for s in students:
        if student_id==s['student_id']:
            print("删除s['student_name']同学的信息")
            students.remove(s)
    print("删除学生结束")

存档机制

约定存档格式

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

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

bash 复制代码
学号 | 名字 | 性别 | 班级
学号 | 名字 | 性别 | 班级
学号 | 名字 | 性别 | 班级

每个同学占一行.

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

实现存档函数

python 复制代码
#存档函数
def save():
    #此时这个文件与这个在同一个目录内
    with open("学生档案记录.txt","w",encoding="utf8") as f:
        for s in students:
            f.write(f"{s['student_name']}|{s['student_gender']}|{s['student_class']}|{s['student_id']}")
        print(f"存档成功,共存储了{len(students)}条信息")

打包为.exe文件

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

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

安装 pyinstaller

bash 复制代码
pip install pyinstaller

打包程序

-F 表示打包成单个 exe (不带动态库)

bash 复制代码
pyinstall -F 学生管理系统.py

注意: 如果提示找不到 pyinstaller 命令, 则需要重启一下 PyCharm.稍等片刻, 很快打包完成.

源代码

python 复制代码
#实现一个命令行版本学生管理系统
import os.path
import sys
from random import choice
#使用全局变量管理学生信息
#每个元素是字典,每个字典表示一个同学
students=[]

#存档函数
def save():
    #此时这个文件与这个在同一个目录内
    with open("学生档案记录.txt","w",encoding="utf8") as f:
        for s in students:
            f.write(f"{s['student_name']}|{s['student_gender']}|{s['student_class']}|{s['student_id']}")
        print(f"存档成功,共存储了{len(students)}条信息")
#读档程序
def load():
    #避免读的时候文件不存在引发异常
    if not os.path.exists("学生档案记录.txt"):
        return
    #读档的时候旧的数据要清空

    global students
    students=[]
    with open("学生档案记录.txt","r",encoding="utf8") as f:
        for line in f:
            #针对这一行按照|切割
            #切分前要换行
            line =line.strip()
            tokens=line.split(' | ')
            if len(tokens)!=4:
                print(f'当前行格式有问题,line={line}')
                continue
            student={
                'student_name':tokens[0],
                'student_gender':tokens[1],
                'student_class':tokens[2],
                'student_id':tokens[3],
            }
            students.append(student)
            print(f"读档成功,共读取了{len(students)}条数据")



#新增学生
def Insert():
    print("新增学生开始")

    student_name= input("请输入学生的姓名")
    #性别只有男和女
    student_gender=input("请输入学生的性别")
    if student_gender not in('男','女'):
        print("内容不符合要求,新增失败")
        return

    student_class=input("请输入学生的班级")
    student_id=input("请输入学生的学号")
    #使用字典使得这些信息组装起来
    student={
        'student_name':student_name,
        "student_gender":student_gender,
        "student_class":student_class,
        "student_id":student_id,
    }
    global students
    students.append(student)
    save()
    print("新增学生结束")
#显示学生
def show():
    #遍历全局列表,把每个学生信息打印出来
    print("显示学生开始")
    for s in students:
        print(f"[{s['student_name']}]\t{s['student_gender']}\t{s['student_class']}\t{s['student_id']}\t")
    print(f"显示学生结束。显示了{len(students)}条数据")
#查找学生
def find():
    print("查找学生开始")
    name =input("请输入查找的学生的名字")
    count=0;
    for s in students:
        if name==s['student_name']:
            print(f"[{s['student_name']}]\t{s['student_gender']}\t{s['student_class']}\t{s['student_id']}\t")
            count+=1
    print(f"共找到{count}个匹配的同学")
    print("查找学生结束")
#删除学生
def delete():
    print("删除学生开始")
    student_id=input("请输入要删除的学生的学号>")
    for s in students:
        if student_id==s['student_id']:
            print("删除s['student_name']同学的信息")
            students.remove(s)
    save()
    print("删除学生结束")
def menu():
    print("1、新增学生")
    print("2、展示学生")
    print("3、查找学生")
    print("4、删除学生")
    print("0、推出程序")
    choice = input("请输入您的选项>")
    return  choice
def main():
    #入口函数
    #通过控制台与用户交互
    print("--------------------------")
    print("欢迎来到学生管理系统!!!!!")
    print("--------------------------")
    load()
    while True:
        #通过menu创建菜单
        choice=menu()
        if choice=='1':
            #新增学生
            Insert()
        elif choice=='2':
            #展示所有学生
            show()
        elif choice=='3':
            #查找学生
            find()
        elif choice=='4':
            #删除学生
            delete()
        elif choice=='0':
            #推出系统
            print("感谢你的使用,下次再见!")
            sys.exit(0)
        else:
            #进入下次循环,再次输入
            print("输入错误请重新输入>")

main()

python拓展学习

目前我们关于python的学习都比较入门。如果想了解更多可以参考一下内容

python cookbook

python 经典进阶书籍. 针对各种典型场景提供了一些解决方案

awesome-python

整理了 Python 的一些非常实用的程序库:awesome-python: awesome-python 的中文版

500 Lines or Less

使用简短的 Python 代码来实现一些有意思的程序:https://github.com/aosabook/500lines

本篇python的内容就到这里了,喜欢请点个赞,谢谢

封面图自取:

相关推荐
yuanpan2 小时前
使用Python创建本地Http服务实现与外部系统数据对接
开发语言·python·http
在路上`2 小时前
前端学习之后端java小白(二)-sql约束/建表
java·sql·学习
bkspiderx2 小时前
C++时区操作全版本指南(含C++03/C++11-17/C++20)
linux·开发语言·c++·c++20·时区
ljf88382 小时前
Java导出复杂excel,自定义excel导出
java·开发语言·excel
真*小白2 小时前
Python语法学习篇(三)【py3】
开发语言·python·学习
lingggggaaaa2 小时前
小迪安全v2023学习笔记(八十二讲)—— Java组件安全&Solr&Shiro&Log4j&CVE复现
笔记·学习·安全
好望角雾眠2 小时前
第四阶段C#通讯开发-1:通讯基础理论,串口,通讯模式,单位转换,代码示例
开发语言·笔记·c#·串口·通讯
不一样的故事1262 小时前
学习Python是一个循序渐进的过程,结合系统学习、持续实践和项目驱动,
开发语言·python·学习
@HNUSTer2 小时前
Python数据可视化科技图表绘制系列教程(七)
python·数据可视化·科技论文·专业制图·科研图表