Untitled

 avatar
unknown
plain_text
a year ago
9.4 kB
1
Indexable
#include <iostream>
#include <iomanip>
#include <map>
#include <ctime>
#include <fstream>

using namespace std;

struct OrderedItem {
    int quantity;
    double totalPrice;
};

void menu();
double money(double rm_usd ,  double total_price , double rm_euro);
void order_item(const map<int, OrderedItem>& orderedItems);

int main() {
    int choice;
    int code;
    int quantity;
    char choose;
    double total_price = 0 ;
    double price[5] = {12, 8, 15, 21, 8.5};
    const double rm_usd = 4.66; // Convert to Usd
    const double rm_euro = 5.07; // Convert to Euro
    time_t curr_time;
    curr_time = time(nullptr);
    char *tm = ctime(&curr_time);  // Variable to store the order date
    map<int, OrderedItem> orderedItems;  // Map to store the ordered items in key-value pairs
    /*
    Example :
    map<int, OrderedItem> orderedItems{
	"quantity" : "quantity",
	"price" : "totalPrice"

	}


	*/
    ofstream MyMenu("filename.txt");
    MyMenu << setw(23) << "Menu" << endl;
    MyMenu<< "-----------------------------------------------" <<endl;
    MyMenu << "| Code |           Meal            |   Price  | " << endl;
    MyMenu << "-----------------------------------------------" << endl;
    MyMenu<< "|   1  |      Mushroom Burger      | RM 12.00 | " << endl;
    MyMenu << "-----------------------------------------------" << endl;
    MyMenu << "|   2  |    Crispy Fried Chicken   | RM 8.00  |" << endl;
    MyMenu << "-----------------------------------------------" << endl;
    MyMenu<< "|   3  |        Fish & Chips       | RM 15.00 |" << endl;
    MyMenu<< "-----------------------------------------------" << endl;
    MyMenu << "|   4  |   Spaghetti & Meatballs   | RM 21.00 |" << endl;
    MyMenu<< "-----------------------------------------------" << endl;
    MyMenu<< "|   5  |      Hotdog Sandwich      | RM 8.50  |" << endl;
    MyMenu<< "-----------------------------------------------" << endl;
    MyMenu.close() ;

    string myText;
    ifstream MyMenuFile("filename.txt");






    do {
        cout << "Food Ordering System" << endl;
        cout << "1 [Order Meals]" << endl;
        cout << "2 [View Order]" << endl;
        cout << "3 [Exit]" << endl << endl;
        cout << "Enter Option:";
        cin >> choice;

        switch (choice) {
            case 1:

                while(getline(MyMenuFile, myText)){
                    cout << myText  <<endl ;
                }

                MyMenuFile.close();



                do {
                    cout << "Please select the meal code:";
                    cin >> code;
                    if (code < 1 || code > 5) {
                        cerr << "Invalid code. Please enter a valid code (1-5)." << endl;
                    } else {
                        cout << "Please enter quantity:";
                        cin >> quantity;

                        if (quantity < 1) {
                            cerr << "Unable to process quantity of order, please enter a valid quantity" << endl;
                        } else {
                            total_price += quantity * price[code - 1];

                            // Check if the item code is already in the map
                            if (orderedItems.find(code) != orderedItems.end()) {
                                // If the item is already in the map, update the quantity and total price
                                orderedItems[code].quantity += quantity;
                                orderedItems[code].totalPrice += quantity * price[code - 1];
                            } else {
                                // If the item is not in the map, add it with the current quantity and total price
                                orderedItems[code] = {quantity, quantity * price[code - 1]};
                            }

                            cout << "Do you want to continue your order? (Y/N)" << endl;
                            cout << "choice: ";
                            cin >> choose;
                        }
                    }
                } while (choose == 'y' || choose == 'Y');

                // Ask the user about the currency once they choose not to continue the order
                money(  rm_usd ,  total_price ,  rm_euro);

                break;

            case 2:
                // Add logic for viewing orders here
                cout << "Current Order:" << endl;
                cout << "order no" << "\t\t      date :"<<  tm<<  endl;
                cout << "Code            Meal               Quantity     Total" << endl;
                cout << "------------------------------------------------------------" << endl;

                order_item(orderedItems);


                //if else statement write here the tax
                //Declare variable tax
                double tax;
                if (total_price <= 15){
                    tax = 0;
                }
                else if(total_price > 15  && total_price < 50){
                    tax = 0.02;
                }
                else{
                    tax = 0.05;
                }
                // Output a horizontal line
                std::cout << "============================================================\n";

                // Output "tax(" followed by the tax percentage in whole numbers and the tax amount
                std::cout << setw(40) << "Tax(" <<  static_cast<int>(tax * 100) << "%):"<<setw(7)<< "RM"
                          <<std::fixed << std::setprecision(2) <<setw(5) << tax * total_price << "\n";


                // Update total_price by adding the product of tax and total_price
                total_price += tax * total_price;

                // Output the updated total_price
                std::cout <<setw(45) << "Updated Total Price: "
                          << std::fixed << std::setprecision(2) <<setw(7)<<"RM "<< total_price << std::endl;



                break;

            case 3:
                // Option 3: Exit the loop
                cout << "Exit Food Ordering System. Goodbye!" << endl;
                break;

            default:
                cout << "Invalid option. Please enter a valid option (1-3)." << endl;
        }
    } while (choice != 3); // Exit the program when the user is done ordering or viewing



    system("pause>0");
    return 0;
}

