Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 5.00
Slight
0 / 0 / 0
Регистрация: 27.12.2013
Сообщений: 36
#1

Создать класс Money - C++

21.03.2014, 07:35. Просмотров 2274. Ответов 17
Метки нет (Все метки)

Задача:
Создать класс Money для работы с денежными суммами.Число должно быть представлено двумя полями: типом long для рублей и типом unsigned char - для копеек. дробная часть(копейки) при выводе на экран должна быть отделена от целой части запятойю реализовать сложение,вычитание, деление сумм, деление суммы на дробное число, умножение на дробное число и операцию сравнения.

В чем требуется помощь:
1.Написать функцию, которая бы после выполнения операции корректно перевела копейки в рубли(если будет большая сумма копеек, выходящая за рамки копеек) и прибавила их к рублям
2.Помочь с операциями деление сумм, деление суммы на дробное число, умножение на дробное число и операцию сравнения.
3. Помочь разобраться с методом toString

Мой вариант
Програмка в вот такой форме

main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include "money.h"
#include<iostream>
#include<string>
#include<sstream>
 
using namespace std;
 
int main()
{
    money A, B;
 
        std::cout << "\nEnter first summ in format 'roubles'.'copecks':\t";
        std::cin >> A;
        std::cout << "Enter second summ in format 'roubles'.'copecks'':\t";
        std::cin >> B;
        std::cout << "Sum:\t\t" << (A+B) << std::endl;
        std::cout << "Raznost:\t\t" << ( A - B ) << std::endl;
        std::cout << "Delenien:\t\t" << ( A / B ) << std::endl;
 
cout << " to str: " << A.toString() << endl;
 
       return 0;
}
money.h

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#ifndef MONEY
#define MONEY
#include <iostream>
 
using namespace std;
class money
{
  long roubles;
  unsigned int copecks;
 
 
public:
 std::string toString() const;
    friend istream &operator >>(istream &in,money &A); //Ввод
    friend ostream &operator <<(ostream &out,money A);  //Вывода
    friend money operator+(money A,money B);   //Сложение
    friend money operator-(money A,money B);   //Вычитание
    friend money operator/(money A,money B);
    string operator!();  //в строку
 
    //money add(money& other);
 
};
#endif
money.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include "money.h"
#include<iostream>
#include<string>
#include<sstream>
#include<cmath>
#include <iostream>
#include <iomanip>
#include <limits>
using namespace std;
 
   //Вводим данные
istream &operator>>(istream &in,money &A) {
    in >> A.roubles >> A.copecks;
    return in;
}
//Выводим
ostream &operator<<(ostream &out, money A) {
    out<<"Roubles: "<< A.roubles <<"; Copecks: "<<A.copecks<<endl;
    return out;
 
}
    //Складываем
        money operator+(money B, money A)
        { money temp;
            temp.copecks=A.copecks+B.copecks;
            temp.roubles=(A.roubles+B.roubles);
            return temp;
                }
 
             //Вычитаем
              money operator-(money A, money B)
            { money temp;
                temp.copecks=B.copecks-A.copecks;
                temp.roubles=(B.roubles-A.roubles);
                return temp; }
 
 
            std::string money::toString() const {
    std::ostringstream oss;
    oss<<"Roubles: "<<roubles<<"; Copecks: "<<copecks<<endl;
    return oss.str();
}
 
 
 
            //Делим
                money operator/(money A, money B)
                {     money temp;
                    if(A.roubles!=0 && A.copecks!=0)
                    {
                        temp.copecks=B.copecks/A.copecks;
                        temp.roubles=B.roubles/A.roubles;
                    }
                return temp;}
Добавлено через 3 часа 12 минут
Поможете?

Добавлено через 10 часов 23 минуты
Up =))))
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.03.2014, 07:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Создать класс Money (C++):

Создать базовый класс - Array и производный класс - Money для работы денежной суммы - C++
ПОМОГИТЕ, ПОЖАЛУЙСТА, С ЗАДАЧЕЙ Создать базовый класс - Array и производный класс - Money для работы денежной суммы

Создать класс Money - C++
здравствуйте, нужно создать мини программку,на с++. Я учусь на первом курсе, к сожалению не очень сильно понимаю программирование, буду...

Создать класс Money - C++
Создать класс Money, содержащий следующие члены класса: 1. Поля: int nominal - номинал купюры int amount - количество купюр 2....

Создать класс Money, содержащий следующие элементы - C++
Создать класс Money, содержащий следующие элементы: - поле «валюта» char* Currency; - поле «сумма» long Sum; - метод получения ...

