现有学生成绩信息文件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 浏览: 46
好的,这是一个比较完整的学生成绩管理系统,需要涉及到文件读写、排序、查找等多个方面。下面是我给出的一个解决方案,仅供参考。 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('查无此人') ``` 以上是一个比较完整的解决方案,其中涉及到文件读写、排序、查找等多个方面。需要注意的是,这只是一个示例代码,可能还需要根据实际情况进行修改和完善。

相关推荐

课程设计内容 学生信息管理系统设计 (1)问题描述 学生信息包括:学号、姓名、性别、宿舍号码、电话号码、成绩等。试设计一个学生信息管理系统,使之能提供以下功能: ² 系统以菜单方式工作 ² 学生信息录入功能(学生信息用文本文件保存)---输入 ² 学生信息浏览功能——输出 ² 查询功能——算法 1、按学号查询 2、按姓名查询 ² 排序功能 1、按分数升序排序 2、按分数降序排序 (2)功能要求 ² 界面简单明了; ² 有一定的容错能力,比如输入的成绩不在0~100之间,就提示不合法,要求重新输入; (3)算法分析 首先,一个学生包括这么多的属性,应该考虑定义一个结构,其次,我们应该考虑数据的存储形式,在这里假如我们以数组的方式来存储,首先必须知道学生人数大概是多少,以便我们确定数组的大小。 对于菜单的实现,其实也比较简单,首先我们用printf语句把程序的功能列出来,然后等待用户输入而执行不同的函数,执行完了一个功能后又回到菜单。文件的读写操作大家参照书中的有关文件的章节。 (4)保存在文件中的内容可以参考下面的形式 学号 姓名 性别 宿舍号码 电话号码 成绩 01 张成成 男 501 87732111 90 02 李成华 女 101 87723112 78 03 王成凤 女 101 87723112 85 04 张明明 男 502 87734333 60 05 陈东 男 501 87732111 96 06 李果 男 502 87734333 66 07 张园园 女 102 87756122 80 … … … … … …

学生信息管理系统设计 (1)问题描述 学生信息包括:学号、姓名、性别、宿舍号码、电话号码、成绩等。试设计一个学生信息管理系统,使之能提供以下功能: ² 系统以菜单方式工作 ² 学生信息录入功能(学生信息用文本文件保存)---输入 ² 学生信息浏览功能——输出 ² 查询功能——算法 1、按学号查询 2、按姓名查询 ² 排序功能 1、按分数升序排序 2、按分数降序排序 (2)功能要求 ² 界面简单明了; ² 有一定的容错能力,比如输入的成绩不在0~100之间,就提示不合法,要求重新输入; (3)算法分析 首先,一个学生包括这么多的属性,应该考虑定义一个结构,其次,我们应该考虑数据的存储形式,在这里假如我们以数组的方式来存储,首先必须知道学生人数大概是多少,以便我们确定数组的大小。 对于菜单的实现,其实也比较简单,首先我们用printf语句把程序的功能列出来,然后等待用户输入而执行不同的函数,执行完了一个功能后又回到菜单。文件的读写操作大家参照书中的有关文件的章节。 (4)保存在文件中的内容可以参考下面的形式 学号 姓名 性别 宿舍号码 电话号码 成绩 01 张成成 男 501 87732111 90 02 李成华 女 101 87723112 78 03 王成凤 女 101 87723112 85 04 张明明 男 502 87734333 60 05 陈东 男 501 87732111 96 06 李果 男 502 87734333 66 07 张园园 女 102 87756122 80 … … … … … …C语言设计

c语言设计课程设计内容 学生信息管理系统设计 (1)问题描述 学生信息包括:学号、姓名、性别、宿舍号码、电话号码、成绩等。试设计一个学生信息管理系统,使之能提供以下功能: ² 系统以菜单方式工作 ² 学生信息录入功能(学生信息用文本文件保存)---输入 ² 学生信息浏览功能——输出 ² 查询功能——算法 1、按学号查询 2、按姓名查询 ² 排序功能 1、按分数升序排序 2、按分数降序排序 (2)功能要求 ² 界面简单明了; ² 有一定的容错能力,比如输入的成绩不在0~100之间,就提示不合法,要求重新输入; (3)算法分析 首先,一个学生包括这么多的属性,应该考虑定义一个结构,其次,我们应该考虑数据的存储形式,在这里假如我们以数组的方式来存储,首先必须知道学生人数大概是多少,以便我们确定数组的大小。 对于菜单的实现,其实也比较简单,首先我们用printf语句把程序的功能列出来,然后等待用户输入而执行不同的函数,执行完了一个功能后又回到菜单。文件的读写操作大家参照书中的有关文件的章节。 (4)保存在文件中的内容可以参考下面的形式 学号 姓名 性别 宿舍号码 电话号码 成绩 01 张成成 男 501 87732111 90 02 李成华 女 101 87723112 78 03 王成凤 女 101 87723112 85 04 张明明 男 502 87734333 60 05 陈东 男 501 87732111 96 06 李果 男 502 87734333 66 07 张园园 女 102 87756122 80 … … … … … …

最新推荐

recommend-type

vc++学生管理系统完整代码(超详细)

学生成绩基本信息文件(B.TXT)有以下内容: 学号 课程编号 课程名称 学分 平时成绩 实验成绩 卷面成绩 综合成绩 实得学分 01 A01 大学物理 3 66 78 82 02 B03 高等数学 4 78 -1 90 01 B03 高等数学 4 45 -1 88 02 ...
recommend-type

什么是mysql安装配置教程以及学习mysql安装配置教程的意义

mysql安装配置教程
recommend-type

【光伏预测】基于BP神经网络实现光伏发电功率预测附Matlab代码.zip

1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
recommend-type

onlyoffice搭建及与alist使用的view.html

onlyoffice搭建及与alist使用的view.html
recommend-type

android-support-v7-recyclerview 添加错误

1.Project Structure中添加依赖时,容易添加不进去,所以使用本地添加,将android-support-v7-recyclerview放在对应项目的lib文件中,并add as library。如果在build.gradle中出现implementation files('libs\\android-support-v7-recyclerview.jar')就算是添加成功。 2.在布局文件中使用 androidx 的布局控件,在逻辑代码文件中导入androidx相关包。(取代android.support.v7) 3.在gradle.properties文件中,注释android.enableJetifier=true。(# android.enableJetifier=true) 最新way2:
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

【实战演练】增量式PID的simulink仿真实现

# 2.1 Simulink仿真环境简介 Simulink是MATLAB中用于建模、仿真和分析动态系统的图形化环境。它提供了一个直观的用户界面,允许用户使用块和连接线来创建系统模型。Simulink模型由以下元素组成: - **子系统:**将复杂系统分解成更小的、可管理的模块。 - **块:**代表系统中的组件,如传感器、执行器和控制器。 - **连接线:**表示信号在块之间的流动。 Simulink仿真环境提供了广泛的块库,涵盖了各种工程学科,包括控制系统、电子和机械工程。它还支持用户自定义块的创建,以满足特定仿真需求。 # 2. Simulink仿真环境的搭建和建模 ### 2.
recommend-type

训练集和测试集的准确率都99%,但是预测效果不好

即使训练集和测试集的准确率都很高,但是在实际的预测中表现不佳,可能会有以下几个原因: 1. 数据质量问题:模型训练和测试的数据可能存在问题,比如数据标签错误、数据集采样不均衡、数据集中存在异常值等问题,这些问题可能会导致模型在实际预测中表现不佳。 2. 特征工程问题:模型的特征工程可能存在问题,导致模型无法很好地捕捉数据的特征,从而影响预测效果。 3. 模型选择问题:模型的选择可能不合适,比如选择的模型太简单,无法很好地拟合数据,或者选择的模型太复杂,导致过拟合等问题。 4. 超参数调整问题:模型的超参数可能没有调整到最佳状态,需要进行调整。 针对以上可能的原因,可以采取相应的措施进
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。