Использование класса

Задания раздела 2.6.2
2.41. Используйте класс Sales_data для перезаписи кода упражнений из разделов 1.5.1, 1.5.2 и 1.6. А так же определите свой класс Sales_data в том же файле, что и функция main ().

p116_ex2-6-2

Так как я не могу пока что использовать внутриклассовые операции с переменными-членами, предлагается их использовать в теле программы.
Напомню просто, что для обращения к переменной-члену используется синтаксис через-точку.

#include <iostream>
int main ()
{
struct Book_sales {
std::string booknmbr;
unsigned sales_qt=0;
double cash=0.0;
};
Book_sales book1, book2;
std::cin >> book1.booknmbr >> book1.sales_qt;
std::cout << book1.sales_qt << " "<<book1.cash;
return(0);
}

2.41. Используйте класс Sales_data для перезаписи кода упражнений из разделов 1.5.1, 1.5.2 и 1.6. А так же определите свой класс Sales_data в том же файле, что и функция main ().
Просто упоминание тех программ наносит мне психологический вред, а теперь мне надо еще и лезть им под капот.

1.21. Напишите программу, которая читает два объекта класса Sales_item с одинаковым ISBN и вычисляет их сумму.
#include <iostream>
#include "Sales_item.h"
int main()
{
Sales_item book1, book2;
std::cout << "Enter two book transactions with equal ISBN's:" << std::endl;
if (std::cin>>book1>>book2 && book1.isbn()==book2.isbn())
std::cout << book1+book2;
else std::cout << "Book ISBNs are not equal!";
return(0);
}

Переписываю

#include <iostream>
int main ()
{
struct Book_sales {
std::string booknmbr;
unsigned sales_qt=0;
double cash=0.0;
};
Book_sales book1, book2;
double price_per_book=0;
std::cout << "Enter two book transactions with equal ISBN's:" << std::endl;
std::cin>>book1.booknmbr>>book1.sales_qt>>price_per_book;
book1.cash=price_per_book*book1.sales_qt;
std::cin>>book2.booknmbr>>book2.sales_qt>>price_per_book;
book2.cash=price_per_book*book2.sales_qt;
if (book1.booknmbr==book2.booknmbr) {
unsigned totalcount=book1.sales_qt+book2.sales_qt;
double revenue=book1.cash+book2.cash;
std::cout << book1.booknmbr<< " "<< totalcount << " " << revenue << " ";
if (totalcount!=0) std::cout << revenue/totalcount;
else std::cout << "No sales!"<< std::endl;
return(0);
}
else std::cerr << "Book ISBNs are not equal!"<< std::endl;
return(-1);
}
1.22. Напишите программу, читающую несколько транзакций с одинаковым ISBN и отображающую сумму всех прочитанных транзакций. (оригинальную программу не буду приводить, ее можно найти в соответствующем разделе 1.5.1)

#include <iostream>
int main ()
{
struct Book_sales {
std::string booknmbr;
unsigned sales_qt=0;
double cash=0.0;
};
Book_sales book1, book2;
double price_per_book=0;
std::cout << "Enter book transactions only with equal ISBN's:" << std::endl;
if (std::cin>>book1.booknmbr>>book1.sales_qt>>price_per_book)
book1.cash=price_per_book*book1.sales_qt;

while (std::cin>>book2.booknmbr>>book2.sales_qt>>price_per_book)
if (book1.booknmbr==book2.booknmbr) {
book2.cash=price_per_book*book2.sales_qt;
book1.sales_qt+=book2.sales_qt;
book1.cash+=book2.cash;
} else {
std::cout << book1.booknmbr<< " "<< book1.sales_qt << " " << book1.cash/book1.sales_qt << std::endl;
return(0);
}
}

1.23. Напишите программу, которая читает несколько транзакций и подсчитывает количество транзакций для каждого ISBN.

#include <iostream>
int main ()
{
struct Book_sales {
std::string booknmbr;
unsigned sales_qt=0;
double cash=0.0;
};
Book_sales book1, book2;
double price_per_book=0;
std::cout << "Enter book transactions only with equal ISBN's:" << std::endl;
if (std::cin>>book1.booknmbr>>book1.sales_qt>>price_per_book) {
book1.cash=price_per_book*book1.sales_qt;
while (std::cin>>book2.booknmbr>>book2.sales_qt>>price_per_book) {
book2.cash=price_per_book*book2.sales_qt;
if (book1.booknmbr==book2.booknmbr) {
book2.cash=price_per_book*book2.sales_qt;
book1.sales_qt+=book2.sales_qt;
book1.cash+=book2.cash;
} else {std::cout << book1.booknmbr<< " "<< book1.sales_qt << " " << book1.cash << " " << book1.cash/book1.sales_qt<< std::endl;
book1.booknmbr=book2.booknmbr; book1.sales_qt=book2.sales_qt;}
}
std::cout << book1.booknmbr<< " "<< totalcount_all << " " << revenue_all << " " << revenue_all/totalcount_all;
}
return(0);
}

Как-то все это геморно и бессмысленно. Я все понял уже. Это проще, чем кажется на первый взгляд. С каждой переменной-членом надо носиться, долбаться с областью видимости и проверками. А с классом раз-два и готово. Осталось его написать правильно.

 

Добавить комментарий