Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > C#


Автор: Annna96 14.2.2016, 01:44
Всем привет ! Учусь в швеции на шведском языке ! Дали задание написать программу, которая выводит на экран меню и может обрабатывать ввод и вывод. Программа представляет собой" рюкзак", который управляется через меню. Меню показывает доступные пользователю варианты.(сами варианты: 1Добавить объект , 2Вывести содержание, 3Очистить содержание , 4 Закончить программу).По итогу не поняла как можно очистить содержание , поэтомy сделалa без этого варианта
У меня получился такой код :
namespace ConsoleApplication4
{
class Uppgiftt2
{
static void Main(string[] args)
{
bool sluta = true;
while (sluta)


{ 
Console.WriteLine("\n\tHej och varmt välkomen till mitt program!");
Console.WriteLine("\t[1]Lägg till ett föremål.");
Console.WriteLine("\t[2]Skriv ut innehålet.");
Console.WriteLine("\t[3]Avsluta.");
Console.WriteLine("\tVälj: ");





int Val = Convert.ToInt32(Console.ReadLine());

switch (Val)
{
case 1:
Console.WriteLine("Lägg till föremål");
string formal = Console.ReadLine();


break;
case 2:
Console.WriteLine("\t[1]Lägg till ett föremål.");
Console.WriteLine("\t[2]Skriv ut innehålet.");
Console.WriteLine("\t[3]Avsluta.");
Console.ReadLine();

break;

case 3:
sluta = false;
break;
}
}


}
}
}



Кoментарий от учителя :"У тебя меню стоит на 2 месте программы, это не должна стоять в case 2. Вы получаете проблемы с переменными объектов являются локальными для case 1, поэтому не доступны для остальной части программы"


Пожалуйста обясните в чем ошибки и помогите исправить.!

Автор: solowey 14.2.2016, 15:17
Могу посоветовать разбить программу на функции:
1. Main()
2. Добавить объект
3. Вывести содержание
4. Очистить содержание
5. Закончить программу
В Main создаем цикл while:
Код

switch (Val)
{
case 1:
СоздаемОбъект();
break;

case 2:
ВывестиСодержимое();
break;

case 3:
ОчиститьСодержимое();
break;

case 4:
ЗакончитьПрограмму();
break;
}
}

Далее каждую функцию дописываем, что и как в ней должно делаться...

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/C-id56bfb1eeae2015cf098b4567#findElement_E7045_56c0705bae2015872385f2f4_0

Автор: WERITAS 15.2.2016, 07:14
Я бы сделал класс аля ConsoleInterface у которого был бы один пабликовский метод - Run(), а в нём бы была вся логика с бесконечным циклом while и кейсами. Ну а в маиновской функции были бы только две строчки: создание экземпляра моего класса и вызов его единственного метода Run.
Annna96,  smile 

Автор: chupachups 15.2.2016, 12:41
Вот поколение "ПАМПЕРС" !!! Даже комментарии препода через гугл-переводчик перевел !!! И как только мы учились когда не было ни интернета, ни собственно нормальных книг по программированию ?!

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/C-id56bfb1eeae2015cf098b4567#findElement_E7045_56c19d56ae2015e13a85f1a9_0

Автор: WERITAS 15.2.2016, 12:48
Цитата(chupachups @  15.2.2016,  12:41 Найти цитируемый пост)
И как только мы учились когда не было ни интернета, ни собственно нормальных книг по программированию ?!

"Зато у нас были травка и групповой секс" (с), фрау Недотрахер из  https://ru.wikipedia.org/wiki/%D0%9D%D0%BE%D1%87%D1%8C_%D0%B6%D0%B8%D0%B2%D1%8B%D1%85_%D0%BF%D1%80%D0%B8%D0%B4%D1%83%D1%80%D0%BA%D0%BE%D0%B2

Автор: WERITAS 15.2.2016, 14:14
Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LabaAnnechki
{
    class ConsoleInterface
    {
        private void AddObject()
        {
            //
        }

        private void ShowContent()
        {
            //
        }

        private void ClearContent()
        {
            //
        }

        private int PrintMenu()
        {
            Console.WriteLine("\n\t === МЕНЮ ===");
            Console.WriteLine("\t[1] Добавить объект.");
            Console.WriteLine("\t[2] Вывести содержимое.");
            Console.WriteLine("\t[3] Очистить содержание");
            Console.WriteLine("\t[4] закончить программу");
            
            Console.Write("\nВаш выбор: ");
            
            int result;
            string choice = Console.ReadLine();

            if (! int.TryParse(choice, out result))
                PrintMenu();

            return result;
        }

        public void Run()
        {
            bool terminate = false;

            while (!terminate)
            {
                int val = PrintMenu();

                switch (val)
                {
                    case 1:
                        AddObject();
                        break;
                    
                    case 2:
                        ShowContent();
                        break;
                    
                    case 3:
                        ClearContent();
                        break;

                    case 4:
                        terminate = true;
                        break;
                }
            }
        }
    }


    class Program
    {
        static void Main(string[] args)
        {
            ConsoleInterface console = new ConsoleInterface();
            console.Run();

            Console.Write("\npress any key to continue...");
            Console.ReadLine();
        }
    }
}


...Действительно не надо было печать меню в кейс запихивать, смысл в этом какой?!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)