6.查询/统计模块设计
6.1 查找学生信息功能
*实现查询学生信息功能
从控制台录入学生ID或姓名,到磁盘文件中找到对应的学生信息
业务流程
具体实现
编写主函数中调用的查找学生信息的函数search()
定义显示查询结果的函数show_student(query_student)
search() 函数:
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': continue else: break else: print('暂未保存学生信息') return
show_student() 函数:
def show_student(lst): if len(lst)==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{:^8}\t{:^8}\t{:^8}\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'), int(item.get('english')) +int(item.get('python')) +int(item.get('java')) ))
6.2 统计学生总人数功能
实现统计学生总人数功能
统计学生信息文件中保存的学生信息个数
业务流程
total() 函数:
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('暂未保存数据信息.....')
6.3 显示所有学生信息功能
实现显示所有学生信息功能
将学生信息文件中保存的全部学生信息获取并显示
业务流程
show() 函数:
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('暂未保存过数据!!!!')
7.排序模块设计
实现按学生成绩排序功能
主要对学生信息按英语成绩、Python成绩、Java成绩、总成绩进行升序或降序排序
业务流程
sort() 函数:
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)