Member 14164179 Ответов: 3

Как передать метод получения общей стоимости элементов меню?


Я новичок в использовании методов. Мне нужно создать программу на c#, которая получит общую стоимость заказа на стол, однако, похоже, я не могу правильно использовать свои методы. Я знаю, что это полный бардак.

const int Drawer = 30;

            double totalCost = custWood + (custDrawers * DRAWER);

            //methods
            //get wood type
            //get drawer count
            //display final results

           Console.WriteLine("For a desk of type {0} and {1} drawers, the cost is {2}"); 
            Console.ReadLine();
        }//End main method

        private static decimal totalCost(string woodType, int pnumberDrawers, decimal totalCost)
        {
            decimal returnValue = 0;
            returnValue = returnValue + (30 * pNumberDrawers);
            return returnValue;

        }

        private static int GetDrawerCount()

        {
            int returnValue = 0;

            do
            {
                Console.WriteLine("How many drawers would you like?");

            } while (returnValue != 0);


        }

        private static void GetWoodType()
        {
        do
        {

        
            Console.WriteLine("What type of wood do you prefer for your desk?");
            Console.WriteLine("PINE = 100, OAK = 140, MAPLE = 180");
            string returnValue = Console.ReadLine().ToUpper();
            switch (returnValue)
            {
                case "PINE":
                    returnValue = "PINE";
                break;
                case "OAK":
                    returnValue = "OAK"; 
                break;
                case "MAPLE":
                    returnValue = "MAPLE";
                break;
                default:
                    returnValue = "bad";
                    Console.WriteLine("Whoops");
                    break;
            }
            

                } while (returnValue != "bad") ;
            
        }
    }    
}


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

Сначала я завершил код, используя параллельный массив, не используя метод after.


Затем я попытался (и потерпел неудачу) использовать параллельный массив, чтобы вычислить цену, основанную на выборе пользователя.
Затем я попробовал использовать корпус выключателя. Я также пробовал и простые утверждения if.

CHill60

На самом деле ты не сказал, что не так!

3 Ответов

Рейтинг:
12

OriginalGriff

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

Console.WriteLine("For a desk of type {0} and {1} drawers, the cost is {2}");
Потому что вы не предоставляете ни одного из значений параметров, указанных в строке формата.
У вас есть методы, принимающие значения, которые вы не используете, методы, которые работают над тем, что древесина вовлечена, фактически не сохраняя информацию или передавая ее внешнему миру ...

Мне очень жаль это говорить, но я не вижу там ничего, что стоило бы сохранить!

Начните все заново с нуля.
Создайте перечисление - вы знаете, что они есть, да? - для вашего типа древесины:
public enum WoodType
    {
    Pine,
    Oak,
    Maple,
    }

Теперь вы можете создать переменную "дерево" и использовать ее:
WoodType selectedWood = GetWood();
Console.WriteLine("The desk is made of {0}", selectedWood);
int woodCost = GetWoodCost(selectedWood);

Напишите методы, чтобы выбрать древесину и получить древесный костер:
public static WoodType GetWood()
    {
    ...
    }
public static int GetWoodCost(WoodType selectedWood)
    {
    switch (selectedWood)
        {
        case WoodType.Maple: return 100;
        case WoodType.Oak: return 200;
        case WoodType.Pine: return 6;
        }
    throw new ArgumentException("UNhandled wood type: " + selectedWood);
    }
(Я позволю вам заполнить метод GetWood)
Затем проверьте его и убедитесь, что он работает.
Повторите аналогичные операции для ящиков и проверьте это.
Наконец, соберите эти биты в приложение, и вы там.

Это не трудно сделать - честно - но вы должны быть готовы отбросить ошибки, и это может быть трудно. А код, который у вас есть на данный момент, таков ... все ошибки.
Делайте это маленькими кусочками и проверяйте их на ходу - вы доберетесь туда.


Member 14164179

Большое спасибо. Я понимаю, какой путь мне нужно избрать. Я опубликую решение, как только закончу.

OriginalGriff

Превосходно! Удачи вам!

Рейтинг:
0

Gerry Schmitz

Есть так много неправильных вещей; вам нужно сначала изучить основы. Начните с приложения, которое "работает"; затем немного измените его, чтобы получить то, что вы хотите. Ваша нынешняя методология не очень продуктивна.

Hello World - ваша первая программа - руководство по программированию на C# | Microsoft Docs[^]


Рейтинг:
0

Member 14164179

Это заняло некоторое время, но вот идет.

int drawers;
    string wood;
    double price;

    drawers = GetDrawers();
    wood = GetWood();
    price = TotalPrice(drawers, wood);
    Display(drawers, wood, price);
    Console.ReadLine();
}

        private static void Display(int drawers, string wood, double price)
        {
            Console.WriteLine("For your desk made of {0} with {1} drawers", wood, drawers);
            Console.WriteLine("your price is {0:c}.", price);

        }

        private static double TotalPrice(int drawers, string wood)
        {
            const int PINEC = 100;
            const int OAKC = 140;
            const int MAPLEC = 180;
            const int DRAWER = 30;

            double cost = 0;
            cost = cost + drawers * DRAWER;
            if (wood == "pine")
            {
                cost = cost + PINEC;
            }
            if (wood == "oak")
            {
                cost = cost + OAKC;
            }
            if (wood == "maple")
            {
                cost = cost + MAPLEC;
            }
            return cost;
        }

        private static string GetWood()
        {
            Console.WriteLine("for desk {0}, what kind of wood?");
            Console.WriteLine("Pine, Oak, or Maple.");
            return (Console.ReadLine().ToLower());
        }

        private static int GetDrawers()
        {
            Console.WriteLine("for desk {0}, how many drawers (0-3)?");
            return Convert.ToInt32(Console.ReadLine());
        }
    }
}