Advertisement
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;
- const string items[10] = {
- "Создать список или добавить новый эл-т ",
- "Удаление всех элементов списка",
- "Просмотр списка",
- "Запись данных в файл",
- "Чтение из файла",
- "Изменить",
- "Поиск",
- "Сортировка по дате",
- "Старые книги",
- "Выход"};
- //-------------------------------------------
- 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 old_book(book beg);
- void sort_cost(book** beg);
- void sort_data(book* book);
- 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& active, const string items[], int num_el);
- int menu2();
- void SetColor(int text, int bg);
- //--------основная программа-----------------------------------
- int main()
- {
- ShowWindow(GetConsoleWindow(), SW_MAXIMIZE); // полноэкранный режим
- setlocale(LC_ALL, "Rus");
- system("color 8F");
- book* beg = NULL,
- * end = NULL, input;
- char filename[20];
- int Num, current = 1;
- string user_autor, new_user_autor;
- while (1) {
- switch (menu(current, items, 10))
- {
- 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_cost(&beg); break;
- case 9:
- if (!beg) {
- MessageBox(0, L"Список пуст", L"Уведомление", MB_ICONINFORMATION | MB_SETFOREGROUND);
- break;
- }
- old_book(*beg);
- break;
- case 10: 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 old_book(book beg)
- {
- book *temp = &beg;
- sort_data(&beg);
- system("cls");
- cout << "+———————————————————+————————————————————+——————————————————+————————————————+——————————————————+———————————————+" << endl;
- cout << "| Автор | Название | Издательство | Жанр | Дата поступления | Стоимость |" << endl;
- cout << "+———————————————————+————————————————————+——————————————————+————————————————+——————————————————+———————————————+" << endl;
- for (int i = 0; i < 5; i++) {
- print(*temp);
- temp = temp->next;
- }
- system("pause");
- return;
- cout << "+———————————————————+————————————————————+——————————————————+————————————————+——————————————————+———————————————+" << endl;
- cin.get();
- }
- //-----------------------------------------------------------------------------
- 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_data(book *beg)
- {
- book* temp_i = beg, * temp_j = beg;
- for (; temp_i; temp_i = temp_i->next)
- {
- for (temp_j = temp_i; temp_j; temp_j = temp_j->next)
- {
- if (temp_i->inf.g != temp_j->inf.g)
- {
- if (temp_i->inf.g > temp_j->inf.g)
- {
- swap(temp_i->inf, temp_j->inf);
- continue;
- }
- }
- else if (temp_i->inf.m != temp_j->inf.m)
- {
- if (temp_i->inf.m > temp_j->inf.m)
- {
- swap(temp_i->inf, temp_j->inf);
- continue;
- }
- }
- else if (temp_i->inf.d > temp_j->inf.d)
- {
- swap(temp_i->inf, temp_j->inf);
- continue;
- }
- }
- }
- cout << "Сортировка прошла успешно" << endl;
- system("pause");
- }
- //----------------------------------------
- void sort_cost(book * *beg) {
- book* temp_i = *beg,
- * temp_j = *beg;
- for (; temp_i; temp_i = temp_i->next) {
- for (temp_j = temp_i; temp_j; temp_j = temp_j->next) {
- if (temp_i->inf.cost > temp_j->inf.cost) {
- swap(temp_i->inf, temp_j->inf);
- }
- }
- }
- cout << "Сортировка прошла успешно" << endl;
- system("pause");
- }
- // ==========ШАБЛОН ПЕЧАТИ МЕНЮ==========
- void print_menu(int sym, const string items[], const int N_ITEMS) {
- for (int i = 1; i <= N_ITEMS; i++) {
- SetColor(15, 8);
- if (i == sym) {
- SetColor(15, 5);
- }
- cout << items[i - 1] << endl;
- SetColor(15, 8);
- }
- }
- // ==========МЕНЮ==========
- int menu(int& active, const string items[], int num_el) {
- wint_t buf;
- do {
- system("cls");
- print_menu(active, items, num_el);
- buf = _getwch();
- switch (buf) {
- case up: // клавиша вверх
- if (active > 1) active--;
- break;
- case down: // клавиша вниз
- if (active < num_el) active++;
- break;
- case enter: // клавиша enter
- return active;
- case esc: // клавиша escape
- return -1;
- }
- } while (1);
- }
- // ==========УСТАНОВКА ЦВЕТА ТЕКСТА И ФОНА==========
- void SetColor(int text, int bg) {
- HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
- SetConsoleTextAttribute(hStdOut, (WORD)((bg << 4) | text));
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement