本期我们来综合应用一下以往的python知识点和库的学习,以一个经典的项目:学生管理系统,来巩固我们的python学习
相关代码已经上传至作者的个人gitee:楼田莉子/Python 学习喜欢请点个赞谢谢
目录
[安装 pyinstaller](#安装 pyinstaller)
[python cookbook](#python cookbook)
[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的内容就到这里了,喜欢请点个赞,谢谢
封面图自取:
