Кассирская программа - PullRequest
0 голосов
/ 23 июня 2018

Это кассовая программа, в которой я остро нуждаюсь.Программа берет стоимость товара и сумму, уплаченную за этот товар, и рассчитывает оставшиеся «изменения», которые должны быть возвращены клиенту.Однако у меня есть пара проблем, которые я не смог решить.Во-первых, в некоторых суммах, exp: cost = 0.25, paid = 100.00, программа выдает никель, в котором не должно быть никеля для изменения.Вторая проблема заключается в параметрах, которые давались для cout: наличие только отдельных долларов (двадцать, десять, пять, один) и монет (четверти, десять центов, никелей, пенни) только в том случае, если они присутствуют в изменении.Нет 0 двадцать 0 десятков и т. Д. Желаемый пример: стоимость = 0,25, оплачено = 100,00 будет 4 двадцать (s) 1 десять (и) 1 пять (и) 4 одна (и) 3 четверть (и);ни копейки, ники и ни копейки не должны показываться, поскольку они равны 0. У меня осталось только огромное количество утверждений If или есть что-то еще, что я могу сделать;может переключиться?Я не уверен, так как я все еще новичок.

Исходный код:

#include <iostream>
#include <iomanip>
#include <cmath>

using namespace std;

int main()
{
    float purchase, payment, change;
    int new_change, one_dollar, five_dollar, ten_dollar, twen_dollar;
    int quarter, nickel, dime, penny;

    // Program explanation
    cout << "This program calculates the change of a payment\n";
    cout << "towards a purchase." << endl << endl;

    // user prompt to input item cost and
    cout << "- - Enter the following Information - -" << endl;
    cout << endl << "Cost of Item: $";
    cin >> purchase;
    cout << endl << endl << "Payment: $";
    cin >> payment;

    // calculating the balance that is owed back to customer
    change = (payment - purchase) * 100;

    // this assignment used so that we can use modulo
    new_change = ceil(change);

    // Following equations used to retrieve respective bill
    // amounts owed back to purchaser
    twen_dollar = new_change / 2000;
    ten_dollar = (new_change % 2000) / 1000;
    five_dollar = (new_change % 1000) / 500;
    one_dollar = (new_change % 500) / 100;

    // Following equations used to retrieve respective coin
    // amounts owed back to purchaser
    quarter = (new_change % 100) / 25;
    dime = (new_change % 25) / 10;
    nickel = (new_change % 10) / 5;
    penny = new_change % 5;



    cout << endl << change << "  " << new_change << "   " << twen_dollar << " 
    twenty " << ten_dollar << " ten ";
    cout << five_dollar << " five " << one_dollar << " one " << quarter;
    cout << " quarter " << dime << " dime " << nickel << " nickel ";
    cout << penny << " penny ";

    return 0;
}

Формат cout не является окончательным, и я отобразил «change» и «new_change» на cout, потому чтоУ меня была другая проблема с уменьшением числа во время назначения 'new_change = change';ceil (изменение), казалось, исправил это все же.Любые рекомендации и критические замечания приветствуются, если они конструктивны.Спасибо за ваше время.

1 Ответ

0 голосов
/ 24 июня 2018

когда вы даете изменение, вы не вычитаете его из стоимости изменения. Например, попробуйте отследить ваш код с помощью входной покупки: $ 0,25 и оплаты: $ 100. когда вы доберетесь до линии

nickel = (change%10) /5;

вы уже заплатили разницу, используя 3 квартала, однако компьютер не знает, что bc значение изменения все еще равно 9975. 9975% 10 = 5, 5/5 = 1, поэтому вы получаете один никель. Чтобы избежать этого, всякий раз, когда вы рассчитываете сумму изменений, чтобы вернуть ее, вычтите ее из общей суммы изменений следующим образом.

ten_dollar = change/1000;
change -= 1000*ten_dollar;

five_dollar = change /500;
change -= 500*five_dollar;

вот моя рабочая версия вашего кода:

#include <iostream>
#include <iomanip>
#include <cmath>

using namespace std;

int main()
{
    float purchase, payment;
    int change, one_dollar, five_dollar, ten_dollar, twen_dollar;
    int quarter, nickel, dime, penny;

    // Program explanation
    cout << "This program calculates the change of a payment\n";
    cout << "towards a purchase." << endl << endl;

    // user prompt to input item cost and
    cout << "- - Enter the following Information - -" << endl;
    cout << endl << "Cost of Item: $";
    cin >> purchase;
    cout << endl << endl << "Payment: $";
    cin >> payment;

    // calculating the balance that is owed back to customer
    change = (payment - purchase)*100;

    cout<<"$"<<(float)change/100<<endl;
    // this assignment used so that we can use modulo
    //don't need this, change is an int at this point
    //new_change = ceil(change);

    // Following equations used to retrieve respective bill
    // amounts owed back to purchaser
    twen_dollar = change / 2000;
    change -= 2000*twen_dollar;

    ten_dollar = change / 1000;
    change -= 1000*ten_dollar;

    five_dollar = change / 500;
    change -= 500*five_dollar;

    one_dollar = change / 100;
    change -= 100*one_dollar;

    // Following equations used to retrieve respective coin
    // amounts owed back to purchaser
    quarter = change / 25;
    change -= 25*quarter;

    dime = change / 10;
    change -= 10*dime;

    nickel = change / 5;
    change -= 5*nickel;

    penny = change;



    cout << twen_dollar << "twenty " << ten_dollar << " ten ";
    cout << five_dollar << " five " << one_dollar << " one " << quarter;
    cout << " quarter " << dime << " dime " << nickel << " nickel ";
    cout << penny << " penny ";

    return 0;
}
...