Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma once
- class Knigi {
- public:
- // Конструктор cтандартный с инициализацией, обьект name инициализируется пустой строкой по умолчанию
- Knigi(): sell_kolvo(0), summ_cena(0.0) { }
- // Конструкторы для инициализации с помощью обьекта типа istream
- Knigi(std::istream &is) { is >> *this; }
- // Перегрузка операторов "<<" и ">>" istream,ostream и ofstream классов
- friend std::istream& operator>>(std::istream&, Knigi&);
- friend std::ostream& operator<<(std::ostream&, const Knigi&);
- friend std::ofstream& operator<<(std::ofstream&, const Knigi&);
- ~Knigi(){};
- private:
- std::string name;
- unsigned sell_kolvo;
- double summ_cena;
- };
- std::string getCurrentTime();
- Реализация класса Knigi
- #include "stdafx.h"
- //istream
- std::istream&
- operator>>(std::istream& in, Knigi& s)
- {
- double cena;
- std::cout << "Введите название (можно и автора) книги: " << std::flush;
- SetConsoleCP (1251); // Смена кодировки для корректного вывода в txt файл
- std::getline(in, s.name);
- SetConsoleCP (866); //Смена кодировки для корректного ввода и вывода в консоли
- std::cout << "Введите кол-во книг (целые числа): " << std::flush;
- while(in >> s.sell_kolvo, !std::cin.eof()){
- if (in.fail()){
- std::cerr << "Ошибка! Введите целое число: " << std::flush;
- in.clear();
- fflush(stdin);
- continue;
- }
- fflush(stdin);
- break;
- }
- std::cout << "Введите цену за одну книгу (например, 3.50): " << std::flush;
- while(in >> cena, !std::cin.eof()){
- if (in.fail()){
- std::cerr << "Ошибка! Введите корректное число (например, 2.20): " << std::flush;
- in.clear();
- fflush(stdin);
- continue;
- }
- fflush(stdin);
- break;
- }
- s.summ_cena = s.sell_kolvo * cena;
- return in;
- }
- //ostream
- std::ostream& operator<<(std::ostream& out, const Knigi& s)
- {
- SYSTEMTIME lst; //Обьект SYSTEMTIME, Windows.h
- out << "\nНазвание книги: " << s.name << " " << "Кол-во книг: " <<s.sell_kolvo << " "
- << "Итоговая цена: " <<s.summ_cena << std::endl;
- GetLocalTime(&lst); // Присвоить lst значение локального времени
- printf("Дата и время: %d.%d.%d %d:%d:%d\n" ,lst.wDay,lst.wMonth,lst.wYear,lst.wHour,lst.wMinute,lst.wSecond);
- return out;
- }
- // Локальное время для вывода в txt файл
- std::string getCurrentTime()
- {
- time_t curTime;
- struct tm *timeInfo;
- time(&curTime);
- timeInfo = localtime(&curTime);
- char buffer[1024];
- strftime(buffer, 1024, "%d.%m.%Y %X", timeInfo);
- std::string curFormatDate = std::string(buffer);
- return curFormatDate;
- }
- //ofstream
- std::ofstream& operator<<(std::ofstream& fout, const Knigi& s)
- {
- fout << "\nНазвание книги: " << s.name << "\n"
- << "Кол-во книг: " << s.sell_kolvo << "\n"
- << "Итоговая цена: " << s.summ_cena << "\n"
- << getCurrentTime() << "\n\n";
- return fout;
- }
- Основной код
- #include "stdafx.h"
- int _tmain(int argc, _TCHAR* argv[])
- {
- setlocale(LC_ALL, "Russian");
- std::string answ;
- std::cout << "Здравствуйте, программа \"Книги\" реалезует возможность кассовой операции \nс выводом чека. Попробуйте, вам понравиться!\n\n"<< std::flush;
- while (1) {
- Knigi bookstr(std::cin);
- std::cout << bookstr << std::endl;
- std::ofstream btxt("Чек.txt", std::ios::app);
- btxt<<bookstr;
- if(!btxt)
- {
- std::cerr << "!!! Ошибка !!! Недостаточно места/прав для записи Чек.txt\n" << std::endl;
- system("pause");
- return 1;
- }
- std::cout << "============================================================" << std::endl;
- std::cout << "Хотите ввести данные ещё одной книги? Y(да) или N(нет): " << std::flush;
- while (std::getline(std::cin, answ))
- {
- switch (answ[0])
- {
- case 'n':
- case 'N':
- std::cout << "============================================================" << std::endl;
- std::cout << "\nВот и всё, просмотрите текстовой файл Чек.txt и узнайте, что же там!\n"
- << "PS: Файл Чек.txt располагается в той же директории, что и сама программа\n"
- << "\nЕвгений Осипов (www.fastandclever.ru), 2011\n" << std::endl;
- btxt << "\n======================================\n" << "Дата/время последних операций: "<< getCurrentTime() << "\nЕвгений Осипов (www.fastandclever.ru), 2011\n"
- << "======================================" <<std::endl;
- btxt.close();
- system("pause");
- return 0;
- case 'y':
- case 'Y':
- std::cout << "============================================================" << std::endl;
- std::cout << std::endl;
- break;
- default:
- std::cerr << "Ошибка! Введите Y(да) или N(нет): " << std::flush;
- continue;
- }
- break;
- }
- }
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment