Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/79: Рейтинг темы: голосов - 79, средняя оценка - 4.95
0 / 0 / 0
Регистрация: 27.12.2013
Сообщений: 36
1

Создать класс Money

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

Author24 — интернет-сервис помощи студентам
Задача:
Создать класс 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)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.03.2014, 07:35
Ответы с готовыми решениями:

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

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

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

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

17
2277 / 1768 / 741
Регистрация: 27.07.2012
Сообщений: 5,251
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
320 / 225 / 74
Регистрация: 22.11.2013
Сообщений: 865
Записей в блоге: 1
21.03.2014, 11:26 3
Slight, Концепция класса не верная, перепишите его используя идею John Prick, все действия производите с переменной (private) fullcopecs, а на печать рубли/копейки выводите как показал John Prick. Тогда Ваш класс должен содержать будет 3 конструктора.
1
0 / 0 / 0
Регистрация: 27.12.2013
Сообщений: 36
21.03.2014, 11:58  [ТС] 4
Помогите с реализацией, мне нужно оформить программу по такому типу с перегрузкой операторов, ну их вроде перегрузил
0
320 / 225 / 74
Регистрация: 22.11.2013
Сообщений: 865
Записей в блоге: 1
21.03.2014, 16:42 5
Лучший ответ Сообщение было отмечено Slight как решение

Решение

Я переделал слегка идеологию и не только исправил деление (там по новому стало, читайте комментарии):
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
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
320 / 225 / 74
Регистрация: 22.11.2013
Сообщений: 865
Записей в блоге: 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
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
0 / 0 / 0
Регистрация: 27.12.2013
Сообщений: 36
05.04.2014, 11:47  [ТС] 9
Помогите, похалуйста
0
320 / 225 / 74
Регистрация: 22.11.2013
Сообщений: 865
Записей в блоге: 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
0 / 0 / 0
Регистрация: 27.12.2013
Сообщений: 36
05.04.2014, 16:26  [ТС] 11
Спасибо

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

Или можно как-то компактное сделать - к примеру перегрузкой, чтобы мы могли вызывать функцию одновременно для двух сумм
0
320 / 225 / 74
Регистрация: 22.11.2013
Сообщений: 865
Записей в блоге: 1
05.04.2014, 16:40 14
функция const int* money::GetCup () возвращает набор купюр для любого класса.. замените
C++
1
cup=A.GetCup();
на
C++
1
cup=B.GetCup();
0
0 / 0 / 0
Регистрация: 27.12.2013
Сообщений: 36
05.04.2014, 16:44  [ТС] 15
А если необходимо одновременно для двух сумм?
0
320 / 225 / 74
Регистрация: 22.11.2013
Сообщений: 865
Записей в блоге: 1
05.04.2014, 16:54 16
Ну можно организовать вывод внутри класса, но так лучше не делать.. (хотя вы так уже ряд функций реализовали)
0
0 / 0 / 0
Регистрация: 27.12.2013
Сообщений: 36
05.04.2014, 17:14  [ТС] 17
просто этот вывод мне необходим для следующей задачи, связанной с банкоматом - реализация с использованием представления суммы из этого класса. Нужно чтобы все было грамотно
0
320 / 225 / 74
Регистрация: 22.11.2013
Сообщений: 865
Записей в блоге: 1
05.04.2014, 17:21 18
GetCup() Возвращает массив элементов с количеством купюр или монет:
[0]-5000р [1]-1000р ....[13]-1 коп и используйте их, для манипуляций и расчетов.. Это функция возвращает массивы купюр для всех классов money
а вывод на экран в рамках программы а не класса делать надо...
0
05.04.2014, 17:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.04.2014, 17:21
Помогаю со студенческими работами здесь

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

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

Создать класс Money для работы с денежными суммами
Номиналы российских рублей могут принимать значения 1, 2, 5, 10, 50, 100, 500, 1000, 5000. Копейки...

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


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru