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

Реализовать класс Account моделирующий операции с банковским счётом (по книге Дейтелов)

02.11.2016, 11:41. Показов 2016. Ответов 9

Author24 — интернет-сервис помощи студентам
Начал изучать С++ по Дейтелам, застрял на одной задаче. Я считаю, что проблема в set-функции, но на 100% не уверен, перечитал несколько раз материал, решения сам найти не смог. Буду очень благодарен за помощь, ну или за то, что хотя бы носом ткнёте в суть проблемы.

Скриншот запуска:
Кликните здесь для просмотра всего текста

Реализовать класс Account моделирующий операции с банковским счётом (по книге Дейтелов)



Код программы:

Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//Account.h
 
class Account
{
public:
    Account(int, int);
 
    void setBalance(int);
    void setCreditBalance(int);
    int getBalance();
    void credit(int);
    void debit(int);
 
private:
    int balance;
    int credit_balance;
};


Кликните здесь для просмотра всего текста

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
#include <iostream>
using std::cout;
using std::cin;
#include "Account.h"
 
Account::Account(int bal, int cr_bal)
{
    setBalance(bal);
    setCreditBalance(cr_bal);
}
 
    void Account::setBalance(int bal)
    {
        //Проверка допустимости суммы баланса
        if (bal < 0)
        {
            cout << "Начальный баланс недействителен!\n";
            balance = 0;
        }
        else balance = bal;
    }
 
    void Account::setCreditBalance(int cr_bal)
    {
        // Кредитный баланс
        credit_balance = cr_bal;
    }
 
            int Account::getBalance()
    {
        return balance;
    }
 
        void Account::credit(int cr)
        {
            int x, y;
            y = getBalance();
            x = y + cr;
            setBalance(x);
        }
 
    void Account::debit(int deb)
    {
        int y;
        if (deb > balance)
            cout << "У вас недостаточно средств для займа!\n";
        else
            y = balance - deb;
            setBalance(y);
    }


Кликните здесь для просмотра всего текста

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
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
#include "Account.h"
 
int main()
{
    int cr1, cr2;
    int deb1, deb2;
    int bal1, bal2;
    int cr_bal1, cr_bal2;
        
    bal1 = 1850;
    bal2 = -50;
    cr1 = 500;
    cr2 = 800;
    cr_bal1 = 3500;
    cr_bal2 = 2700;
    deb1 = 200;
    deb2 = 1000;
    
    setlocale(LC_ALL, "RUS");
    
    Account account1(bal1, cr_bal1);
    Account account2(bal2, cr_bal2);
 
    cout << "Ваш баланс: " << account1.getBalance() << endl;
    cout << "Ваш баланс: " << account2.getBalance() << endl;
 
    account1.credit(cr1);
    account2.credit(cr2);
 
    cout << "Ваш займ составляет: " << cr1 << " Ваш текущий баланс: " << account1.getBalance() << endl;
    cout << "Ваш займ составляет: " << cr2 << " Ваш текущий баланс: " << account2.getBalance() << endl;
 
    account1.debit(deb1);
    account2.debit(deb2);
 
    cout << "Сумма выплаты составляет: " << deb1 << " Остаток на счёте: " << account1.getBalance() << endl;
    cout << "Сумма выплаты составляет: " << deb2 << " Остаток на счёте: " << account2.getBalance() << endl;
 
    system("pause");
 
    return 0;
}


Сама задача:

Кликните здесь для просмотра всего текста

Реализовать класс Account моделирующий операции с банковским счётом (по книге Дейтелов)

0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.11.2016, 11:41
Ответы с готовыми решениями:

Реализовать класс Account, что является банковским счетом
Реализовать класс Account, что является банковским счетом. В классе должны быть четыре поля:Фамилия...

Интерфейс: Реализовать операции с банковским счетом (баланс счета, снятие средств, пополнение счета)...
Здравствуйте! Подскажите, как доделать код :-| Задача такая: дан интерфейс, необходимо сделать...

Не получается создать класс Account из книги Дейтелов
Задача: Создайте класс с именем Account, которым мог бы воспользоваться банк для представления...

Создать класс Account. Задача из книги Дейтелов "Как програмировать на С++"
Начал изучение С++, прочитал главу &quot;Введение в классы и объекты&quot; в книге Дейтелов &quot;Как...

