/////////////////////////////////////////////////////////// // Проект Task4_2 /////////////////////////////////////////////////////////// // DBase.h class DBase { public: DBase(int); ~DBase(); void InitInput(); void Show(); void SearchPayNotLess(double); private: Man* pMan; int nRecords; }; /////////////////////////////////////////////////////////// // DBase.cpp #include "Man.h" #include "DBase.h" DBase::DBase(int nRec) : nRecords(nRec), pMan(new Man[nRec]) {} DBase::~DBase() { if (pMan) delete [] pMan; } void DBase::InitInput() { for (int i = 0; i < nRecords; i++) cin >> *(pMan + i); // 1 } void DBase::Show() { cout << "================================" << endl; cout << "Содержимое базы данных:" << endl; for (int i = 0; i < nRecords; i++) cout << *(pMan + i); // 2 } void DBase::SearchPayNotLess(double anyPay) { bool not_found = true; for (int i = 0; i < nRecords; i++) if ((pMan + i)->GetPay() >= anyPay) { cout << *(pMan + i); not_found = false; } if (not_found) cout << "Таких сотрудников нет." << endl; } /////////////////////////////////////////////////////////// // Man.h #include #include using namespace std; //#include "CyrIOS.h" // for Visual C++ 6.0 const int l_name = 30; class Man { public: Man(int lName = 30); ~Man(); double GetPay() const; // Операция извлечения (ввода) friend istream& operator >>(istream&, Man&); // Операция вставки (вывода) friend ostream& operator <<(ostream&, Man&); private: char* pName; int come_year; double pay; }; /////////////////////////////////////////////////////////// // Man.cpp #include "Man.h" #include "GetFunc.h" Man::Man(int lName) { pName = new char[lName + 1]; } Man::~Man() { if (pName) delete [] pName; } double Man::GetPay() const { return pay; } // Операция извлечения (ввода) istream& operator >> (istream& in, Man& ob) { cout << "\nВведите данные в формате" << endl; cout << "Фамилия И.О. Год поступления "; cout << " Оклад :" << endl; in.getline(ob.pName, l_name); ob.come_year = GetInt(in); // 3 ob.pay = GetDouble(in); // 4 return in; } // Операция вставки (вывода) ostream& operator << (ostream& out, Man& ob) { out << setw(30) << setiosflags(ios::left); out << ob.pName << " "; out << ob.come_year << " "; out << ob.pay << endl; return out; } /////////////////////////////////////////////////////////// // GetFunc.h int GetInt(istream&); // Ввод целого числа double GetDouble(istream&); // Ввод вещественного числа /////////////////////////////////////////////////////////// // GetFunc.cpp #include "Man.h" #include "GetFunc.h" // ---------------------------- ввод целого числа int GetInt(istream& in) { int value; while (true) { in >> value; // 5 if (in.peek() == '\n') { // 6 in.get(); // 7 break; } else { cout << "Повторите ввод (ожидается целое число):" << endl; // 8 in.clear(); // 9 while (in.get() != '\n') {}; // 10 } } return value; } // ---------------------------- ввод вещественного числа double GetDouble(istream& in) { double value; while (true) { in >> value; if (in.peek() == '\n') { in.get(); break; } else { cout << "Повторите ввод (ожидается вещественное число):" << endl; in.clear(); while (in.get() != '\n') {}; } } return value; } /////////////////////////////////////////////////////////// // Main.cpp #include "Man.h" #include "GetFunc.h" int main() { const int nRecord = 10; double any_pay; DBase dBase(nRecord); dBase.InitInput(); dBase.Show(); cout << "Ввод данных завершен." << endl; cout << "=================================================" << endl; cout << "Поиск сотрудников, чей оклад не меньше заданной величины." << endl; cout << "Поиск завершается при вводе -1." << endl; while (true) { cout << "\nВведите величину оклада или -1: "; any_pay = GetDouble(cin); if (any_pay == -1) break; dBase.SearchPayNotLess(any_pay); } return 0; } ///////////////////////////////////////////////////////////