
Задание 3
Изменить программу, созданную на основе задания 2:
в классе, который работает с массивом объектов класса, созданного на основе информации об объекте индивидуального варианта, все поля данных и методы сделать статическими. В метод вывода массива объектов добавить сортировку объектов по какому-либо полю;
В функции main() вызвать статические методы.
Пример выполнения задания 3 показан в примере 3.
Пример 3
В листинге 3 представлена программа, в которой формируется исходный список студентов и список студентов с минимальным рейтингом.
Для создания программы использовалась среда разработки Qt Creator 3.0.0 (основан на Qt 5.2.0). На рисунке 5 показан состав проекта программы.
Создание проекта в Qt Creator: Файл -> Новый файл или проект … -> Проект без использования Qt -> Простой проект на С++.
Добавление класса в проект: Файл -> Новый файл или проект … -> С++ -> Класс С++.
Компиляция, сборка и выполнение проекта: Сборка -> Запустить.
На рисунке 6 показан результат выполнения программы.
Рисунок 5 – Состав проекта программы
Листинг 3
// student.h
#ifndef STUDENT_H
#define STUDENT_H
class Student
{ private:
char fam[20];
char* name;
int grade; //рейтинг
public:
Student();
~Student();
char* getfam();
char* getname();
int getgrade();
void setfam(const char* fam1);
void setname(const char* name1);
void setgrade(int grade1);
void input();
void output();
};
#endif // STUDENT_H
// student.cpp
#include "student.h"
#include <iostream>
#include <iomanip>
#include <cstring>
using namespace std;
Student::Student()
{ strcpy(fam,"");
name=new char[20];//выделяем память
strcpy(name,""); //копируем имя
grade = 0;
}
Student::~Student(){delete []name; }
void Student::output()
{ cout << left << setw(10)<< fam;
cout << setw(13) << name;
cout << setw(3) << grade << endl;
}
void Student::input()
{ cout << "\nФамилия: "; cin >> fam;
cout << "Имя: "; cin >> name;
cout << "Рейтинг: "; cin >> grade;
}
char* Student::getfam() { return fam;}
char* Student::getname(){ return name;}
int Student::getgrade(){ return grade;}
void Student::setfam(const char* fam1){strcpy(fam,fam1);}
void Student::setname(const char* name1)
{ int leng=strlen(name1);
name=new char [leng+1];
strcpy(name,name1);
}
void Student::setgrade(int grade1){grade = grade1;}
// masstud.h
#ifndef MASSTUD_H
#define MASSTUD_H
#include "student.h"
class MasStud
{ static int n;
static Student* st;
public:
static void input();
static void output();
static void mingrade();
static void del(){delete [] st;}
};
#endif // MASSTUD_H
// masstud.cpp
#include "masstud.h"
#include <iostream>
#include <iomanip>
#include <cstring>
#include <cstdlib>
using namespace std;
int MasStud::n = 0;
Student* MasStud::st = NULL;
void MasStud::input()
{ cout << "Введите кол-во студентов: ";
cin >> n;
st = new Student[n];
cout << "Введите информацию о студентах: ";
for(int i = 0; i<n; i++)
st[i].input();
}
int compare(const void* s1, const void* s2)
{ return strcmp(((Student*)s1)->getfam(), ((Student*)s2)->getfam());
}
void MasStud::output()
{cout << "\nСписок студентов: \n";
cout << setw(10) << "Фамилия" << setw(11)<< "Имя" << setw(9)<< "Рейтинг" << endl;
qsort(st,n,sizeof(Student), compare);
for(int i = 0; i<n; i++)
st[i].output();
}
void MasStud::mingrade()
{int min = st[0].getgrade();
for(int i = 0; i<n; i++)
if (st[i].getgrade() < min)
min = st[i].getgrade();
cout << "\nСписок студентов с минимальным рейтингом: \n";
cout << setw(10) << "Фамилия" << setw(11)<< "Имя" << setw(9)<< "Рейтинг" << endl;
for(int i = 0; i<n; i++)
if (st[i].getgrade() == min)
st[i].output();
}
// main.cpp
#include <iostream>
#include "masstud.h"
using namespace std;
int main()
{ MasStud::input();
MasStud::output();
MasStud::mingrade();
MasStud::del();
return 0;
}
Рисунок 6 – Результат выполнения программы