Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- // Created by anna on 02.06.21.
- //
- #ifndef NOTEBOOK_DATE_H
- #define NOTEBOOK_DATE_H
- #include "iostream"
- #include "fstream"
- #include "iomanip"
- using namespace std;
- class Date //дата
- {
- private:
- int day, month, year;
- public:
- //конструкторы
- Date(int d, int m, int y);
- Date();
- Date(const Date& d);
- //получение значений полей
- const int& get_day() const { return day;}
- const int& get_month() const { return month;}
- const int& get_year() const { return year;}
- //установка значений полей
- void set_day(int);
- void set_month(int);
- void set_year(int);
- //вывод
- friend ostream&operator <<(ostream&out, const Date& d);
- friend ofstream&operator <<(ofstream&fout, const Date &d);
- //ввод
- friend istream&operator >> (istream&in, Date&d);
- friend ifstream&operator >> (ifstream&fin, Date&d);
- //сравнение
- friend bool operator <(const Date&a, const Date& b);
- //присваивание
- Date&operator = (const Date& d);
- //проверка правильности
- friend bool check_date(const Date&d);
- };
- #endif //NOTEBOOK_DATE_H
- /////////////////////////////////////////
- //
- // Created by anna on 02.06.21.
- //
- #include "Date.h"
- Date::Date(int d, int m, int y)
- {
- set_day(d);
- set_month(m);
- set_year(y);
- }
- Date::Date()
- {
- day = 1;
- month = 1;
- year = 1920;
- }
- void Date::set_day(int x)
- {
- day = x;
- }
- void Date::set_month(int x)
- {
- month= x;
- }
- void Date::set_year(int x)
- {
- year = x;
- }
- bool operator <(const Date&a, const Date& b) {
- if(a.year != b.year)
- return (a.year < b.year);
- else
- if (a.month != b.month)
- return a.month < b.month;
- else
- return a.day < b.day;
- }
- ostream &operator<<(ostream &out, const Date &d)
- {
- out <<setw(11) << d.day << "." << d.month << "." <<d.year;
- return out;
- }
- ofstream &operator<<(ofstream &fout, const Date &d) {
- fout << d.day << " " << d.month << " " <<d.year;
- return fout;
- }
- istream &operator>>(istream &in, Date &d)
- {
- int x;
- in >> x;
- d.set_day(x);
- in >> x;
- d.set_month(x);
- in >> x;
- d.set_year(x);
- return in;
- }
- ifstream &operator>>(ifstream &fin, Date &d)
- {
- int x;
- fin >> x;
- d.set_day(x);
- fin >> x;
- d.set_month(x);
- fin >> x;
- d.set_year(x);
- return fin;
- }
- Date::Date(const Date &d)
- {
- this->day = d.day;
- this->month = d.month;
- this->year = d.year;
- }
- Date &Date::operator=(const Date &d)
- {
- this->day = d.day;
- this->month = d.month;
- this->year = d.year;
- return *this;
- }
- bool check_date(const Date &d) {
- if((d.day>31)||(d.day <1))
- return false;
- if((d.month>12)||(d.month <1))
- return false;
- if((d.year < 1))
- return false;
- return true;
- }
- ////////////////////////////////////////////////
- //
- // Created by anna on 02.06.21.
- //
- #ifndef NOTEBOOK_NOTEBOOK_H
- #define NOTEBOOK_NOTEBOOK_H
- #include "iostream"
- #include "fstream"
- #include "string"
- //#include "Date.h"
- #include "iomanip"
- using namespace std;
- class Person
- {
- private:
- string name;
- string surname;
- string phone;
- public:
- //конструкторы
- Person();
- Person(string, string, string);
- Person(const Person& p);
- //получение значений полей
- const string &get_name() const { return name; }
- const string &get_surname() const { return surname; }
- const string &get_phone() const { return phone; }
- //установка значений полей
- void set_name(string x){name = x;}
- void set_surname(string x) {surname = x;}
- void set_phone(string x) {phone = x;};
- //вывод
- friend ostream&operator <<(ostream &out, Person&p);
- friend ofstream&operator <<(ofstream &fout, Person&p);
- //ввод
- // friend istream&operator >>(istream &in, Person&p);
- friend ifstream&operator >>(ifstream &fin, Person&p);
- //сравнение
- bool operator <(Person& p);
- //присваивание
- Person& operator =(const Person&p);
- };
- #endif //NOTEBOOK_NOTEBOOK_H
- ////////////////////////////////////////////////////////////////
- //
- // Created by anna on 02.06.21.
- //
- #include "Person.h"
- Person::Person()
- {
- name = "";
- surname = "";
- phone = "80000000000";
- }
- Person::Person(string n, string s, string p)
- {
- name = n;
- surname = s;
- phone = p;
- }
- ostream &operator << (ostream&out, Person& p)
- {
- out << left << setw(15) << p.name << setw(20) << left << p.surname << left << setw(20) << p.phone;
- return out;
- }
- ofstream &operator << (ofstream&fout, Person&p)
- {
- fout << p.name << " " << p.surname << " " << p.phone;
- return fout;
- }
- ifstream &operator >> (ifstream&fin, Person&p)
- {
- fin >> p.name >> p.surname >> p.phone;
- return fin;
- }
- bool Person::operator < (Person& p)
- {
- if(this->surname != p.surname)
- return this->surname < p.surname;
- else
- return this->name < p.name;
- }
- Person::Person(const Person &p)
- {
- this->name = p.name;
- this->surname = p.surname;
- this->phone = p.phone;
- }
- Person &Person::operator=(const Person &p) {
- this->name = p.name;
- this->surname = p.surname;
- this->phone = p.phone;
- return *this;
- }
- ////////////////////////////////////////////////////////////////////
- //
- // Created by anna on 03.06.21.
- //
- #ifndef NOTEBOOK_PROTOS_H
- #define NOTEBOOK_PROTOS_H
- #include "Person.h"
- #include "Date.h"
- #include "map"
- int menu();
- void load_from_file(map<Date, Person>&); //1 - выгрузка информации из файла
- void add_ps(map<Date, Person>&); //2 - добавление записи
- void delete_ps(map<Date, Person>&);//3 - удаление записи
- void print_ntb(map<Date, Person>&); //4 - вывод записной книжки на экран
- void load_to_file(map<Date, Person>&); //5 - загрузка данных в файл
- void find_ps(map<Date, Person>&); //6 - поиск записи
- #endif //NOTEBOOK_PROTOS_H
- /////////////////////////////////////////////////////////////////////
- //
- // Created by anna on 03.06.21.
- //
- //TODO!!! форматировать вывод (колонки и заголовки колонок)
- #include <vector>
- #include "protos.h"
- #include "fstream"
- int menu()
- {
- cout << "для выполнения действия введите соответствующую цифру:" << endl
- <<"1 - загрузить данные из файла" <<endl
- <<"2 - добавить новые записи" <<endl
- <<"3 - удалить записи" << endl
- <<"4 - просмотр записной книжки" << endl
- <<"5 - сохранить данные в файл" <<endl
- <<"6 - найти запись по дате рождения" << endl
- <<"7 - выход из программы" << endl;
- int i;
- cin >> i;
- return i;
- }
- void load_from_file(map<Date, Person>& nb) //1 - выгрузка информации из файла
- {
- nb.clear();//удаляем старые данные
- ifstream fin;
- fin.open("notebook", ios::in);
- if (!fin)
- {
- cout << "ошибка при открытии файла. возможно, он перемещён или удалён"<< endl;
- return;
- }
- Person p;
- Date d;
- while (!fin.eof())
- {
- fin >> p >> d;
- nb.insert({d, p});
- }
- fin.close();
- }
- void add_ps(map<Date, Person>& nb) //2 - добавление записи
- {
- char cont = '1';//индикатор продолжения ввода
- int is_ok;//индикатор правильности ввода
- string w; //строка для ввода имени и фамилии и номера
- int day, mnth, yr;//переменные для ввода даты
- Person p; //переменная для хранения введённого значения
- Date d; //переменная для хранения введённого ключа
- while(cont == '1') {
- is_ok = 0;
- //ввод имени
- while (is_ok == 0) {
- cout << "введите имя" << endl;
- cin >> w;
- cout << "вы ввели имя " << w << ". если это правильно, нажмите 1, если нет - 0 ";
- cin >> is_ok;
- }
- is_ok = 0;
- p.set_name(w);
- //ввод фамилии
- while (is_ok == 0) {
- cout << "введите фамилию" << endl;
- cin >> w;
- cout << "вы ввели фамилию " << w << ". если это правильно, нажмите 1, если нет - 0 ";
- cin >> is_ok;
- }
- p.set_surname(w);
- is_ok = 0;
- //ввод стоимости
- while (is_ok == 0) {
- cout << "введите номер телефона в формате 8хххххххххх" << endl;
- cin >> w;
- cout << "вы ввели номер " << w << ". если это правильно, нажмите 1, если нет - 0 ";
- cin >> is_ok;
- }
- p.set_phone(w);
- is_ok = 0;
- //ввод даты
- while (is_ok == 0) {
- cout << "введите дату рождения в формате дд мм гггг" << endl;
- cin >> d;
- if(check_date(d))
- {
- cout << "вы ввели дату " << d << ". если это правильно, нажмите 1, если нет - 0 ";
- cin >> is_ok;
- }
- else
- {
- cout << "вы ввели несуществующую дату! повторите попытку " << endl;
- is_ok == 0;
- }
- }
- nb.insert({d, p});
- cout << "запись добавлена. хотите добавить ещё запись? да - 1, нет - 0" << endl;
- cin >> cont;
- }
- }
- void delete_ps(map<Date, Person>& nb)//3 - удаление записи
- {
- char cont = '1';//индикатор продолжения действия
- vector<Date> dts;//вспомогательный массив для удобного выбора удаляемой записи
- int k;//счётчик для наглядного вывода
- int x;//номер удаляемой записи
- for (auto &i : nb)
- dts.push_back(i.first); //переписываем ключи во вспомогательный вектор
- while(cont == '1')
- {
- if (nb.empty()) {
- cout << "невозможно выполнить действие. записная книжка пуста" << endl;
- return;
- }
- k=1;
- for(auto &i : nb)
- {
- cout << k << ") " << i.second << " " << i.first << endl;
- k++;
- }
- cout << "введите номер записи, которую хотите удалить " <<endl;
- cin >> x;
- if((x<=0)||(x > nb.size()))
- cout << "ошибка! записи с таким номером не существует. ";
- else
- {
- nb.erase(dts[x - 1]); //удаляем нужную запись
- dts.erase(dts.begin() + (x - 1)); //удаляем соответствующий ключ из вспомогательного массива
- cout << "запись удалена. ";
- }
- cout << "хотите удалить ещё запись? да - 1, нет - 0" << endl;
- cin >> cont;
- }
- }
- void print_ntb(map<Date, Person>& nb) //4 - вывод записной книжки на экран
- {
- if(nb.empty())
- {
- cout << "записная книжка пуста" << endl;
- return;
- }
- int k=1;
- for (auto &i : nb) {
- cout << k<< ") " << i.second << " " << i.first << endl;
- k++;
- }
- }
- void load_to_file(map<Date, Person>& nb) //5 - загрузка данных в файл
- {
- ofstream fout;
- fout.open("notebook");
- if(!fout)
- {
- cout << "ошибка при открытии файла. возможно, он перемещён или удалён"<< endl;
- return;
- }
- int c = 1;//вспомогательный индекс для вывода
- int sz = nb.size();
- for(auto i = nb.begin(); i!=nb.end();i++, c++)
- {
- fout << i->second << " ";
- fout << i->first;
- if(c<sz)
- fout << endl;
- }
- fout.close();
- }
- void find_ps(map<Date, Person>& nb) //6 - поиск записи
- {
- if(nb.empty())
- {
- cout << "записная книжка пуста" << endl;
- return;
- }
- Date d;
- cout << "введите требуемую дату рождения в формате дд мм гггг" << endl;
- cin >> d;
- auto p = nb.find(d);
- if(p != nb.end())
- cout << "найдена запись: " << p->second << " " << p->first << endl;
- else cout << "такая запись не найдена" << endl;
- }
- ////////////////////////////////////////////////////////////////
- #include "protos.h"
- int main(){
- setlocale(LC_ALL, "");
- map <Date, Person> ntbook;
- map <Date, Person>&ntlink = ntbook;
- cout << "Записная книжка" << endl;
- while (true) {
- switch (menu()) {
- case 1:
- {
- cout << "вы выбрали считывание из файла" << endl;
- load_from_file(ntlink); break;
- }
- case 2:
- {
- cout << "вы выбрали добавление записи" << endl;
- add_ps(ntlink); break;
- }
- case 3:
- {
- cout << "вы выбрали удаление записи" << endl;
- delete_ps(ntlink); break;
- }
- case 4:
- {
- cout << "вы выбрали просмотр записной книжки" << endl;
- print_ntb(ntlink); break;
- }
- case 5:
- {
- cout << "вы выбрали запись данных в файл" << endl;
- load_to_file(ntlink);break;
- }
- case 6:
- {
- cout << "вы выбрали поиск записи" << endl;
- find_ps(ntlink);
- break;
- }
- case 7:
- {
- cout << "вы выбрали завершение работы" << endl;
- return 0;
- }
- default: cout<<" Надо вводить число от 1 до 7"<<endl; break;
- }
- }
- }
- /////////////////////////////////////////////
- /*
- Лев Барабанщиков 89035555555 13 11 2001
- Варвара Шемякина 89032222222 1 1 2003
- Матвей Макаров 89037777777 13 5 2003
- Дмитрий Верин 89038888888 16 5 2006
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement