コード例 #1
0
        static void MainMenu()
        {
            //Флаг правильности ввода
            bool ok = true;
            //Флаг завершения работы
            bool Finish = false;

            // Хеш-таблица элементов иерархии
            Hashtable ExamsTable = new Hashtable();
            // Вспомогательная переменная для заполнения таблицы
            Random    rnd          = new Random();
            Challenge ElementToAdd = null;

            // Первоначальное заполнение таблицы
            for (ushort i = 0; i < 1000; i++)
            {
                do
                {
                    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;
                    }
                }while (ExamsTable.ContainsKey(ElementToAdd.GetName));

                ExamsTable.Add(ElementToAdd.GetName, ElementToAdd);
            }

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

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

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

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

                        for (ushort i = 0; i < NumberToAdd; i++)
                        {
                            do
                            {
                                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;
                                }
                            }while (ExamsTable.ContainsKey(ElementToAdd.GetName));

                            ExamsTable.Add(ElementToAdd.GetName, ElementToAdd);
                        }

                        Console.WriteLine("Новая таблица успешно создана.");
                        ok = true;
                        break;

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

                    // Удаление элемента
                    case 3:
                        Console.Write("Введите ключ (ФИО) элемента, который Вы хотите удалить: ");
                        string KeyToDelete = Console.ReadLine();
                        if (ExamsTable.ContainsKey(KeyToDelete))
                        {
                            ExamsTable.Remove(KeyToDelete);
                            Console.WriteLine("Элемент с указанным ключом удален.");
                        }
                        else
                        {
                            Console.WriteLine("Элемента с таким ключом не найдено.");
                        }
                        ok = true;
                        break;

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

                        switch (Option)
                        {
                        case 1:
                            string Name = "";
                            do
                            {
                                Console.Write("Введите ФИО студента: ");
                                Name = Console.ReadLine();
                                if (ExamsTable.ContainsKey(Name))
                                {
                                    Console.WriteLine("В таблице уже есть элемент с таким ключом.");
                                }
                            } while (ExamsTable.ContainsKey(Name));
                            Console.Write("Введите общее количество задач: ");
                            ushort TasksTotal = UInt16.Parse(Console.ReadLine());
                            Console.Write("Введите количество решенных задач: ");
                            ushort TasksDone = UInt16.Parse(Console.ReadLine());

                            ExamsTable.Add(Name, new Challenge(Name, TasksTotal, TasksDone));
                            break;

                        case 2:
                            do
                            {
                                Console.Write("Введите ФИО студента: ");
                                Name = Console.ReadLine();
                                if (ExamsTable.ContainsKey(Name))
                                {
                                    Console.WriteLine("В таблице уже есть элемент с таким ключом.");
                                }
                            } while (ExamsTable.ContainsKey(Name));
                            Console.Write("Введите общее количество задач: ");
                            TasksTotal = UInt16.Parse(Console.ReadLine());
                            Console.Write("Введите количество решенных задач: ");
                            TasksDone = UInt16.Parse(Console.ReadLine());

                            ExamsTable.Add(Name, new Test(Name, TasksTotal, TasksDone));
                            break;

                        case 3:
                            do
                            {
                                Console.Write("Введите ФИО студента: ");
                                Name = Console.ReadLine();
                                if (ExamsTable.ContainsKey(Name))
                                {
                                    Console.WriteLine("В таблице уже есть элемент с таким ключом.");
                                }
                            } while (ExamsTable.ContainsKey(Name));
                            Console.Write("Введите общее количество задач: ");
                            TasksTotal = UInt16.Parse(Console.ReadLine());
                            Console.Write("Введите количество решенных задач: ");
                            TasksDone = UInt16.Parse(Console.ReadLine());
                            Console.Write("Введите предмет, по которому был экзамен: ");
                            string Subject = Console.ReadLine();

                            ExamsTable.Add(Name, new Exam(Name, Subject, TasksTotal, TasksDone));
                            break;

                        case 4:
                            do
                            {
                                Console.Write("Введите ФИО студента: ");
                                Name = Console.ReadLine();
                                if (ExamsTable.ContainsKey(Name))
                                {
                                    Console.WriteLine("В таблице уже есть элемент с таким ключом.");
                                }
                            } while (ExamsTable.ContainsKey(Name));
                            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();

                            ExamsTable.Add(Name, new GraduateExam(Name, Subject, Organisation, TasksTotal, TasksDone));
                            break;
                        }

                        ok = true;
                        break;

                    case 5:
                        // Счетчик
                        int Counter = 0;
                        // Ввод оценки
                        double MarkToFind = InputOutput.InputMark();
                        // Перебор элементов
                        foreach (DictionaryEntry DE in ExamsTable)
                        {
                            if ((DE.Value as Challenge).GetMark >= MarkToFind)
                            {
                                Counter++;
                            }
                        }
                        Console.WriteLine("{0} студентов получили за работу оценку не менее {1}.", Counter, MarkToFind);

                        ok = true;
                        break;

                    case 6:
                        // Ввод оценки
                        MarkToFind = InputOutput.InputMark();
                        Console.WriteLine("Студенты, получившие за работу оценку не менее {0}:", MarkToFind);
                        // Перебор элементов
                        foreach (DictionaryEntry DE in ExamsTable)
                        {
                            if ((DE.Value as Challenge).GetMark >= MarkToFind)
                            {
                                (DE.Value as Challenge).Show();
                            }
                        }

                        ok = true;
                        break;

                    case 7:
                        // Ввод оценки
                        MarkToFind = InputOutput.InputMark();
                        Console.WriteLine("Студенты, получившие за экзамен оценку не менее {0}:", MarkToFind);
                        // Перебор элементов
                        foreach (DictionaryEntry DE in ExamsTable)
                        {
                            // Если экзамен и удовлетворяет условию
                            if ((DE.Value is Exam) || (DE.Value is GraduateExam) &&
                                ((DE.Value as Challenge).GetMark >= MarkToFind))
                            {
                                (DE.Value as Challenge).Show();
                            }
                        }

                        ok = true;
                        break;

                    // Клонирование таблицы
                    case 8:
                        Hashtable ClonedTable = ExamsTable.Clone() as Hashtable;
                        foreach (DictionaryEntry DE in ClonedTable)
                        {
                            (DE.Value as Challenge).Show();
                        }
                        ok = true;
                        break;

                    // Поиск элемента по ключу
                    case 9:
                        Console.Write("Введите ключ (ФИО) элемента, который Вы хотите найти: ");
                        string KeyToFind = Console.ReadLine();
                        if (!ExamsTable.ContainsKey(KeyToFind))
                        {
                            Console.WriteLine("Элемента с таким ключом не найдено.");
                        }
                        else
                        {
                            (ExamsTable[KeyToFind] as Challenge).Show();
                        }
                        ok = true;
                        break;

                    case 10:
                        Finish = ok = true;
                        break;

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

                if (!Finish && ok)
                {
                    Console.WriteLine("Нажмите любую клавишу...");
                    Console.ReadKey();
                }
            } while (!Finish);
        }
コード例 #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);
        }