综合案例: 学生管理系统
需求说明
实现一个命令行版本的学生管理系统
功能:
新增学生
显示学生
查找学生
删除学生
存档到文件
创建入口函数
使用一个全局列表 students 表示所有学生信息.
使用 menu 函数和用户交互. 这是一个自定义函数.
使用 insert , show , find , delete 这几个自定义函数完成增删查操作.
使用 sys.exit 实现程序退出
# 使用列表表示所有的学生 students = [] def main(): """ 程序的入口函数 """ print('+--------------------------+') print('| 欢迎来带学生管理系统! |') print('+--------------------------+') while True: choice = menu() if choice == 0: sys.exit() if choice == 1: insert() elif choice == 2: show() elif choice == 3: find() elif choice == 4: delete() else: print('您的输入有误! 请重新输入!') main()
实现菜单函数
def menu(): """ 显示程序菜单 """ print(" 1. 新增学生信息") print(" 2. 显示所有同学信息") print(" 3. 根据名字查找学生信息") print(" 4. 删除学生信息") print(" 0. 退出程序") choice = input(" 请输入您的选择: ") return int(choice
实现增删查操作
新增学生
def insert(): 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) print("[新增学生] 完毕!")
显示学生
def show(): print("[显示学生] 开始!") for s in students: print(f" [{s['studentId']}]\t{s['name']}\t{s['gender']}\t{s['className']}") print(f"[显示学生] 完毕! 共显示了 {len(students)} 条记录!")
查找学生
def find(): print("[查找学生] 开始!") name = input("请输入要查找的同学姓名: ") count = 0 for s in students: if name == s['name']: print(f" [{s['studentId']}]\t{s['name']}\t{s['gender']}\t{s['className']}") count += 1 print(f"[查找学生] 完毕! 共查找到 {count} 条记录!")
删除学生
def delete(): print("[删除学生] 开始!") studentId = input("请输入要删除的同学学号: ") count = 0 for s in students: if studentId == s['studentId']: print(f"删除 {s['name']} 同学的信息!") students.remove(s) count += 1 print(f"[删除学生] 完毕! 共删除 {count} 条记录!")
加入存档读档
约定存档格式
约定存档文件放到 d:/record.txt 文件中.
并且以行文本的方式来保存学生信息. 格式如下:
学号\t名字\t性别\t班级 学号\t名字\t性别\t班级 学号\t名字\t性别\t班级
每个同学占一行.
每个同学的信息之间使用 \t 制表符进行分隔
实现存档函数
def save(): """ 存档函数 """ with open('d:/record.txt', 'w') 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)} 条记录!")
在 insert 和 delete 末尾, 调用 save 函数进行存档
# 执行存档 save()
实现读档函数
def load(): """ 读档函数 """ # 如果存档文件不存在, 则跳过读档环节 if not os.path.exists('d:/record.txt'): return # 先清空全局变量里的数据 global students students = [] with open('d:/record.txt', 'r') 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)} 条记录!")
打包成 exe 程序发布
当前虽然已经实现了一个管理系统, 但是 .py 的文件只能在安装了 Python 环境的机器上运行.
为了能够更好的部署到其他主机上, 可以借助 pyinstaller 来把 Python 程序打包成 exe 程序
安装 pyinstaller
pip install pyinstaller
打包程序
-F 表示打包成单个 exe (不带动态库)
pyinstall -F 学生管理系统.py
注意: 如果提示找不到 pyinstaller 命令, 则需要重启一下 PyCharm.