STL小练习,利用deque打印消除异常成绩的成绩单,并且输出到txt中

#include<iostream>
#include<deque>
#include<algorithm>
#include<vector>
#include<fstream>
using namespace std;
//打分系统,输入同学的人数,分别输入同学的姓名的姓名和分数,统计所有人的平均分(去除异常的分数),将不同同学的分数输出到txt中,并且最后附上班级的(正常)平均分
class Student
{
public:
    string name=" ";
    int score=0;
    Student(string a,int b)
    {
        this->name = a;
        this->score = b;
    }
    Student()
    {
    }
};

void output(deque<Student>& d)
{
    deque<Student>::iterator it = d.begin();
    deque<Student>::iterator ite = d.end();
    for (deque<Student>::iterator it = d.begin(); it != d.end(); it++)
    {
        cout << "学生的姓名是:" << (*it).name << " \t学生的分数为:" << (*it).score << endl;
    }
}

void deque_sort(deque<Student>& d)
{
    deque<Student>::iterator it = d.begin();
    deque<Student>::iterator ite = d.end();
    int deque_size = d.size();
    for (int i = 0; i < deque_size - 1; i++)
    {
        for (int j = 0; j < deque_size - i - 1; j++)
        {
            if (d[j].score > d[j + 1].score)
            {
                Student temp;
                temp.name = d[j].name;
                temp.score = d[j].score;
                d[j].name = d[j + 1].name;
                d[j].score = d[j + 1].score;
                d[j + 1].name = temp.name;
                d[j + 1].score = temp.score;
            }
        }
    }
}

float cal(deque<Student> d)
{
    d.pop_back();
    d.pop_front();
    deque<Student>::iterator it = d.begin();
    deque<Student>::iterator ite = d.end();
    float times = 0;
    float total = 0;
    for (; it != ite; it++)
    {
        total += (*it).score;
        times++;
    }
    return total / times;
}

void output_toyexy(deque<Student>& d)
{
    fstream ofs;
    ofs.open("C:/Users/涂小康/Desktop/C++STL/1.txt");
    deque<Student>::iterator it = d.begin();
    deque<Student>::iterator ite = d.end();
    for (it; it != ite; it++)
    {
        ofs << "同学的姓名:" << (*it).name << "\t同学的成绩:" << (*it).score << endl;
    }
    ofs<< "所有学生的平均成绩是" << cal(d) << endl;
    ofs.close();
}

void input_from_keyboard(deque<Student>& d)
{
    int tag = 1;
    string sub_name;
    int sub_score;
    int i = 0;
    while (tag)
    {
        cout << "----------------开始成绩录入---------------" << endl;
        Student sub[10];
        cout << "请输入同学的姓名:" << endl;
        cin >> sub_name;
        sub[i].name = sub_name;
        cout << "请输入同学的成绩:" << endl;
        cin >> sub_score;
        sub[i].score = sub_score;
        cout << "是否结束录入?是(不再录入)输入0,否(继续录入)输入1" << endl;
        cin >> tag;
        d.push_back(sub[i]);
        i++;
    }
    cout << "----------------成绩录入结束---------------" << endl;
}

int main()
{
    //Student s1("David",100);
    //Student s2("Li",98);
    //Student s3("Victor",99);
    //Student s4("Linda",95);
    deque<Student> list;
    //list.push_back(s1);
    //list.push_back(s2);
    //list.push_back(s3);
    //list.push_back(s4);
    input_from_keyboard(list);
    deque_sort(list);
    output(list);
    cout << "所有学生的平均成绩是" << cal(list) << endl;
    output_toyexy(list);
    return 0;
}

 

posted @ 2021-11-10 21:33  小康规划  阅读(59)  评论(0)    收藏  举报