文章下的record.txt。- 编码方式:UTF-8。
- 分隔方式:每行一个学生信息,字段间使用
\t分隔。
5.2
\t分隔。实现存档函数
代码如下:
defsave():"""将全局列表
"""
try:withopen('record.txt','w',encoding='utf-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():"""从文件加载数据到全局列表
"""
ifnotos.path.exists('record.txt'):returnglobalstudentsstudents=[]try:withopen('record.txt','r',encoding='utf-8')asf:forlineinf:line=line.strip()ifnotline:continuetokens=line.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:choice=menu()ifchoice==0:print("感谢使用,再见!")sys.exit()elifchoice==1:insert()elifchoice==2:show()elifchoice==3:find()elifchoice==4:delete()elifchoice==5:update()else:print('您的输入有误!请重新输入!'
)#==========================================
#菜单功能
#==========================================
defmenu():"""显示菜单并捕获用户输入
"""
print("\n"+"="*30)print("新增学生信息"
)print("显示所有同学信息"
)print("根据名字查找学生信息"
)print("删除学生信息"
)print("修改学生信息"
)print("退出程序"
)print("="*30)choice=input(""
).strip()ifnotchoice.isdigit():return-1returnint(choice)#==========================================
#核心业务逻辑
#==========================================
definsert():"""新增学生"""print("\n[新增学生]开始"
)sid=input("请输入学号:"
).strip()forsinstudents:ifs['studentId']==sid:print("错误:该学号已存在!")returnname=input("请输入姓名:"
).strip()gender=input("请输入性别(男/女):
"
).strip()ifgendernotin('男','女'):print("错误:性别不符合要求!")returnclassName=input("请输入班级:"
).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():"""查找学生"""name=input("\n请输入要查找的姓名:"
).strip()found=Falseforsinstudents:ifname==s['name']:print(f"找到记录:[
{s['studentId']}]{s['name']}|{s['gender']}|{s['className']}")found=Trueifnotfound:print(f"未找到名为[
{name}]的学生。
"
)defdelete():"""删除学生"""globalstudentssid=input("\n请输入要删除的学号:
").strip()original_len=len(students)students=[sforsinstudentsifs['studentId']!=sid]iflen(students)<original_len:save()print(f"学号为
[{sid}]
的学生已成功删除。
")else:print("未找到该学号,操作取消。
")defupdate():"""修改学生
(新增逻辑)"""sid=input("\n请输入要修改的学生学号:
").strip()forsinstudents:ifs['studentId']==sid:print(f"已找到
[{s['name']}],请输入新信息
(回车跳过不修改):")new_name=input(f"新姓名
({s['name']}):
").strip()ifnew_name:s['name']=new_name
new_gender=input(f"新性别
({s['gender']}):
").strip()ifnew_genderin('男','女'):s['gender']=new_gender
new_class=input(f"新班级
({s['className']}):
").strip()ifnew_class:s['className']=new_class
save()print("信息更新成功!")returnprint("未找到该学号的学生。
")#
==========================================#
持久化存储
==========================================defsave():"""将数据写入本地
record.txt"""try:withopen('record.txt','w',encoding='utf-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',encoding='utf-8')asf:forlineinf:line=line.strip()ifnotline:continuetokens=line.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.打包成
程序发布
当前虽然已经实现了一个管理系统,但是.py的文件只能在安装了
Python
环境的机器上运行。
为了能够更好的部署到其他主机上,可以借助pyinstaller来把
Python
pyinstaller
在终端执行:
pipinstallpyinstaller由于官方源在国外,国内访问有时会断断续续。
你可以通过-i参数切换到清华大学或阿里云的镜像源,速度会快很多。
pipinstall
https://pypi.tuna.tsinghua.edu.cn/simple
运行结果如下:
/>7.2.
打包程序
其中-F表示打包成单个
exe(不带动态库)
在终端输入:
pyinstallertest.py
注意:如果提示找不到pyinstaller命令,则需要重启一下
PyCharm。
稍等片刻,很快打包完成。
/>
此时就可以把这个程序拷贝给其他机器使用了,无需
Python
环境即可运行。
如下所示:
- 上一篇: 绍兴地区如何为移动设备优化素材网站?
- 下一篇: 如何高效使用Linux操作系统的指南?