9
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
02.11.2016, 12:36 2
//Account.h
Сразу бросается в глаза - нет инклюд гвардов
C++
1
2
3
4
#ifndef _ACCOUNT_H_
#define _ACCOUNT_H_
// код тут
#endif
Добавлено через 3 минуты
C++
1
2
3
4
5
if (deb > balance)
{
    cout << "У вас недостаточно средств для займа!\n";
    return;
}
В вашем случае, была попытка установить баланс в неинициализированное значение переменной y.
Если условие не удовлетворяет - не надо ничего делать.
1
0 / 0 / 0
Регистрация: 27.09.2016
Сообщений: 5
02.11.2016, 13:59  [ТС] 3
Спасибо за ответ, о инклуд гуардах ещё не слышал, изучу. Но проблема полностью не решилась.
Если условие не удовлетворяет - не надо ничего делать.
Суть в том, что мне необходимо сделать проверку и установить значение balance. После инициализации у, ошибки пропали, но программа по прежнему выводит начальное значение баланса при выполнении условия
C++
1
if (deb > balance)
Реализовать класс Account моделирующий операции с банковским счётом (по книге Дейтелов)
0
173 / 131 / 74
Регистрация: 04.12.2013
Сообщений: 552
02.11.2016, 14:28 4
dndrew, но вы же сами присываиваете bal2 = -50; и передаете потом это значение в конструктор. А у вас в методе стоит проверка на условие.
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
02.11.2016, 14:38 5
Цитата Сообщение от dndrew Посмотреть сообщение
программа по прежнему выводит начальное значение баланса при выполнении условия
Я же вам написал исправленный код:
C++
1
2
3
4
5
if (deb > balance)
{
    cout << "У вас недостаточно средств для займа!\n";
    return;
}
Он не будет обнулять баланс.
Хотя и сам y логичнее устанавливать в значение balance. Тем не менее, мой способ позволит избежать ненужного вызова setBalance.
0
0 / 0 / 0
Регистрация: 27.09.2016
Сообщений: 5
02.11.2016, 16:02  [ТС] 6
С этим кодом для одного объекта выдаст предупреждение, для второго ничего вообще не произойдёт (По условию со счёта должно списать n-сумму). Или я чего-то не понимаю...

Реализовать класс Account моделирующий операции с банковским счётом (по книге Дейтелов)
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
02.11.2016, 16:31 7
Цитата Сообщение от dndrew Посмотреть сообщение
Или я чего-то не понимаю...
Вы сначала 2 раза снимаете сумму, потом 2 раза выводите результат.
Надо так:
C++
1
2
3
4
5
account1.debit(deb1);
cout << "Сумма выплаты составляет: " << deb1 << " Остаток на счёте: " << account1.getBalance() << endl;
 
account2.debit(deb2); 
cout << "Сумма выплаты составляет: " << deb2 << " Остаток на счёте: " << account2.getBalance() << endl;
Добавлено через 3 минуты
Что-то вы не так наисправляли.
Возьмите свой изначальный код и измените метод debit на тот, что ниже:
C++
1
2
3
4
5
6
7
8
9
10
11
12
void Account::debit(int deb)
{
    int y = balance;
    if (deb > balance)
    {
        cout << "У вас недостаточно средств для займа!\n";
        return;
    }
    else
        y = balance - deb;
    setBalance(y);
}
Добавлено через 1 минуту
Либо на такой, без лишних переменных.
C++
1
2
3
4
5
6
7
void Account::debit(int deb)
{
    if (deb > balance)
        cout << "У вас недостаточно средств для займа!\n";
    else
        setBalance(balance - deb);
}
0
0 / 0 / 0
Регистрация: 27.09.2016
Сообщений: 5
02.11.2016, 17:35  [ТС] 8
Цитата Сообщение от MrGluck Посмотреть сообщение
Либо на такой, без лишних переменных.
Спасибо, 2й код работает. Первый подсвечивает елсе "не хватает оператора"

А в чём заключаются такие отличия между?

C++
1
2
3
4
5
6
7
8
    
        int y;
        y = 0;
        if (deb > balance)
        cout << "У вас недостаточно средств для займа!\n";
    else
            y = balance - deb;
        setBalance(y);
и

C++
1
2
3
4
    if (deb > balance)
        cout << "У вас недостаточно средств для займа!\n";
    else
        setBalance(balance - deb);
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
02.11.2016, 17:40 9
Лучший ответ Сообщение было отмечено dndrew как решение

Решение

Цитата Сообщение от dndrew Посмотреть сообщение
А в чём заключаются такие отличия между
Следует помнить, что если у оператора if/else не ограничено явно тело с помощью фигурных скобок, то он выполняет лишь следующую за ним инструкцию. Перепишем исходные коды в эквивалентные с явным указанием тела.
C++
1
2
3
4
5
6
7
8
9
10
11
int y;
y = 0;
if (deb > balance)
{
    cout << "У вас недостаточно средств для займа!\n";
}
else
{
    y = balance - deb;
}
setBalance(y);
C++
1
2
3
4
5
6
7
8
if (deb > balance)
{
    cout << "У вас недостаточно средств для займа!\n";
}
else
{
    setBalance(balance - deb);
}
Как видим, в первом случае инструкция setBalance выполняется не только для ветки else.
0
0 / 0 / 0
Регистрация: 27.09.2016
Сообщений: 5
02.11.2016, 17:55  [ТС] 10
Всё понял, вопрос решён. Весьма благодарен)))
0
02.11.2016, 17:55
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.11.2016, 17:55
Помогаю со студенческими работами здесь

Реализовать класс Bankomat, моделирующий работу банкомата
Вот задание.Надо написать для Украины (тоесть номиналы) Перепечатайте задание на форум

Реализовать класс Bankomat, моделирующий работу банкомата
Задание: Реализовать класс Bankomat, моделирующий работу банкомата. В классе долж¬ ны...

Реализовать класс Bankomat, моделирующий работу банкомата
Ребят беда, такая интересная задачка попалась мне, вроде ничего особенного но посмотрев глубже...

Реализовать класс, моделирующий работу N-местной автостоянки
Помогите,пожалуйста!!! Реализовать класс, моделирующий работу N-местной автостоянки. Машина...


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

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