Exemple #1
0
 public void AddAll(ShapeAccumulator accum)
 {
     if (accum == null)
     {
         throw new ArgumentException("В функцию передана пустая фигура");
     }
     for (int i = 0; i < accum.figures.Count; i++)
     {
         Add(accum.figures[i]);
     }
 }
Exemple #2
0
        public static void Save(ShapeAccumulator figures)
        {
            if (figures.figures.Count == 0)
            {
                return;
            }
            ShapeAccumulator shapeAccumulator = new ShapeAccumulator();

            Load(figures);
            shapeAccumulator.AddAll(figures);
            using (FileStream fs = new FileStream(figures.path + $"/figures.shape", FileMode.OpenOrCreate))
            {
                figures.formatter.Serialize(fs, shapeAccumulator.figures);
            }
        }
Exemple #3
0
 public static void Load(ShapeAccumulator figures)
 {
     string[] fileEntries = Directory.GetFiles(figures.path, "*.shape");
     foreach (string item in fileEntries)
     {
         using (FileStream fs = new FileStream(item, FileMode.OpenOrCreate))
         {
             List <IFigure> fig = (List <IFigure>)figures.formatter.Deserialize(fs);
             if (fig.Count == 0)
             {
                 return;
             }
             figures.AddAll(fig);
         }
     }
 }
Exemple #4
0
 public static void Delete_Save(ShapeAccumulator figures) => File.Delete(figures.path + $"/figures.shape");
