#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
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)
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)
fout.open(path_to_bin, std::ios_base::out | std::ios_base::binary | std::ios_base::app);
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);
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);
cash_now.set();
write_data_to_bin_file(path_to_bin, data_base);
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);
case 3:
std::cout << "Укажите номер кассы ";
uint32_t find_number_cash;
std::cin >> find_number_cash;
if (cash_now.number == find_number_cash)
cash_now.show();
case 4:
std::cout << "Содержание базы данных\n";
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";
default:
std::cout << "Действия с номером " << action
<< " не существует\n";
#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;
}