Регистрация не е нужна, освен при създаване на тема в "Задача на седмицата".

Актуализация на файл в c++ затруднения

Актуализация на файл в c++ затруднения

Мнениеот Гост » 13 Ное 2018, 11:22

Здравейте имам един въпрос.Това е условието на задачата-Съставете програма за картотекиране на футболисти с функции за:
а) Създаване на файл (чрез добавяне на определен брой записи и презаписване на данните от файла в масив) с данни за футболисти, участници в световно първенство, с полета: име, фамилия, отбор-държава, номер на футболиста, отбелязани голове. Вход от клавиатура, с проверка за коректност на данните по: номер, отбелязани голове. Извеждане текущото съдържание на масива (файла) на екран.
б) Извеждане на справки за:
- всички футболисти по зададен от клавиатурата състезателен номер;
- футболистите от зададен отбор (със запитване за продължение);
в) Актуализация на данните във файла чрез промяна на полето - отбелязани голове за футболист по зададени отбор и фамилия.
Главна функция 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;

}
Някакви насоки как да я направя?
Гост
 

Re: Актуализация на файл в c++ затруднения

Мнениеот aifC » 17 Ное 2018, 19:56

За предвването на данни по - добре използвай глобални променливи.
На теория няма разлика между теорията и практиката. Но на практика има.
Аватар
aifC
Напреднал
 
Мнения: 364
Регистриран на: 17 Окт 2017, 19:33
Рейтинг: 249

Re: Актуализация на файл в c++ затруднения

Мнениеот goshko2 » 30 Ное 2018, 12:44

Забранено ми е да ги използвам,иначе ще ме скъсат :lol: :roll:
goshko2
Нов
 
Мнения: 2
Регистриран на: 13 Ное 2018, 22:20
Рейтинг: 0


Назад към C, C++



Кой е на линия

Регистрирани потребители: Davids, Google [Bot]

Форум за математика(архив)