void menu(){
cout << setw(23) << "Menu" << endl;
cout << "-----------------------------------------------" << endl;
cout << "| Code |           Meal            |   Price  | " << endl;
cout << "-----------------------------------------------" << endl;
cout << "|   1  |      Mushroom Burger      | RM 12.00 | " << endl;
cout << "-----------------------------------------------" << endl;
cout << "|   2  |    Crispy Fried Chicken   | RM 8.00  |" << endl;
cout << "-----------------------------------------------" << endl;
cout << "|   3  |        Fish & Chips       | RM 15.00 |" << endl;
cout << "-----------------------------------------------" << endl;
cout << "|   4  |   Spaghetti & Meatballs   | RM 21.00 |" << endl;
cout << "-----------------------------------------------" << endl;
cout << "|   5  |      Hotdog Sandwich      | RM 8.50  |" << endl;
cout << "-----------------------------------------------" << endl;
}

double money( double rm_usd , double total_price , double rm_euro){
    cout << "Please select the currency in which payment would be made in:" << endl;
    cout << "RM -------1" << endl;
    cout << "USD -------2" << endl;
    cout << "EURO -------3" << endl;
    int currency ;
    cin >> currency ;
    // Display total price after completing the order
    cout << "Total amount due: ";
    double amount_due;
    switch (currency) {
        case 1:
            amount_due = total_price;
            cout << "RM " << fixed << setprecision(2) << total_price << endl;
            break;
        case 2:
            amount_due = total_price / rm_usd;
            cout << "USD " << fixed << setprecision(2) << total_price / rm_usd << endl;
            break;
        case 3:
            amount_due = total_price / rm_euro;
            cout << "Euro " << fixed << setprecision(2) << total_price / rm_euro << endl;
            break;
        default:
            cerr << "Invalid currency selection." << endl;
            amount_due = -1 ;


    }

    return amount_due ;

}
void order_item(const map<int, OrderedItem>& orderedItems){
    // Display ordered items and their quantities using a map
    for (const auto& entry : orderedItems) {
        // Get the item code from the current entry
        int itemCode = entry.first;
        string foodname ;

        // Determine the food name based on the item code
        if(itemCode == 1){
            foodname = "Mushroom Burger      ";
        }else if  (itemCode == 2){
            foodname = "Crispy Fried Chicken ";
        }else if (itemCode == 3 ){
            foodname = "Fish & Chips         ";
        }else if(itemCode == 4) {
            foodname = "Spaghetti & Meatballs";
        }else if (itemCode == 5){
            foodname = "Hotdog Sandwich      ";
        }

        // Get a constant reference to the OrderedItem object for the current entry
        const OrderedItem& itemDetails = entry.second;

        cout  << itemCode << "       " <<foodname<< "          "<< itemDetails.quantity << "         RM " << fixed << setprecision(2) << itemDetails.totalPrice << "   " <<endl ;

    }
}
Editor is loading...
Leave a Comment