分析def search(): stu_query = [] while True: stu_id = '' if os.path.exists(filename): id = input('请输入学生学号:') with open(filename, 'r', encoding='utf-8') as rfile: student = rfile.readlines() for item in student: d = dict(eval(item)) if id != '': if d['stu_id'] == id: stu_query.append(d) show_student(stu_query) stu_query.clear() ans = input('是否继续查询?y/n') if ans == 'y': continue else: break else: print('暂无学生信息') return
时间: 2024-02-10 19:12:41 浏览: 168
这段代码定义了一个名为search()的函数,用于在学生信息管理系统中查找学生信息。该函数包含以下步骤:
1. 定义一个空列表stu_query,用于存储查找到的学生信息。
2. 进入一个无限循环,用户每输入一个学生学号就会根据该学号查找对应的学生信息,并将其添加到stu_query列表中。
3. 在查找学生信息之前,程序会判断保存学生信息的文件是否存在。如果文件存在,则会提示用户输入学生学号;如果文件不存在,则会输出一条暂无学生信息的提示信息并返回。
4. 在读取文件并查找学生信息时,程序会使用with语句打开文件,并使用readlines()方法读取文件中的每一行数据。然后,程序会将每行数据转化成一个字典,用于查找对应学生信息。
5. 在查找学生信息时,程序会遍历所有学生信息,找到与用户输入的学号匹配的学生信息,并将其添加到stu_query列表中。
6. 在每次查找结束时,程序会调用show_student()函数显示查找到的学生信息。然后,程序会提示用户是否继续查询。如果用户选择继续查询,则会继续循环;如果用户选择不查询,则会跳出循环。
需要注意的是,该代码中的show_student()函数没有给出具体实现,需要根据具体需求自行编写。
相关问题
def show(): # 显示所有学生信息 stu_lst = [] if os.path.exists(filename): with open(filename, 'r', encoding = 'UTF-8') as r_file: stu = r_file.readlines() for i in stu: stu_lst.append(eval(i)) if stu_lst: show_stu(stu_lst) else: print('\n暂未保存过数据!')写出上面这段代码的伪代码
定义函数show,没有输入参数
定义空列表stu_lst
如果文件存在,则打开文件
将文件内容按行读入到列表stu中
遍历stu列表中的每个元素i,使用eval函数将其转换为字典类型,添加到stu_lst列表中
如果stu_lst列表不为空,则调用show_stu函数,展示学生信息
否则,提示暂未保存过数据
def search(): # 查找学生信息 stu_query = [] # 定义一个空列表,用来保存查找出的学生信息 while True: id = '' name = '' if os.path.exists(filename): # 判断文件是否存在 m = input('\n按id查询请输入1,按姓名查询请输入2,退出请输入0:') if m == '1': id = input('请输入id:') elif m == '2': name = input('请输入name:') elif m == '0': print('\n退出查询模块成功!') return else: print('输入有误!') continue else: print('无学生信息!') with open(filename, 'r', encoding = 'UTF-8') as r_file: stu = r_file.readlines() # 读取文件中所有信息 for i in stu: # 遍历每条学生信息 d = dict(eval(i)) # 转成字典 if id != '': if d['id'] == id: # 判断id值与输入的是否相同,若相同则添加到结果列表中 stu_query.append(d) elif name != '': if d['name'] == name: # 判断name值与输入的是否相同,若相同则添加到结果列表中 stu_query.append(d) # 显示查询结果 if len(stu_query) == 0: print("暂未查询到学生信息!") else: show_stu(stu_query) # 显示查询出的学生信息 stu_query.clear() 用结构体方式来进一步描述上面代码数据类型中数据元素具体组成
该代码中使用了两种数据类型:列表和字典。
列表student_query用来保存查找出的学生信息,其中每个元素都是一个字典类型,表示一个学生的信息。
字典d用来保存每条学生信息,包含以下键值对:
- 'id': 学生学号
- 'name': 学生姓名
- 'english': 学生英语成绩
- 'python': 学生python成绩
- 'math': 学生数学成绩
- 'data': 学生数据结构成绩
在循环中,每次遍历出来的学生信息都被转换成字典类型,并保存在d中。然后,根据用户输入的查询条件(id或name),判断该学生信息是否符合条件,若符合则将该学生信息添加到stu_query列表中。最后,查询结果stu_query中的所有学生信息会被显示出来。
因此,代码中的数据结构可以用如下结构体方式来描述:
struct StudentInfo {
string id; // 学生学号
string name; // 学生姓名
int english; // 学生英语成绩
int python; // 学生python成绩
int math; // 学生数学成绩
int data; // 学生数据结构成绩
};
struct SearchResult {
vector<StudentInfo> stu_list; // 学生信息列表
};
其中,SearchResult为查询结果结构体,包含一个学生信息列表stu_list,每个元素都是一个StudentInfo类型的结构体,表示一个学生的信息。
阅读全文