首先,定义学生成绩结构体类型,其中成员包括学号、姓名、性别、数学成绩、英语成绩、C语言成绩和总成绩,并且定义结构体数组,然后,利用文件的读写操作知识,编写函数实现从文件中逐条读取学生成绩信息功能和保存所有学生成绩信息到文件的功能,最后,编写函数实现显示学生全部信息功能、修改某位同学成绩信息功能、删除某位同学成绩信息功能、查询某位同学成绩信息功能和按照总成绩排序的功能。
时间: 2023-08-18 10:05:02 浏览: 83
好的,下面我将逐步为你实现这些功能。
首先,定义学生成绩结构体类型,其中成员包括学号、姓名、性别、数学成绩、英语成绩、C语言成绩和总成绩,并且定义结构体数组:
```c++
#include <iostream>
#include <fstream>
#include <algorithm>
#include <string>
using namespace std;
const int MAXN = 100; // 最大学生数目
struct Student {
string id; // 学号
string name; // 姓名
char sex; // 性别
int math; // 数学成绩
int english; // 英语成绩
int c_lang; // C语言成绩
int total; // 总成绩
} students[MAXN];
int n; // 学生数目
```
然后,我们需要实现从文件中逐条读取学生成绩信息功能和保存所有学生成绩信息到文件的功能。这里我们使用文件流来进行读写操作。
```c++
// 从文件中逐条读取学生成绩信息
void load() {
ifstream fin("students.txt");
if (!fin) {
cout << "无法打开文件!" << endl;
return;
}
n = 0;
while (fin >> students[n].id >> students[n].name >> students[n].sex
>> students[n].math >> students[n].english >> students[n].c_lang >> students[n].total) {
++n;
}
fin.close();
}
// 保存所有学生成绩信息到文件
void save() {
ofstream fout("students.txt");
if (!fout) {
cout << "无法打开文件!" << endl;
return;
}
for (int i = 0; i < n; ++i) {
fout << students[i].id << " " << students[i].name << " " << students[i].sex << " "
<< students[i].math << " " << students[i].english << " " << students[i].c_lang << " " << students[i].total << endl;
}
fout.close();
}
```
接下来,我们编写函数实现显示学生全部信息功能:
```c++
// 显示学生全部信息
void show() {
cout << "学号\t姓名\t性别\t数学\t英语\tC语言\t总成绩" << endl;
for (int i = 0; i < n; ++i) {
cout << students[i].id << "\t" << students[i].name << "\t" << students[i].sex << "\t"
<< students[i].math << "\t" << students[i].english << "\t" << students[i].c_lang << "\t" << students[i].total << endl;
}
cout << endl;
}
```
然后,我们编写函数实现修改某位同学成绩信息功能:
```c++
// 修改某位同学成绩信息
void modify() {
string id;
cout << "请输入要修改的学生学号:";
cin >> id;
bool found = false;
for (int i = 0; i < n; ++i) {
if (students[i].id == id) {
cout << "请输入该学生新的成绩(数学 英语 C语言):";
cin >> students[i].math >> students[i].english >> students[i].c_lang;
students[i].total = students[i].math + students[i].english + students[i].c_lang;
found = true;
break;
}
}
if (!found) {
cout << "未找到该学生!" << endl;
}
}
```
接下来,我们编写函数实现删除某位同学成绩信息功能:
```c++
// 删除某位同学成绩信息
void remove() {
string id;
cout << "请输入要删除的学生学号:";
cin >> id;
bool found = false;
for (int i = 0; i < n; ++i) {
if (students[i].id == id) {
for (int j = i; j < n - 1; ++j) {
students[j] = students[j + 1];
}
--n;
found = true;
break;
}
}
if (!found) {
cout << "未找到该学生!" << endl;
}
}
```
然后,我们编写函数实现查询某位同学成绩信息功能:
```c++
// 查询某位同学成绩信息
void query() {
string id;
cout << "请输入要查询的学生学号:";
cin >> id;
bool found = false;
for (int i = 0; i < n; ++i) {
if (students[i].id == id) {
cout << students[i].id << "\t" << students[i].name << "\t" << students[i].sex << "\t"
<< students[i].math << "\t" << students[i].english << "\t" << students[i].c_lang << "\t" << students[i].total << endl;
found = true;
break;
}
}
if (!found) {
cout << "未找到该学生!" << endl;
}
}
```
最后,编写函数实现按照总成绩排序的功能:
```c++
// 按照总成绩排序
bool cmp(const Student& a, const Student& b) {
return a.total > b.total;
}
void sort_by_total() {
sort(students, students + n, cmp);
show();
}
```
完整的代码如下:
```c++
#include <iostream>
#include <fstream>
#include <algorithm>
#include <string>
using namespace std;
const int MAXN = 100; // 最大学生数目
struct Student {
string id; // 学号
string name; // 姓名
char sex; // 性别
int math; // 数学成绩
int english; // 英语成绩
int c_lang; // C语言成绩
int total; // 总成绩
} students[MAXN];
int n; // 学生数目
// 从文件中逐条读取学生成绩信息
void load() {
ifstream fin("students.txt");
if (!fin) {
cout << "无法打开文件!" << endl;
return;
}
n = 0;
while (fin >> students[n].id >> students[n].name >> students[n].sex
>> students[n].math >> students[n].english >> students[n].c_lang >> students[n].total) {
++n;
}
fin.close();
}
// 保存所有学生成绩信息到文件
void save() {
ofstream fout("students.txt");
if (!fout) {
cout << "无法打开文件!" << endl;
return;
}
for (int i = 0; i < n; ++i) {
fout << students[i].id << " " << students[i].name << " " << students[i].sex << " "
<< students[i].math << " " << students[i].english << " " << students[i].c_lang << " " << students[i].total << endl;
}
fout.close();
}
// 显示学生全部信息
void show() {
cout << "学号\t姓名\t性别\t数学\t英语\tC语言\t总成绩" << endl;
for (int i = 0; i < n; ++i) {
cout << students[i].id << "\t" << students[i].name << "\t" << students[i].sex << "\t"
<< students[i].math << "\t" << students[i].english << "\t" << students[i].c_lang << "\t" << students[i].total << endl;
}
cout << endl;
}
// 修改某位同学成绩信息
void modify() {
string id;
cout << "请输入要修改的学生学号:";
cin >> id;
bool found = false;
for (int i = 0; i < n; ++i) {
if (students[i].id == id) {
cout << "请输入该学生新的成绩(数学 英语 C语言):";
cin >> students[i].math >> students[i].english >> students[i].c_lang;
students[i].total = students[i].math + students[i].english + students[i].c_lang;
found = true;
break;
}
}
if (!found) {
cout << "未找到该学生!" << endl;
}
}
// 删除某位同学成绩信息
void remove() {
string id;
cout << "请输入要删除的学生学号:";
cin >> id;
bool found = false;
for (int i = 0; i < n; ++i) {
if (students[i].id == id) {
for (int j = i; j < n - 1; ++j) {
students[j] = students[j + 1];
}
--n;
found = true;
break;
}
}
if (!found) {
cout << "未找到该学生!" << endl;
}
}
// 查询某位同学成绩信息
void query() {
string id;
cout << "请输入要查询的学生学号:";
cin >> id;
bool found = false;
for (int i = 0; i < n; ++i) {
if (students[i].id == id) {
cout << students[i].id << "\t" << students[i].name << "\t" << students[i].sex << "\t"
<< students[i].math << "\t" << students[i].english << "\t" << students[i].c_lang << "\t" << students[i].total << endl;
found = true;
break;
}
}
if (!found) {
cout << "未找到该学生!" << endl;
}
}
// 按照总成绩排序
bool cmp(const Student& a, const Student& b) {
return a.total > b.total;
}
void sort_by_total() {
sort(students, students + n, cmp);
show();
}
int main() {
load();
while (true) {
cout << "请选择要执行的操作:" << endl;
cout << "1. 显示所有学生信息" << endl;
cout << "2. 修改某个学生的成绩信息" << endl;
cout << "3. 删除某个学生的成绩信息" << endl;
cout << "4. 查询某个学生的成绩信息" << endl;
cout << "5. 按总成绩排序并显示所有学生信息" << endl;
cout << "6. 保存所有学生信息并退出程序" << endl;
int choice;
cin >> choice;
switch (choice) {
case 1:
show();
break;
case 2:
modify();
break;
case 3:
remove();
break;
case 4:
query();
break;
case 5:
sort_by_total();
break;
case 6:
save();
return 0;
default:
cout << "输入错误,请重新输入!" << endl;
}
}
return 0;
}
```
阅读全文