예제 #1
0
        public void Peek_ReturnStackPeek()
        {
            myStack.Push("a");
            myStack.Push("b");
            myStack.Push("c");

            string[] actualArray = new string[3];
            myStack.CopyTo(actualArray, 0);

            var result = myStack.Peek();

            Assert.AreEqual(actualArray[2], result);
        }
예제 #2
0
        static void MainMenu()
        {
            //Флаг правильности ввода
            bool ok = true;
            //Флаг завершения работы
            bool Finish = false;

            // Стек элементов иерархии
            MyStack <Challenge> ExamsStack = new MyStack <Challenge>();
            // Вспомогательная переменная для заполнения стека
            Random    rnd          = new Random();
            Challenge ElementToAdd = null;

            // Первоначальное заполнение стека
            for (ushort i = 0; i < 1000; i++)
            {
                switch (rnd.Next(4))
                {
                case 0:
                    ElementToAdd = new Challenge();
                    break;

                case 1:
                    ElementToAdd = new Test();
                    break;

                case 2:
                    ElementToAdd = new Exam();
                    break;

                case 3:
                    ElementToAdd = new GraduateExam();
                    break;
                }

                ExamsStack.Push(ElementToAdd);
            }

            Console.WriteLine("Успешно создан новый стек емкостью {0} с количеством элементов {1}.",
                              ExamsStack.Capacity, ExamsStack.Count);

            do
            {
                do
                {
                    Console.Clear();
                    //Вывод меню
                    Console.WriteLine();
                    Console.WriteLine("1 - Создание нового стека");
                    Console.WriteLine("2 - Печать стека");
                    Console.WriteLine("3 - Удалить элемент");
                    Console.WriteLine("4 - Добавить новый элемент");
                    Console.WriteLine("5 - Перевод в массив с помощью метода ToArray");
                    Console.WriteLine("6 - Перевод в массив с помощью метода CopyTo");
                    Console.WriteLine("7 - Клонирование коллекции");
                    Console.WriteLine("8 - Поиск элемента");
                    Console.WriteLine("9 - Выход");

                    //Выбор пункта меню и вызов соответствующих функций
                    int ChosenOption = Int32.Parse(Console.ReadLine());
                    Console.WriteLine();

                    switch (ChosenOption)
                    {
                    // Создание новой таблицы
                    case 1:

                        ExamsStack.Clear();
                        // Ввод количества элементов
                        int NumberToAdd = InputOutput.InputNumber(10, 1000);
                        ExamsStack = new MyStack <Challenge>(NumberToAdd);

                        for (ushort i = 0; i < NumberToAdd; i++)
                        {
                            switch (rnd.Next(4))
                            {
                            case 0:
                                ElementToAdd = new Challenge();
                                break;

                            case 1:
                                ElementToAdd = new Test();
                                break;

                            case 2:
                                ElementToAdd = new Exam();
                                break;

                            case 3:
                                ElementToAdd = new GraduateExam();
                                break;
                            }

                            ExamsStack.Push(ElementToAdd);
                        }

                        Console.WriteLine("Успешно создан новый стек емкостью {0} с количеством элементов {1}.",
                                          ExamsStack.Capacity, ExamsStack.Count);
                        ok = true;
                        break;

                    // Печать таблицы
                    case 2:
                        foreach (Challenge Element in ExamsStack)
                        {
                            Element.Show();
                        }
                        ok = true;
                        break;

                    // Удаление элемента
                    case 3:
                        ExamsStack.Pop();
                        Console.WriteLine("Последний элемент стека удален.");
                        ok = true;
                        break;

                    // Создание элемента
                    case 4:
                        // Тип создаваемого объекта
                        int Option = 0;
                        ChooseTypeMenu(out Option);

                        switch (Option)
                        {
                        case 1:
                            Console.Write("Введите ФИО студента: ");
                            string Name = Console.ReadLine();
                            Console.Write("Введите общее количество задач: ");
                            ushort TasksTotal = UInt16.Parse(Console.ReadLine());
                            Console.Write("Введите количество решенных задач: ");
                            ushort TasksDone = UInt16.Parse(Console.ReadLine());

                            ExamsStack.Push(new Challenge(Name, TasksTotal, TasksDone));
                            break;

                        case 2:
                            Console.Write("Введите ФИО студента: ");
                            Name = Console.ReadLine();
                            Console.Write("Введите общее количество задач: ");
                            TasksTotal = UInt16.Parse(Console.ReadLine());
                            Console.Write("Введите количество решенных задач: ");
                            TasksDone = UInt16.Parse(Console.ReadLine());

                            ExamsStack.Push(new Test(Name, TasksTotal, TasksDone));
                            break;

                        case 3:
                            Console.Write("Введите ФИО студента: ");
                            Name = Console.ReadLine();
                            Console.Write("Введите общее количество задач: ");
                            TasksTotal = UInt16.Parse(Console.ReadLine());
                            Console.Write("Введите количество решенных задач: ");
                            TasksDone = UInt16.Parse(Console.ReadLine());
                            Console.Write("Введите предмет, по которому был экзамен: ");
                            string Subject = Console.ReadLine();

                            ExamsStack.Push(new Exam(Name, Subject, TasksTotal, TasksDone));
                            break;

                        case 4:
                            Console.Write("Введите ФИО студента: ");
                            Name = Console.ReadLine();
                            Console.Write("Введите общее количество задач: ");
                            TasksTotal = UInt16.Parse(Console.ReadLine());
                            Console.Write("Введите количество решенных задач: ");
                            TasksDone = UInt16.Parse(Console.ReadLine());
                            Console.Write("Введите предмет, по которому был экзамен: ");
                            Subject = Console.ReadLine();
                            Console.Write("Введите учебное заведение, откуда выпускается студент: ");
                            string Organisation = Console.ReadLine();

                            ExamsStack.Push(new GraduateExam(Name, Subject, Organisation, TasksTotal, TasksDone));
                            break;
                        }

                        Console.WriteLine("Текущая емкость коллекции равна {0}, количество элементов равно {1}.", ExamsStack.Capacity, ExamsStack.Count);
                        ok = true;
                        break;

                    // Перевод в массив с помощью метода ToArray
                    case 5:
                        Challenge[] ExamsArray = ExamsStack.ToArray();
                        foreach (Challenge Element in ExamsArray)
                        {
                            Element.Show();
                        }
                        ok = true;
                        break;

                    // Перевод в массив с помощью метода CopyTo
                    case 6:
                        ExamsArray = new Challenge[ExamsStack.Count];
                        ExamsStack.CopyTo(ExamsArray, 0);
                        foreach (Challenge Element in ExamsArray)
                        {
                            Element.Show();
                        }
                        ok = true;
                        break;

                    // Клонирование стека
                    case 7:
                        MyStack <Challenge> ClonedStack = ExamsStack.Clone() as MyStack <Challenge>;
                        foreach (Challenge Element in ClonedStack)
                        {
                            Element.Show();
                        }

                        ok = true;
                        break;

                    // Поиск элемента по ключу
                    case 8:
                        Option = 0;
                        ChooseTypeMenu(out Option);

                        switch (Option)
                        {
                        case 1:
                            Console.Write("Введите ФИО студента: ");
                            string Name = Console.ReadLine();
                            Console.Write("Введите общее количество задач: ");
                            ushort TasksTotal = UInt16.Parse(Console.ReadLine());
                            Console.Write("Введите количество решенных задач: ");
                            ushort TasksDone = UInt16.Parse(Console.ReadLine());

                            bool contains = ExamsStack.Contains(new Challenge(Name, TasksTotal, TasksDone));
                            Console.WriteLine("В коллекции присутствует указанный элемент: {0}",
                                              ExamsStack.Contains(new Challenge(Name, TasksTotal, TasksDone)));
                            break;

                        case 2:
                            Console.Write("Введите ФИО студента: ");
                            Name = Console.ReadLine();
                            Console.Write("Введите общее количество задач: ");
                            TasksTotal = UInt16.Parse(Console.ReadLine());
                            Console.Write("Введите количество решенных задач: ");
                            TasksDone = UInt16.Parse(Console.ReadLine());

                            Console.WriteLine("В коллекции присутствует указанный элемент: {0}",
                                              ExamsStack.Contains(new Test(Name, TasksTotal, TasksDone)));
                            break;

                        case 3:
                            Console.Write("Введите ФИО студента: ");
                            Name = Console.ReadLine();
                            Console.Write("Введите общее количество задач: ");
                            TasksTotal = UInt16.Parse(Console.ReadLine());
                            Console.Write("Введите количество решенных задач: ");
                            TasksDone = UInt16.Parse(Console.ReadLine());
                            Console.Write("Введите предмет, по которому был экзамен: ");
                            string Subject = Console.ReadLine();

                            Console.WriteLine("В коллекции присутствует указанный элемент: {0}",
                                              ExamsStack.Contains(new Exam(Name, Subject, TasksTotal, TasksDone)));
                            break;

                        case 4:
                            Console.Write("Введите ФИО студента: ");
                            Name = Console.ReadLine();
                            Console.Write("Введите общее количество задач: ");
                            TasksTotal = UInt16.Parse(Console.ReadLine());
                            Console.Write("Введите количество решенных задач: ");
                            TasksDone = UInt16.Parse(Console.ReadLine());
                            Console.Write("Введите предмет, по которому был экзамен: ");
                            Subject = Console.ReadLine();
                            Console.Write("Введите учебное заведение, откуда выпускается студент: ");
                            string Organisation = Console.ReadLine();

                            Console.WriteLine("В коллекции присутствует указанный элемент: {0}",
                                              ExamsStack.Contains(new GraduateExam(Name, Subject, Organisation, TasksTotal, TasksDone)));
                            break;
                        }

                        ok = true;
                        break;

                    case 9:
                        Finish = ok = true;
                        break;

                    default:
                        ok = false;
                        break;
                    }
                } while (!ok);

                if (!Finish && ok)
                {
                    Console.WriteLine("Нажмите любую клавишу...");
                    Console.ReadKey();
                }
            } while (!Finish);
        }