Exemple #5
0
        private static void Main(string[] args)
        {
switch_1:
            Console.WriteLine("Выберите лабораторную (2 или 5)\n");
            switch (Console.ReadLine())
            {
            case "2":
Square_goto:
                Console.WriteLine("Квадрат\n");
                Square square;
                try
                {
                    square = new Square(Points_for_Square());
                }
                catch (ArgumentException ex)
                {
                    Console.WriteLine($"Ошибка: {ex.Message}, пожалуйста, повторите попытку\n");
                    goto Square_goto;
                }
                catch (FormatException)
                {
                    Console.WriteLine("Ошибка: данный формат не преобразован в integer, пожалуйста, повторите попытку\n");
                    goto Square_goto;
                }
                catch (OverflowException)
                {
                    Console.WriteLine("Ошибка: данное число слишком велико, пожалуйста, повторите попытку\n");
                    goto Square_goto;
                }
Rectangle_goto:
                Console.WriteLine("Прямоугольник\n");
                Rectangle rectangle;
                try
                {
                    rectangle = new Rectangle(Points_for_Rectangle());
                }
                catch (ArgumentException ex)
                {
                    Console.WriteLine($"Ошибка: {ex.Message}, пожалуйста, повторите попытку\n");
                    goto Rectangle_goto;
                }
                catch (FormatException)
                {
                    Console.WriteLine("Ошибка: данный формат не преобразован в integer, пожалуйста, повторите попытку\n");
                    goto Rectangle_goto;
                }
                catch (OverflowException)
                {
                    Console.WriteLine("Ошибка: данное число слишком велико, пожалуйста, повторите попытку\n");
                    goto Rectangle_goto;
                }
Circle_goto:
                Console.WriteLine("Круг\n");
                Circle circle;
                try
                {
                    circle = new Circle(Points_for_Circle());
                }
                catch (ArgumentException ex)
                {
                    Console.WriteLine($"Ошибка: {ex.Message}, пожалуйста, повторите попытку\n");
                    goto Circle_goto;
                }
                catch (FormatException)
                {
                    Console.WriteLine($"Ошибка: данный формат не преобразован в integer, пожалуйста, повторите попытку\n");
                    goto Circle_goto;
                }
                catch (OverflowException)
                {
                    Console.WriteLine("Ошибка: данное число слишком велико, пожалуйста, повторите попытку\n");
                    goto Circle_goto;
                }
Triangle_goto:
                Console.WriteLine("Треугольник\n");
                Triangle triangle;
                try
                {
                    triangle = new Triangle(Points_for_Triangle());
                }
                catch (ArgumentException ex)
                {
                    Console.WriteLine($"Ошибка: {ex.Message}, пожалуйста, повторите попытку\n");
                    goto Triangle_goto;
                }
                catch (FormatException)
                {
                    Console.WriteLine($"Ошибка: данный формат не преобразован в integer, пожалуйста, повторите попытку\n");
                    goto Triangle_goto;
                }
                catch (OverflowException)
                {
                    Console.WriteLine("Ошибка: данное число слишком велико, пожалуйста, повторите попытку\n");
                    goto Triangle_goto;
                }
                List <IFigure> figures = new List <IFigure>(4);
                figures.Add(circle);
                Console.Write("Площадь круга равна {0}, периметр равен {1}\n", circle.CalcArea(), circle.CalcPerimeter());
                figures.Add(rectangle);
                Console.Write("Площадь прямоугольника равна {0}, периметр равен {1}\n", rectangle.CalcArea(), rectangle.CalcPerimeter());
                figures.Add(square);
                Console.Write("Площадь квадрата равна {0}, периметр равен {1}\n", square.CalcArea(), square.CalcPerimeter());
                figures.Add(triangle);
                Console.Write(triangle);
                Console.WriteLine();
                Console.Write("Фигура с максимальным периметром- {0}\n", Calc_Max_P(figures));
                Console.Write("Фигура с максимальной площадью- {0}\n", Calc_Max_A(figures));
                Console.Write("Фигура с минимальным периметром- {0}\n", Calc_Min_P(figures));
                Console.Write("Фигура с минимальной площадью- {0}\n", Calc_Min_A(figures));
                Console.Write("Сумма всех площадей равна: {0}\n", Calc_All_Areas(figures));
                Console.Write("Сумма всех периметров равна: {0}\n", Calc_All_Perimeterms(figures));
                break;

            case "5":
                int              user_choice  = 0;
                int              counter      = 0;
                List <IFigure>   FiguresList  = new List <IFigure>();
                IFigure[]        FiguresArray = null;
                ShapeAccumulator MainAcc      = new ShapeAccumulator("MainAcc");
                ShapeAccumulator SideAcc      = new ShapeAccumulator();
                int              ArraySize    = 0;
Add_Figure:
                Console.WriteLine("Выберите, что вы хотите создать:\n1.Квадрат\n2.Круг\n3.Прямоугольник\n4.Треугольник\n\n5.Перейти к работе с основным ShapeAccumulator\n");
                IFigure figure;
                switch (Convert.ToInt32(Console.ReadLine()))
                {
                case 1:
                    Console.WriteLine("Квадрат\n");

                    try
                    {
                        figure = new Square(Points_for_Square());
                    }
                    catch (ArgumentException ex)
                    {
                        Console.WriteLine($"Ошибка: {ex.Message}, пожалуйста, повторите попытку\n");
                        goto case 1;
                    }
                    catch (FormatException)
                    {
                        Console.WriteLine("Ошибка: данный формат не преобразован в integer, пожалуйста, повторите попытку\n");
                        goto case 1;
                    }
                    catch (OverflowException)
                    {
                        Console.WriteLine("Ошибка: данное число слишком велико, пожалуйста, повторите попытку\n");
                        goto case 1;
                    }
                    break;

                case 2:
                    Console.WriteLine("Круг\n");
                    try
                    {
                        figure = new Circle(Points_for_Circle());
                    }
                    catch (ArgumentException ex)
                    {
                        Console.WriteLine($"Ошибка: {ex.Message}, пожалуйста, повторите попытку\n");
                        goto case 2;
                    }
                    catch (FormatException)
                    {
                        Console.WriteLine($"Ошибка: данный формат не преобразован в integer, пожалуйста, повторите попытку\n");
                        goto case 2;
                    }
                    catch (OverflowException)
                    {
                        Console.WriteLine("Ошибка: данное число слишком велико, пожалуйста, повторите попытку\n");
                        goto case 2;
                    }
                    break;

                case 3:
                    Console.WriteLine("Прямоугольник\n");
                    try
                    {
                        figure = new Rectangle(Points_for_Rectangle());
                    }
                    catch (ArgumentException ex)
                    {
                        Console.WriteLine($"Ошибка: {ex.Message}, пожалуйста, повторите попытку\n");
                        goto case 3;
                    }
                    catch (FormatException)
                    {
                        Console.WriteLine("Ошибка: данный формат не преобразован в integer, пожалуйста, повторите попытку\n");
                        goto case 3;
                    }
                    catch (OverflowException)
                    {
                        Console.WriteLine("Ошибка: данное число слишком велико, пожалуйста, повторите попытку\n");
                        goto case 3;
                    }
                    break;

                case 4:
                    Console.WriteLine("Треугольник\n");
                    try
                    {
                        figure = new Triangle(Points_for_Triangle());
                    }
                    catch (ArgumentException ex)
                    {
                        Console.WriteLine($"Ошибка: {ex.Message}, пожалуйста, повторите попытку\n");
                        goto case 4;
                    }
                    catch (FormatException)
                    {
                        Console.WriteLine($"Ошибка: данный формат не преобразован в integer, пожалуйста, повторите попытку\n");
                        goto case 4;
                    }
                    catch (OverflowException)
                    {
                        Console.WriteLine("Ошибка: данное число слишком велико, пожалуйста, повторите попытку\n");
                        goto case 4;
                    }
                    break;

                case 5:
                    Console.WriteLine("Если хотите соханить фигуры, находящиеся в ShapeAccumulator, введите 1, если хотите загрузить уже сохранённые, введите 2.\nЕсли хотите очистить файл с сохранёнными фигурами, нажмите 3\n");
SwitchSaveLoad:
                    switch (Console.ReadLine())
                    {
                    case "1":
                        try
                        {
                            Save(MainAcc);
                        }
                        catch (ArgumentNullException ex)
                        {
                            Console.WriteLine($"Ошибка: {ex.Message}\n");
                        }
                        catch (FileNotFoundException)
                        {
                            Console.WriteLine("Ошибка: файла не существует\n");
                        }
                        break;

                    case "2":
                        int save = MainAcc.figures.Count;
                        try
                        {
                            Load(MainAcc);
                        }
                        catch (FileNotFoundException)
                        {
                            Console.WriteLine("Ошибка: файла не существует\n");
                        }
                        Console.WriteLine($"Из файла загружено {MainAcc.figures.Count - save} фигур\n");
                        Console.WriteLine(MainAcc);
                        if (MainAcc.figures.Count != save)
                        {
                            Console.WriteLine("Желаете сохранить этот список фигур?\n1. Да\n2. Нет\n");
SwitchNewSave:
                            switch (Console.ReadLine())
                            {
                            case "1":
                                Delete_Save(MainAcc);
                                Save(MainAcc);
                                break;

                            case "2":
                                break;

                            default:
                                Console.WriteLine("Нет такого варианта, попробуйте ещё раз\n");
                                goto SwitchNewSave;
                            }
                        }
                        break;

                    case "3":
                        Delete_Save(MainAcc);
                        break;

                    default:
                        Console.WriteLine("Нет такого варианта, попробуйте ещё раз\n");
                        goto SwitchSaveLoad;
                    }
                    Console.WriteLine($"Количество фигур в ShapeAccumulator: {MainAcc.figures.Count}\n");
                    Console.WriteLine($"Фигура с наибольшей площадью: { MainAcc.MaxAreaShape()}\n");
                    Console.WriteLine($"Фигура с наибольшим периметром: { MainAcc.MaxPerimeterShape()}\n");
                    Console.WriteLine($"Фигура с наименьшей площадью: { MainAcc.MinAreaShape()}\n");
                    Console.WriteLine($"Фигура с наименьим периметром: { MainAcc.MinPerimeterShape()}\n");
                    Console.WriteLine($"Сумма всех площадей: { MainAcc.TotalArea()}\n");
                    Console.WriteLine($"Сумма всех периметров: { MainAcc.TotalPerimeter()}\n");
                    goto EndOfProg;

                default:
                    Console.WriteLine("В меню не было такого варианта, повторите попытку\n");
                    goto Add_Figure;
                }
                counter++;
switch_2:
                if (counter == 1)
                {
                    Console.WriteLine("Хотите добавить эту фигуру:\n1.В список\n2.В массив\n3.В отдельный ShapeAccumulator\n4.Cразу в основной ShapeAccumulator?\n");
                    user_choice = Convert.ToInt32(Console.ReadLine());
                }

                switch (user_choice)
                {
                case 1:
                    FiguresList.Add(figure);
                    Console.WriteLine("Хотите добавить ещё фигур в дополнительный ShapeAccumulator?\n1.Да\n2.Нет\n");
                    switch (Convert.ToInt32(Console.ReadLine()))
                    {
                    case 1:
                        goto Add_Figure;

                    case 2:
                        MainAcc.AddAll(FiguresList);
                        FiguresList = new List <IFigure>();
                        counter     = 0;
                        goto Add_Figure;

                    default:
                        break;
                    }
                    goto Add_Figure;

                case 2:
                    if (counter == 1)
                    {
                        Console.WriteLine("Введите размер массива\n");
                        ArraySize    = Convert.ToInt32(Console.ReadLine());
                        FiguresArray = new IFigure[ArraySize];
                    }
                    FiguresArray[counter - 1] = figure;
                    if (counter == ArraySize)
                    {
                        MainAcc.AddAll(FiguresArray);
                        FiguresArray = null;
                        counter      = 0;
                        goto Add_Figure;
                    }

                    goto Add_Figure;

                case 3:
                    SideAcc.Add(figure);
switch_3:
                    Console.WriteLine("Хотите добавить ещё фигур в дополнительный ShapeAccumulator?\n1.Да\n2.Нет\n");
                    switch (Convert.ToInt32(Console.ReadLine()))
                    {
                    case 1:
                        goto Add_Figure;

                    case 2:
                        MainAcc.AddAll(SideAcc);
                        SideAcc = new ShapeAccumulator();
                        counter = 0;
                        goto Add_Figure;

                    default:
                        Console.WriteLine("В меню не было такого варианта, повторите попытку\n");
                        goto switch_3;
                    }

                case 4:
                    MainAcc.Add(figure);
                    counter = 0;
                    goto Add_Figure;

                default:
                    Console.WriteLine("В меню не было такого варианта, повторите попытку\n");
                    goto switch_2;
                }

            default:
                Console.WriteLine("В меню не было такого варианта, повторите попытку\n");
                goto switch_1;
            }
            EndOfProg : { }
        }