Phoenix_x

Untitled

Dec 20th, 2017
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 10.40 KB | None | 0 0
  1. /*
  2. Описание:
  3. Програма, която реализира малка информационна система за футболисти от отбори.
  4. Тя предоставя меню с възможност да се добавят играчи, да се търсят по футболен номер, извежда футболиста с най-много голове, също така дава възможност и да се извежда информация футболистите, които са на по-малко от 20 години.
  5. Информацията за всеки един футболист се записва във файл.
  6.  
  7. Декларирана е структура otbor с 3 елемента, както и вложената структура Football също с 3 елемента.
  8. За съхраняването и обработката на данните се използват статичен масив и двоичен файл.
  9. Декларирани и приложени са 8 потребителски дефинирани функции.
  10. Приложена е валидация при обмена на данни и обработките, както и цветови ефекти.
  11.  
  12. Диалогът с потребителя е реализиран на български език.
  13. */
  14.  
  15. #include <iostream>
  16. #include <clocale>
  17. #include <fstream> // хедърен файл за работа с файлове.
  18. #include <Windows.h>
  19.  
  20. using namespace std;
  21. const char Failche[20] = "Football.dat";
  22.  
  23. struct otbor //Вътрешна структура за данните на футболиста.
  24. {
  25.     char ime[30];  // за име.
  26.     char familiq[30]; //фамилия.
  27.     char dyrjava[20]; //Държава.
  28. };
  29.  
  30. struct  Football
  31. {
  32.     int vgolove; // вкарани голове.
  33.     int nomer; // номер.
  34.     int godini;
  35.     otbor football_otbor;
  36.  
  37. };
  38.  
  39. Football Input() //Функция за въвеждане данни на футболиста.
  40. {
  41.     Football a = { 0 }; //Занулена променлива за структуратаs.
  42.  
  43.     cout << "\nДанни за футболиста: ";
  44.     cout << "\nИме: ";
  45.     cin >> a.football_otbor.ime;
  46.     cout << "\nФамилия: ";
  47.     cin >> a.football_otbor.familiq;
  48.     cout << "\nДържава: ";
  49.     cin >> a.football_otbor.dyrjava;
  50.     cout << "\nНомер на футболиста: ";
  51.     cin >> a.nomer;
  52.     cout << "\nОтбелязани голове: ";
  53.     cin >> a.vgolove;
  54.     fflush(stdin);
  55.     return a;
  56. }
  57.  
  58.  
  59.  
  60. void writeFile(Football sust[], int br) // Ф-ция за записване на файл.
  61. {
  62.     fstream fp(Failche, ios::binary | ios::out);
  63.  
  64.     if (!fp.is_open())
  65.     {
  66.         cout << "\n Грешка при отварянето на файла!";
  67.     }
  68.  
  69.     for (int i = 0; i < br; i++)
  70.     {
  71.  
  72.         fp.write((char*)&sust[i], sizeof(sust[i]));
  73.  
  74.     }
  75.     fp.close();
  76. }
  77.  
  78. void readFile(Football sust[30], int *broiSust) //Ф-ция за прочитане на файл.
  79. {
  80.     fstream fp(Failche, ios::binary | ios::in);
  81.     Football temp[30] = { 0 };
  82.  
  83.     (*broiSust) = 0;
  84.     if (!fp.is_open())
  85.         cout << "\nГрешка при отварянето на файла!";
  86.  
  87.     fp.read((char*)&temp, sizeof(temp));
  88.     fp.close();
  89.  
  90.     for (int i = 0; i < 30; i++)
  91.     {
  92.         if (temp[i].godini > 16)
  93.         {
  94.             memcpy(&sust[i], &temp[i], sizeof(temp[i]));
  95.             (*broiSust)++;
  96.         }
  97.     }
  98. }
  99.  
  100. void Br_fubolisti(int *brSust) //Ф-ция за въвеждането на броя футболисти.
  101. {
  102.     Football sust[30] = { 0 };
  103.  
  104.     do
  105.     {
  106.         cout << "\nБрой футболисти: ";
  107.         cin >> *brSust;
  108.     } while (*brSust < 1 || *brSust >30);
  109.  
  110.     for (int i = 0; i < *brSust; i++)
  111.         sust[i] = Input(); //запаметяване на броя футболисти.
  112.     writeFile(sust, *brSust); //записването им на файла.
  113. }
  114.  
  115. void output(Football *p)//pointer към структурата която се въвежда.
  116. {
  117.     cout << "\n\n Номер:" << p->nomer << endl << "Вкарани голове:" << p->vgolove << endl << "\nДанни за футболистите\n" << "Име:" << p->football_otbor.ime << endl << "Фамилия: " << p->football_otbor.familiq;
  118.     cout << endl << "Държава: " << p->football_otbor.dyrjava << endl;
  119. }
  120.  
  121. void turseneNomer() // Ф-ция за търцене на футболист по зададен от потребителя номер.
  122. {
  123.     Football tmp[30] = { 0 };
  124.     int brSust = 0, snomer = 0, br = 0;
  125.     char opit;
  126.     readFile(tmp, &brSust);
  127.  
  128.     do {
  129.         br = 0;
  130.         opit = 'y';
  131.         cout << "\nВъведи състезателен номер: ";
  132.         cin >> snomer;
  133.  
  134.         for (int i = 0; i < brSust; i++)
  135.         {
  136.             if (tmp[i].nomer == snomer)
  137.             {
  138.                 cout << "Вкарани голове: " << tmp[i].vgolove << endl;
  139.                 cout << "Години: " << tmp[i].godini << endl;
  140.                 cout << "Номер: " << tmp[i].nomer << endl;
  141.                 cout << "Отбор: " << tmp[i].football_otbor.ime << endl;
  142.             }
  143.         }
  144.         if (br == 0)
  145.         {
  146.             cout << "\nНяма съвпадения";
  147.         }
  148.         else
  149.         {
  150.             cout << "\nПовторно търсене? (y/n)";
  151.             cin >> opit;
  152.         }
  153.     } while (opit == 'y');
  154. }
  155.  
  156. void futbolistiOtEdinOtbpr()
  157. {
  158.     Football tmp[30] = { 0 };
  159.     int brSust = 0, snomer = 0, br = 0;
  160.     char opit;
  161.     readFile(tmp, &brSust);
  162.  
  163.     char otbor[30];
  164.     cout << "Въведете отбор: " << endl;
  165.     cin >> otbor;
  166.  
  167.     for (int i = 0; i < brSust; i++)
  168.     {
  169.         if (tmp[i].football_otbor.ime == otbor)
  170.         {
  171.             cout << "Вкарани голове: " << tmp[i].vgolove << endl;
  172.             cout << "Години: " << tmp[i].godini << endl;
  173.             cout << "Номер: " << tmp[i].nomer << endl;
  174.             cout << "Отбор: " << tmp[i].football_otbor.ime << endl;
  175.         }
  176.     }
  177. }
  178.  
  179. int main()
  180. {
  181.  
  182.     system("chcp 1251"); // за кирилица.
  183.     system("cls");
  184.     setlocale(LC_ALL, "bg");
  185.     SetConsoleTitle(TEXT("Програма, която реализира малка информационна система за футболисти от отбори."));
  186.     system("Title Програма, която реализира малка информационна система за футболисти от отбори.");  // Текст в заглавната лента
  187.     system("color 0e"); // Задаване на цвят на фона и на текста.
  188.  
  189.                         // Описателен начален текст за програмата.
  190.     char text[] = {
  191.         "\n\t\t\t                        -------------FOOTBALL---------    "
  192.         "\n\t\t\t               Програма за картотекиране на футболисти с функции "
  193.         "\n\t\t\t за създаване на файл с данни за футболисти, участници в световно първенство.  "
  194.         "\n\t\t\t        Тя предоставя извеждане на текущото съдържание на масива на екрана. "
  195.         "\n\t\t\t   Извеждане на справки за: всички футболисти по зададен от клавиатурата състезателен номер;   "
  196.         "\n\t\t\t               футболистите от зададен отбор(със запитване за продължение)  "
  197.         "\n\t\t\t           Информацията за всеки един футболист се записва "
  198.         "\n\t\t\t                         "
  199.         "\n\t\t\t        Диалога с потребителя е реализиран на български език.  "
  200.     };
  201.  
  202.     for (int c = 0; c < strlen(text); c++)   // Цикъл за анимация на текста.
  203.     {
  204.         cout << text[c];
  205.         Sleep(50);                     // Закъснение - 50 милисекунди.
  206.     }
  207.     Sleep(3000);                      // Закъснение - 3 секунди.
  208.     system("cls");
  209.  
  210.     setlocale(LC_ALL, ""); //Кирилизация на програмата.
  211.     int izbor, brSust, spravChoice;
  212.     struct Football Futbolisti[30]; // презаписан масив.
  213.                                     // Главно меню.
  214.     do
  215.     {
  216.         cout << "****************** МЕНЮ **********************\n"; // Извеждане информация на екрана
  217.         cout << "  1.Въвеждане на данни за футболисти          \n"; // Извеждане информация на екрана
  218.         cout << "  2.Презаписване на данните от файла в масив    \n"; // Извеждане информация на екрана
  219.         cout << "  3.Извеждане на справки с данните\n";               // Извеждане информация на екрана
  220.         cout << "  4.Изход\n";
  221.         do
  222.         {
  223.             cout << "Въведете желаната опция: ";
  224.             cin >> izbor;
  225.  
  226.         } while (izbor < 1 || izbor >4);
  227.         system("cls");          // Изчистване на екрана след избор от менюто.
  228.  
  229.         switch (izbor)
  230.         {
  231.  
  232.         case 1: //Извиква ф-ята Масив(въвеждане и проверка за вярност).
  233.             Br_fubolisti(&brSust);
  234.             cout << endl;
  235.             break;
  236.  
  237.         case 2: //Извиква ф-ята за Презаписване.
  238.             readFile(Futbolisti, &brSust);
  239.             cout << "Масивът е  презаписан\n\n";
  240.             cout << endl;
  241.             break;
  242.         case 3:     //Извиква ф-ята за Справки.
  243.             do
  244.             {
  245.                 cout << "                  СПРАВКИ                     \n"; // Извеждане информация на екрана
  246.                 cout << "1. Номер на футболиста\n";
  247.                 cout << "2. Футболисти от зададен отбор\n";                  // Извеждане информация на екрана
  248.                 cout << "3. Връщане към предишното меню\n";                                      // Извеждане информация на екрана
  249.                 do
  250.                 {
  251.                     cout << "Избери справка:";
  252.                     cin >> spravChoice;
  253.                 } while (spravChoice < 0 || spravChoice > 3);
  254.  
  255.                 switch (spravChoice)
  256.                 {
  257.                 case 1: system("cls");
  258.                     turseneNomer();
  259.                     cout << "\n\n\n\n";
  260.                     break;
  261.                 case 2: system("cls");
  262.                     futbolistiOtEdinOtbpr();
  263.                     cout << "\n\n\n\n";
  264.                     break;
  265.                 case 3: system("cls");
  266.                     break;
  267.  
  268.                 default: cout << "\nГрешен избор";
  269.                     break;
  270.                 }
  271.             } while (spravChoice != 3);
  272.             cout << endl;
  273.             break;
  274.         case 4: exit(1);
  275.             break;
  276.  
  277.         default:
  278.             cout << "Грешен избор\n";
  279.             break;
  280.         }
  281.     } while (izbor != 3);
  282.     system("pause");
  283. }
Advertisement
Add Comment
Please, Sign In to add comment