Создать класс Money и разработать указанные элементы класса - C++
Нужно написать программу за таким типом.

Создать класс Money для работы с денежными суммами - C++
Проблемы с задачей, а точнее, её полное не понимание. Надеюсь на вашу помощь.

17
John Prick
801 / 734 / 145
Регистрация: 27.07.2012
Сообщений: 2,107
Завершенные тесты: 3
21.03.2014, 11:04 #2
Цитата Сообщение от Slight Посмотреть сообщение
Написать функцию, которая бы после выполнения операции корректно перевела копейки в рубли(если будет большая сумма копеек, выходящая за рамки копеек) и прибавила их к рублям
C++
1
2
3
4
5
void transform(unsigned int fullcopecs)
{
    roubles = fullcopecs / 100;
    copecs = fullcopecs % 100;
}
1
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
21.03.2014, 11:26 #3
Slight, Концепция класса не верная, перепишите его используя идею John Prick, все действия производите с переменной (private) fullcopecs, а на печать рубли/копейки выводите как показал John Prick. Тогда Ваш класс должен содержать будет 3 конструктора.
1
Slight
0 / 0 / 0
Регистрация: 27.12.2013
Сообщений: 36
21.03.2014, 11:58  [ТС] #4
Помогите с реализацией, мне нужно оформить программу по такому типу с перегрузкой операторов, ну их вроде перегрузил
0
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
21.03.2014, 16:42 #5
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Я переделал слегка идеологию и не только исправил деление (там по новому стало, читайте комментарии):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#include<iostream>
#include<string>
#include<sstream>
#include<cmath>
#include <iostream>
#include <iomanip>
#include <limits> 
 
using namespace std;
class money
{
private:
int fullcopecs;
 
 
public:
 std::string toString() const;
    money() {fullcopecs=0;}
    money(unsigned int a){fullcopecs=a;}
    money(unsigned int r, unsigned int c){fullcopecs=r*100+c;}
    friend istream &operator >>(istream &in,money &A); //Ввод
    friend ostream &operator <<(ostream &out,money A);  //Вывода
    friend money operator+(money A,money B);   //Сложение
    friend money operator-(money A,money B);   //Вычитание
    friend int operator/(money A,money B); //Если делишь кучку денег на кучку денег, то по идеи должно получиться число кучек (а не новая кучка)
    friend money operator/(money A,int B); //Если делишь кучку денег на число кучек, то по идеи должна получиться новая кучка
    string operator!();  //в строку
 
    //money add(money& other);
 
};
 
 
using namespace std;
 
   //Вводим данные
istream &operator>>(istream &in,money &A) {
    unsigned int roubles, copecks;
    in >>roubles >> copecks;
    A.fullcopecs =roubles*100+copecks;
    return in;
}
//Выводим
ostream &operator<<(ostream &out, money A) 
{
    unsigned int roubles, copecks;
    roubles=A.fullcopecs/100;
    copecks=A.fullcopecs%100;
    out<<"Roubles: "<< roubles <<"; Copecks: "<<copecks<<endl;
    return out;
 
}
    //Складываем
money operator+(money B, money A)
{ 
    money temp;
    temp.fullcopecs =A.fullcopecs+B.fullcopecs; 
    return temp;
}
 
             //Вычитаем
money operator-(money A, money B)
{
    money temp;
    temp.fullcopecs= A.fullcopecs-B.fullcopecs; 
    return temp; 
}
 
 
string money::toString() const 
{
    ostringstream oss;
    unsigned int roubles, copecks;
    roubles=fullcopecs/100;
    copecks=fullcopecs%100;
    oss<<"Roubles: "<<roubles<<"; Copecks: "<<copecks<<endl;
    return oss.str();
}
 
 
 
            //Делим
int operator/(money A, money B)
{   
    unsigned int temp=0;
    if(B.fullcopecs!=0) temp=A.fullcopecs /B.fullcopecs;
    return temp;
}
 
money operator/(money A, int B)
{   
    money temp;
    if(B!=0) temp.fullcopecs =A.fullcopecs/B;
    return temp;
}
 
