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的内容就到这里了,喜欢请点个赞,谢谢

封面图自取:

相关推荐
代码N年归来仍是新手村成员1 天前
【Java转Go】即时通信系统代码分析(一)基础Server 构建
java·开发语言·golang
踩坑记录1 天前
leetcode hot100 3.无重复字符的最长子串 medium 滑动窗口(双指针)
python·leetcode
Z1Jxxx1 天前
01序列01序列
开发语言·c++·算法
沐知全栈开发1 天前
C语言中的强制类型转换
开发语言
梦雨羊1 天前
Base-NLP学习
人工智能·学习·自然语言处理
丝斯20111 天前
AI学习笔记整理(42)——NLP之大规模预训练模型Transformer
人工智能·笔记·学习
关于不上作者榜就原神启动那件事1 天前
Java中大量数据Excel导入导出的实现方案
java·开发语言·excel
坚定学代码1 天前
基于观察者模式的ISO C++信号槽实现
开发语言·c++·观察者模式·ai
小猪佩奇TONY1 天前
Linux 内核学习(14) --- linux x86-32 虚拟地址空间
linux·学习
Wang's Blog1 天前
Nodejs-HardCore: Buffer操作、Base64编码与zlib压缩实战
开发语言·nodejs