给出含有n个学生的成绩表,每条记录 由学号、姓名和分数组成,设计程序完 成下列操作:设计一个菜单操作界面, 如下所示: ***软件学院学生信息管理系统*** 1、录入学生基本信息 2、直接插入排序 3、折半插入排序4、冒泡排序 5、快速 7 排序综合 排序 6、简单选择排序 7、输出学生信息 8、退出 *** 请选择:*** 程序设计要求:按分数从高到低的顺序 进行排序,分数相同的为同一名次。输 入的学生信息存入文件中,每选择一种 排序方法,必须从文件中取出数据。
时间: 2023-11-27 22:06:22 浏览: 163
好的,这是一个学生信息管理系统,需要实现以下功能:
1. 录入学生基本信息
2. 直接插入排序
3. 折半插入排序
4. 冒泡排序
5. 快速排序
6. 简单选择排序
7. 输出学生信息
8. 退出程序
程序设计要求:
1. 学生信息包括学号、姓名和分数,分数从高到低排序,分数相同的为同一名次。
2. 学生信息存入文件中,每选择一种排序方法,必须从文件中取出数据。
以下是一个可能的实现:
```python
import os
class Student:
def __init__(self, number, name, score):
self.number = number
self.name = name
self.score = score
def input_students():
students = []
while True:
number = input("请输入学生学号(输入Q结束):")
if number == "Q":
break
name = input("请输入学生姓名:")
score = int(input("请输入学生分数:"))
student = Student(number, name, score)
students.append(student)
with open("students.txt", "w") as f:
for student in students:
f.write(f"{student.number},{student.name},{student.score}\n")
return students
def read_students():
if os.path.exists("students.txt"):
with open("students.txt", "r") as f:
lines = f.readlines()
students = []
for line in lines:
number, name, score = line.strip().split(",")
student = Student(number, name, int(score))
students.append(student)
return students
else:
return []
def output_students(students):
for student in students:
print(f"学号:{student.number},姓名:{student.name},分数:{student.score}")
def direct_insertion_sort(students):
for i in range(1, len(students)):
j = i - 1
while j >= 0 and students[j].score < students[j+1].score:
students[j], students[j+1] = students[j+1], students[j]
j -= 1
def binary_insertion_sort(students):
for i in range(1, len(students)):
low, high = 0, i-1
while low <= high:
mid = (low + high) // 2
if students[i].score > students[mid].score:
high = mid - 1
else:
low = mid + 1
for j in range(i-1, high, -1):
students[j+1], students[j] = students[j], students[j+1]
def bubble_sort(students):
for i in range(len(students)-1):
for j in range(len(students)-1-i):
if students[j].score < students[j+1].score:
students[j], students[j+1] = students[j+1], students[j]
def quick_sort(students):
if len(students) <= 1:
return students
pivot = students[0]
less = []
greater = []
for student in students[1:]:
if student.score > pivot.score:
less.append(student)
else:
greater.append(student)
return quick_sort(less) + [pivot] + quick_sort(greater)
def selection_sort(students):
for i in range(len(students)-1):
min_index = i
for j in range(i+1, len(students)):
if students[j].score > students[min_index].score:
min_index = j
students[i], students[min_index] = students[min_index], students[i]
def main():
students = read_students()
while True:
print("***软件学院学生信息管理系统***")
print("1、录入学生基本信息")
print("2、直接插入排序")
print("3、折半插入排序")
print("4、冒泡排序")
print("5、快速排序")
print("6、简单选择排序")
print("7、输出学生信息")
print("8、退出")
choice = input("请选择:")
if choice == "1":
students = input_students()
elif choice == "2":
direct_insertion_sort(students)
elif choice == "3":
binary_insertion_sort(students)
elif choice == "4":
bubble_sort(students)
elif choice == "5":
students = quick_sort(students)
elif choice == "6":
selection_sort(students)
elif choice == "7":
output_students(students)
elif choice == "8":
break
if __name__ == "__main__":
main()
```
该程序使用了一个 `Student` 类来表示学生信息,包括学号、姓名和分数。`input_students` 函数用来录入学生信息,并将学生信息写入到文件中。`read_students` 函数用来从文件中读取学生信息。`output_students` 函数用来输出学生信息。`direct_insertion_sort` 函数实现了直接插入排序。`binary_insertion_sort` 函数实现了折半插入排序。`bubble_sort` 函数实现了冒泡排序。`quick_sort` 函数实现了快速排序。`selection_sort` 函数实现了简单选择排序。`main` 函数用来实现菜单操作界面,根据用户的选择进行相应的操作。