Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Описание:
- Програма, която реализира малка информационна система за футболисти от отбори.
- Тя предоставя меню с възможност да се добавят играчи, да се търсят по футболен номер, извежда футболиста с най-много голове, също така дава възможност и да се извежда информация футболистите, които са на по-малко от 20 години.
- Информацията за всеки един футболист се записва във файл.
- Декларирана е структура otbor с 3 елемента, както и вложената структура Football също с 3 елемента.
- За съхраняването и обработката на данните се използват статичен масив и двоичен файл.
- Декларирани и приложени са 8 потребителски дефинирани функции.
- Приложена е валидация при обмена на данни и обработките, както и цветови ефекти.
- Диалогът с потребителя е реализиран на български език.
- */
- #include "stdafx.h"
- #include <iostream>
- #include <clocale>
- #include <fstream> // хедърен файл за работа с файлове.
- #include <Windows.h>
- using namespace std;
- const char Failche[20] = "Football.dat";
- struct otbor //Вътрешна структура за данните на футболиста.
- {
- char ime[30]; // за име.
- char familiq[30]; //фамилия.
- char dyrjava[20]; //Държава.
- };
- struct Football
- {
- int vgolove; // вкарани голове.
- int nomer; // номер.
- int godini;
- otbor football_otbor;
- };
- Football Input() //Функция за въвеждане данни на футболиста.
- {
- Football a = { 0 }; //Занулена променлива за структуратаs.
- cout << "\nДанни за футболиста: ";
- cout << "\nИме: ";
- cin >> a.football_otbor.ime;
- cout << "\nФамилия: ";
- cin >> a.football_otbor.familiq;
- cout << "\nДържава: ";
- cin >> a.football_otbor.dyrjava;
- cout << "\nНомер на футболиста: ";
- cin >> a.nomer;
- cout << "\nОтбелязани голове: ";
- cin >> a.vgolove;
- fflush(stdin);
- return a;
- }
- void writeFile(Football sust[], int br) // Ф-ция за записване на файл.
- {
- fstream fp(Failche, ios::binary | ios::out);
- if (!fp.is_open())
- {
- cout << "\n Грешка при отварянето на файла!";
- }
- for (int i = 0; i < br; i++)
- {
- fp.write((char*)&sust[i], sizeof(sust[i]));
- }
- fp.close();
- }
- void readFile(Football sust[30], int *broiSust) //Ф-ция за прочитане на файл.
- {
- fstream fp(Failche, ios::binary | ios::in);
- Football temp[30] = { 0 };
- (*broiSust) = 0;
- if (!fp.is_open())
- cout << "\nГрешка при отварянето на файла!";
- fp.read((char*)&temp, sizeof(temp));
- fp.close();
- for (int i = 0; i < 30; i++)
- {
- if (temp[i].godini > 16)
- {
- memcpy(&sust[i], &temp[i], sizeof(temp[i]));
- (*broiSust)++;
- }
- }
- }
- void Br_fubolisti(int *brSust) //Ф-ция за въвеждането на броя футболисти.
- {
- Football sust[30] = { 0 };
- do
- {
- cout << "\nБрой футболисти: ";
- cin >> *brSust;
- } while (*brSust < 1 || *brSust >30);
- for (int i = 0; i < *brSust; i++)
- sust[i] = Input(); //запаметяване на броя футболисти.
- writeFile(sust, *brSust); //записването им на файла.
- }
- void output(Football *p)//pointer към структурата която се въвежда.
- {
- cout << "\n\n Номер:" << p->nomer << endl << "Вкарани голове:" << p->vgolove << endl << "\nДанни за футболистите\n" << "Име:" << p->football_otbor.ime << endl << "Фамилия: " << p->football_otbor.familiq;
- cout << endl << "Държава: " << p->football_otbor.dyrjava << endl;
- }
- void turseneNomer() // Ф-ция за търцене на футболист по зададен от потребителя номер.
- {
- Football tmp[30] = { 0 };
- int brSust = 0, snomer = 0, br = 0;
- char opit;
- readFile(tmp, &brSust);
- do {
- br = 0;
- opit = 'y';
- cout << "\nВъведи състезателен номер: ";
- cin >> snomer;
- for (int i = 0; i < brSust; i++)
- {
- if (tmp[i].nomer == snomer)
- {
- cout << "Вкарани голове: " << tmp[i].vgolove << endl;
- cout << "Години: " << tmp[i].godini << endl;
- cout << "Номер: " << tmp[i].nomer << endl;
- cout << "Отбор: " << tmp[i].football_otbor.ime << endl;
- }
- }
- if (br == 0)
- {
- cout << "\nНяма съвпадения";
- }
- else
- {
- cout << "\nПовторно търсене? (y/n)";
- cin >> opit;
- }
- } while (opit == 'y');
- }
- void futbolistiOtEdinOtbpr()
- {
- Football tmp[30] = { 0 };
- int brSust = 0, snomer = 0, br = 0;
- char opit;
- readFile(tmp, &brSust);
- char otbor[30];
- cout << "Въведете отбор: " << endl;
- cin >> otbor;
- for (int i = 0; i < brSust; i++)
- {
- if (tmp[i].football_otbor.ime == otbor)
- {
- cout << "Вкарани голове: " << tmp[i].vgolove << endl;
- cout << "Години: " << tmp[i].godini << endl;
- cout << "Номер: " << tmp[i].nomer << endl;
- cout << "Отбор: " << tmp[i].football_otbor.ime << endl;
- }
- }
- }
- int main()
- {
- system("chcp 1251"); // за кирилица.
- system("cls");
- setlocale(LC_ALL, "bg");
- SetConsoleTitle(TEXT("Програма, която реализира малка информационна система за футболисти от отбори."));
- system("Title Програма, която реализира малка информационна система за футболисти от отбори."); // Текст в заглавната лента
- system("color 0e"); // Задаване на цвят на фона и на текста.
- // Описателен начален текст за програмата.
- char text[] = {
- "\n\t\t\t -------------FOOTBALL--------- "
- "\n\t\t\t Програма за картотекиране на футболисти с функции "
- "\n\t\t\t за създаване на файл с данни за футболисти, участници в световно първенство. "
- "\n\t\t\t Тя предоставя извеждане на текущото съдържание на масива на екрана. "
- "\n\t\t\t Извеждане на справки за: всички футболисти по зададен от клавиатурата състезателен номер; "
- "\n\t\t\t футболистите от зададен отбор(със запитване за продължение) "
- "\n\t\t\t Информацията за всеки един футболист се записва "
- "\n\t\t\t "
- "\n\t\t\t Диалога с потребителя е реализиран на български език. "
- };
- for (int c = 0; c < strlen(text); c++) // Цикъл за анимация на текста.
- {
- cout << text[c];
- Sleep(50); // Закъснение - 50 милисекунди.
- }
- Sleep(3000); // Закъснение - 3 секунди.
- system("cls");
- setlocale(LC_ALL, ""); //Кирилизация на програмата.
- int izbor, brSust, spravChoice;
- struct Football Futbolisti[30]; // презаписан масив.
- // Главно меню.
- do
- {
- cout << "****************** МЕНЮ **********************\n"; // Извеждане информация на екрана
- cout << " 1.Въвеждане на данни за футболисти \n"; // Извеждане информация на екрана
- cout << " 2.Презаписване на данните от файла в масив \n"; // Извеждане информация на екрана
- cout << " 3.Извеждане на справки с данните\n"; // Извеждане информация на екрана
- cout << " 4.Изход\n";
- do
- {
- cout << "Въведете желаната опция: ";
- cin >> izbor;
- } while (izbor < 1 || izbor >4);
- system("cls"); // Изчистване на екрана след избор от менюто.
- switch (izbor)
- {
- case 1: //Извиква ф-ята Масив(въвеждане и проверка за вярност).
- Br_fubolisti(&brSust);
- cout << endl;
- break;
- case 2: //Извиква ф-ята за Презаписване.
- readFile(Futbolisti, &brSust);
- cout << "Масивът е презаписан\n\n";
- cout << endl;
- break;
- case 3: //Извиква ф-ята за Справки.
- do
- {
- cout << " СПРАВКИ \n"; // Извеждане информация на екрана
- cout << "1. Номер на футболиста\n";
- cout << "2. Футболисти от зададен отбор\n"; // Извеждане информация на екрана
- cout << "3. Връщане към предишното меню\n"; // Извеждане информация на екрана
- do
- {
- cout << "Избери справка:";
- cin >> spravChoice;
- } while (spravChoice < 0 || spravChoice > 3);
- switch (spravChoice)
- {
- case 1: system("cls");
- turseneNomer();
- cout << "\n\n\n\n";
- break;
- case 2: system("cls");
- futbolistiOtEdinOtbpr();
- cout << "\n\n\n\n";
- break;
- case 3: system("cls");
- break;
- default: cout << "\nГрешен избор";
- break;
- }
- } while (spravChoice != 3);
- cout << endl;
- break;
- case 4: exit(1);
- break;
- default:
- cout << "Грешен избор\n";
- break;
- }
- } while (izbor != 3);
- system("pause");
- }
Advertisement
Add Comment
Please, Sign In to add comment