Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <conio.h>
- #include <cstdlib>
- #include <fstream>
- #include <windows.h>
- #include <clocale>
- #include <iostream>
- #include <math.h>
- using namespace std;
- struct Book{
- char* Author;
- char* Name;
- int Pages;
- float Price;
- };
- int Write_int(){
- char str[10];
- int value;
- while(true){
- scanf("%s", str);
- value = (atoi(str))? atoi(str) : 0;
- if (value > 0)
- break;
- else
- printf("Введите значение n >0: ");
- }
- return value;
- }
- bool coincidence(int* temp, unsigned int Size, int index){
- for(int i = 0; i <Size; i++)
- if (temp[i] == index)
- return true;
- return false;
- }
- Book* Error_File(int &Size){
- Book* book;
- Size = 1;
- book = new Book[Size];
- book[0].Author = (char*)"Author";
- book[0].Name = (char*)"Name";
- book[0].Pages = 0;
- book[0].Price = 0;
- return book;
- }
- void Message(char* str){
- system("cls");
- printf("%s", str);
- _getch();
- }
- Book* Book_Add(Book* book, int &Size, char* Author, char* Name, int Page, int Price){
- Size++;
- Book* copyBook = new Book[Size];
- for (int i = 0; i < Size - 1; i++){
- copyBook[i] = book[i];
- }
- copyBook[Size - 1].Author = Author;
- copyBook[Size - 1].Name = Name;
- copyBook[Size - 1].Pages = Page;
- copyBook[Size - 1].Price = Price;
- return copyBook;
- }
- Book* Book_Remove(Book* book, int &Size, UINT Index){
- if (Index > Size) return book;
- Size--;
- Book* copyBook = new Book[Size];
- for (int i = 0; i < Index; ++i)
- copyBook[i] = book[i];
- for (int i = Index; i < Size; ++i)
- copyBook[i] = book[i + 1];
- return copyBook;
- }
- void Write_File(Book* book, int Size){
- if (Size != 0 || book != NULL){
- ofstream f;
- f.open("Books.txt", ios_base::trunc);
- if (f.is_open()){
- f << Size << "\n";
- for (int i = 0; i < Size; i++){
- f << book[i].Author << " ";
- f << book[i].Name << " ";
- f << book[i].Pages << " ";
- f << book[i].Price << "\n";
- }
- } else {
- f << "1\nAuthor Name Pages Price\n";
- }
- f.close();
- }
- }
- Book* Read_File(int &Size){
- Book* book;
- ifstream f;
- f.open("Books.txt");
- if (f.is_open()){
- char text[50];
- f >> text;
- Size = (atoi(text))? atoi(text) : 0;
- if (!Size == 0){
- book = new Book[Size];
- for (int i = 0; i < Size; i++){
- f >> text;
- book[i].Author = text;
- f >> text;
- book[i].Name = text;
- f >> text;
- book[i].Pages = atoi(text);
- f >> text;
- book[i].Price = atoi(text);
- }
- } else {
- Message("Файл поврежден.");
- book = Error_File(Size);
- }
- } else {
- Message("Не загрузить файл.");
- book = Error_File(Size);
- }
- f.close();
- return book;
- }
- bool Setup(){
- bool Files = true;
- int x, y;
- x = y = 0;
- while(true){
- system("cls");
- cout << "Вас приветствует программа настройки" << endl;
- cout << "Загрузиться из файла:" << endl;
- printf((Files)? "[Да] Нет\n" : " Да [Нет]\n");
- printf((y == 1)? "[Сохраниться]\n" : " Сохраниться\n");
- printf("%d, %d", x, y);
- switch(_getch()){
- case 'w':
- if (y > 0) y--;
- break;
- case 'a':
- if (x > 0) x--;
- break;
- case 'd':
- if (x < 1) x++;
- break;
- case 's':
- if (y < 1) y++;
- break;
- case 'f':
- if (y == 1) return Files;
- break;
- default:
- break;
- }
- if (x == 0 && y == 0) Files = true;
- if (x == 1 && y == 0) Files = false;
- }
- }
- void Draw(Book* book, int Size, int Type){
- system("cls");
- for (int i = 0; i < Size; ++i){
- printf("%s|", book[i].Author);
- printf("%s|", book[i].Name);
- printf("%s|", book[i].Pages);
- printf("%s|\n", book[i].Price);
- }
- }
- void Menu(Book* &book, int &Size){
- bool RUN = true;
- while(RUN){
- system("cls");
- cout << "[Меню]\n1.Вывод списка\n2.Редактирование списка\n3.Автор\n4.Выход\nВыбор: ";
- switch(Write_int()){
- case 1:
- {
- bool RUN1 = true;
- while(RUN1){
- system("cls");
- cout << "[Вывод списка]\n1.По индексу\n2.По Автору\n3.По Имени\n4.По Кол. стр.\n5.По Цене\n6.Назад\nВыбор: ";
- switch(Write_int()){
- case 1:
- system("cls");
- cout << "[Вывод списка/По индексу]\n";
- for (int i = 0; i < Size; i++){
- cout << i << ") ";
- cout << book[i].Author << " ";
- cout << book[i].Name << " ";
- cout << book[i].Pages << " ";
- cout << book[i].Price << endl;
- }
- cout << "\nНажмите любую клавишу для продолжения...\n";
- _getch();
- break;
- case 2:
- system("cls");
- cout << "[Вывод списка/По автору]\n";
- break;
- case 3:
- system("cls");
- cout << "[]\n";
- break;
- case 4:
- {
- system("cls");
- cout << "[Вывод списка/По Кол. стр.]\n";
- int* temp = new int[Size];
- //Заполение temp
- for (int i = 0; i < Size; i++){
- int thelongerelement = 0;
- int thelongindex = 0;
- //Поиск наибольшего числа с исключением уже найденых
- for(int j = 0; j < Size; j++){
- if (coincidence(temp, Size, j))
- continue;
- if (thelongerelement < book[j].Pages){
- thelongerelement = book[j].Pages;
- thelongindex = j;
- }
- }
- temp[i] = thelongindex;
- }
- for (int i = 0; i < Size; i++){
- cout << temp[i] << " ";
- cout << book[temp[i]].Author << " ";
- cout << book[temp[i]].Name << " ";
- cout << book[temp[i]].Pages << " ";
- cout << book[temp[i]].Price << "\n";
- }
- cout << "Для продолжения нажмите любую клавишу...\n";
- _getch();
- break;
- }
- case 5:
- {
- system("cls");
- cout << "[Вывод списка/По Цене]\n";
- int* temp = new int[Size];
- //Заполение temp
- for (int i = 0; i < Size; i++){
- int thelongerelement = 0;
- int thelongindex = 0;
- //Поиск наибольшего числа с исключением уже найденых
- for(int j = 0; j < Size; j++){
- if (coincidence(temp, Size, j))
- continue;
- if (thelongerelement < book[j].Price){
- thelongerelement = book[j].Price;
- thelongindex = j;
- }
- }
- temp[i] = thelongindex;
- }
- for (int i = 0; i < Size; i++){
- cout << temp[i] << " ";
- cout << book[temp[i]].Author << " ";
- cout << book[temp[i]].Name << " ";
- cout << book[temp[i]].Pages << " ";
- cout << book[temp[i]].Price << "\n";
- }
- cout << "Для продолжения нажмите любую клавишу...\n";
- _getch();
- break;
- }
- case 6:
- RUN1 = false;
- break;
- default:
- break;
- }
- }
- break;
- }
- case 2:
- {
- bool RUN2 = true;
- while(RUN2){
- system("cls");
- cout << "[Редактирование списка]\n1.Добавление в список\n2.Редактирование по индексу\n3.Удаление по индексу\n4.Назад\nВыбор: ";
- switch(Write_int()){
- case 1:
- {
- bool RUN21 = true;
- while(RUN21){
- system("cls");
- cout << "[Редактирование списка/Добавление в список]\n";
- break;
- //printf()
- }
- //Book_Add(book, Size, Author, Name, Pages, Price);
- break;
- }
- case 2:
- break;
- case 3:
- break;
- case 4:
- RUN2 = false;
- break;
- default:
- break;
- }
- }
- break;
- }
- case 3:
- system("cls");
- cout << "[Автор]\nИмя: Усов Максим Андреевич\nКонтакты:\nE-mail: usow.maxim2016@yandex.ru\nVK: vk.com/merykov\n";
- cout << "Для продолжения нажмите любую клавишу...\n";
- _getch();
- break;
- case 4:
- system("cls");
- cout << "[Выход]\n";
- RUN = false;
- break;
- default:
- break;
- }
- }
- }
- int main(){
- SetConsoleCP(65001);
- SetConsoleOutputCP(65001);
- Book* book;
- int Size;
- if(Setup())
- book = Read_File(Size);
- else
- book = Error_File(Size);
- Menu(book, Size);
- delete[] book;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement