Как использовать строки и двойники в одной и той же функции в C ++ - PullRequest
0 голосов
/ 02 ноября 2018

Для проекта класса мне нужно получить информацию о клиенте в одной функции (которая включает его имя, номер комнаты и т. Д.), Поэтому мне нужно использовать двойные и строковые значения в одной и той же функции. Есть ли способ сделать это или альтернатива, если их нет?

Проект хочет, чтобы мы передавали значения по ссылке.

//Prints a statement for each overnight customer.

#include <iostream>
#include <string>
#include <math.h>
#include <iomanip>
using namespace std;

const double sales_tax_rate = 0.055;

//Function prototypes
string customerInformation(string &customer_name, string &date_of_bill, 
string &hotelormotel_name, double &room_rate, double &number_of_nights, 
double &phone_charges, double &room_number);

int main()
{
    string customer_name, dummy, date_of_bill, hotelormotel_name;
    double room_rate = 0;
    double number_of_nights = 0;
    double phone_charges = 0;
    double room_number = 0;
    double room_cost;
    double subtotal;
    double total;
    double taxes;
    int counter = 1;
    char repeat;

    do
    {
        counter += 1;
        taxes = 0;
        total = 0;
        subtotal = 0;
        room_cost = 0;

        customerInformation(customer_name, room_rate, number_of_nights, 
        phone_charges, room_number, date_of_bill, hotelormotel_name);

        room_cost = room_rate * number_of_nights;
        taxes = sales_tax_rate * room_cost;
        subtotal = taxes + room_cost;
        total = subtotal + phone_charges;

        cout << hotelormotel_name << endl << endl;
        cout << "Date:             " << date_of_bill << endl;
        cout << "Customer's Name:  " << customer_name << endl;
        cout << "Room Number:      " << room_number << endl;
        cout << "Number of Nights: " << number_of_nights << endl;
        cout << setprecision(2) << fixed << endl;
        cout << "Room Rate:     $" << room_rate << endl;
        cout << "Room Cost:     $" << room_cost << endl;
        cout << "Taxes:         $" << taxes << endl;
        cout << "Subtotal:      $" << subtotal << endl << endl;
        cout << "Phone Charges: $" << phone_charges << endl << endl;
        cout << "TOTAL DUE:     $" << total << endl << endl;
        cout << "Thank you for staying at " << hotelormotel_name << "!" << 
        endl;
        cout << "Drive safely and please come again!" << endl << endl;

        cout << "Would you like to run this program again? (Y or N): ";
        cin >> repeat;
        getline(cin, dummy);
        cout << endl;
    } while (repeat == 'Y' || repeat == 'y');
}

string customerInformation(string &customer_name, string &date_of_bill, 
string &hotelormotel_name, double &room_rate, double &number_of_nights, 
double &phone_charges, double &room_number)
{
    cout << "Please enter the following information: " << endl;
    cout << "Hotel/Motel Name: ";
    getline(cin, hotelormotel_name);
    cout << "Customer Name:    ";
    getline(cin, customer_name);
    cout << "Date:             ";
    getline(cin, date_of_bill);
    cout << "Room Number:      ";
    cin >> room_number;

    do
    {
        cout << "Number of Nights: ";
        cin >> number_of_nights;
        if (number_of_nights <= 0)
             cout << "Error: Invalid data entered, please try again.\n";
    } while (number_of_nights <= 0);

    cout << endl;

    do
    {
        cout << "Room Rate:     $";
        cin >> room_rate;
        if (room_rate <= 0)
            cout << "Error: Invalid data entered, please try again.\n";
    } while (room_rate <= 0);

    do
    {
        cout << "Phone Charges: $";
        cin >> phone_charges;
        if (phone_charges < 0)
            cout << "Error: Invalid data entered, please try again.\n";
    } while (phone_charges < 0);

    cout << endl;

     return date_of_bill, customer_name, room_number, room_rate, 
number_of_nights, phone_charges, hotelormotel_name;
}

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Да. Есть альтернатива для этого с использованием структур, вы можете создать свою собственную структуру следующим образом

struct customerInfo { 
      string customer_name, dummy, date_of_bill, hotelormotel_name;
      double room_rate;
      double number_of_nights;
      double phone_charges;
      double room_number;
      double room_cost;
      double subtotal;
      double total;
      double taxes;
};

Затем вы можете передать объект типа структуры функции следующим образом

//Function prototypes
string customerInformation(customerInfo tempCustomer);

И вы можете использовать этот временный клиент следующим образом

string customerInformation(customerInfo tempCustomer){
         cin>>tempCustomer.customer_name;
         //you can call all attributes and assign them values accordingly
         //to return a particular value you can do
         return tempCustomer.customer_name;
}
0 голосов
/ 02 ноября 2018

Почему бы вам не создать структуру со всей этой информацией?

   struct customerinfo {
   string customer_name;
   string date_of_bill;
   string hotelormotel_name;
   double room_rate;
   double number_of_nights; 
   double phone_charges; 
   double room_number;
   };

и затем вы возвращаете переменную из структуры типа.

...