当前位置: 首页 > news >正文

python小计划——学生管理系统

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

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

目录

需求说明

入口函数

菜单函数

操作函数

        增加学生

        显示学生

        查找学生

        删除学生

存档机制

        约定存档格式

        实现存档函数

        打包为.exe文件

        安装 pyinstaller

        打包程序

源代码

python拓展学习   

        python cookbook

        awesome-python

        500 Lines or Less


需求说明

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

        功能:

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

入口函数

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

        使用menu与用户交互

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

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

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("输入错误请重新输入>")

菜单函数

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

操作函数

        增加学生

#新增学生
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("新增学生结束")

        显示学生

#显示学生
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)
print("删除学生结束")

存档机制

        约定存档格式

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

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

学号 | 名字 | 性别 | 班级
学号 | 名字 | 性别 | 班级
学号 | 名字 | 性别 | 班级

        每个同学占一行.

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

        实现存档函数

#存档函数
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

pip install pyinstaller

        打包程序



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

pyinstall -F 学生管理系统.py

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

源代码

#实现一个命令行版本学生管理系统
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的内容就到这里了,喜欢请点个赞,谢谢

封面图自取:

http://www.wxhsa.cn/company.asp?id=6815

相关文章:

  • C++ 并发
  • UML 5章
  • 《微服务事务管理》 - 教程
  • python之socket udp服务器实现
  • kylin SP3安装mysql 8.4.5
  • Unity中是否可以禁用GC
  • 经典SQL语句大全
  • 开源软件图形库
  • IvorySQL 与 deepin 完成兼容性认证,共创开源生态新篇章
  • 在 Nginx 上搭建静态站点
  • 测试
  • 认真做膜你赛
  • 使用GitHub Dork快速发现漏洞:我的第一个Bugcrowd漏洞挖掘实战
  • kylin SP3安装mysql8.0.41
  • DIFY 项目中通过 Makefile 调用 Dockerfile 并采用 sudo make build-web 命令构建 web 镜像的方法和注意事项
  • 代码随想录算法训练营第一天 | 704. 二分查找、27. 移除元素、209.长度最小的子数组
  • 从 MLPerf Storage v2.0 看 AI 训练中的存储性能与扩展能力
  • Revit二次开发 钢筋生成API(二)
  • 创建会计凭证报错:FI/CO接口:待更新的不一致的FI/CO凭证标题数据(转)
  • Uri uri = new Uri(Path); 这行代码的作用
  • Qt函数方法传入参数未使用-警告warning错误error提示解决
  • mysql 性能监控,关键指标解析与优化案例剖析
  • 如何提取docker镜像用于NAS手动安装
  • 百家大型企业共同选择:2025年人力资源管理系统权威推荐榜单
  • 不修改环境变量的基础下使用Java
  • new 和make 切片和map
  • 三台ubuntu22相互免密登录最快
  • 状态机
  • 设计模式
  • Rhinoceros 8.23.25251.13001 犀牛3D建模