从文件中读取人员信息的c++简易比赛打分系统

文件:
在这里插入图片描述
运行结果:
![在这里插入图片描述](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;
}


猜你喜欢

转载自blog.csdn.net/qq_41358574/article/details/111709890