Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <stdlib.h>
- #include <string>
- #include <iomanip>
- #include <conio.h>
- #include <fstream>
- #include <locale.h>
- #include <windows.h>
- using namespace std;
- //----КОНСТАНТЫ----------
- const int up = 72,
- down = 80,
- right_btn = 77,
- left_btn = 75,
- enter = 13,
- esc = 27,
- del = 83,
- d_n = 20;
- //-------------------------------------------
- struct info {
- string autor;
- string name;
- string izdatelstvo;
- string janr;
- int d = 0, m = 0, g = 0, cost = 0;
- };
- struct book {
- info inf;
- book* next;
- book* pred;
- };
- //-------------------------------------------
- book vvod_book();
- book* dob(book* end, const book& s);
- book* dob_first(const book& s);
- book* udal(book* beg);
- void print(const book& s);
- void prosmotr(book* beg);
- void sort(book **beg);
- void searchname(book* beg);
- void searchautor(book* beg);
- int change(book* beg, string& user_autor, string& new_user_autor);
- int read_file(char* filename, book** beg, book** end);
- int write_file(char* filename, book* temp);
- int menu();
- int menu2();
- //--------основная программа-----------------------------------
- int main()
- {
- ShowWindow(GetConsoleWindow(), SW_MAXIMIZE); // полноэкранный режим
- setlocale(LC_ALL, "Rus");
- system( "color 8F" );
- book* beg = NULL,
- * end = NULL, input;
- char filename[20];
- int Num;
- string user_autor, new_user_autor;
- while (1) {
- switch (menu())
- {
- case 1://создание списка или добовление нового эл-та в список
- if (beg)
- end = dob(end, vvod_book());
- else
- {
- beg = dob_first(vvod_book());
- end = beg;
- }
- break;
- case 2://удаление всех элементов в списке
- beg = udal(beg);
- cout << "Нажмите любую клавишу" << endl;
- cin.get();
- break;
- case 3://просмотр
- prosmotr(beg);
- cin.get();
- break;
- case 4://запись в файл
- write_file(filename, beg);
- break;
- case 5://чтение из файла
- read_file(filename, &beg, &end);
- break;
- case 6://редактирование списка
- cout << "Введите автора, которого вы хотите изменить: " << endl;
- cin >> user_autor;
- cout << "Введите нового атвора: " << endl;
- cin >> new_user_autor;
- Num = change(beg, user_autor, new_user_autor);
- if (Num == 1) cout << "Автор успешно перезаписан." << endl;
- else cout << "Автор не найден!" << endl;
- system("pause");
- change(beg, user_autor, new_user_autor);
- cin.get();
- break;
- case 7://поиск
- {
- switch (menu2()) {
- case 1://поск по автору
- searchautor(beg);
- cin.get();
- break;
- case 2:
- searchname(beg);//поиск по названию книги
- cin.get();
- break;
- case 3:
- case 9:break;
- }
- break;
- }
- case 8: sort(&beg); break;
- case 9: return 0;
- }
- }
- return 0;
- }
- //-----------------------------------------------------------------------------
- int menu()
- {
- char buf[7];
- int k;
- do
- {
- system("CLS");
- cout << "============================" << endl;
- cout << " МЕНЮ " << endl;
- cout << "============================" << endl;
- cout << "Введите номер пункта меню" << endl;
- cout << "1 - Создать список или добавить новый эл-т" << endl;
- cout << "2 - Удаление всех элементов списка" << endl;
- cout << "3 - Просмотр списка" << endl;
- cout << "4 - Запись данных в файл" << endl;
- cout << "5 - Чтение из файла" << endl;
- cout << "6 - Изменить" << endl;
- cout << "7 - Поиск" << endl;
- cout << "8 - Сортировка по дате" << endl;
- cout << "9 - Выход" << endl;
- cout << "============================" << endl;
- cin >> buf;
- cin.get();
- k = atoi(buf);
- if (!k)
- {
- cout << "Вам следует вводить число от 1 до 7" << endl;
- cin.get();
- }
- } while (!k);
- return k;
- }
- //-----------------------------------------------------------------------------
- int menu2()
- {
- char buf[7];
- int m;
- do
- {
- system("CLS");
- cout << "============================" << endl;
- cout << "Выберите поле по которому хотите осуществить поиск" << endl;
- cout << "1 - Автор книги" << endl;
- cout << "2 - Название книги" << endl;
- cout << "9 - Выход в главное меню" << endl;
- cout << "============================" << endl;
- cin >> buf;
- cin.get();
- m = atoi(buf);
- if (!m)
- {
- cout << "Вам следует вводить число от 1 до 7" << endl;
- cin.get();
- }
- } while (!m);
- return m;
- }
- //-----------------------------------------------------------------------------
- int change(book* beg, string& user_autor, string& new_user_autor)
- {
- book* temp = beg;
- while (temp != NULL)
- {
- if (temp->inf.autor == user_autor)
- {
- temp->inf.autor = new_user_autor;
- return 1;
- }
- else
- {
- temp = temp->next;
- }
- }
- return 0;
- }
- //------------------------------------------------------------------------------
- void searchname(book* beg)
- {
- book* temp = beg;
- char fname[d_n];
- system("cls");
- if (!beg)
- {
- MessageBox(0, L"Список пуст", L"Уведомление", MB_ICONINFORMATION | MB_SETFOREGROUND);
- return;
- }
- cout << "Введите название книги для поиска" << endl;
- cin >> fname;
- while (temp)
- {
- if (fname == temp->inf.name)
- {
- cout << "+———————————————————+————————————————————+——————————————————+————————————————+——————————————————+———————————————+" << endl;
- cout << "| Автор | Название | Издательство | Жанр | Дата поступления | Стоимость |" << endl;
- cout << "+———————————————————+————————————————————+——————————————————+————————————————+——————————————————+———————————————+" << endl;
- print(*temp);
- system("pause");
- return;
- }
- temp = temp->next;
- }
- cout << "Книги с таким названием не найдено" << endl;
- system("pause");
- }
- //-----------------------------------------------------------------------------
- void searchautor(book* beg)
- {
- book* temp = beg;
- char fa[d_n];
- system("cls");
- if (!beg)
- {
- MessageBox(0, L"Список пуст", L"Уведомление", MB_ICONINFORMATION | MB_SETFOREGROUND);
- return;
- }
- cout << "Введите автора для поиска" << endl;
- cin >> fa;
- while (temp)
- {
- if (fa == temp->inf.autor)
- {
- cout << "+———————————————————+————————————————————+——————————————————+————————————————+——————————————————+———————————————+" << endl;
- cout << "| Автор | Название | Издательство | Жанр | Дата поступления | Стоимость |" << endl;
- cout << "+———————————————————+————————————————————+——————————————————+————————————————+——————————————————+———————————————+" << endl;
- print(*temp);
- system("pause");
- return;
- }
- temp = temp->next;
- }
- cout << "Книги с таким автором не найдено" << endl;
- system("pause");
- }
- //-----------------------------------------------------------------------------
- void prosmotr(book* beg)
- {
- if (!beg)
- {
- cout << "список пустой" << endl;
- cin.get();
- return;
- }
- book* temp = beg;
- cout << "+———————————————————+————————————————————+——————————————————+————————————————+——————————————————+———————————————+" << endl;
- cout << "| Автор | Название | Издательство | Жанр | Дата поступления | Стоимость |" << endl;
- cout << "+———————————————————+————————————————————+——————————————————+————————————————+——————————————————+———————————————+" << endl;
- while (temp)
- {
- print(*temp);
- temp = temp->next;
- }
- cout << "+———————————————————+————————————————————+——————————————————+————————————————+——————————————————+———————————————+" << endl;
- cin.get();
- }
- //-----------------------------------------------------------------------------
- book vvod_book()
- {
- book s;
- cout << "Введите автора:" << endl;
- while (1)
- {
- cin >> s.inf.autor;
- //if (atoi(s.autor)==0)
- // if((s.autor[0] <= '0') && (s.autor[0] >= '9' ) )
- break;
- cout << "Ошибка ввода!" << endl;
- }
- cout << "Введите название книги:" << endl;
- while (1)
- {
- cin >> s.inf.name;
- //if (atoi(s.name)==0)
- break;
- cout << "Ошибка ввода!" << endl;
- }
- cout << "Введите издательство:" << endl;
- while (1)
- {
- cin >> s.inf.izdatelstvo;
- //if (atoi(s.izdatelstvo) == 0)
- break;
- cout << "Ошибка ввода!" << endl;
- }
- cout << "Введите жанр:" << endl;
- while (1)
- {
- cin >> s.inf.janr;
- //if (atoi(s.janr) == 0)
- break;
- cout << "Ошибка ввода!" << endl;
- }
- cout << "Введите дату поступления:" << endl;
- cout << "Введите день:";
- while (1)
- {
- cin >> s.inf.d;
- if ((s.inf.d >= 1) && (s.inf.d <= 31))
- break;
- cout << "Ошибка ввода!Ведите правильную дату!" << endl;
- }
- cout << "Введите месяц:";
- while (1)
- {
- cin >> s.inf.m;
- if ((s.inf.m >= 1) && (s.inf.m <= 12))
- break;
- cout << "Ошибка ввода!Ведите правильную дату!" << endl;
- }
- cout << "Введите год:";
- while (1)
- {
- cin >> s.inf.g;
- if ((s.inf.g >= 1900) && (s.inf.g <= 2050))
- break;
- cout << "Ошибка ввода!Ведите правильную дату!" << endl;
- }
- cout << "Введите стоимость книги:" << endl;
- cin >> s.inf.cost;
- return s;
- }
- //-----------------------------------------------------------------------------
- void print(const book& s)
- {
- cout << "|" << s.inf.autor << setw(20 - (s.inf.autor).length()) << "|";
- cout << s.inf.name << setw(21 - (s.inf.name).length()) << "|";
- cout << s.inf.izdatelstvo << setw(19 - (s.inf.izdatelstvo).length()) << "|";
- cout << s.inf.janr << setw(17 - (s.inf.janr).length()) << "|";
- if (s.inf.d < 10) cout << 0 << s.inf.d << ".";
- if (s.inf.m < 10) cout << 0 << s.inf.m << "." << s.inf.g << setw(19) << "|";
- cout << s.inf.cost << setw(16) << "|" << endl;
- }
- //--------------ф-я добавления или создания эл-та-------------------------------
- book* dob(book* end, const book& s)
- {
- book* newE = new book;
- *newE = s;
- newE->next = 0;
- end->next = newE;
- end = newE;
- return end;
- }
- //--------------создание первого эл-та------------------------------
- book* dob_first(const book& s)
- {
- book* beg = new book;
- *beg = s;
- beg->next = 0;
- return beg;
- }
- //-----------------------------------------------------------------------------
- int read_file(char* filename, book** beg, book** end)
- {
- cout << "Введите название файла" << endl;
- cin >> filename;
- ifstream fin(filename, ios::in);
- if (!fin) {
- MessageBox(0, L"Невозможно открыть файл!", L"Ошибка", MB_ICONERROR | MB_SETFOREGROUND);
- return 0;
- }
- book s;
- *beg = 0;
- fin.seekg(0, ios::beg);
- while (fin >> s.inf.autor)
- {
- fin >> s.inf.name;
- fin >> s.inf.izdatelstvo;
- fin >> s.inf.janr;
- fin >> s.inf.d;
- fin >> s.inf.m;
- fin >> s.inf.g;
- fin >> s.inf.cost;
- if (*beg)
- *end = dob(*end, s);
- else
- {
- *beg = dob_first(s); *end = *beg;
- }
- }
- cout << "Считывание прошло успешно" << endl;
- cin.get();
- cin.get();
- return 0;
- }
- //-----------------------------------------------------------------------------
- int write_file(char* filename, book* temp)
- {
- cout << "Введите название файла" << endl;
- cin >> filename;
- ofstream fout(filename, ios_base::app); // открытие файла
- if (!fout)
- {
- cout << "Не могу открыть файл для записи" << endl;
- return 1;
- }
- while (temp)// пока temp!=0 выводим эл-ты в файл
- {
- fout << temp->inf.autor << endl;
- fout << temp->inf.name << endl;
- fout << temp->inf.izdatelstvo << endl;
- fout << temp->inf.janr << endl;
- fout << temp->inf.d << endl;
- fout << temp->inf.m << endl;
- fout << temp->inf.g << endl;
- fout << temp->inf.cost << endl;
- temp = temp->next;
- }
- cout << "Данные сохранены в файле: " << filename << endl;
- cout << "==============================" << endl;
- cout << "Нажмите любую клавишу" << endl;
- cin.get();
- return 0;
- }
- //-----------------------------------------------------------------------------
- book* udal(book* beg)
- {
- book* temp;
- if (!beg)
- {
- cout << "список пустой" << endl;
- cin.get();
- return 0;
- }
- while (beg)
- {
- temp = beg;
- beg = beg->next;
- delete temp;
- }
- cout << "==============================" << endl;
- cout << "====удаление прошло успешно===" << endl;
- cout << "==============================" << endl;
- return beg;
- }
- //----------------------------------------------------------------
- void sort( book** beg) {
- book *temp = *beg, *temp2;
- /*if (!temp)
- {
- MessageBox(0, L"Не хватает памяти!", L"Ошибка", MB_ICONERROR | MB_SETFOREGROUND);
- }
- *temp=*beg;
- book *T = new book;
- if (!T)
- {
- MessageBox(0, L"Не хватает памяти!", L"Ошибка", MB_ICONERROR | MB_SETFOREGROUND);
- }*/
- do {
- temp2 = temp->next;
- while (temp2 != NULL)
- {
- book* T = new book;
- if (temp->inf.g != temp->next->inf.g)
- {
- if (temp->inf.g > temp->next->inf.g)
- {
- T->inf = temp->inf;
- temp->inf = temp->next->inf;
- temp->next->inf = temp->inf;
- continue;
- }
- }
- else if (temp->inf.m != temp->next->inf.m)
- {
- if (temp->inf.m > temp->next->inf.m)
- {
- T->inf = temp->inf;
- temp->inf = temp->next->inf;
- temp->next->inf = T->inf;
- continue;
- }
- }
- else if (temp->inf.d > temp->next->inf.d)
- {
- T->inf = temp->inf;
- temp->inf = temp->next->inf;
- temp->next->inf = T->inf;
- }
- temp2 = temp2->next;
- }
- } while (temp!= NULL);
- cout << "Сортировка прошла успешно" << endl;
- //system("pause");
- }
Advertisement
Add Comment
Please, Sign In to add comment