使用c plus plus写出满足下列要求的代码:重用上题的Student类,再定义一个StudentArray类,含有Student*和学生人数n两个数据成员,定义相应的构造函数和析构函数完成学生数组对象的创建和释放,再编写3个成员函数分别完成以下功能: (1)录入n个学生信息(n在主函数中由用户输入); (2)输出n个学生信息; (3)将n个学生信息保存到文件student.dat中(要求使用二进制保存,使用write()函数); (4)按学号查找学生信息,其中所有学生信息都从文件student.dat中获取(也可以分别定义两个函数完成,一个从文件读信息,一个从数组中查找信息)。 在主函数中定义学生数组对象对上述函数进行测试。

时间: 2023-03-10 19:16:52 浏览: 72
使用 C++ 编写代码实现上述要求,示例代码如下:// 定义 Student 类 class Student { public: int num; char name[20]; int score; };// 定义 StudentArray 类 class StudentArray { private: Student* pStu; // 学生指针 int n; // 学生人数 public: // 构造函数 StudentArray(int n):n(n) { pStu = new Student[n]; // 动态分配 n 个 Student 对象 } // 析构函数 ~StudentArray() { delete[] pStu; // 释放 pStu 所指向的内存 } // 录入 n 个学生信息 void Input() { for (int i = 0; i < n; i++) { cout << "请输入第 " << i+1 << " 个学生的学号、姓名和成绩:" << endl; cin >> pStu[i].num >> pStu[i].name >> pStu[i].score; } } // 输出 n 个学生信息 void Output() { for (int i = 0; i < n; i++) { cout << "第 " << i+1 << " 个学生的学号、姓名和成绩:" << endl; cout << pStu[i].num << " " << pStu[i].name << " " << pStu[i].score << endl; } } // 将 n 个学生信息保存到文件 student.dat 中 void Save() { ofstream outFile("student.dat", ios::binary); // 以二进制的方式打开文件 if (!outFile) { cout << "打开文件失败!" << endl; return; } outFile.write((char*)pStu, n*sizeof(Student)); // 将 pStu 所指向的内存写入文件 outFile.close(); // 关闭文件 } // 按学号查找学生信息 int Find(int num) { // 从文件中读取 n 个学生信息 ifstream inFile("student.dat", ios::binary); if (!inFile) { cout << "打开文件失败!" << endl; return -1; } inFile.read((char*)pStu, n*sizeof(Student)); // 从文件中读取 n 个学生对象 inFile.close(); // 关闭文件 // 从数组中查找学生信息 for (int i = 0; i < n; i++) { if (pStu[i].num == num) { cout << "找到该学生信息:"; cout << pStu[i].num << " " << pStu[i].name << " " << pStu[i].score << endl; return i; // 查找成功,返回学生索引 } } return -1; // 查找失败,返回-1 } };int main() { int n; cout << "请输入学生人数:"; cin >> n; StudentArray stuArr(n); // 定义学生数组对象 stuArr.Input(); // 录入 n 个学生信息 stuArr.Output(); // 输出 n 个学生信息 stuArr.Save(); // 将 n 个学生信息保存到文件 student.dat 中 int num; cout << "请输入要查找的学生学号:"; cin >> num; int index = stuArr.Find(num); // 按学号查找学生信息 if (index == -1) cout << "未找到该学生信息!" << endl; return 0; }

相关推荐

最新推荐

recommend-type

MyBatis Plus中代码生成器使用详解

主要介绍了MyBatis Plus中代码生成器使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
recommend-type

MyBatis-plus+达梦数据库实现自动生成代码的示例

主要介绍了MyBatis-plus+达梦数据库实现自动生成代码的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
recommend-type

redis++使用说明,windows下编译redis-plus-plus

redis++使用说明,windows下编译redis-plus-plus
recommend-type

基于Mybatis plus 自动代码生成器的实现代码

本文通过实例代码给大家介绍了基于Mybatis-plus 自动代码生成器的相关知识,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
recommend-type

Mybatis-plus实现主键自增和自动注入时间的示例代码

主要介绍了Mybatis-plus实现主键自增和自动注入时间的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
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

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

解答下列问题:S—>S;T|T;T—>a 构造任意项目集规范族,构造LR(0)分析表,并分析a;a

对于这个文法,我们可以构造以下项目集规范族: I0: S -> .S S -> .T T -> .a I1: S -> S. [$ T -> T. [$ I2: S -> T. I3: S -> S.;S S -> S.;T T -> T.;a 其中,点(.)表示已经被扫描过的符号,;$表示输入串的结束符号。 根据项目集规范族,我们可以构造出LR(0)分析表: 状态 | a | $ ---- | - | - I0 | s3| I1 | |acc I2 | | 其中s3表示移进到状态3,acc表示接受。在分析字符串a;a时,我们可以按照以下步骤进行
recommend-type

JSBSim Reference Manual

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