Neveles

Untitled

Dec 1st, 2019
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.62 KB | None | 0 0
  1. #include "BookInTheLibrary.h"
  2. #include "Array.h"
  3. #include "io.h"
  4.  
  5. using namespace std;
  6.  
  7. const string INVALID_OPEN = "Unable to open the file!";
  8.  
  9. int main()
  10. {
  11.     setlocale(LC_ALL, "ru");
  12.  
  13.     ifstream in("Books.txt");
  14.     try
  15.     {
  16.         // проверка на открытие файла
  17.         if (!in)
  18.         {
  19.             throw INVALID_OPEN;
  20.         }
  21.  
  22.         // инициализация массива
  23.         unsigned int nBooksArray = 100;
  24.         BookInTheLibrary* booksArray = new BookInTheLibrary[nBooksArray];
  25.  
  26.         // цикл считывания строк из файла
  27.         unsigned int nOfStr = 0;
  28.         while (!in.eof())
  29.         {
  30.             try
  31.             {
  32.                 string book;
  33.                 ++nOfStr;
  34.                 in >> book;
  35.                 // проверка количества разделителей
  36.                 unsigned int nBars = 0;
  37.                 for (unsigned int i = 0; book[i] != '\0'; ++i)
  38.                 {
  39.                     if (book[i] == '|')
  40.                         ++nBars;
  41.                     if (nBars > 4)
  42.                         throw nOfStr;
  43.                 }
  44.  
  45.                 // проверка имени автора (Фамилия И.О.)
  46.                 string author;
  47.                 for (unsigned int i = 0; book[i] != '|'; ++i)
  48.                     author += book[i];
  49.  
  50.                 cout << endl << "АВТОР ---- " << author << endl;
  51.                 // проверка наличия одного(!) пробела
  52.                 unsigned int nSpaces = 0;
  53.                 for (unsigned int i = 0; book[i] != '|'; ++i)
  54.                 {
  55.                     if (book[i] == ' ')
  56.                         ++nSpaces;
  57.                     if (nSpaces > 1)
  58.                         throw nOfStr;
  59.                 }
  60.  
  61.                 // проверка, что первая буква - прописная
  62.                 unsigned int iLetter = 0;
  63.                 int firstCode = static_cast<int>(book[iLetter]);
  64.                 if (!((((firstCode >= -64) && (firstCode <= -33)) || firstCode == -88)))
  65.                     throw nOfStr;
  66.  
  67.                 // проверка "амилия"
  68.                 ++iLetter;
  69.                 for (; book[iLetter] != ' '; ++iLetter)
  70.                 {
  71.                     int codeOfNumber = static_cast<int>(book[iLetter]);
  72.                     if (!(((codeOfNumber >= -32) && (codeOfNumber <= -1)) || codeOfNumber == -72))
  73.                         throw nOfStr;
  74.                 }
  75.                 ++iLetter;
  76.                 if (book[iLetter + 4] != '|')
  77.                     throw nOfStr;
  78.  
  79.                 int nameInitial = static_cast<int>(book[iLetter]);
  80.                 int patronymicInitial = static_cast<int>(book[iLetter + 2]);
  81.                 if (!((((nameInitial >= -64) && (nameInitial <= -33)) || nameInitial == -88) &&
  82.                     (((patronymicInitial >= -64) && (patronymicInitial <= -33)) || patronymicInitial == -88) &&
  83.                     (book[iLetter + 1] == '.') && (book[iLetter + 3] == '.')))
  84.                     throw nOfStr;
  85.             }
  86.  
  87.             catch (const unsigned int& err)
  88.             {
  89.                 cerr << "There is an error in " << err << " string!" << endl;
  90.             }
  91.         }
  92.  
  93.         delete[] booksArray;
  94.     }
  95.  
  96.     catch (const string& error)
  97.     {
  98.         cerr << endl << error << endl;
  99.         return -1;
  100.     }
  101.  
  102.     return 0;
  103. }
Add Comment
Please, Sign In to add comment