| import?pickle from?os.path?import?isfile from?os?import?remove def?main(): ????running?=?True ????while?running: ????????menu() ????????code?=?'9' ????????count?=?0 ????????while?code?not?in?[str(i)?for?i?in?range(8)]: ????????????if?count?==?0: ????????????????code?=?input("请输入:") ????????????else: ????????????????code?=?input("输入有误!请重新输入:") ????????????count?+=?1 ????????if?code?==?'0': ????????????running?=?False ????????elif?code?==?'1': ????????????insert() ????????elif?code?==?'2': ????????????search() ????????elif?code?==?'3': ????????????delete() ????????elif?code?==?'4': ????????????modify() ????????elif?code?==?'5': ????????????sort() ????????elif?code?==?'6': ????????????total() ????????elif?code?==?'7': ????????????show() ????else: ????????input("感谢您使用学生信息查询系统程序,请按 <Enter> 键退出程序!") def?menu(): ????print(''' ????╔———————学生信息管理系统————————╗ ????│????????????????????????????????????????????? │ ????│?? =============== 功能菜单 ===============?? │ ????│????????????????????????????????????????????? │ ????│?? 1 录入学生信息???????????????????????????? │ ????│?? 2 查找学生信息???????????????????????????? │ ????│?? 3 删除学生信息???????????????????????????? │ ????│?? 4 修改学生信息???????????????????????????? │ ????│?? 5 排序???????????????????????????????????? │ ????│?? 6 统计学生总人数?????????????????????????? │ ????│?? 7 显示所有学生信息???????????????????????? │ ????│?? 0 退出系统???????????????????????????????? │ ????│? ==========================================? │ ????│? 说明:通过数字选择菜单????????????????????? │ ????╚———————————————————————╝ ????????''') def?insert(): ????continue_?=?'y' ????while?continue_?==?'y': ????????ID?=?input("请输入 ID(如 1001):") ????????name?=?input("请输入名字:") ????????chinese?=?input("请输入语文成绩:") ????????while?not?is_float(chinese): ????????????chinese?=?input("输入无效!请重新输入语文成绩:") ????????chinese?=?float(chinese) ????????math?=?input("请输入数学成绩:") ????????while?not?is_float(math): ????????????math?=?input("输入无效!请重新输入数学成绩:") ????????math?=?float(math) ????????english?=?input("请输入英语成绩:") ????????while?not?is_float(english): ????????????english?=?input("输入无效!请重新输入英语成绩:") ????????english?=?float(english) ????????score?=?[{'id':?ID,?'name': name, ??????????????????'chinese': chinese,?'math': math,?'english': english}] ????????if?not?isfile("students.pkl"): ????????????file?=?open("students.pkl",?"ab") ????????????pickle.dump(score,?file) ????????????file.close() ????????else: ????????????file?=?open("students.pkl",?"rb+") ????????????score_list?=?pickle.load(file) ????????????score_list.extend(score) ????????????file.close() ????????????file?=?open("students.pkl",?"wb") ????????????pickle.dump(score_list,?file) ????????????file.close() ????????continue_?=?input("是否继续添加?(y/n)") ????????while?continue_?not?in?['y',?'n']: ????????????continue_?=?input("输入无效!是否继续添加?(y/n)") ????else: ????????print("学生信息录入完毕!") def?search(): ????continue_?=?'y' ????while?continue_?==?'y': ????????if?not?isfile("students.pkl"): ????????????print("没有任何数据!") ????????????return ????????way?=?input("按ID查输入1;按姓名查输入2:") ????????while?way?not?in?['1',?'2']: ????????????way?=?input("输入无效!按ID查输入1;按姓名查输入2:") ????????if?way?==?'1': ????????????students?=?pickle.load(open("students.pkl",?"rb")) ????????????ID?=?input("请输入学生 ID:") ????????????result?=?[] ????????????for?each?in?students: ????????????????if?each['id']?==?ID: ????????????????????result.append(each) ????????else: ????????????students?=?pickle.load(open("students.pkl",?"rb")) ????????????name?=?input("请输入学生姓名:") ????????????result?=?[] ????????????for?each?in?students: ????????????????if?each['name']?==?name: ????????????????????result.append(each) ????????result_str?=?'' ????????result_str?+=?'ID'.center(6) ????????result_str?+=?'姓名'.center(12) ????????result_str?+=?'语文'.center(10) ????????result_str?+=?'数学'.center(10) ????????result_str?+=?'英语'.center(10) ????????result_str?+=?'总成绩'.center(11) ????????for?i?in?result: ????????????result_str?+=?"\n" ????????????result_str?+=?i['id'].center(6) ????????????result_str?+=?i['name'].center(12) ????????????result_str?+=?str(i['chinese']).center(12) ????????????result_str?+=?str(i['math']).center(12) ????????????result_str?+=?str(i['english']).center(12) ????????????result_str?+=?str(i['chinese']?+?i['math']?+ ??????????????????????????????i['english']).center(13) ????????print(result_str) ????????continue_?=?input("是否继续查询 (y/n)?") ????????while?continue_?not?in?['y',?'n']: ????????????continue_?=?input("输入无效!是否继续查询 (y/n)?") def?delete(): ????if?not?isfile("students.pkl"): ????????print("没有学生信息!@_@") ????????return ????continue_?=?'y' ????while?continue_?==?'y': ????????show() ????????ID?=?input("请输入要删除的学生ID:") ????????students?=?pickle.load(open("students.pkl",?"rb")) ????????result?=?[] ????????for?each?in?students: ????????????if?each['id']?==?ID: ????????????????result.append(each) ????????if?not?result: ????????????print(f"没有找到ID为 {ID} 的学生信息...") ????????????show() ????????else: ????????????for?i?in?result: ????????????????students.remove(i) ????????????if?not?students: ????????????????remove("students.pkl") ????????????????print(f"ID 为 {ID} 的学生已成功删除!不可继续删除!") ????????????????return ????????????else: ????????????????pickle.dump(students,?open("students.pkl",?"wb")) ????????????????print(f"ID 为 {ID} 的学生已成功删除!") ????????continue_?=?input("是否继续删除 (y/n)?") ????????while?continue_?not?in?['y',?'n']: ????????????continue_?=?input("输入无效!是否继续删除 (y/n)?") def?modify(): ????if?not?isfile("students.pkl"): ????????print("没有学生信息!") ????????return ????show() ????continue_?=?'y' ????while?continue_?==?'y': ????????ID?=?input("请输入要修改的学生ID:") ????????students?=?pickle.load(open("students.pkl",?"rb")) ????????result?=?[] ????????for?each?in?students: ????????????if?each['id']?==?ID: ????????????????result.append(each) ????????if?not?result: ????????????print(f"没有找到ID为 {ID} 的学生信息...") ????????????show() ????????elif?len(result) !=?1: ????????????print("ID 有相同的情况!") ????????else: ????????????students.remove(result[0]) ????????????name?=?input("请输入名字:") ????????????chinese?=?input("请输入语文成绩:") ????????????while?not?is_float(chinese): ????????????????chinese?=?input("输入无效!请重新输入语文成绩:") ????????????chinese?=?float(chinese) ????????????math?=?input("请输入数学成绩:") ????????????while?not?is_float(math): ????????????????math?=?input("输入无效!请重新输入数学成绩:") ????????????math?=?float(math) ????????????english?=?input("请输入英语成绩:") ????????????while?not?is_float(english): ????????????????english?=?input("输入无效!请重新输入英语成绩:") ????????????english?=?float(english) ????????????score?=?{'id':?ID,?'name': name, ?????????????????????'chinese': chinese,?'math': math,?'english': english} ????????????students.append(score) ????????????pickle.dump(students,?open("students.pkl",?"wb")) ????????continue_?=?input("是否继续修改 (y/n)?") ????????while?continue_?not?in?['y',?'n']: ????????????continue_?=?input("输入无效!是否继续修改 (y/n)?") def?sort(): ????if?not?isfile("students.pkl"): ????????print("没有学生信息!") ????????return ????show() ????reverse?=?input("请选择(0升序;1降序):") ????while?reverse?not?in?['0',?'1']: ????????reverse?=?input("输入无效!请选择(0升序;1降序):") ????reverse?=?bool(int(reverse)) ????students?=?pickle.load(open("students.pkl",?"rb")) ????way?=?input("请选择排序方式" ????????????????"(1按语文成绩排序;" ????????????????"2按数学成绩排序;" ????????????????"3按英语成绩排序;" ????????????????"0按总成绩排序):") ????while?way?not?in?['0',?'1',?'2',?'3']: ????????way?=?input("输入无效!请选择排序方式" ????????????????????"(1按语文成绩排序;" ????????????????????"2按数学成绩排序;" ????????????????????"3按英语成绩排序;" ????????????????????"0按总成绩排序):") ????if?way?==?'0': ????????def?condition(x): ????????????return?x['chinese']?+?x['math']?+?x['english'] ????elif?way?==?'1': ????????def?condition(x): ????????????return?x['chinese'] ????elif?way?==?'2': ????????def?condition(x): ????????????return?x['math'] ????else: ????????def?condition(x): ????????????return?x['english'] ????result?=?sorted(students, key=condition, reverse=reverse) ????result_str?=?'' ????result_str?+=?'ID'.center(6) ????result_str?+=?'姓名'.center(12) ????result_str?+=?'语文'.center(10) ????result_str?+=?'数学'.center(10) ????result_str?+=?'英语'.center(10) ????result_str?+=?'总成绩'.center(11) ????for?i?in?result: ????????result_str?+=?"\n" ????????result_str?+=?i['id'].center(6) ????????result_str?+=?i['name'].center(12) ????????result_str?+=?str(i['chinese']).center(12) ????????result_str?+=?str(i['math']).center(12) ????????result_str?+=?str(i['english']).center(12) ????????result_str?+=?str(i['chinese']?+?i['math']?+ ??????????????????????????i['english']).center(13) ????print(result_str) def?total(): ????try: ????????print("一共有", ??????????????str(len(pickle.load(open("students.pkl",?"rb")))),?"名学生!") ????except?FileNotFoundError: ????????print("没有学生信息!") def?show(): ????if?not?isfile("students.pkl"): ????????print("没有学生信息!@_@") ????????return ????result?=?pickle.load(open("students.pkl",?"rb")) ????result_str?=?'' ????result_str?+=?'ID'.center(6) ????result_str?+=?'姓名'.center(12) ????result_str?+=?'语文'.center(10) ????result_str?+=?'数学'.center(10) ????result_str?+=?'英语'.center(10) ????result_str?+=?'总成绩'.center(11) ????for?i?in?result: ????????result_str?+=?"\n" ????????result_str?+=?i['id'].center(6) ????????result_str?+=?i['name'].center(12) ????????result_str?+=?str(i['chinese']).center(12) ????????result_str?+=?str(i['math']).center(12) ????????result_str?+=?str(i['english']).center(12) ????????result_str?+=?str(i['chinese']?+?i['math']?+ ??????????????????????????i['english']).center(13) ????print(result_str) def?is_float(number): ????try: ????????float(number) ????except?ValueError: ????????return?False ????else: ????????return?True if?__name__?==?'__main__': ????try: ????????main() ????except?BaseException as e: ????????print("啊哦,出错了 O_O") ????????print(e) ????????input("请按 <Enter> 键退出程序!") |