目录
本文实例为大家分享了python实现简易学生信息管理系统的具体代码,供大家参考,具体内容如下
一、系统功能
1.录入学生信息
2.查找学生信息
3.修改学生信息
4.删除学生信息
5.成绩排序
6.统计学生总人数
7.显示所有学生信息
0.退出系统
二、系统开发环境
1.操作系统:win7
2.开发工具:PyCharm
3.Python内置模块:os,re
三、实现代码
import os filename=\'students.txt\' def main(): while True: menum() choice=int(input(\'请选择功能:\')) if choice in [0,1,2,3,4,5,6,7]: if choice==0: answer=input(\'您确定要退出系统吗?(y/n)\') if answer==\'y\' or answer==\'Y\': print(\'感谢您的使用!\') break #退出while循环并退出系统 else: continue elif choice == 1: insert() #录入学生信息 elif choice == 2: search() #查找学生信息 elif choice == 3: delete() #删除学生信息 elif choice == 4: modify() #修改学生信息 elif choice == 5: sort() #成绩排序 elif choice == 6: total() #统计学生总人数 elif choice == 7: show() #显示所有学生信息 def insert(): student_list=[] #用于存储学生信息,列表每个元素是字典。 while True: id=input(\'请输入学生ID:\') if not id: break name=input(\'请输入学生姓名:\') if not name: break try: Englist=int(input(\'请输入英语成绩:\')) Python=int(input(\'请输入Python成绩:\')) Java=int(input(\'请输入Java成绩:\')) except: print(\'输入无效,不是整数类型,请重新输入!\') continue #将录入的学生信息保存到字典中 student={\'id\':id,\'name\':name,\'English\':Englist,\'Python\':Python,\'Java\':Java} #将学生信息添加到列表中 student_list.append(student) answer=input(\'是否继续添加?(y/n)\') if answer==\'y\' or answer==\'Y\': continue else: break #将学生信息保存在文件中 save(student_list) print(\'学生信息录入完毕!\') pass 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)\') if answer==\'y\' or answer==\'Y\': continue else: break else: print(\'暂未保存学生信息。\') return pass def delete(): while True: student_id=input(\'请输入要删除的学生ID:\') if student_id != \'\': if os.path.exists(filename): #判断文件是否存在 with open(filename,\'r\',encoding=\'utf-8\') as file: student_old=file.readlines() #读取所有学生信息并保存在列表中 else: student_old=[] flag=False #用于标记是否删除 if student_old: with open(filename,\'w\',encoding=\'utf-8\') as wfile: d={} for item in student_old: #遍历学生信息列表 d=dict(eval(item)) #将字符串转成字典 if d[\'id\']!=student_id: wfile.write(str(d)+\'\\n\') else: flag=True if flag: print(f\'id为{student_id}的学生信息已被删除\') else: print(f\'没有找到ID为{student_id}的学生信息\') else: print(\'无此学生信息\') break show() #删完之后重新显示所有学生信息 answer=input(\'是否继续删除?(y/n)\') if answer==\'y\' or answer==\'Y\': continue else: break pass 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[\'English\']=input(\'请输入English成绩:\') 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)\') if answer==\'y\': modify() pass 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(\'请选择排序方式(0:按总成绩排序,1:按English成绩排序,2:按Python成绩排序,3:按Java成绩排序)\') if mode==\'0\': student_new.sort(key=lambda x: int(x[\'English\'])+int(x[\'Python\'])+int(x[\'Java\']), reverse=asc_or_desc_bool) elif mode==\'1\': student_new.sort(key=lambda x:int(x[\'English\']),reverse=asc_or_desc_bool) elif mode==\'2\': student_new.sort(key=lambda x: int(x[\'Python\']), reverse=asc_or_desc_bool) elif mode==\'3\': student_new.sort(key=lambda x: int(x[\'Java\']), reverse=asc_or_desc_bool) else: print(\'您的输入有误,请重新输入!\') sort() show_student(student_new) pass 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(\'暂未保存学生信息......\') pass 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(\'暂未保存过数据!\') pass def save(stu_list): try: stu_txt=open(filename,\'a\',encoding=\'utf=8\') except: stu_txt=open(filename,\'w\',encoding=\'utf-8\') for item in stu_list: stu_txt.write(str(item)+\'\\n\') stu_txt.close() def show_student(lst): if len(lst)==0: print(\'没有查到学生信息,无数据显示!\') return #定义标题显示格式 format_title=\'{:^6}\\t{:^12}\\t{:^10}\\t{:^10}\\t{:^10}\\t{:^8}\' print(format_title.format(\'ID\',\'姓名\',\'English成绩\',\'Python成绩\',\'Java成绩\',\'总成绩\')) #定义内容显示格式 format_data=\'{:^6}\\t{:^12}\\t{:^10}\\t{:^18}\\t{:^14}\\t{:^8}\' for item in lst: print(format_data.format(item.get(\'id\'),item.get(\'name\'),item.get(\'English\'),item.get(\'Python\'),item.get(\'Java\'),str(int(item.get(\'English\'))+int(item.get(\'Python\'))+int(item.get(\'Java\'))))) pass def menum(): print(\'-------------------学生信息管理系统--------------------\') print(\'-----------------------功能菜单------------------------\') print(\' 1.录入学生信息\') print(\' 2.查找学生信息\') print(\' 3.删除学生信息\') print(\' 4.修改学生信息\') print(\' 5.成绩排序\') print(\' 6.统计学生总人数\') print(\' 7.显示所有学生信息\') print(\' 0.退出系统\') print(\'------------------------------------------------------\') main()
四、项目打包并生成.exe可执行文件
1.安装第三方模块,打开dos窗口,输入:pip install PyInstaller并回车,
2.输入:pyinstaller -F 程序文件具体位置,
3.回车后即可在输出内容的倒数第二行看到.exe文件的位置。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
© 版权声明
THE END
暂无评论内容