6.修改学生信息设计
通过id的查询修改已经录入系统的信息,进行修改保存操作
代码设计:
def modify(): show() if os.path.exists(filename): with open(filename,'r',encoding='utf-8') as rfile: student_old=rfile.readlines() else: return student_id=input('请输入要修改的学员的ID:') with open(filename,'w',encoding='utf-8') as wfile: for item in student_old: d = dict(eval(item)) if d['id'] == student_id: print('找到学生信息,可以修改他的相关信息了!') while True: try: d['name'] = input('请输入姓名:') d['math'] = input('请输入数学成绩:') d['python'] = input('请输入python成绩:') d['java'] = input('请输入java成绩:') except: print('您的输入有问题,请重新输入!') else: break wfile.write(str(d)+'\n') print('修改成功!') else: wfile.write(str(d)+'\n') answer=input('是否继续修改其他学生信息?y/n\n') if answer == 'y' or answer == 'Y': modify()
运行截图:
7.查找功能设计
代码设计:
def search(): student_query=[] while True: id='' name='' if os.path.exists(filename): mode=input('安ID查找输入1,按姓名查找输入2:') if mode == '1': id=input('请输入学生ID:') elif mode == '2': name = input('请输入学生姓名:') else: print('你的输入有误,请重新输入:') search() with open(filename,'r',encoding='utf-8') as rfile: student = rfile.readlines() for item in student: d = dict(eval(item)) if id!='': if d['id'] == id: student_query.append(d) elif name!='': if d['name'] == name: student_query.append(d) # 显示查询结果 show_student(student_query)\ # 清空列表 student_query.clear() answer=input('是否要继续查询?y/n\n') if answer == 'y' or answer == 'Y': continue else: break else: print('暂未保存学生信息') return def show_student(lst): if len(lst)==0: print('没有查到学生信息,无数据显示!') return # 定义标题显示格式 format_title='{:^6}\t{:^12}\t{:^8}\t{:^8}\t{:^10}\t{:^10}\t{:^8}' print(format_title.format('ID','姓名','数学成绩','英语成绩','Python成绩','java成绩','总成绩')) # 定义内容的格式显示 format_data='{:^6}\t{:^12}\t{:^8}\t{:^8}\t{:^10}\t{:^10}\t{:^8}' for item in lst: print(format_data.format(item.get('id'), item.get('name'), item.get('math'), item.get('english'), item.get('python'), item.get('java'), int(item.get('english'))+int(item.get('math'))+int(item.get('python'))+int(item.get('java')) ))
运行截图:
8.统计学生总数
代码设计:
def total(): if os.path.exists(filename): with open(filename,'r',encoding='utf-8') as rfile: students=rfile.readlines() if students: print(f'一共有{len(students)}名学生') else: print('还未录入学生信息') else: print('暂未保存数据信息……')
运行截图:
9.显示所有学生信息功能设计
代码设计:
def show(): student_lst=[] if os.path.exists(filename): with open(filename,'r',encoding='utf-8') as rfile: students = rfile.readlines() for item in students: student_lst.append(eval(item)) if student_lst: show_student(student_lst) else: print('暂未保存过数据!')
运行截图:
10.排序模块设计
根据学生的成绩进行排序,包括升序降序
设计代码:
def sort(): show() if os.path.exists(filename): with open(filename,'r',encoding='utf-8') as rfile: student_list=rfile.readlines() student_new=[] for item in student_list: d = dict(eval(item)) student_new.append(d) else: return asc_or_desc=input('请选择(0.升序 1.降序):') if asc_or_desc=='0': asc_or_desc_bool=False elif asc_or_desc== '1': asc_or_desc_bool=True else: print('您的输入有误,请重新输入!') sort() mode = input('请选择排序方式(1.按照数学成绩排序 2.按照英语成绩排序 3.按照Python成绩排序 4.按照Java成绩排序 0.按照总成绩排序)') if mode=='1': student_new.sort(key=lambda x :int(x['math']),reverse=asc_or_desc_bool) elif mode=='2': student_new.sort(key=lambda x :int(x['english']),reverse=asc_or_desc_bool) elif mode=='3': student_new.sort(key=lambda x :int(x['python']),reverse=asc_or_desc_bool) elif mode=='4': student_new.sort(key=lambda x :int(x['java']),reverse=asc_or_desc_bool) elif mode=='0': student_new.sort(key=lambda x :int(x['java'])+int(x['python'])+int(x['english'])+int(x['math']),reverse=asc_or_desc_bool) else: print('您的输入有误,请重新输入!') sort() show_student(student_new)
代码运行截图:
11.项目打包成.exe文件
打包必要包:PyInstaller
控制台pip安装包
打包语法:pyinstaller -F .py(py文件所在路径)
上面是一个非常基础的打包方式,下面讲一个可以更改打包生成的图标方式
Pyinstaller -F -w -i [图片名].ico [脚本名].py
-w为控制是否打包控制台,即确定你打包形成的程序运行是否要出现黑框框,有gui界面记得加上:
-i[图片名]可以更改打包生成的图标,但是这个图片格式需要为.ico格式
常用图片转换网站:在线图片转icon格式
注:打包生成文件可能无法直接运行,相对路径在dist但是dist没有资源文件夹,我们应该新建一个文件,里面放入所有资源文件夹和exe文件
测试无误后压缩发给别人,别人解压后就可以使用了!
个人电脑打包演示:
打包成功:
这里我打包生成的程序都无法执行,我给student.txt文件复制进这个文件夹下就可以运行了,大家打包的时候注意!
好了,本次Python的学生管理系统就给大家写完了!感谢观看。
整理不易,点个赞再走吧!有需要源码可私信。