а) Създаване на файл (чрез добавяне на определен брой записи и презаписване на данните от файла в масив) с данни за футболисти, участници в световно първенство, с полета: име, фамилия, отбор-държава, номер на футболиста, отбелязани голове. Вход от клавиатура, с проверка за коректност на данните по: номер, отбелязани голове. Извеждане текущото съдържание на масива (файла) на екран.
б) Извеждане на справки за:
- всички футболисти по зададен от клавиатурата състезателен номер;
- футболистите от зададен отбор (със запитване за продължение);
в) Актуализация на данните във файла чрез промяна на полето - отбелязани голове за футболист по зададени отбор и фамилия.
Главна функция main() - с меню за избор на функции и проверка за състоянието на данните. Използване на глобални променливи или функции с предаване на параметри - по избор.
- Код: Избери целия код
#include <iostream>
#include <iomanip>
#include <string>
#include <fstream>
#include <limits>
using namespace std;
const int N = 5;
struct player
{
string ime;
string familia;
string otbor;
int nomer;
int vk_golove;
} igrachi[N], podredba;
// Prototypes.
int add_player(player a[]);
void search_by_number(player a[], int &nomer_na_igracha);
void search_by_team(player a[], string & ime_na_otbora);
void klasirane(player a[]);
void aktualizcia(player a[], int &nomer_na_igracha, string & ime_na_otbora);
//**********************************************
fstream igrachi_file;
//**********************************************
int add_player(player a[])
{
int br;
igrachi_file.open("igrachi.txt", ios::out | ios::app); // <--- As an "fstream" this needs to know if it is input or output.
do
{
//cout << "\n Broi igrachi:";
cout << "\n Number of players:";
cin >> br;
} while (br <= 0 || br > N);
if (igrachi_file.fail())
{
cout << "Error. The file is missing.";
exit(1);
}
for (int i = 0; i < br; i++)
{
//cout << "Vuvedi ime na igrach:";
cout << " Enter player's first name: ";
cin >> a[i].ime;
igrachi_file << a[i].ime << endl;
//cout << "Vuvedi familia na igrach:";
cout << " Enter a player's last name :";
cin >> a[i].familia;
igrachi_file << a[i].familia << endl;
//cout << "Vuvedi otbor na igracha:";
cout << " Enter a player's team: ";
cin >> a[i].otbor;
igrachi_file << a[i].otbor << endl;
//cout << "Vuvedi nomer na igracha:";
cout << " Enter the player number: ";
cin >> a[i].nomer;
if (a[i].nomer > 99 || a[i].nomer < 1)
{
do
{
//cout << "Vuvedete nomer ot 1 do 99. \n";
cout << "Enter number 1 to 99. \n";
cin >> a[i].nomer;
} while (a[i].nomer > 99 || a[i].nomer < 1);
}
igrachi_file << a[i].nomer << endl;
//cout << "Vuvedi vkarani golove na igracha:";
cout << " Enter player goals scored: ";
cin >> a[i].vk_golove;
if (a[i].vk_golove < 0)
{
do
{
//cout << "Vuvedete golove >= 0 \n";
cout << "Enter goals >= 0 \n";
cin >> a[i].vk_golove;
} while (a[i].vk_golove < 0);
}
igrachi_file << a[i].vk_golove << endl;
}
igrachi_file.close();
}
void search_by_number(player a[], int &nomer_na_igracha)
{
int flag = 0;
igrachi_file.open("igrachi.txt", ios::in);
igrachi_file.seekg(0);
if (igrachi_file.fail())
{
cout << "Fail to open the file";
exit(1);
}
for (int i = 0; i < N; i++)
{
igrachi_file >> a[i].ime;
igrachi_file >> a[i].familia;
igrachi_file >> a[i].otbor;
igrachi_file >> a[i].nomer;
igrachi_file >> a[i].vk_golove;
if (nomer_na_igracha == a[i].nomer)
{
cout << "Igrach: " << a[i].ime << " " << a[i].familia
<< "\nOtbor: " << a[i].otbor << "\nNomer: " << a[i].
nomer << "\nVkarani golove: " << a[i].vk_golove << endl;
flag++;
}
}
if (!flag)
cout << endl << "Nqma takuv igrach!" << endl;
igrachi_file.close();
}
void search_by_team(player a[], string & ime_na_otbora)
{
int flag = 0;
igrachi_file.open("igrachi.txt", ios::in);
igrachi_file.seekg(0);
if (igrachi_file.fail())
{
cout << "Fail to open the file";
exit(1);
}
for (int i = 0; i < N; i++)
{
igrachi_file >> a[i].ime;
igrachi_file >> a[i].familia;
igrachi_file >> a[i].otbor;
igrachi_file >> a[i].nomer;
igrachi_file >> a[i].vk_golove;
if (ime_na_otbora == a[i].otbor)
{
cout << "Igrach: " << a[i].ime << " " << a[i].familia
<< "\nOtbor: " << a[i].otbor << "\nNomer: " << a[i].
nomer << "\nVkarani golove: " << a[i].vk_golove << endl << endl;
flag++;
}
}
if (!flag)
cout << endl << "Nqma takuv otbor!" << endl;
igrachi_file.close();
}
void klasirane(player a[])
{
igrachi_file.open("igrachi.txt", ios::in);
igrachi_file.seekg(0); // <--- Not needed as the file pointer is already at the beginning from the open statement.
for (int i = 0; i < N; i++)
{
igrachi_file >> a[i].ime;
igrachi_file >> a[i].familia;
igrachi_file >> a[i].otbor;
igrachi_file >> a[i].nomer;
igrachi_file >> a[i].vk_golove;
}
cout << "ime" << setw(15) << "familia" << setw(15) << "otbor" <<
setw(15) << "nomer" << setw(15) << "vkarani golove" << endl;
for (int i = 0; i < N; i++)
{
cout << a[i].ime << right << setw(15) << a[i].
familia << right << setw(15) << a[i].
otbor << right << setw(15) << a[i].
nomer << right << setw(15) << a[i].vk_golove << endl;
}
igrachi_file.close();
}
int main()
{
int choice;
int nomer_na_igracha;
string ime_na_otbora, familia_na_igracha;
player a[N];
do
{
cout <<
"\n================================================================================"
<< endl;
cout << "\t\tMenu\n\n";
//cout << "= Izberete:\n";
cout << " Choose:\n";
//cout << "= 1. Dobavqne na igrachi\n";
cout << " 1. Add players\n";
//cout << "= 2. Spisuk s igrachite\n";
cout << " 2. List of players\n";
//cout << "= 3. Spravka za igrach po nomer\n";
cout << " 3. Reference for player by number\n";
//cout << "= 4. Spravka za igrach po otbor\n";
cout << " 4. Player report by team\n";
//cout << "= 5. Aktualizirane\n";
cout << " 5. Update\n";
//cout << "= 6. Krai\n";
cout << " 6. End\n";
cout <<
"\n================================================================================"
<< endl;
cin >> choice;
switch (choice)
{
case 1:
{
add_player(a);
break;
}
case 2:
{
klasirane(a);
break;
}
case 3:
{
cout << "Tursene po nomer: ";
cin >> nomer_na_igracha;
search_by_number(a, nomer_na_igracha);
break;
}
case 4:
{
cout << "Tursene po otbor: ";
cin >> ime_na_otbora;
search_by_team(a, ime_na_otbora);
break;
}
case 5:
break;
}
} while (choice != 6);
}
Ето и по актуализацията какво съм направил:
- Код: Избери целия код
void aktualizcia(player a[], int nomer_na_igracha, string ime_na_otbora)
{
int i{};
fstream igrachi_file;
igrachi_file.open("igrachi.txt", ios::in);
while (getline(igrachi_file, a[i].familia))
{
igrachi_file >> a[i].vk_golove;
igrachi_file.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
getline(igrachi_file, a[i].otbor);
i++;
}
igrachi_file.close();
//cout << "Vuvedete igrachite chiqto informaciq iskate da redaktirate: ";
cout << "Enter the players whose information you want to edit: ";
//cin >> num; // <--- Not defined or used.
//cout << "\n Ime: ";
cout << "\n Name: ";
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
getline(cin, a[i].familia);
//cout << "\n Golove: ";
cout << "\n Goals: ";
cin >> a[i].vk_golove; // <--- goals.
cin.get();
cout << endl << endl;
}

Меню