文件:
运行结果:
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020122521440335.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMzU4NTc0,size_16,color_FFFFFF,t_70
从已有的文本文件中获取信息,去除最高分最低分并进行排序和求平均值,人员实现格式化输出。输出得分最高者和得分最低者。
代码:
学生.h
#pragma once
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<fstream>
#include<string>
#include<iomanip>
#include<vector>
#include<algorithm>
#include<numeric>
#include<stdio.h>
#include<Windows.h>
#define _CRT_SECURE_NO_WARNINGS
using namespace std;
struct Student//参赛选手
{
double grade[7];
char Name[20];//名字
double Average;//平均分
double Total;//总分
int Number;//学生序号
double high;//最高分
double low;//最低分
};
struct Work//完成输出
{
int S_Num =7;//评委
int C_Num = 5;//参赛的人员个数
double Calculate_ALL(vector<double>s);//获取总分
double Calculate_AVE(vector<double>s, int num);//获取平均分
void FileWork();//文件操作
void Menu();//菜单界面
void Cout();//输出各选手分数
//以下为思考题内容
void Judge() {
};//计算各个教练的评分水平
};
mm.cpp:
#include"学生.h"
vector<double> Score;//有效分数
vector<double> N_Sco;//无效分数
vector<Student> Stu;//列表
double Work::Calculate_ALL(vector<double>s)
{
return accumulate(s.begin(), s.end(), 0);
}
double Work::Calculate_AVE(vector<double>s, int num)
{
return accumulate(s.begin(), s.end(), 0) / static_cast<double>(num);
}
void Work::FileWork()
{
Student newstu;//新建一个对象
FILE* ifs = NULL;
ifs = fopen("f1.txt", "r");
//这里有点问题,需要解决的是识别序号,姓名和分数
if (ifs)
{
for (int i = 0; i < this->C_Num; i++)
{
Stu.push_back(newstu);
fscanf(ifs, "%d", &Stu[i].Number);
fscanf(ifs, "%s", Stu[i].Name);
for (int z = 0; z < 7; z++)
fscanf(ifs, "%lf", &Stu[i].grade[z]);
}
}
}
void Work::Menu()
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE);
for (int i = 0; i < 60; i++)
{
cout << "_";
}
cout << endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);
cout << " 欢 迎 来 到 比 赛 打 分 系 统 \n";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE);
for (int i = 0; i < 60; i++)
{
cout << "_";
}
cout << endl;
cout << "本次比赛共有 " << this->C_Num << " 位评委参与比赛!" << endl;
cout << "本次比赛共有 " << this->S_Num << " 位选手参加比赛! " << endl;
for (int i = 0; i < 60; i++)
{
cout << "_";
}
cout << endl;
}
void Work::Cout()
{
cout << "以下是未处理的数据:\n";
cout << "\n序号 姓名 分1 分2 分3 分4 分5 分6 分7" << endl;
for (int i = 0; i < this->C_Num; i++)
{
cout << left << setw(9) <<
Stu[i].Number
<< left << setw(10) << Stu[i].Name;
for (int j = 0; j < 7; j++)
cout << left << setw(10) << Stu[i].grade[j];
cout << endl;
}
cout << "以下是处理之后的数据:\n";
for (int i = 0; i < this->C_Num; i++)//处理数据
sort(Stu[i].grade, Stu[i].grade + 6);
for (int i = 0; i < 5; i++)
{
Stu[i].low = Stu[i].grade[0];
Stu[i].high = Stu[i].grade[6];
}
double total = 0;
for (int i = 0; i < 5; i++)
{
double total = 0;
for (int j = 0; j < 5; j++)
{
Stu[i].grade[j] = Stu[i].grade[j + 1];
total += Stu[i].grade[j];
if (j == 4)
Stu[i].Total = total;
}
Stu[i].Average = Stu[i].Total / 5;
}
//完成文件输出
FILE* ofs = NULL;
ofs = fopen("f2.txt", "w");
for (int i = 0; i < 60; i++)
{
cout << "_";
fprintf(ofs, "_");
}
fprintf(ofs, "\n\n");
cout << "\n序号 姓名 最高分 最低分 累计得分 最后成绩" << endl;
fprintf(ofs, "序号 姓名 最高分 最低分 累计得分 最后成绩\n\n");
for (int i = 0; i < 60; i++)
{
cout << "_";
fprintf(ofs, "_");
}
cout << endl;
fprintf(ofs, "\n\n");
for (int i = 0; i < this->C_Num; i++)
{
cout << left << setw(9) <<
Stu[i].Number
<< left << setw(10) << Stu[i].Name
<< left << setw(10) << Stu[i].high
<< left << setw(11) << Stu[i].low
<< left << setw(15) << Stu[i].Total
<< left << setw(15) << Stu[i].Average << endl;
}
vector<Student>::iterator it = Stu.begin();
while (it != Stu.end())
{
fprintf(ofs, "%d ", it->Number);
fprintf(ofs, "%s ", it->Name);
fprintf(ofs, "%lf ", it->high);
fprintf(ofs, "%lf ", it->low);
fprintf(ofs, "%lf ", it->Total);
fprintf(ofs, "%lf ", it->Average);
fprintf(ofs, "\n");
it++;
}
fclose(ofs); int n = 0, index1 = -1, max = 100000, index2 = -1;
for (int i = 0; i < 5; i++)
{
if (n < Stu[i].Average)
index1 = Stu[i].Number;
if (max > Stu[i].Average)
index2 = i;
}
cout << "\n分数最低的选手是" << index1 << "号选手" <<Stu[index1-1].Name;
cout << "\n分数最高的选手是" << index2 << "号选手" << Stu[index1 - 1].Name;
}
main.cpp:
#include"学生.h"
int main()
{
Work w;
w.Menu();
w.FileWork();
w.Judge();
w.Cout();
return 0;
}