int main()
{
    money A, B;
 
        cout << "\nEnter first summ in format 'roubles'.'copecks':\t";
        cin >> A;
        cout << "Enter second summ in format 'roubles'.'copecks'':\t";
        cin >> B;
        cout << "Sum:\t\t" << (A+B) << endl;
        cout << "Raznost:\t\t" << ( A - B ) <<endl;
        cout << "Delenien:\t\t" << ( A / B ) <<" chasti" << endl;
        cout << "Delenien na 4 chasti:\t\t" << ( A / 4 ) <<" chasti" << endl;
        cout << " to str: " << A.toString() << endl;
        system ("pause");
       return 0;
}
Добавлено через 2 часа 23 минуты
Цитата Сообщение от Slight Посмотреть сообщение
2.Помочь с операциями деление сумм, деление суммы на дробное число, умножение на дробное число и операцию сравнения.
3. Помочь разобраться с методом toString
Учтите это я не правил.... Я лишь поправил подход, ну а с этим разберетесь по аналогии
1
Slight
0 / 0 / 0
Регистрация: 27.12.2013
Сообщений: 36
21.03.2014, 18:48  [ТС] #6
Сделал, спасибо. Просто неправильно понял задачу
Хотелось бы еще спросить насчет сравнения. как я его должен использовать.
C++
1
2
bool money::operator==(const money& that) const {
    return (fullcopecs == that.fullcopecs);}
перегрузил
0
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
21.03.2014, 19:08 #7
Да, правильно понимаете, аналогично реализуйте != а также:
C++
1
2
3
4
5
6
7
8
friend money operator*(money A,int B);
 
money operator*(money A, int B)
{   
    money temp;
     temp.fullcopecs =A.fullcopecs*B;
    return temp;
}
Добавлено через 29 секунд
Цитата Сообщение от mustimur Посмотреть сообщение
Помочь разобраться с методом toString
Я так и до конца не понял что надо

Добавлено через 6 минут
Цитата Сообщение от Slight Посмотреть сообщение
как я его должен использовать
Тоже не понял что вы хотели спросить?
0
Slight
0 / 0 / 0
Регистрация: 27.12.2013
Сообщений: 36
03.04.2014, 08:46  [ТС] #8
Что я должен сделать если добаляется условие
Номиналы российских рублей могут принимать значения 1, 2, 5, 10, 50, 100, 500, 1000, 5000. Копейки представить как 0.01 (1 копейка), 0.05 (5копеек), 0.1 (10 копеек), 0.5 (50 копеек). Создать класс Money для работы с денежными суммами.

Сумма должна быть представлена полями-номиналами, значениями которых должно быть количество купюр данного достоинства.

как я должен переписать конструктор, чтобы представить сумму данным образом?

Добавлено через 1 час 20 минут
Если я правильно понял суть того что необъодимо дополнительно реализовать, то это функцию, которая бы делила сумму на номинал из массива money [13]={5000,1000,500,100,50,10,5,2,1,0.5,0,1,0.05,0.01} и записывала их в другой созданный массив
0
Slight
0 / 0 / 0
Регистрация: 27.12.2013
Сообщений: 36
05.04.2014, 11:47  [ТС] #9
Помогите, похалуйста
0
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
05.04.2014, 15:56 #10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#include<iostream>
#include<string>
#include<sstream>
#include<cmath>
#include <iostream>
#include <iomanip>
#include <limits> 
 
using namespace std;
const int dcup[14]={500000,100000,50000,10000,5000,1000,500,200,100,50,10,5,2,1};
 
class money
{
private:
int fullcopecs;
 
 
public:
 std::string toString() const;
    money() {fullcopecs=0;}
    money(unsigned int a){fullcopecs=a;}
    money(unsigned int r, unsigned int c){fullcopecs=r*100+c;}
    friend istream &operator >>(istream &in,money &A); //Ввод
    friend ostream &operator <<(ostream &out,money A);  //Вывода
    friend money operator+(money A,money B);   //Сложение
    friend money operator-(money A,money B);   //Вычитание
    friend int operator/(money A,money B); //Если делишь кучку денег на кучку денег, то по идеи должно получиться число кучек (а не новая кучка)
    friend money operator/(money A,int B); //Если делишь кучку денег на число кучек, то по идеи должна получиться новая кучка
    string operator!();  //в строку
    const int* GetCup ();
    //money add(money& other);
 
};
 
 
using namespace std;
 
 //Вводим данные
istream &operator>>(istream &in,money &A) {
    unsigned int roubles, copecks;
    in >>roubles >> copecks;
    A.fullcopecs =roubles*100+copecks;
    return in;
}
//Выводим
ostream &operator<<(ostream &out, money A) 
{
    unsigned int roubles, copecks;
    roubles=A.fullcopecs/100;
    copecks=A.fullcopecs%100;
    out<<"Roubles: "<< roubles <<"; Copecks: "<<copecks<<endl;
    return out;
 
}
    //Складываем
money operator+(money B, money A)
{ 
    money temp;
    temp.fullcopecs =A.fullcopecs+B.fullcopecs; 
    return temp;
}
 
             //Вычитаем
