python编写学生成绩管理系统功能逻辑结构
南风不竞: 人气:0学生信息系统
提示:python编写的学生成绩管理系统,包括8个功能和打包教程
一、功能界面
def menum(): print('==================student_manger=================') print('---------------------功能界面---------------------') print('\t\t1.录入学生信息') print('\t\t2.查找学生信息') print('\t\t3.删除学生信息') print('\t\t4.修改学生成绩') print('\t\t5.排序') print('\t\t6.统计学生总人数') print('\t\t7.显示所有学生信息') print('\t\t8.显示功能介绍按钮') print('\t\t0.退出') print('================================================')
二 、主函数
def main(): menum() while True: try: choice = int(input('请选择你想进行的操作: ')) except ValueError: print('输入的数据存在错误,只能输入0到7的整数!') try: choice = int(input('请重新输入: ')) except ValueError: print('重复输入错误,退出系统!') break if choice in [0, 1, 2, 3, 4, 5, 6, 7, 8]: if choice == 0: answer = input('你确定要退出系统吗?(Y/N): ') if answer == 'Y' or answer == 'y': print('谢谢使用!') break elif answer == 'N' or answer == 'n': print('即将返回上一步操作!') continue else: input('输入错误,即将返回主界面!') 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() else: menum() else: print('你选择的操作无效,请重新输入!:')
三 、学生信息录入功能
逻辑结构图
def insert(): student_list = [] id_list = [] while True: id = input('请输入ID: ') if not id: break name = input('请输入姓名:') if not name: break try: english = float(input('请输入英语成绩:')) math = float(input('请输入数学成绩:')) python = float(input('请输入Python成绩:')) except ValueError: print('数据输入错误!') continue # 将录入的学生信息存放到字典中 student = {'id': id, 'name': name, 'english': english, 'math': math, 'Python': python} # 将每个学生的信息存放在列表中 if student['id'] in id_list: # student['id'] = value(id) print('已存在相同ID:') for i in range(len(student_list)): if student_list[i][id] == student[id]: # 输出重复id元素 print(student_list[i].items()) break print('请重新录入!') else: id_list.append(str(student['id'])) student_list.append(student) # 是否继续添加学生信息 answer = input('是否继续添加学生信息?(Y/N): ') if answer == 'Y' or answer == 'y': continue elif answer == 'N' or answer == 'n': # 存储学生信息 save(student_list, filename) print('学生信息录入完毕!') break else: print('输入错误,即将返回主界面!') break
四 、学生信息查找功能
逻辑结构图
代码
def search(): while True: if os.path.exists(filename): with open(filename, 'r', encoding = 'utf-8') as s_file: student_qurey = s_file.readlines() # 将学生信息全部取出 id_list = [] name_list = [] for i in student_qurey: d = dict(eval(i)) id_list.append(d['id']) # 将所有学生的id存放在id_list中 name_list.append(d['name']) # 将所有学生的name存放在id_list中 try: mode = int(input('请选择查询模式: 1.按照ID查询 / 2.按照姓名查询 ')) except ValueError: print('数据类型输入错误!请重新输入!') else: if mode == 1: # 按照ID查询 id = input('请输入学生id: ') if id in id_list: print('已经查找到该名学生:') print('ID\t\t\t姓名:\t\t英语成绩:\t\t数学成绩:\t\tPython成绩:\t\t总成绩:') for item in student_qurey: if dict(eval(item))['id'] == id: p = dict(eval(item)) print('{0}\t\t{1}\t\t {2}\t\t {3}\t\t {4}\t\t {5}'.format( p['id'], p['name'], p['english'], p['math'], p['Python'], float(p['english'])+float(p['math'])+float(p['Python']))) else: print('查无此人!') elif mode == 2: # 按照姓名查询 name = input('请输入学生姓名: ') if name in name_list: print('已经查找到该名学生:') print('ID\t\t\t姓名:\t\t英语成绩:\t\t数学成绩:\t\tPython成绩:\t\t总成绩:') for item in student_qurey: if dict(eval(item))['name'] == name: p = dict(eval(item)) print('{0}\t\t{1}\t\t {2}\t\t {3}\t\t {4}\t\t {5}'.format( p['id'], p['name'], p['english'], p['math'], p['Python'], float(p['english']) + float(p['math']) + float(p['Python']))) else: print('查无此人!') else: print('输入错误,只能选择1/2两种模式!') answer = input('是否继续查询? (Y/N)') if answer == 'Y' or answer == 'y': continue elif answer == 'N' or answer == 'n': print('正在退出查询..') break else: print('输入错误,即将返回主界面!') break else: print('无学生信息文件!') return
五 、删除学生信息
逻辑结构图
代码
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: 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 elif answer == 'N' or answer == 'n': break else: print('输入错误,即将返回主界面!') break
六 、学生信息修改功能
逻辑结构图
代码
def modify(): show() if os.path.exists(filename): with open(filename, 'r', encoding = 'utf-8') as rfile: student_old = rfile.readlines() # 直接将文本文件的内容整行读取到列表中 else: print('学生文件信息不存在!') student_id = input('请输入想要修改的学生的ID: ') with open(filename, 'w', encoding = 'utf-8') as just_file: # 判断学生是否在该系统中 id_list = [] for i in student_old: d = dict(eval(i)) id_list.append(d['id']) # 将所有学生的id存放在id_list中 if student_id in id_list: # 要修改的学生存在时 for item in student_old: e = dict(eval(item)) if e['id'] == student_id: print('已找到该名学生!') while True: try: e['name'] = input('请输入姓名: ') e['english'] = input('请输入英语成绩: ') e['math'] = input('请输入数学成绩: ') e['Python'] = input('请输入Python成绩: ') except ValueError: print('数据类型输入错误!请重新输入!') else: break # try...except..else: 输入为出错时,执行else语句 just_file.write(str(e) + '\n') print('修改成功!') else: just_file.write(str(e) + '\n') else: answer1 = input('查无此人!,是否执行插入操作? (Y/N)') if answer1 == 'Y' or answer1 == 'y': insert() else: print('结束当前操作') answer = input('是否继续修改其余学生信息?(Y/N): ') if answer == 'Y' or answer == 'y': modify() elif answer == 'N' or answer == 'n': print('结束修改,即将返回主界面..') else: print('输入错误,即将返回主界面!')
七 、学生成绩排序
逻辑结构图
代码
def sort(): student_new = [] if os.path.exists(filename): with open(filename, 'r', encoding = 'utf-8') as sort_file: student_list = sort_file.readlines() # 无序的学生信息列表 for item in student_list: d = dict(eval(item)) student_new.append(d) # 列表元素转化为字典 while True: try: sort_choice = int(input('请选择排序方式: 0:升序 / 1:降序\t')) except ValueError: print('输入的数据类型错误,请重新输入') else: if sort_choice == 0: Flag = False break elif sort_choice == 1: Flag = True break else: print('输入错误,只能在0/1中选择!') continue while True: try: asc_choice = int(input('请选择按照哪一门成绩进行排序: 英语:0 / 数学:1 / python:2\t\t')) except ValueError: print('输入的数据类型错误,请重新输入') else: if asc_choice == 0: student_new.sort(key = lambda x: int(x['english']), reverse = Flag) # 根据列表中的元素进行排序 show() break elif asc_choice == 1: student_new.sort(key = lambda x: int(x['math']), reverse = Flag) show() break elif asc_choice == 2: student_new.sort(key = lambda x: int(x['Python']), reverse = Flag) show() break elif asc_choice == 3: student_new.sort(key = lambda x: int(x['Python'])+int(x['english'])+int(x['math']), reverse = Flag) show() break else: print('输入错误,只能在0/1/2中选择!') continue else: print('学生信息文件不存在!')
八 、 学生人数统计
逻辑结构图
代码
def total(): nums = 0 if os.path.exists(filename): with open(filename, 'r', encoding = 'utf-8') as t_file: len_list = t_file.readlines() for i in range(len(len_list)): if len_list[i] != '': nums += 1 print('当前学生总人数为: ', nums) print('请选择你想进行的下一步操作: ') else: print('暂无学生信息文件')
九 、显示所有学生信息
逻辑结构图
代码
def show(): if os.path.exists(filename): with open(filename, 'r', encoding = 'utf-8') as show_file: student_list = show_file.readlines() if student_list: print('----全部学生信息如下----') print('ID\t\t\t姓名:\t\t英语成绩:\t\t数学成绩:\t\tPython成绩:\t\t总成绩:') for item in student_list: p = dict(eval(item)) print('{0}\t\t{1}\t\t {2}\t\t {3}\t\t {4}\t\t {5}'.format( p['id'], p['name'], p['english'], p['math'], p['Python'], float(p['english']) + float(p['math']) + float(p['Python']))) else: print('暂无学生信息!') else: print('暂无学生信息!')
程序打包
在 pycharm 终端 或者 python命令界面, 使用:
pip install PyInstaller
下载python打包程序,下载完成后, 执行以下操作:
pyinstaller —F F:\xxxx\xxx\xx\x.py
其中:
- -F 代表将程序打包为单个exe文件,
- F:\xxx\xxx\xx.py 为你的学生成绩管理系统文件的绝对地址
打包完成后,提示信息倒数第二行:Appending语句后面即为exe文件位置,若无特殊显示,则在当前目录父文件下
加载全部内容