c++ 構造函數與析構函數(二)

實驗要求

設計一個學生類student,它具有的私有數據成員是:學號、姓名、數學、英語、計算機成績;

  • 具有的公有成員函數是:
  • 求三門課總成績的函數sum;
  • 求三門課平均成績的函數average;
  • 顯示學生數據信息的函數print;
  • 獲取學生學號的函數get_num;
  • 設置學生數據信息的函數set_inf。

編制主函數,

  • 說明一個student類對象的數組並進行全班學生信息的輸入與設置
  • 而後求出每一學生的總成績、平均成績、全班學生總成績最高分、全班學生總平均分,
  • 並在輸入一個學號後,輸出該學生有關的全部數據信息。

代碼實現如下:

#include<iostream>
#include<vector>
#include<queue>
#include<algorithm>
using namespace std;

/*
設計一個學生類student,它具有的私有數據成員是:學號、姓名、數學、英語、計算機成績;具有的公有成員函數是:求三門課總成績的函數sum;求三門課平均成績的函數average;顯示學生數據信息的函數print;獲取學生學號的函數get_num;設置學生數據信息的函數set_inf。
*/

class student {
    string name;
    int id,math=0, eng=0, com=0;
    int sum=0, average = 0;
public:
    student();//構造函數
    ~student();//析構函數
    void set_inf(int id,string name,int math,int eng,int com);
    void sumn();//三門課總成績
    void averagen();//求三門課平均成績
    void print();//顯示學生數據信息
    int getId();//獲得id
    int getSum();//獲得總成績
    int getAverage();//獲得平均成績

};
//構造函數實現
student::student() {};

void student::set_inf(int id, string name, int math, int eng, int com) {
    this->id = id;
    this->name = name;
    this->math = math;
    this->eng = eng;
    this->com = com;
}

void student::sumn() {
    this->sum = this->com + this->math + this->eng;
}

void student::averagen() {
    this->average = (this->com + this->math + this->eng) / 3;
}

void student::print() {
    cout << this->id << "  ";
    cout << this->name << "  ";
    cout << this->math << "  ";
    cout << this->eng << "  ";
    cout << this->com << "  ";
    cout << this->sum << "  ";
    cout << this->average << "  ";
    cout << endl;
}

int student::getSum() {
    return this->sum;
}

int student::getAverage() {
    return this->average;
}

int student::getId() {
    return this->id;
}


int maxAll(student stu[],int size) {
    int ans=0;
    for (int i = 0; i < size;i++) {
        ans = max(ans,stu[i].getSum());
    }
    return ans;
}

int averageAll(student stu[],int size) {
    int ans=0;
    for (int i = 0; i < size;i++) {
        ans += stu[i].getSum();
    }
    return ans / size;
}

void findById(int Queryid,student stu[],int size) {
    for (int i = 0; i < size;i++) {
        if (Queryid == stu[i].getId()) {
            stu[i].print();
            break;
        }
    }
}

//析構函數實現
student::~student() {};

/*
編制主函數,說明一個student類對象的數組並進行全班學生信息的輸入與設置,而後求出每一學生的總成績、平均成績、全班學生總成績最高分、全班學生總平均分,並在輸入一個學號後,輸出該學生有關的全部數據信息。
*/
int main() {
    int stuSize = 3;
    char flag = 'y';
    int QueryId;
    string name;
    int id, math = 0, eng = 0, com = 0;
    student stu[100];
    int t = stuSize;
    cout << "請輸入學生學號、姓名、數學、英語、計算機成績"<<endl;
    while (t--) {
        cin >> id >> name >> math >> eng >> com;
        stu[t].set_inf(id,name,math,eng,com);
        stu[t].sumn();
        stu[t].averagen();
        cout<<t<<",請繼續輸入學生信息:"<<endl;
    }
    cout << "完成輸入"<<endl;
    cout << "學生詳細信息如下:"<<endl;
    cout << "學號、姓名、數學、英語、計算機、總分、平均分" << endl;
    t = stuSize;
    while (t--) {
        stu[t].print();
    }
    cout << "全班學生總成績最高分:"<<maxAll(stu,stuSize)<<endl;
    cout << "全班學生總平均分:"<<averageAll(stu,stuSize)<<endl;
    cout<<"是否查詢單個學生信息:(y/n)"<<endl;
    cin >> flag;
    while (flag=='y') {
        cout << "輸入學生學號" << endl;
        cin >>QueryId;
        findById(QueryId,stu,stuSize);
        cout << "是否繼續查詢單個學生信息:(y/n)" << endl;
        cin >> flag;
    }
    cout << "構建完成!" << endl;
    system("pause");
    return 0;
}

效果截圖:

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章