В соответствии со своим вариантом разработать программу для создания шаблона структур:
1.Использовать меню для вызова нужных функций.
2.Использовать файлы для ввода/вывода данных.
3.В программе предусмотреть проверку вводимой информации.
Жилой дом. Паспортные данные объекта: номер дома, год ввода в эксплуатацию, адрес, количество квартир, тип здания. Написать функции выбора дома по году ввода, по количеству квартир, поиска новостроек. Результаты вывести на экран. Вывести рассортированный по типу список всех домов.
C/C++
Шаблон структур C++
#include <algorithm>
#include <iostream>
#include <string>
#include <vector>
using namespace std;
struct House {
int year;
int flat;
string number;
string address;
string type;
House() : year(1900), flat(1) {}
bool is_year(const int value)const { return year == value; }
bool is_flat(const int value)const { return flat == value; }
bool is_type(const string& value)const { return type == value; }
friend bool operator<(const House& a, const House& b) {
return a.type < b.type;
}
friend ostream& operator<<(ostream& out, const House& h) {
return out
<< "Номер дома: " << h.number << "\n\t"
<< "Тип: " << h.type << "\n\t"
<< "Год ввода в эксплуатацию: " << h.year << "\n\t"
<< "Количество квартир: " << h.flat << "\n\t"
<< "Адрес: " << h.address << "\n";
}
};
int integer(const char* msg) {
cout << msg;
int value;
cin >> value;
cin.ignore(cin.rdbuf()->in_avail());
return value;
}
string text(const char* msg) {
cout << msg;
string line;
getline(cin, line);
return line;
}
House create() {
House house;
house.number = text("Номер дома: ");
house.year = integer("Год ввода в эксплуатацию: ");
house.address = text("Адрес: ");
house.flat = integer("Количество квартир: ");
house.type = text("Тип здания: ");
system("cls");
return house;
}
void show_year(const vector<House>& box, const int year) {
for (const auto& house : box) if (house.is_year(year)) cout << house << '\n';
puts("");
}
void show_flat(const vector<House>& box, const int flat) {
for (const auto& house : box) if (house.is_flat(flat)) cout << house << '\n';
puts("");
}
void new_buildings(const vector<House>& box, const int year) {
for (const auto& house : box) if (year - house.year <= 1) cout << house << '\n';
puts("");
}
void show_sorted_types(const vector<House>& box) {
auto tmp = box;
sort(tmp.begin(), tmp.end());
for (const auto& house : tmp) cout << house << '\n';
puts("");
}
int main() {
system("chcp 1251 > nul");
auto n = integer("Количество домов в списке: ");
vector<House> box;
for (auto i = 0; i < n; ++i) box.emplace_back(create());
puts("\tНачните поиск! \n");
auto year = integer("По году ввода в эксплуатацию: ");
puts("");
show_year(box, year);
auto flat = integer("По количеству квартир: ");
puts("");
show_flat(box, flat);
puts("\n\tСписок новостроек: \n");
new_buildings(box, 2021);
puts("\tОтсортированный список: \n");
show_sorted_types(box);
system("pause > nul");
}
#include <iostream>
#include <string>
#include <vector>
using namespace std;
struct House {
int year;
int flat;
string number;
string address;
string type;
House() : year(1900), flat(1) {}
bool is_year(const int value)const { return year == value; }
bool is_flat(const int value)const { return flat == value; }
bool is_type(const string& value)const { return type == value; }
friend bool operator<(const House& a, const House& b) {
return a.type < b.type;
}
friend ostream& operator<<(ostream& out, const House& h) {
return out
<< "Номер дома: " << h.number << "\n\t"
<< "Тип: " << h.type << "\n\t"
<< "Год ввода в эксплуатацию: " << h.year << "\n\t"
<< "Количество квартир: " << h.flat << "\n\t"
<< "Адрес: " << h.address << "\n";
}
};
int integer(const char* msg) {
cout << msg;
int value;
cin >> value;
cin.ignore(cin.rdbuf()->in_avail());
return value;
}
string text(const char* msg) {
cout << msg;
string line;
getline(cin, line);
return line;
}
House create() {
House house;
house.number = text("Номер дома: ");
house.year = integer("Год ввода в эксплуатацию: ");
house.address = text("Адрес: ");
house.flat = integer("Количество квартир: ");
house.type = text("Тип здания: ");
system("cls");
return house;
}
void show_year(const vector<House>& box, const int year) {
for (const auto& house : box) if (house.is_year(year)) cout << house << '\n';
puts("");
}
void show_flat(const vector<House>& box, const int flat) {
for (const auto& house : box) if (house.is_flat(flat)) cout << house << '\n';
puts("");
}
void new_buildings(const vector<House>& box, const int year) {
for (const auto& house : box) if (year - house.year <= 1) cout << house << '\n';
puts("");
}
void show_sorted_types(const vector<House>& box) {
auto tmp = box;
sort(tmp.begin(), tmp.end());
for (const auto& house : tmp) cout << house << '\n';
puts("");
}
int main() {
system("chcp 1251 > nul");
auto n = integer("Количество домов в списке: ");
vector<House> box;
for (auto i = 0; i < n; ++i) box.emplace_back(create());
puts("\tНачните поиск! \n");
auto year = integer("По году ввода в эксплуатацию: ");
puts("");
show_year(box, year);
auto flat = integer("По количеству квартир: ");
puts("");
show_flat(box, flat);
puts("\n\tСписок новостроек: \n");
new_buildings(box, 2021);
puts("\tОтсортированный список: \n");
show_sorted_types(box);
system("pause > nul");
}
Куандык Санкибаев
огромное вам спасибо!
Похожие вопросы
- Как правильно запихнуть в поле структуры саму структуру? C++
- Функция заполняющая структуру, C++
- Сложности с массивами структур c++
- Структуры и массивы структур C++
- Нужна помощь по шаблонам на C++
- Программа на c++ не работает. Написать структуру и прочее. Подскажите, пожалуйста, что я делаю не так.
- [C++] Помогите написать задачу на структуры!
- C/C++ Как устроена память, выделенная для структуры с указателем *next?
- Как решить ошибку C2079 использует не имеющую определения структуру class C++
- Здравствуйте, структура и объединение в c++