首页 > 解决方案 > 为什么我的自动售货机程序不能正常工作?

问题描述

程序应从询问是否重新进货或继续使用当前库存开始。第 1 种情况(补货)完美运行,但第二种情况,为了继续使用先前的库存,如果任何产品归零,则始终返回零。

在文本文件中,我有:

  1. 牛奶:10
  2. 鸡蛋:2
  3. 水:7
  4. 墨西哥卷饼:10
  5. 面包:12
  6. 出口

我该如何解决?

    #include<iostream>
#include<cstdlib>
#include<fstream>
#include<string>
#include<sstream>

using namespace std;

string productName[5] = { "Milk", "Eggs", "Water", "Burrito", "Bread" };
//int productAmount[5] = { 5,12,10,4,7};
int productAmount[5];
int productPick;
int defaultPick;
int productBuy;
fstream productFile; //we create file 

void loadFromFile()
{
    productFile.open("productsfile.txt", ios::in);

    if (productFile.good() == false)
    {
        cout << "Unable to load the file. Try again later." << endl;
        productFile.close();
        exit(0);
    }
    else
    {
        ifstream productFile("productsfile.txt");

        if (productFile.is_open())
        {
            cout << "How may I help you?" << endl;
            string line;
            while (getline(productFile, line))
            {
                // using printf() in all tests for consistency
                cout << line.c_str() << endl;
            }
            productFile.close();
        }

    }

}

void saveToFile() //this function saves in the text file the data we've globally declared. It is used only if you want to declare new variables.
{
    productFile.open("productsfile.txt", ios::out);

    for (int i = 0; i < 5; i++)
    {
        productFile << i + 1 << ". " << productName[i] << ": " << productAmount[i] << endl;
    }
    productFile << "6. Exit" << endl;
    productFile.close();
}

void askIfDefault()
{
    cout << "Do you want to come back to default stock?" << endl;
    cout << "1. Yes " << "2. No " << endl;
    cin >> defaultPick;
    switch (defaultPick)
    {
    case 1:
        for (int i = 0;i < 5;i++)
        {
            productAmount[i] = 10;
        }
        saveToFile();
        loadFromFile();
        break;
    case 2:
        loadFromFile();
        break;
    default:
        cout << "I don't understand." << endl;
        exit(0);
        break;
    }
}

void productCheck()
{
    if (productAmount[productPick - 1] <= 0 || productAmount[productPick - 1] < productBuy)
    {
        cout << "Unfortunately we have no more " << productName[productPick - 1] << " in stock. Please choose other product from the list below: " << endl;
        productAmount[productPick - 1] = 0;
    }
    else
    {
        productAmount[productPick - 1] -= productBuy;
    }
}


void listOfProducts()
{
    cout << "How may I help you?" << endl;

    for (int i = 0; i < 5; i++)
    {
        cout << i + 1 << ". " << productName[i] << ": " << productAmount[i] << endl;
    }
    cout << "6. Exit" << endl;
}

void order()
{
    cin >> productPick;
    switch (productPick)
    {
    case 1:
        cout << "How many bottles?" << endl;
        cin >> productBuy;
        {
            productCheck();
            saveToFile();
        }
        break;

    case 2:
        cout << "How many cartons?" << endl;
        cin >> productBuy;
        {
            productCheck();
            saveToFile();
        }
        break;

    case 3:
        cout << "How many multi-packs?" << endl;
        cin >> productBuy;
        {
            productCheck();
            saveToFile();
        }
        break;

    case 4:
        cout << "How many portions?" << endl;
        cin >> productBuy;
        {
            productCheck();
            saveToFile();
        }
        break;

    case 5:
        cout << "How many batches?" << endl;
        cin >> productBuy;
        {
            productCheck();
            saveToFile();
        }
        break;

    case 6:
        cout << "See you soon!" << endl;
        saveToFile();
        system("pause");
        break;

    case 666:
        cout << "You cannot use the secret magic spells here." << endl;
        saveToFile();
        exit(0);
        break;

    default:
        cout << "Please pick the existing product: " << endl;
        saveToFile();
        order();
        break;
    }
}


int main()
{
    askIfDefault();
    order();
    cout << endl;

    while (true && productPick != 6)
    {
        listOfProducts();
        order();
        saveToFile();
        cout << endl;
    }

    return 0;


}

标签: c++

解决方案


也许除非声明一个全局 fsteam productFile,否则尝试在使用它的两个函数中声明它:分别为“loadFromFile()”和“saveToFile()”。在他们的开始。那应该没问题。


推荐阅读