30_python实操案例—学生管理系统
import os filename = 'student.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 # 退出系统 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 menum(): print('===========================学生信息管理系统=====================================') print('------------------------------功能菜单-----------------------------------------') print('\t\t\t\t\t\t 1.录入学生信息') print('\t\t\t\t\t\t 2.查找学生信息') print('\t\t\t\t\t\t 3.删除学生信息') print('\t\t\t\t\t\t 4.修改学生信息') print('\t\t\t\t\t\t 5.学生成绩排序') print('\t\t\t\t\t\t 6.统计学生总人数') print('\t\t\t\t\t\t 7.显示所有学生信息') print('\t\t\t\t\t\t 0.退出系统') print('-----------------------------------------------------------------------------') def insert(): student_list = [] while True: id = input('请输入ID(如1001):') if not id: break name = input('请输入姓名:') if not name: break try: English = int(input('请输入英语成绩:')) Python = int(input('请输入Python成绩:')) Java = int(input('请输入Java成绩:')) except: print('输入无效,不是整数类型,请重新输入') continue # 将录入的学生信息保存到字典里 student = {'id': id, 'name': name, 'English': English, 'Python': Python, 'Java': Java} # 将学生信息添加到列表中 student_list.append(student) answer = input('是否继续添加?y/n\n') if answer =='y': continue else: break # 调用save()函数 save(student_list) print('学生信息录入完毕!!!') def save(list): try: # “a”进行写入,如果文件存在,则追加到文件末尾 stu_txt = open(filename, 'a', encoding='utf-8') except: # “w”打开以进行写入,首先截断文件 stu_txt = open(filename, 'w', encoding='utf-8') for item in list: stu_txt.write(str(item)+'\n') stu_txt.close() def search(): student_query = [] while True: id = '' name = '' if os.path.exists(filename): mode = input('按ID查找请输入1:,按姓名查找请输入2:') if mode == '1': id = input('请输入学生ID(如1001):') 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': continue else: break else: print('暂未保存此学生的信息!') return def show_student(list): if len(list) == 0: print('没有查询到学生的信息,无数据显示!!!') return # 定义标题显示格式 format_title = '{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^8}' print(format_title.format('ID', '姓名', '英语成绩', 'Python成绩', 'Java成绩', '总成绩')) # 定义内容的显示格式 format_data = '{:^6}\t{:^12}\t{:^10}\t{:^10}\t{:^10}\t{:^10}' for item in list: print(format_data.format(item.get('id'), item.get('name'), item.get('English'), item.get('Python'), item.get('Java'), int(item.get('English')) + int(item.get('Python')) + int(item.get('Java')) )) def delete(): while True: student_id = input('请输入要删除的学生ID:') if student_id != '': # 判断文件是否存在 if os.path.exists(filename): # 'r'打开以进行读取(默认) with open(filename, 'r', encoding='utf-8')as file: # 将读取到的数据放到这个列表里面 student_old = file.readlines() else: student_old = [] flag = False # 标记是否删除 if student_old: # “w”打开以进行写入,首先截断文件 with open(filename, 'w', encoding='utf-8')as wfile: # 空列表的作用:实现对原有信息的覆盖,删除操作,只需要将对应的信息不写入新的文件里即完成了删除操作 d = {} # 遍历student_old列表 for item in student_old: # 将字符串转换成字典 d = dict(eval(item)) # 判断要删除的学生在字典当中存在不存在 if d['id']!=student_id: # 如果不相等的话,需要把这条信息写到文件里面,说明此条信息不是要删除的信息,应该要重新写入 wfile.write(str(d)+'\n') else: # flag = True表示已经删除了,因为flag = True的信息没有写入wfile文件里面,相当于删除了对应的信息 flag = True if flag: print(f'ID为{student_id}的学生信息已被删除') else: print(f'没有找到ID为{student_id}的学生信息') else: print('无学生信息') break # 删除之后要重新显示所有学生的信息 show() answer = input('是否继续删除?y/n\n') if answer == 'y': continue else: break 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: # 遍历student_old列表中的所有学生信息 for item in student_old: # 将遍历的结果转换成为字典,存储在d中 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\n') if answer == 'y': modify() 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.按Python成绩排序 3.按Java成绩排序 0.按总成绩排序):') if 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) elif mode == '0': student_new.sort(key=lambda x: int(x['English'])+int(x['Python'])+int(x['Java']), reverse=asc_or_desc_bool) else: print('您输入有误,请重新输入!!!') sort() show_student(student_new) def total(): if os.path.exists(filename): with open(filename, 'r', encoding="utf-8") as rfile: student = rfile.readlines() if student: print(f'一共有{len(student)}名学生。') else: print('还没有录入学生信息!!!') else: print("暂未保存数据信息...") def show(): student_list = [] if os.path.exists(filename): with open(filename, 'r', encoding="utf-8") as rfile: student = rfile.readlines() for item in student: student_list.append(eval(item)) if student_list : show_student(student_list) else: print('暂未保存学生信息...') if __name__ == '__main__': main()
结果展示:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律