【Python】学生管理系统

📅 发布时间:2026/7/16 2:48:48 👁️ 浏览次数:
【Python】学生管理系统
文章目录1. 需求说明2. 创建入口函数3. 实现菜单函数4. 实现增删查改操作4.1 新增学生4.2 显示学生4.3 查找学生4.4 删除学生4.5 修改学生5. 加入存档读档5.1 约定存档格式5.2 实现存档函数5.3 实现读档函数6. 完整代码实现7. 打包成 exe 程序发布7.1 安装 pyinstaller7.2. 打包程序1. 需求说明实现一个命令行版本的学生管理系统支持学生信息的增、删、查、改以及本地文件持久化存储。主要功能新增学生输入学号、姓名、性别、班级自动查重。显示学生列表化整齐展示所有学生信息。查找学生根据姓名搜索匹配的学生记录。删除学生根据学号精准删除学生记录。修改学生根据学号定位并更新学生信息。存档读档程序启动自动读档数据变动自动存档。2. 创建入口函数设计要点初始化全局列表students。程序启动时立即调用load()函数加载本地数据。循环调用menu()并根据返回值执行对应功能模块。代码如下importsysimportos# 存储所有学生信息的全局列表students[]defmain(): 程序的入口函数 # 1. 启动时加载存档load()print(---------------------------)print(| 欢迎使用学生管理系统! |)print(---------------------------)whileTrue:choicemenu()ifchoice0:print(退出程序欢迎下次使用!)sys.exit()elifchoice1:insert()elifchoice2:show()elifchoice3:find()elifchoice4:delete()elifchoice5:update()else:print(您的输入有误! 请重新输入!)if__name____main__:main()3. 实现菜单函数增加了对非数字输入的处理防止程序因int()转换失败而崩溃。代码如下defmenu(): 显示程序菜单并获取用户输入 print(\n-*30)print( 1. 新增学生信息)print( 2. 显示所有同学信息)print( 3. 根据名字查找学生信息)print( 4. 删除学生信息)print( 5. 修改学生信息)print( 0. 退出程序)print(-*30)choiceinput( 请输入您的选择: ).strip()ifnotchoice.isdigit():return-1returnint(choice)4. 实现增删查改操作4.1 新增学生增加了学号重复检查避免逻辑冲突。代码如下definsert():print([新增学生] 开始!)studentIdinput(请输入学生的学号: ).strip()# 检查学号是否重复forsinstudents:ifs[studentId]studentId:print(学号已存在! 新增失败!)returnnameinput(请输入学生的姓名: )genderinput(请输入学生的性别 (男/女): )ifgendernotin(男,女):print(性别不符合要求! 新增失败!)returnclassNameinput(请输入学生的班级: )student{studentId:studentId,name:name,gender:gender,className:className}students.append(student)save()print([新增学生] 完毕!)4.2 显示学生使用格式化字符串保证列对齐。代码如下defshow():print(f[显示学生] 共有{len(students)}条记录)# 使用格式化对齐print(f{学号:10}\t{姓名:10}\t{性别:5}\t{班级:10})forsinstudents:print(f{s[studentId]:10}\t{s[name]:10}\t{s[gender]:5}\t{s[className]:10})4.3 查找学生代码如下deffind():nameinput(请输入要查找的同学姓名: )count0forsinstudents:ifnames[name]:print(f找到记录: [{s[studentId]}]\t{s[name]}\t{s[gender]}\t{s[className]})count1print(f[查找完成] 共找到{count}条记录!)4.4 删除学生采用列表推导式删除避免遍历时直接删除导致的索引问题。代码如下defdelete():globalstudents studentIdinput(请输入要删除的同学学号: )original_lenlen(students)# 重新构建列表过滤掉目标学号students[sforsinstudentsifs[studentId]!studentId]iflen(students)original_len:save()print(f学号为{studentId}的同学信息已删除!)else:print(未找到该学号的学生!)4.5 修改学生代码如下defupdate():studentIdinput(请输入要修改的同学学号: )forsinstudents:ifs[studentId]studentId:print(f找到学生 [{s[name]}]请输入新信息 (回车表示不修改该项))new_nameinput(f姓名 ({s[name]}): ).strip()ifnew_name:s[name]new_name new_genderinput(f性别 ({s[gender]}): ).strip()ifnew_genderin(男,女):s[gender]new_gender new_classinput(f班级 ({s[className]}): ).strip()ifnew_class:s[className]new_class save()print(修改成功!)returnprint(未找到该学号的学生!)5. 加入存档读档5.1 约定存档格式存档文件约定保存在当前目录下的record.txt。编码方式UTF-8。分隔方式每行一个学生信息字段间使用\t分隔。5.2 实现存档函数代码如下defsave(): 将全局列表 students 写入文件 try:withopen(record.txt,w,encodingutf-8)asf:forsinstudents:f.write(f{s[studentId]}\t{s[name]}\t{s[gender]}\t{s[className]}\n)exceptExceptionase:print(f存档失败:{e})5.3 实现读档函数代码如下defload(): 从文件加载数据到全局列表 students ifnotos.path.exists(record.txt):returnglobalstudents students[]try:withopen(record.txt,r,encodingutf-8)asf:forlineinf:lineline.strip()ifnotline:continuetokensline.split(\t)iflen(tokens)4:student{studentId:tokens[0],name:tokens[1],gender:tokens[2],className:tokens[3]}students.append(student)print(f[读档成功] 已加载{len(students)}条历史记录!)exceptExceptionase:print(f读档失败:{e})6. 完整代码实现代码如下importsysimportos# # 2.1 全局配置与入口# students[]# 存储学生信息的全局列表defmain(): 程序的入口函数初始化并控制主循环 load()# 启动时先读档print(---------------------------)print(| 欢迎使用学生管理系统! |)print(---------------------------)whileTrue:choicemenu()ifchoice0:print(感谢使用再见!)sys.exit()elifchoice1:insert()elifchoice2:show()elifchoice3:find()elifchoice4:delete()elifchoice5:update()else:print(您的输入有误! 请重新输入!)# # 3. 菜单功能# defmenu(): 显示菜单并捕获用户输入 print(\n*30)print( 1. 新增学生信息)print( 2. 显示所有同学信息)print( 3. 根据名字查找学生信息)print( 4. 删除学生信息)print( 5. 修改学生信息)print( 0. 退出程序)print(*30)choiceinput( 请输入您的选择: ).strip()ifnotchoice.isdigit():return-1returnint(choice)# # 4. 核心业务逻辑# definsert():新增学生print(\n[新增学生] 开始)sidinput(请输入学号: ).strip()forsinstudents:ifs[studentId]sid:print(错误该学号已存在)returnnameinput(请输入姓名: ).strip()genderinput(请输入性别 (男/女): ).strip()ifgendernotin(男,女):print(错误性别不符合要求)returnclassNameinput(请输入班级: ).strip()students.append({studentId:sid,name:name,gender:gender,className:className})save()print([新增学生] 完毕!)defshow():显示所有学生ifnotstudents:print(\n[提示] 目前没有学生记录。)returnprint(f\n[显示学生] 共{len(students)}条记录)print(f{学号:10}\t{姓名:10}\t{性别:5}\t{班级:10})forsinstudents:print(f{s[studentId]:10}\t{s[name]:10}\t{s[gender]:5}\t{s[className]:10})deffind():查找学生nameinput(\n请输入要查找的姓名: ).strip()foundFalseforsinstudents:ifnames[name]:print(f找到记录: [{s[studentId]}]{s[name]}|{s[gender]}|{s[className]})foundTrueifnotfound:print(f未找到名为 [{name}] 的学生。)defdelete():删除学生globalstudents sidinput(\n请输入要删除的学号: ).strip()original_lenlen(students)students[sforsinstudentsifs[studentId]!sid]iflen(students)original_len:save()print(f学号为 [{sid}] 的学生已成功删除。)else:print(未找到该学号操作取消。)defupdate():修改学生 (新增逻辑)sidinput(\n请输入要修改的学生学号: ).strip()forsinstudents:ifs[studentId]sid:print(f已找到 [{s[name]}]请输入新信息 (回车跳过不修改):)new_nameinput(f新姓名 ({s[name]}): ).strip()ifnew_name:s[name]new_name new_genderinput(f新性别 ({s[gender]}): ).strip()ifnew_genderin(男,女):s[gender]new_gender new_classinput(f新班级 ({s[className]}): ).strip()ifnew_class:s[className]new_class save()print(信息更新成功!)returnprint(未找到该学号的学生。)# # 5. 持久化存储 (存档读档)# defsave():将数据写入本地 record.txttry:withopen(record.txt,w,encodingutf-8)asf:forsinstudents:f.write(f{s[studentId]}\t{s[name]}\t{s[gender]}\t{s[className]}\n)exceptExceptionase:print(f存储出错:{e})defload():从本地 record.txt 读取数据ifnotos.path.exists(record.txt):returnglobalstudents students[]try:withopen(record.txt,r,encodingutf-8)asf:forlineinf:lineline.strip()ifnotline:continuetokensline.split(\t)iflen(tokens)4:students.append({studentId:tokens[0],name:tokens[1],gender:tokens[2],className:tokens[3]})print(f[读档成功] 加载了{len(students)}条记录)exceptExceptionase:print(f读档出错:{e})if__name____main__:main()7. 打包成 exe 程序发布当前虽然已经实现了一个管理系统但是.py的文件只能在安装了 Python 环境的机器上运行。为了能够更好的部署到其他主机上可以借助pyinstaller来把 Python 程序打包成 exe 程序。7.1 安装 pyinstaller在终端执行pipinstallpyinstaller由于官方源在国外国内访问有时会断断续续。你可以通过-i参数切换到清华大学或阿里云的镜像源速度会快很多。pip install pyinstaller-i https://pypi.tuna.tsinghua.edu.cn/simple运行结果如下7.2. 打包程序其中-F表示打包成单个 exe不带动态库在终端输入pyinstaller -F test.py注意如果提示找不到pyinstaller命令则需要重启一下 PyCharm。稍等片刻很快打包完成。此时就可以把这个程序拷贝给其他机器使用了无需 Python 环境即可运行。如下所示