题目要求: 一、定义结构体类型: 每个同学的信息:学号、姓名(英文、无重名)、性别(英文)、三门课程成绩(语文、数学、英语) 二、功能要求: 运行后,显示如下信息,提示输入数字,并运行数字所对应的功能,如:按1,执行“显示所有同学的信息”;按6,执行“删除一个同学”。要求菜单能循环显示,即完成一次功能选择后,显示相应结果,再显示菜单。 1.显示所有同学的信息 2.查找指定姓名的信息 (模糊查找:输入姓名中任何一个或多个文字,比如:输入“zhang”,就显示所有姓名中含“zhang”的信息) 3.显示有不及格同学的信息 4.按指定课程排序输出 5.增加一个新同学 6.修改指定姓名的信息 7.删除指定姓名的信息 0.退出
时间: 2024-03-14 07:43:22 浏览: 5
好的,这道题目需要使用结构体类型和链表来实现,具体的代码实现如下:
```python
import re
# 定义结构体类型,每个同学的信息
class Student:
def __init__(self):
self.num = 0 # 学号
self.name = "" # 姓名
self.sex = "" # 性别
self.score = [] # 三门课程成绩
# 定义链表节点类型
class Node:
def __init__(self):
self.data = Student() # 数据域
self.next = None # 指针域
# 定义链表类型
class LinkList:
def __init__(self):
self.head = Node() # 头节点
# 显示所有同学的信息
def show_all(self):
p = self.head.next
while p:
print("学号:{},姓名:{},性别:{},语文:{},数学:{},英语:{}".format(p.data.num, p.data.name, p.data.sex, p.data.score[0], p.data.score[1], p.data.score[2]))
p = p.next
# 查找指定姓名的信息
def search_by_name(self, name):
p = self.head.next
while p:
if name in p.data.name:
print("学号:{},姓名:{},性别:{},语文:{},数学:{},英语:{}".format(p.data.num, p.data.name, p.data.sex, p.data.score[0], p.data.score[1], p.data.score[2]))
p = p.next
# 显示有不及格同学的信息
def show_failed(self):
p = self.head.next
while p:
if p.data.score[0] < 60 or p.data.score[1] < 60 or p.data.score[2] < 60:
print("学号:{},姓名:{},性别:{},语文:{},数学:{},英语:{}".format(p.data.num, p.data.name, p.data.sex, p.data.score[0], p.data.score[1], p.data.score[2]))
p = p.next
# 按指定课程排序输出
def sort_by_course(self, course):
if course == 1:
key = lambda x: x.data.score[0] # 按语文成绩排序
elif course == 2:
key = lambda x: x.data.score[1] # 按数学成绩排序
elif course == 3:
key = lambda x: x.data.score[2] # 按英语成绩排序
else:
print("输入有误,请重新输入!")
return
# 使用冒泡排序进行排序
p = self.head.next
while p:
q = p.next
while q:
if key(p) > key(q):
p.data, q.data = q.data, p.data
q = q.next
p = p.next
self.show_all()
# 增加一个新同学
def add_student(self):
new_student = Student()
new_student.num = int(input("请输入学号:"))
new_student.name = input("请输入姓名:")
new_student.sex = input("请输入性别:")
new_student.score.append(int(input("请输入语文成绩:")))
new_student.score.append(int(input("请输入数学成绩:")))
new_student.score.append(int(input("请输入英语成绩:")))
# 将新同学插入链表的末尾
p = self.head
while p.next:
p = p.next
new_node = Node()
new_node.data = new_student
p.next = new_node
print("添加成功!")
# 修改指定姓名的信息
def modify_by_name(self, name):
p = self.head.next
while p:
if p.data.name == name:
p.data.num = int(input("请输入学号:"))
p.data.sex = input("请输入性别:")
p.data.score[0] = int(input("请输入语文成绩:"))
p.data.score[1] = int(input("请输入数学成绩:"))
p.data.score[2] = int(input("请输入英语成绩:"))
print("修改成功!")
return
p = p.next
print("未找到该同学!")
# 删除指定姓名的信息
def delete_by_name(self, name):
p = self.head
while p.next:
if p.next.data.name == name:
p.next = p.next.next
print("删除成功!")
return
p = p.next
print("未找到该同学!")
# 主函数
def main():
linklist = LinkList()
# 添加一些测试数据
for i in range(5):
new_student = Student()
new_student.num = i+1
new_student.name = "student{}".format(i+1)
new_student.sex = "male" if i%2==0 else "female"
new_student.score = [60+i*10, 70+i*10, 80+i*10]
new_node = Node()
new_node.data = new_student
linklist.head.next = new_node
new_node.next = linklist.head.next
while True:
print("1. 显示所有同学的信息")
print("2. 查找指定姓名的信息")
print("3. 显示有不及格同学的信息")
print("4. 按指定课程排序输出")
print("5. 增加一个新同学")
print("6. 修改指定姓名的信息")
print("7. 删除指定姓名的信息")
print("0. 退出")
choice = input("请输入要执行的功能:")
if choice == "1":
linklist.show_all()
elif choice == "2":
name = input("请输入姓名:")
linklist.search_by_name(name)
elif choice == "3":
linklist.show_failed()
elif choice == "4":
course = int(input("请输入要排序的课程:1.语文 2.数学 3.英语"))
linklist.sort_by_course(course)
elif choice == "5":
linklist.add_student()
elif choice == "6":
name = input("请输入姓名:")
linklist.modify_by_name(name)
elif choice == "7":
name = input("请输入姓名:")
linklist.delete_by_name(name)
elif choice == "0":
break
else:
print("输入有误,请重新输入!")
# 测试代码
if __name__ == "__main__":
main()
```
运行程序后,会显示一个菜单,让用户选择要执行的功能。用户选择完功能后,会执行相应的操作,并再次显示菜单,进入下一轮循环,直到用户选择退出程序。