一、需求说明
功能:
- 新增学生
- 显示学生
- 查找学生
- 删除学生
- 存档到文件
1.1 创建入口函数
- 使用一个全局列表 students 表示所有学生信息.
- 使用 menu 函数和用户交互. 这是一个自定义函数.
- 使用 insert , show , find , delete 这几个自定义函数完成增删查操作.
- 使用 sys.exit 实现程序退出.
1.2 加入存档读档
1. 约定存档格式
2. 实现存档函数
3. 实现读档函数
# 实现一个命令行版本的学生管理系统
# 通过全局变量管理所有的学生信息
# 这个列表的每个元素都是一个字典
import os.path
students = []
def save():
with open('Record.txt', 'w', encoding='utf8') 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)}条记录!')
def load():
# 判断文件是否存在
if not os.path.exists('Record.txt'):
return
# 读档保证把旧的数据清理干净
global students
students = []
with open('Record.txt', 'r', encoding='utf8') 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)}条记录!')
def menu():
print('1.新增学生')
print('2.显示学生')
print('3.查找学生')
print('4.删除学生')
print('0.退出程序')
choice = int(input('请输入你的选择:'))
return choice
def insert():
print('----------------------------------------')
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)
save()
print('[新增学生结束]')
print('----------------------------------------')
def show():
# 遍历全局变量的列表
print('----------------------------------------')
print('[显示学生]开始')
for s in students:
print(f"[学号:{s['studentId']}]\t\t[姓名:{s['name']}]\t\t[性别:{s['gender']}]\t\t[班级:{s['className']}]")
print(f'一共显示了{len(students)}条数据!')
print('[显示学生]完毕')
print('----------------------------------------')
def find():
print('----------------------------------------')
print('[查找学生]开始')
name = input('请输入要查找的学生的姓名:')
count = 0
for s in students:
if name == s['name']:
print(f"[学号:{s['studentId']}]\t\t[姓名:{s['name']}]\t\t[性别:{s['gender']}]\t\t[班级:{s['className']}]")
count += 1
print(f'[查找学生]结束,共找到了{count}个匹配的同学!')
print('----------------------------------------')
def delete():
print('----------------------------------------')
print('[删除学生]开始!')
studentId = input('请输入要删除的学生的学号:')
for s in students:
if studentId == s['studentId']:
print(f"删除s{'name'}同学的信息!")
students.remove(s)
save()
print('[删除学生]结束!')
print('----------------------------------------')
def main():
print('----------------------------------------')
print(' 欢迎来到学生管理系统 ')
print('----------------------------------------')
load()
while True:
choice = menu()
if choice == 1:
insert()
elif choice == 2:
show()
elif choice == 3:
find()
elif choice == 4:
delete()
elif choice == 0:
print('退出程序!')
exit(0)
else:
print('你的输入有误,请重试!')
continue
main()
1.3 打包成 exe 程序发布
当前虽然已经实现了一个管理系统, 但是 .py 的文件只能在安装了 Python 环境的机器上运行.
为了能够更好的部署到其他主机上, 可以借助 pyinstaller 来把 Python 程序打包成 exe 程序.
1.3.1 安装 pyinstaller
pip install pyinstaller
1.3.2 打包程序
-F 表示打包成单个 exe (不带动态库)
pyinstall -F 学生管理系统.py
1.3.3指令出错解决方案
1. 添加环境变量
之后重新启动pyCharm就可解决
2. 执行文件 pyinstaller --console --onefile 文件名(不可有中文路径和空格)
生成的可执行文件在第二步的文件名中的dist下