Member 13665211 Ответов: 3

Пользователь будет вводить продукт и количество в то время как они хотят и когда они не хотят программа должна показать общий счет


я создаю программу на языке c++ для системы управления гостиницами.Я хочу, чтобы пользователь ввел номер продукта и его количество.После записи программа спросит, хочет ли пользователь заказать какой-либо другой продукт, если он напишет "y". программа должна снова попросить ввести номер продукта и его количество.Это должно продолжаться, пока пользователь хочет.
Когда пользователь пишет "n" вместо "y"
программа должна показать общую сумму.Кроме того, он должен показать, какой продукт у меня есть заказ и количество, а также общую сумму рупий для каждого из них в счете, и, наконец, он должен показать чистую сумму.

Что я уже пробовал:

#include<iostream.h>                  
#include<conio.h>
void main()
{
clrscr();
start:
cout<<"--------------------------------HOTEL RED CHILLIES------------------------------" ;
cout<<"                             M.G.ROAD RAIPUR - 492001";
cout<<"\n\t\t\t\tPHONE: 0771-4024196";
cout<<"\n--------------------------------------------------------------------------------";

cout<<"*CATEGORIES*\t\tPrice\t\t *CATEGORIES*\t\tPrice"  ;

cout<<"\n\nChinese Noodles\t\t\t Pizza";
cout<<"\n\n1.Veg Chowmein\t\t 100 \t\t 7.Red Green Pizza\t 160";
cout<<"\n2.Chili Garlic Noodles\t 100\t\t 8.Deluxe Margherita\t 180";
cout<<"\n3.American Chop Suey\t 110\t\t 9.Tomato Deluxe\t 180";

cout<<"\n------------------------------\t\t -----------------------------";

cout<<"\n\nPasta\t\t\t\t\t Soup";
cout<<"\n\n4.Pasta Red Sauce\t 160\t\t 10.Hot and Sour\t 70";
cout<<"\n5.Pasta Mexican\t\t 160\t\t 11.Tomato Soup\t\t 70";
cout<<"\n6.Pasta White Sauce\t 170\t\t 12.Manchow Soup\t 70";

cout<<"\n-------------------------------\t\t -----------------------------";
int num,qt,i=0,t,sum;
char pro;

do
{cout<<"\nEnter the product number(1-12)- ";
cin>>num;
cout<<"\nEnter the quantity- ";
cin>>qt;
switch(num)
{
case 1: t=100*qt;
case 2: t=100*qt;
case 3: t=100*qt;
case 4: t=100*qt;
case 5: t=100*qt;
case 6: t=100*qt;
case 7: t=100*qt;
case 8: t=100*qt;
case 9: t=100*qt;
case 10: t=100*qt;
case 11: t=100*qt;
case 12: t=100*qt;
}

cout<<"\nDo you want to order any other product(y/n) ";
cin>>pro;

if(pro=='y')
{
clrscr();
goto start;

}
}
while(pro=='y');
do{
for(t=1; ;t++)
sum=t;}
while(pro=='y') ;
if(pro=='n')
cout<<"total is"<<sum;

OriginalGriff

И что же?
Что он делает такого, чего вы не ожидали, или не делает того, что вы сделали?
Что вы пытались выяснить, почему?
Где ты застрял?
Какая помощь вам нужна?

Member 13665211

я использовал do while заявление.
в последнем случае я собираюсь использовать оператор do while для вычисления общей суммы forall

3 Ответов

Рейтинг:
2

CPallini

Не используйте goto- на самом деле тебе это не нужно.
Не используйте такой древний компилятор (conio.h давно уже ушел).
Используйте структурированные данные.
Не использовать STL стеклотара.

Один C++98 эскиз реализации

#include <iostream>
#include <vector>

using namespace std;


struct Product
{
  string desc;
  int price;
  Product(string desc, int price):desc(desc), price(price){}
};


void show_menu(const vector<Product> & vp);

int main()
{
  vector <Product> vp;

  vp.push_back(Product("Veg Chowmein", 100));
  vp.push_back(Product("Chili Garlic Noodles", 110));
  // add more products...


  int sum = 0;

  while (true)
  {
    show_menu(vp);
    int index, qty;
    cin >> index;
    if ( index == -1) break;
    --index;
    if ( index >= 0 && index < static_cast<int>(vp.size()) )
    {
      cout << "please enter quantity" << endl;
      cin >> qty;
      sum += (qty * vp[index].price);
    }
  }
  cout << "the sum is " << sum << endl;
}


void show_menu( const vector<Product> & vp)
{
  cout << "please choose product (-1 to exit)" << endl;
  for (size_t n=0; n<vp.size(); ++n)
  {
    const Product & p = vp[n];
    cout << (n+1) << " " << p.desc << " " << p.price << endl;
  }
}


[обновление]
Использование массива вместо std::vector
#include <iostream>

using namespace std;

struct Product
{
  string desc;
  int price;
  Product(string desc, int price):desc(desc), price(price){}
};

void show_menu( Product ap[], int ITEMS);

int main()
{
  Product ap[] = { 
     Product("Veg Chowmein", 100), 
     Product("Chili Garlic Noodles", 110)
  };
  // add more products..

  const int ITEMS = sizeof(ap)/sizeof(ap[0]);

  int sum = 0;

  while (true)
  {
    show_menu(ap, ITEMS);
    int index, qty;
    cin >> index;
    if ( index == -1) break;
    --index;
    if ( index >= 0 && index <ITEMS )
    {
      cout << "please enter quantity" << endl;
      cin >> qty;
      sum += (qty * ap[index].price);
    }
  }
  cout << "the sum is " << sum << endl;
}


void show_menu( Product ap[], int ITEMS)
{
  cout << "please choose product (-1 to exit)" << endl;
  for (int n=0; n<ITEMS; ++n)
  {
    const Product & p = ap[n];
    cout << (n+1) << " " << p.desc << " " << p.price << endl;
  }
}

[/обновление]


Member 13665211

вообще-то я учусь в 11 классе.Я не изучал вектор.Так что, пожалуйста, вы можете сделать это в форме conio.h.

CPallini

Я только что обновил свое решение, теперь есть версия с массивом вместо std::vector...

Member 13665211

пожалуйста,можете ли вы сделать то же самое в другом методе,используя основы,такие как do while, if, switch и т. д.

CPallini

Извините, но это уже элементарно.

Member 13665211

я создал этот код
можете ли вы помочь мне получить общий итог всего продукта и количества
#include<iostream.h> 7
#включить<conio.h>
int calculate(int количество, int цена)
{
// это чрезмерное упрощение функции

int tot = количество * цена;
возвращение малыша; }
пустота главная()
{
clrscr();
начало:
cout<<"--------------------------------отель RED CHILLIES------------------------------" ;
cout<<" M. G. ROAD RAIPUR - 492001";
cout<<"\n\t\t\t телефон: 0771-4024196";
cout<<"\n--------------------------------------------------------------------------------";

соиь<&ЛТ;"*категории*\т\tPrice\т\т *категории*\т\tPrice" ;

cout<<"\n\nChinese Noodles\t\t Pizza";
соиь<&ЛТ;"\Н\Н1.Овощи Chowmein\т\т 100 \т\т 7.Красный зеленый пиццу\Т 160";
соиь<&ЛТ;"\Н2.Чили чеснок Лапша\100 т\т\т 8.Делюкс Маргарита\Т 180";
соиь<&ЛТ;"\Н3.Американский китайское рагу\110 т\т\т 9.Томатный Делюкс\Т 180";

соиь<&ЛТ;"\н------------------------------\т\т -----------------------------";

cout<<"\n\nPasta\t\t\t\t суп";
соиь<&ЛТ;"\Н\Н4.Паста красного соуса\160 т\т\т 10.Горячий и кислый\t 70";
соиь<&ЛТ;"Н5\.Мексиканская паста\Т\Т 160\т\т 11.Томатный суп\Т\Т 70";
соиь<&ЛТ;"\Н6.Макароны белым соусом\170 т\т\т 12.Manchow суп\Т 70";

соиь<&ЛТ;"\н-------------------------------\т\т -----------------------------";
инт Нум интервала QT,общая;
char pro;
инт всего;
общий итог=0;
делать
{cout<<"\nEnter номер продукта(1-12)- ";
Кин&ГТ;&ГТ;кол-во;
переключатель(num)
{
случай 1: cout<<"\nEnter количество- ";
cin>>qt;
итого=100*qt;

перерыв;
случай 2: cout<<"\nEnter количество- ";
cin>>qt;
итого=100*qt;

перерыв;
случай 3: cout<<"\nEnter количество- ";
cin>>qt;
итого=110*qt;

перерыв;
случай 4: cout<<"\nEnter количество- ";
cin>>qt;
Итого=160*qt;

перерыв;
случай 5: cout<<"\nEnter количество- ";
cin>>qt;
Итого=160*qt;

перерыв;
случай 6: cout<<"\nEnter количество- ";
cin>>qt;
итого=170*qt;

перерыв;
случай 7: cout<<"\nEnter количество- ";
cin>>qt;
Итого=160*qt;

перерыв;
случай 8: cout<<"\nEnter количество- ";
cin>>qt;
итого=180*qt;

перерыв;
случай 9: cout<<"\nEnter количество- ";
cin>>qt;
итого=180*qt;

перерыв;
случай 10: cout<<"\nEnter количество- ";
cin>>qt;
итого=70*qt;

перерыв;
случай 11: cout<<"\nEnter количество- ";
cin>>qt;
итого=70*qt;

перерыв;
случай 12: cout<<"\nEnter количество- ";
cin>>qt;
итого=70*qt;

перерыв;
}


cout<<"\nDo вы хотите заказать любой другой товар(y/n) ";
cin>>pro;

если(pro=='y')
{
clrscr();
Гото старт;




}
всего=всего+всего;

}
while(pro=='y');




если(pro=='n')
cout<<"total is"<<grandtotal;










геч();
}

Рейтинг:
2

Patrice T

Вам нужно научиться пользоваться break в switch заявление.
-----
Научитесь правильно делать отступы в вашем коде, это покажет его структуру, и это поможет чтению и пониманию. Это также помогает выявлять структурные ошибки.

while(pro=='y');
do{
    for(t=1; ;t++)
sum=t;
}
while(pro=='y') ;
if(pro=='n')
    cout<<"total is"<<sum;

Профессиональные редакторы программистов имеют эту функцию и другие, такие как сопоставление скобок и подсветка синтаксиса.
Блокнот++ Главная Страница[^]
личные[^]
-----
Существует инструмент, который позволяет вам видеть, что делает ваш код, его имя отладчик Это также отличный инструмент обучения, потому что он показывает вам реальность, и вы можете увидеть, какие ожидания соответствуют реальности.
Когда вы не понимаете, что делает ваш код или почему он делает то, что он делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.


Рейтинг:
1

Richard MacCutchan

cin>>qt;
switch(num)
{
case 1: t=100*qt;
case 2: t=100*qt;
case 3: t=100*qt;
case 4: t=100*qt;
case 5: t=100*qt;
case 6: t=100*qt;
case 7: t=100*qt;
case 8: t=100*qt;
case 9: t=100*qt;
case 10: t=100*qt;
case 11: t=100*qt;
case 12: t=100*qt;
}

В чем смысл этого блока переключателей, поскольку каждый случай вычисляет одно и то же значение? А так как у вас нет break операторы вы просто повторяете один и тот же расчет до 12 раз.


Member 13665211

нет, я не редактировал цену.Я только что скопировал 12 раз для 12 продуктов.Когда программа будет сделана я просто переименую ее

Richard MacCutchan

Ну, этот код все еще неправильный.

Member 13665211

пожалуйста, можете ли вы прислать мне точный код

Member 13665211

пожалуйста, можете ли вы прислать мне точный код

Member 13665211

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

Richard MacCutchan

Я не могу делать вашу работу за вас, только помочь вам исправить ошибки. Вернитесь к своим учебным заметкам и проверьте правильный синтаксис блока переключателей. Подумайте, что вы пытаетесь сделать: если общая сумма для продукта равна количеству, умноженному на цену, то вам не нужно проверять, какой это продукт, прежде чем делать расчет. Попробуйте использовать функции для выполнения часто повторяющихся задач, а не иметь все встроенное.

Member 13665211

я просто хочу, чтобы вы это сделали, скажите мне, как я могу просто сделать total=prod*quantity while user want и отобразить чистый итог с помощью do while

Richard MacCutchan

Зачем вам нужно делать/в то время как? Ответ прост: total = price * quantity Таким образом, после выполнения этого расчета вы можете отобразить детали с помощью cout. Если вы хотите получить общую сумму для всех продуктов, то установите другую переменную grandtotal в ноль в начале, а затем каждый раз через цикл вы просто добавляете к ней последнюю сумму.

Member 13665211

пожалуйста, можете ли вы прислать мне формат цикла в соответствии с моим кодированием для выполнения grandtotal bcz, когда я это делаю, просто продолжайте бесконечность

Richard MacCutchan

Цикл for не так уж и сложен:

int index;
for (index = 0; index < 10; index++)
{        I           T        E
    // I: set the initial value to zero
    // perform the code inside the braces
    // E: perform any end of loop expression - in this case add 1 to index
    // T: perform any test expression - in this case compare index to 10, if it is less then repeat the loop, if it is equal or greater terminate the loop
//
}

Member 13665211

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

Richard MacCutchan

Программирование-это не просто написание кода, это больше размышление о том, чего вы пытаетесь достичь. Начните с листа бумаги и запишите свои требования:
- Какие входные данные вам нужно получить?
- какую выходную информацию вам нужно произвести?
- как вы используете входные данные для создания выходных данных?
- какие промежуточные или временные ценности вам нужно сохранить?
и т.д.

С этого момента вы можете начать планировать свою реальную программу. Укажите переменные, которые вы будете использовать и для чего они будут использоваться. Подумайте о том, какие общие функции вам нужны для выполнения вычислений, захвата входных значений, печати отчетов и т. д. затем вы можете закодировать скелет вашей программы и проверить, что происходит при ее запуске. Таким образом, простая начальная точка может быть чем-то вроде:

int calculate(int quantity, int price)
{
    // this is an oversimplification of a function

    int tot = quantity * price;
    return tot;
}
int main()
{
    int grandtotal;
    int total;
    int quantity;
    int price;
    char answer;
    grandtotal = 0;
    do
    {
        cout << "What\'s the quantity?" << endl;
        cin >> quantity;
        if (quantity == 0)
            break; // get out of this loop
        cout << "What\'s the price?" << endl;
        cin >> price;
        total = calculate(quantity, price);
        //
        // display interim result
        //
        grandtotal = grandtotal + total
    } while (true)
    // print the grandtotal message
}

Member 13665211

я создал этот код
можете ли вы помочь мне получить общий итог всего продукта и количества
#include<iostream.h> 7
#включить<conio.h>
int calculate(int количество, int цена)
{
// это чрезмерное упрощение функции

int tot = количество * цена;
возвращение малыша; }
пустота главная()
{
clrscr();
начало:
cout<<"--------------------------------отель RED CHILLIES------------------------------" ;
cout<<" M. G. ROAD RAIPUR - 492001";
cout<<"\n\t\t\t телефон: 0771-4024196";
cout<<"\n--------------------------------------------------------------------------------";

соиь<&ЛТ;"*категории*\т\tPrice\т\т *категории*\т\tPrice" ;

cout<<"\n\nChinese Noodles\t\t Pizza";
соиь<&ЛТ;"\Н\Н1.Овощи Chowmein\т\т 100 \т\т 7.Красный зеленый пиццу\Т 160";
соиь<&ЛТ;"\Н2.Чили чеснок Лапша\100 т\т\т 8.Делюкс Маргарита\Т 180";
соиь<&ЛТ;"\Н3.Американский китайское рагу\110 т\т\т 9.Томатный Делюкс\Т 180";

соиь<&ЛТ;"\н------------------------------\т\т -----------------------------";

cout<<"\n\nPasta\t\t\t\t суп";
соиь<&ЛТ;"\Н\Н4.Паста красного соуса\160 т\т\т 10.Горячий и кислый\t 70";
соиь<&ЛТ;"Н5\.Мексиканская паста\Т\Т 160\т\т 11.Томатный суп\Т\Т 70";
соиь<&ЛТ;"\Н6.Макароны белым соусом\170 т\т\т 12.Manchow суп\Т 70";

соиь<&ЛТ;"\н-------------------------------\т\т -----------------------------";
инт Нум интервала QT,общая;
char pro;
инт всего;
общий итог=0;
делать
{cout<<"\nEnter номер продукта(1-12)- ";
Кин&ГТ;&ГТ;кол-во;
переключатель(num)
{
случай 1: cout<<"\nEnter количество- ";
cin>>qt;
итого=100*qt;

перерыв;
случай 2: cout<<"\nEnter количество- ";
cin>>qt;
итого=100*qt;

перерыв;
случай 3: cout<<"\nEnter количество- ";
cin>>qt;
итого=110*qt;

перерыв;
случай 4: cout<<"\nEnter количество- ";
cin>>qt;
Итого=160*qt;

перерыв;
случай 5: cout<<"\nEnter количество- ";
cin>>qt;
Итого=160*qt;

перерыв;
случай 6: cout<<"\nEnter количество- ";
cin>>qt;
итого=170*qt;

перерыв;
случай 7: cout<<"\nEnter количество- ";
cin>>qt;
Итого=160*qt;

перерыв;
случай 8: cout<<"\nEnter количество- ";
cin>>qt;
итого=180*qt;

перерыв;
случай 9: cout<<"\nEnter количество- ";
cin>>qt;
итого=180*qt;

перерыв;
случай 10: cout<<"\nEnter количество- ";
cin>>qt;
итого=70*qt;

перерыв;
случай 11: cout<<"\nEnter количество- ";
cin>>qt;
итого=70*qt;

перерыв;
случай 12: cout<<"\nEnter количество- ";
cin>>qt;
итого=70*qt;

перерыв;
}


cout<<"\nDo вы хотите заказать любой другой товар(y/n) ";
cin>>pro;

если(pro=='y')
{
clrscr();
Гото старт;




}
всего=всего+всего;

}
while(pro=='y');




если(pro=='n')
cout<<"total is"<<grandtotal;










геч();
}

Richard MacCutchan

Почему вы вернулись к повторению одного и того же кода 12 раз? Я показал вам, как это сделать правильно в моем предыдущем сообщении; используйте это в качестве отправной точки.