Создать программу, которая требует ввода имени, фамилии и персональный код (можно без тире)

лилия581 лилия581    1   10.01.2021 01:10    0

Ответы
rzaynullina rzaynullina  12.02.2021 22:52

#include <iostream>

#include <string>

#include <vector>

#include <fstream>

struct fio

{

   char fam[20];

   char nam[20];

   char otc[20];

};

struct data

{

    uint16_t day;

    uint16_t mounth;

    uint16_t year;

};

struct cash

{

   uint32_t number;

   fio f;

   uint32_t count_of_tickets_sold;

   uint32_t sum;

   data data_sold;

   void set()

   {

       std::cout << "Номер кассы ";

       std::cin >> number;

       std::cout << "Фамилия ";

       std::cin >> f.fam;

       std::cout << "Имя ";

       std::cin >> f.nam;

       std::cout << "Отчество ";

       std::cin >> f.otc;

       std::cout << "Количество проданных билетов ";

       std::cin >> count_of_tickets_sold;

       std::cout << "Суммарная выручка ";

       std::cin >> sum;

       std::cout << "День продажи ";

       std::cin >> data_sold.day;

       std::cout << "Месяц продажи ";

       std::cin >> data_sold.mounth;

       std::cout << "Год продажи ";

       std::cin >> data_sold.year;

       std::cout << "\n+++++++++++++++\n";

   }

   void show()

   {

       std::cout << "Номер кассы " << number

           << "\nФамилия " << f.fam

           << "\nИмя " << f.nam

           << "\nОтчество " << f.otc

           << "\nКоличество проданных билетов " << count_of_tickets_sold

           << "\nСуммарная выручка " << sum

           << "\nДень продажи " << data_sold.day

           << "\nМесяц продажи " << data_sold.mounth

           << "\nГод продажи " << data_sold.year

           << "\n+++++++++++++++\n";

   }

   static void data_base_print_to_file(std::vector<cash>& data_base, const std::string& path)

   {

       std::ofstream fout;

       fout.open(path);

       for (cash& c : data_base)

       {

           fout << "Номер кассы " << c.number

               << "\nФамилия " << c.f.fam

               << "\nИмя " << c.f.nam

               << "\nОтчество " << c.f.otc

               << "\nКоличество проданных билетов " << c.count_of_tickets_sold

               << "\nСуммарная выручка " << c.sum

               << "\nДень продажи " << c.data_sold.day

               << "\nМесяц продажи " << c.data_sold.mounth

               << "\nГод продажи " << c.data_sold.year

               << "\n+++++++++++++++\n";

       }

   }

};

std::vector<cash> read_data_from_bin_file(const std::string& path_to_bin)

{

   std::vector<cash> data_base;

   std::ifstream fin;

   fin.open(path_to_bin, std::ios_base::in | std::ios_base::binary);

   if (fin.is_open())

   {

       for (;;)

       {

           cash cash_now;

           fin.read(reinterpret_cast<char*>(&cash_now), sizeof(cash));

           if (!fin)

               break;

           data_base.push_back(cash_now);

       }

       fin.close();

   }

   return data_base;

}

bool write_data_to_bin_file(const std::string& path_to_bin, std::vector<cash>& data_base)

{

   std::ofstream fout;

   fout.open(path_to_bin, std::ios_base::out | std::ios_base::binary);

   if (fout.is_open())

   {

       for (cash& cash_now : data_base)

           fout.write(reinterpret_cast<char*>(&cash_now), sizeof(cash));

       fout.close();

       return true;

   }

   else

       return false;

}

bool add_data_to_bin_file(const std::string& path_to_bin, cash& cash_now)

{

   std::ofstream fout;

   fout.open(path_to_bin, std::ios_base::out | std::ios_base::binary | std::ios_base::app);

   if (fout.is_open())

   {

       fout.write(reinterpret_cast<char*>(&cash_now), sizeof(cash));

       fout.close();

       return true;

   }

   else

       return false;

}

int main()

{

   setlocale(LC_ALL, "Rus");

   std::string path_to_bin = "data.bin";

   

   //Если программа уже работала и есть база данных в бинарном файле, то прочитаем её и запишем данные в контейнер

   std::vector<cash> data_base = read_data_from_bin_file(path_to_bin);

   for (;;)

   {

       std::cout << "Вид действия:\n\

 0 - завершение задачи\n\

 1 - создание базы данных\n\

 2 - добавление новых записей\n\

 3 - поиск по номеру кассы\n\

 4 - просмотр базы данных\n\

 5 - запись в файл\n\

 Введите вид действия -> ";

       uint16_t action;

       std::cin >> action;

       switch (action)

       {

       case 0:

       {

           return 0;

       }

       case 1:

       {

           std::cout << "Укажите количество касс ";

           uint32_t count_cashes;

           std::cin >> count_cashes;

           data_base = std::vector<cash>(count_cashes);

           for (cash& cash_now : data_base)

               cash_now.set();

           write_data_to_bin_file(path_to_bin, data_base);

           break;

       }

       case 2:

       {

           std::cout << "Укажите количество добавляемых записей ";

           uint32_t count_cashes_add;

           std::cin >> count_cashes_add;

           for (uint32_t idx = 0u; idx < count_cashes_add; ++idx)

           {

               cash c;

               c.set();

               data_base.push_back(c);

               add_data_to_bin_file(path_to_bin, c);

           }

           break;

       }

       case 3:

       {

           std::cout << "Укажите номер кассы ";

           uint32_t find_number_cash;

           std::cin >> find_number_cash;

           for (cash& cash_now : data_base)

               if (cash_now.number == find_number_cash)

                   cash_now.show();

           break;

       }

       case 4:

       {

           std::cout << "Содержание базы данных\n";

           for (cash& cash_now : data_base)

               cash_now.show();

           break;

       }

       case 5:

       {

           std::cout << "Укажите путь к файлу добавляемых записей ";

           std::string p;

           std::cin.ignore();

           std::getline(std::cin, p);

           cash::data_base_print_to_file(data_base, p);

           std::cout << "Готово\n";

           break;

       }

       default:

       {

           std::cout << "Действия с номером " << action

               << " не существует\n";

       }

       }

   }

   return 0;

}


Создать программу, которая требует ввода имени, фамилии и персональный код (можно без тире)
Создать программу, которая требует ввода имени, фамилии и персональный код (можно без тире)
ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Информатика