money operator-(money A, money B)
{
    money temp;
    temp.fullcopecs= A.fullcopecs-B.fullcopecs; 
    return temp; 
}
 
 
string money::toString() const 
{
    ostringstream oss;
    unsigned int roubles, copecks;
    roubles=fullcopecs/100;
    copecks=fullcopecs%100;
    oss<<"Roubles: "<<roubles<<"; Copecks: "<<copecks<<endl;
    return oss.str();
}
const int* money::GetCup ()
{
int *cup=new int[14];
int fc;
fc=fullcopecs;
for (int i=0;i<13;++i)
{
    cup[i]=fc/dcup[i];
    fc-=cup[i]*dcup[i];
}
cup[14]=fc;
return cup;
}
 
 
            //Делим
int operator/(money A, money B)
{   
    unsigned int temp=0;
    if(B.fullcopecs!=0) temp=A.fullcopecs /B.fullcopecs;
    return temp;
}
 
money operator/(money A, int B)
{   
    money temp;
    if(B!=0) temp.fullcopecs =A.fullcopecs/B;
    return temp;
}
 
int main()
{
    money A, B;
 
        cout << "\nEnter first summ in format 'roubles'.'copecks':\t";
        cin >> A;
      cout << "Enter second summ in format 'roubles'.'copecks'':\t";
        cin >> B;
        cout << "Sum:\t\t" << (A+B) << endl;
        cout << "Raznost:\t\t" << ( A - B ) <<endl;
        cout << "Delenien:\t\t" << ( A / B ) <<" chasti" << endl;
        cout << "Delenien na 4 chasti:\t\t" << ( A / 4 ) <<" chasti" << endl;
        cout << " to str: " << A.toString() << endl;
        const int *cup;
        cup=A.GetCup();
        cout << A<<" Moget bit' slogena iz:"<<endl;
        for (int i=0; i<14;i++)
        {
            if (cup[i]>0)
            {
                if (dcup[i]>=100) 
                    cout<<cup[i]<<" kupur po "<<dcup[i]/100<<" rubley"<< endl; 
                else 
                    cout<<cup[i]<<" monet po "<<dcup[i]<<" kop."<< endl;
 
            }
        }
        system ("pause");
 
       return 0;
}
Это нужно?

Добавлено через 15 минут
Цитата Сообщение от Slight Посмотреть сообщение
как я должен переписать конструктор, чтобы представить сумму данным образом?
Хотя я вообще не понял это... Я лишь переделал класс чтоб он говорил как эту сумму собрать
1
Slight
0 / 0 / 0
Регистрация: 27.12.2013
Сообщений: 36
05.04.2014, 16:26  [ТС] #11
Спасибо

Добавлено через 24 минуты
А если это перегрузить?
0
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
05.04.2014, 16:32 #12
Цитата Сообщение от Slight Посмотреть сообщение
А если это перегрузить?
Не понял задачи
0
Slight
0 / 0 / 0
Регистрация: 27.12.2013
Сообщений: 36
05.04.2014, 16:36  [ТС] #13
ну мы получается вызываем разделение только первой суммы на купюры.
Для того чтобы мы вторую сумму делили на купюры надо переписывать аналогичную функцию?

Или можно как-то компактное сделать - к примеру перегрузкой, чтобы мы могли вызывать функцию одновременно для двух сумм
0
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
05.04.2014, 16:40 #14
функция const int* money::GetCup () возвращает набор купюр для любого класса.. замените
C++
1
cup=A.GetCup();
на
C++
1
cup=B.GetCup();
0
Slight
0 / 0 / 0
Регистрация: 27.12.2013
Сообщений: 36
05.04.2014, 16:44  [ТС] #15
А если необходимо одновременно для двух сумм?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.04.2014, 16:44
Привет! Вот еще темы с ответами:

Создать класс Money для работы с денежными суммами - C++
Помогите решить:-[ Создать класс Money для работы с денежными суммами. Число должно быть представлено двумя полями: типа long для...

создать класс Money для работы с денежными суммами - C++
1. Определение класса. Оценивается полнота и корректность определения класса (объявление его полей и методов). Поля класса должны быть...

Создать класс "money" - C++
Создать класс money,содержащий следующие члены класса: Поля: -int nominal;\\номинал купюры -int amount;\\количество купюр ...

Реализовать класс Goods используя для представления цены класс Money - C++
Реализовать класс Goods (пункт 1 ), используя для представления цены класс Money с пункта 2 Реализовать метод уценки товара, уменьшая цену...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
05.04.2014, 16:44
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru