现有学生成绩信息文件1(1.txt),内容如下 姓名 学号 语文 数学 英语 张明明 01 67 78 82 李成友 02 78 91 88 张辉灿 03 68 82 56 王露 04 56 45 77 陈东明 05 67 38 47 …. .. .. .. … 学生成绩信息文件2(2.txt),内容如下: 姓名 学号 语文 数学 英语 陈果 31 57 68 82 李华明 32 88 90 68 张明东 33 48 42 56 李明国 34 50 45 87 陈道亮 35 47 58 77 …. .. .. .. … 试编写一管理系统,要求如下: 1)实现对两个文件数据进行合并,生成新文件3.txt 2)抽取出三科成绩中有补考的学生并保存在一个新文件4.txt 3)合并后的文件3.txt中的数据按总分降序排序(至少采用两种排序方法实现) 4)输入一个学生姓名后,能查找到此学生的信息并输出结果(至少采用两种查找方法实现) 5)要求使用结构体,链或数组等实现上述要求. 6)采用多种方法且算法正确者,可适当加分.
时间: 2024-01-12 22:02:27 浏览: 171
好的,这是一个比较完整的学生成绩管理系统,需要涉及到文件读写、排序、查找等多个方面。下面是我给出的一个解决方案,仅供参考。
1. 实现对两个文件数据进行合并,生成新文件3.txt
首先,我们需要读取文件1和文件2中的数据,然后将它们合并到一个新文件3中。这可以通过以下代码实现:
```python
# 读取文件1中的数据
with open('1.txt', 'r') as f:
data1 = f.readlines()
# 读取文件2中的数据
with open('2.txt', 'r') as f:
data2 = f.readlines()
# 合并数据
data = data1 + data2
# 将数据写入新文件3中
with open('3.txt', 'w') as f:
f.writelines(data)
```
2. 抽取出三科成绩中有补考的学生并保存在一个新文件4.txt
接下来,我们需要从文件3中抽取出有补考的学生信息,并保存到一个新文件4中。假设补考的分数线是60分,可以通过以下代码实现:
```python
# 读取文件3中的数据
with open('3.txt', 'r') as f:
data = f.readlines()
# 抽取有补考的学生信息
data_with_makeup_exam = []
for line in data:
line = line.strip().split()
name, _, chinese, math, english = line
chinese, math, english = int(chinese), int(math), int(english)
if chinese < 60 or math < 60 or english < 60:
data_with_makeup_exam.append(line)
# 将有补考的学生信息写入新文件4中
with open('4.txt', 'w') as f:
for line in data_with_makeup_exam:
f.write(' '.join(line) + '\n')
```
3. 合并后的文件3.txt中的数据按总分降序排序(至少采用两种排序方法实现)
现在,我们需要将文件3中的数据按照总分降序排列,可以采用快速排序和归并排序两种方法实现。以下是示例代码:
```python
# 定义快速排序函数
def quick_sort(data):
if len(data) <= 1:
return data
pivot = data[0]
left = [x for x in data[1:] if int(x.split()[2]) + int(x.split()[3]) + int(x.split()[4]) >= int(pivot.split()[2]) + int(pivot.split()[3]) + int(pivot.split()[4])]
right = [x for x in data[1:] if int(x.split()[2]) + int(x.split()[3]) + int(x.split()[4]) < int(pivot.split()[2]) + int(pivot.split()[3]) + int(pivot.split()[4])]
return quick_sort(left) + [pivot] + quick_sort(right)
# 定义归并排序函数
def merge_sort(data):
if len(data) <= 1:
return data
mid = len(data) // 2
left = merge_sort(data[:mid])
right = merge_sort(data[mid:])
i, j = 0, 0
res = []
while i < len(left) and j < len(right):
if int(left[i].split()[2]) + int(left[i].split()[3]) + int(left[i].split()[4]) >= int(right[j].split()[2]) + int(right[j].split()[3]) + int(right[j].split()[4]):
res.append(left[i])
i += 1
else:
res.append(right[j])
j += 1
res += left[i:]
res += right[j:]
return res
# 读取文件3中的数据
with open('3.txt', 'r') as f:
data = f.readlines()
# 使用快速排序对数据进行排序
sorted_data_quick = quick_sort(data)
# 使用归并排序对数据进行排序
sorted_data_merge = merge_sort(data)
# 将排序后的数据写入新文件3_sorted_quick.txt和3_sorted_merge.txt中
with open('3_sorted_quick.txt', 'w') as f:
f.writelines(sorted_data_quick)
with open('3_sorted_merge.txt', 'w') as f:
f.writelines(sorted_data_merge)
```
4. 输入一个学生姓名后,能查找到此学生的信息并输出结果(至少采用两种查找方法实现)
最后,我们需要实现对文件3中的数据进行查找,根据学生姓名查找学生信息。可以采用线性查找和二分查找两种方法,以下是示例代码:
```python
# 定义线性查找函数
def linear_search(data, name):
for line in data:
line = line.strip().split()
if line[0] == name:
return line
return None
# 定义二分查找函数
def binary_search(data, name):
left, right = 0, len(data) - 1
while left <= right:
mid = (left + right) // 2
line = data[mid].strip().split()
if line[0] == name:
return line
elif line[0] < name:
left = mid + 1
else:
right = mid - 1
return None
# 读取文件3中的数据
with open('3.txt', 'r') as f:
data = f.readlines()
# 使用线性查找查找学生信息
name = input('请输入要查找的学生姓名:')
result_linear = linear_search(data, name)
if result_linear:
print(' '.join(result_linear))
else:
print('查无此人')
# 使用二分查找查找学生信息
data_sorted = merge_sort(data)
name = input('请输入要查找的学生姓名:')
result_binary = binary_search(data_sorted, name)
if result_binary:
print(' '.join(result_binary))
else:
print('查无此人')
```
以上是一个比较完整的解决方案,其中涉及到文件读写、排序、查找等多个方面。需要注意的是,这只是一个示例代码,可能还需要根据实际情况进行修改和完善。
阅读全文