Example #1
0
 private float TongPhepTinhMinMaxTheoHinh <T>(DanhSachHinhHoc danhSachHinhHoc, TypeMinMax typeMinMax)
 {
     if (typeMinMax == TypeMinMax.MaxDienTich || typeMinMax == TypeMinMax.MaxChuVi)
     {
         return(danhSachHinhHoc.ListHinhHoc.FindAll(p => p is T).Sum(x => x.TinhDienTich()));
     }
     else
     {
         return(danhSachHinhHoc.ListHinhHoc.FindAll(p => p is T).Sum(x => x.TinhChuVi()));
     }
 }
Example #2
0
        public string HinhCoTongPhepTinhMinMax(DanhSachHinhHoc danhSachHinhHoc, TypeMinMax typeMinMax)
        {
            float hinhVuong   = TongPhepTinhMinMaxTheoHinh <HinhVuong>(danhSachHinhHoc, typeMinMax);
            float hinhTron    = TongPhepTinhMinMaxTheoHinh <HinhTron>(danhSachHinhHoc, typeMinMax);
            float hinhChuNhat = TongPhepTinhMinMaxTheoHinh <HinhChuNhat>(danhSachHinhHoc, typeMinMax);

            if (typeMinMax == TypeMinMax.MaxDienTich || typeMinMax == TypeMinMax.MaxChuVi)
            {
                return(hinhVuong > hinhTron ? (hinhVuong > hinhChuNhat ? "Hình Vuông" : "Hình Chữ Nhật") : (hinhTron > hinhChuNhat ? "Hình Tròn" : "Hình Chữ Nhật"));
            }
            return(hinhVuong < hinhTron ? (hinhVuong < hinhChuNhat ? "Hình Vuông" : "Hình Chữ Nhật") : (hinhTron < hinhChuNhat ? "Hình Tròn" : "Hình Chữ Nhật"));
        }
Example #3
0
        public void GhiFile <T>(DanhSachHinhHoc danhSachHinhHoc, TypeList typeList)
        {
            StringBuilder   str      = new StringBuilder();
            StringBuilder   filename = new StringBuilder();
            StringBuilder   kq       = new StringBuilder();
            DanhSachHinhHoc result   = new DanhSachHinhHoc();

            switch (typeList)
            {
            case TypeList.HinhVuong:
                str.Append("hinhvuong");
                filename.Append(str + ".txt");
                result.ListHinhHoc = DanhSachTheoKieuHinh <T>(danhSachHinhHoc);
                kq.Append($"\n\n\t\t\tDANH SACH {str.ToString().ToUpper()}\n{result}\n");
                break;

            case TypeList.HinhTron:
                str.Append("hinhtron");
                filename.Append(str + ".txt");
                result.ListHinhHoc = DanhSachTheoKieuHinh <T>(danhSachHinhHoc);
                kq.Append($"\n\n\t\t\tDANH SACH {str.ToString().ToUpper()}\n{result}\n");
                break;

            case TypeList.HinhChuNhat:
                str.Append("hinhchunhat");
                filename.Append(str + ".txt");
                result.ListHinhHoc = DanhSachTheoKieuHinh <T>(danhSachHinhHoc);
                kq.Append($"\n\n\t\t\tDANH SACH {str.ToString().ToUpper()}\n{result}\n");
                break;

            case TypeList.TatCaHinh:
                str.Append("tatcahinh");
                filename.Append(str + ".txt");
                kq.Append($"\t\t\tBANG TONG HOP THONG TIN\n1) Tong so cac doi tuong hinh hoc la: {DemTheoHinh<HinhHoc>(danhSachHinhHoc)}\n");
                kq.Append($"2) Tong so hinh tron la: {DemTheoHinh<HinhTron>(danhSachHinhHoc)}\n");
                kq.Append($"3) Tong so hinh vuong la: {DemTheoHinh<HinhVuong>(danhSachHinhHoc)}\n");
                kq.Append($"4) Tong so hinh chu nhat la {DemTheoHinh<HinhChuNhat>(danhSachHinhHoc)}\n");
                result.ListHinhHoc = DanhSachTheoKieuHinh <HinhTron>(danhSachHinhHoc);
                kq.Append($"\nA. Danh sach hinh tron\n{result}");
                result.ListHinhHoc = DanhSachTheoKieuHinh <HinhVuong>(danhSachHinhHoc);
                kq.Append($"\n\nB. Danh sach hinh vuong\n{result}");
                result.ListHinhHoc = DanhSachTheoKieuHinh <HinhChuNhat>(danhSachHinhHoc);
                kq.Append($"\n\nC. Danh sach hinh chu nhat\n{result}\n");
                break;
            }
            using (StreamWriter file = new StreamWriter(filename.ToString(), append: false))             // FileMode.Append, FileAccess.Write)
            {
                file.Write(kq);
            }
        }
Example #4
0
        public DanhSachHinhHoc TimHinhVuongCoDTLonNhat()
        {
            DanhSachHinhHoc kq  = new DanhSachHinhHoc();
            float           max = TimDienTichHinhVuongLonNhat();

            foreach (var item in collection)
            {
                if (item is HinhVuong && ((HinhVuong)item).TinhDT() == max)
                {
                    kq.Them(item);
                }
            }
            return(kq);
        }
Example #5
0
        public DanhSachHinhHoc TimHinhCoDTLonNhat()
        {
            //DanhSachHinhHoc kq = new DanhSachHinhHoc();
            //float max = TimDienTichLonNhat();
            //foreach (var item in collection)
            //{
            //    //if (item is HinhVuong && ((HinhVuong)item).TinhDT() == max)
            //    //    kq.Them(item);
            //    //if (item is HinhTron && ((HinhTron)item).TinhDT() == max)
            //    //    kq.Them(item);
            //    if (item.TinhDT() == max)
            //        kq.Them(item);
            //}
            //return kq;
            DanhSachHinhHoc kq  = new DanhSachHinhHoc();
            float           max = TimDienTichLonNhat();

            kq.collection = collection.FindAll(x => x.TinhDT() == max);
            return(kq);
        }
Example #6
0
        private float MinMaxTheoKieuGoi <T>(DanhSachHinhHoc danhSachHinhHoc, TypeMinMax typeMinMax)
        {
            List <HinhHoc> hinhHoc = DanhSachTheoKieuHinh <T>(danhSachHinhHoc);

            switch (typeMinMax)
            {
            case TypeMinMax.MaxChuVi:
                return(hinhHoc.FindAll(p => p is T).Max(x => x.TinhChuVi()));

            case TypeMinMax.MinChuVi:
                return(hinhHoc.FindAll(p => p is T).Min(x => x.TinhChuVi()));

            case TypeMinMax.MaxDienTich:
                return(hinhHoc.FindAll(p => p is T).Max(x => x.TinhDienTich()));

            case TypeMinMax.MinDienTich:
                return(hinhHoc.FindAll(p => p is T).Min(x => x.TinhDienTich()));

            case TypeMinMax.MaxCanh:
                return(hinhHoc.FindAll(p => p is T).Max(x => (x as HinhVuong).Canh));

            case TypeMinMax.MinCanh:
                return(hinhHoc.FindAll(p => p is T).Min(x => (x as HinhVuong).Canh));

            case TypeMinMax.MaxBanKinh:
                return(hinhHoc.FindAll(p => p is T).Max(x => (x as HinhTron).BanKinh));

            case TypeMinMax.MinBanKinh:
                return(hinhHoc.FindAll(p => p is T).Min(x => (x as HinhTron).BanKinh));

            case TypeMinMax.MaxCanhHCN:
                return(hinhHoc.FindAll(p => p is T).Max(x => (x as HinhChuNhat).TinhDienTich()));

            case TypeMinMax.MinCanhHCN:
                return(hinhHoc.FindAll(p => p is T).Min(x => (x as HinhChuNhat).TinhDienTich()));
            }
            return(0);
        }
Example #7
0
        public void ThemHinhTaiViTri(DanhSachHinhHoc danhSachHinhHoc, TypeList typeList, int location)
        {
            HinhHoc hh = new HinhHoc();

            switch (typeList)
            {
            case TypeList.HinhVuong:
                WriteLine("\nHinh Vuong >>");
                hh = new HinhTron();
                break;

            case TypeList.HinhTron:
                WriteLine("\nHinh Vuong >>");
                hh = new HinhVuong();
                break;

            case TypeList.HinhChuNhat:
                WriteLine("\nHinh chu nhat >>");
                hh = new HinhChuNhat();
                break;
            }
            danhSachHinhHoc.ListHinhHoc.Insert(location, hh.Nhap());
        }
Example #8
0
        public List <HinhHoc> SapXepTheoCachGoi <T>(DanhSachHinhHoc danhSachHinhHoc, SortBy sortBy)
        {
            List <HinhHoc> result = DanhSachTheoKieuHinh <T>(danhSachHinhHoc);

            switch (sortBy)
            {
            case SortBy.SortUpByCV:
                result = result.OrderBy(hinh => hinh.TinhChuVi()).ToList();
                return(result);

            case SortBy.SortUpByDT:
                result = result.OrderBy(hinh => hinh.TinhDienTich()).ToList();
                return(result);

            case SortBy.SortDownByCV:
                result = result.OrderByDescending(hinh => hinh.TinhChuVi()).ToList();
                return(result);

            case SortBy.SortDownByDT:
                result = result.OrderByDescending(hinh => hinh.TinhDienTich()).ToList();
                return(result);
            }
            return(null);
        }
Example #9
0
        static void Main(string[] args)
        {
            Object o = new object();

            DanhSachHinhHoc ql = new DanhSachHinhHoc();

            ql.Them(new HinhTron(4));
            ql.Them(new HinhVuong(7));
            ql.Them(new HinhVuong(7));
            ql.Them(new HinhVuong(12.407f));
            ql.Them(new HinhTron(4));
            ql.Them(new HinhTron(6));
            ql.Them(new HinhTron(7));
            ql.Them(new HinhTron(4));
            ql.Them(new HinhChuNhat(10, 20));
            ql.Them(new HinhChuNhat(10, 20));
            ql.Them(new HinhChuNhat(10, 20));
            ql.Them(new HinhChuNhat(10, 20));
            ql.Them(new HinhChuNhat(10, 20));
            Console.WriteLine(ql);
            Console.WriteLine("Hinh vuong co dien tich lon nhat");
            Console.WriteLine(ql.TimHinhCoDTLonNhat());
            Console.ReadKey();
        }
Example #10
0
 public List <HinhHoc> DanhSachTheoKieuHinh <T>(DanhSachHinhHoc danhSachHinhHoc)
 => danhSachHinhHoc.ListHinhHoc.Where(x => x is T).ToList();
Example #11
0
 public int DemTheoHinh <T>(DanhSachHinhHoc danhSachHinhHoc) => DanhSachTheoKieuHinh <T>(danhSachHinhHoc).Count();
Example #12
0
 public void XoaHinhTaiViTri(DanhSachHinhHoc danhSachHinhHoc, int location) => danhSachHinhHoc.ListHinhHoc.RemoveAt(location);
Example #13
0
 public List <HinhHoc> TimHinhMinMaxKieuTinh <T>(DanhSachHinhHoc danhSachHinhHoc, TypeMinMax typeMinMax, TypeCal typeCal)
 => TimHinhTheoKieuGoi <T>(danhSachHinhHoc, typeCal, MinMaxTheoKieuGoi <T>(danhSachHinhHoc, typeMinMax));
Example #14
0
        public void XuLyTuyChon(TuyChon tuyChon, DanhSachHinhHoc danhSachHinhHoc)
        {
            Menu            menuM           = new Menu();
            XuLyChuongTrinh xuLyChuongTrinh = new XuLyChuongTrinh();
            int             menu;
            int             soMenu;

            switch (tuyChon)
            {
            case TuyChon.TimKiem:
                soMenu = menuM.search.Length - 1;
                do
                {
                    menu = ChonMenu(soMenu, menuM.search);
                    if (menu == 1)
                    {
                        return;
                    }
                    xuLyChuongTrinh.XuLyChucNang(tuyChon, menu, danhSachHinhHoc);
                } while (menu > 0);
                break;

            case TuyChon.SapXep:
                soMenu = menuM.sort.Length - 1;
                do
                {
                    menu = ChonMenu(soMenu, menuM.sort);
                    if (menu == 1)
                    {
                        return;
                    }
                    xuLyChuongTrinh.XuLyChucNang(tuyChon, menu, danhSachHinhHoc);
                } while (menu > 0);
                break;

            case TuyChon.Xoa:
                soMenu = menuM.delete.Length - 1;
                do
                {
                    menu = ChonMenu(soMenu, menuM.delete);
                    if (menu == 1)
                    {
                        return;
                    }
                    xuLyChuongTrinh.XuLyChucNang(tuyChon, menu, danhSachHinhHoc);
                } while (menu > 0);
                break;

            case TuyChon.Khac:
                soMenu = menuM.other.Length - 1;
                do
                {
                    menu = ChonMenu(soMenu, menuM.other);
                    if (menu == 1)
                    {
                        return;
                    }
                    xuLyChuongTrinh.XuLyChucNang(tuyChon, menu, danhSachHinhHoc);
                } while (menu > 0);
                break;
            }
            ReadLine();
        }
Example #15
0
        public void XuLyChucNang(XuLyMenu.TuyChon tuyChon, int menu, DanhSachHinhHoc danhSachHinhHoc)
        {
            Object x;

            switch (tuyChon)
            {
            case XuLyMenu.TuyChon.TimKiem:
                switch (menu)
                {
                case 0:
                    WriteLine("\n Bạn đã lựa chọn đi ngủ.\n\tCÚT");
                    Environment.Exit(0);
                    return;

                case 1:
                    WriteLine("\nQuay về trang trước");
                    return;

                case 2:
                    Clear();
                    WriteLine("\nTìm hình vuông có diện tích x");
                    xuLyDuLieuHinhHoc.Xuat(
                        xuLyDuLieuHinhHoc.DanhSachTheoKieuHinh <HinhVuong>(danhSachHinhHoc));
                    Write("\n Nhập vào diện tích >> ");
                    x = float.Parse(ReadLine());
                    WriteLine("\n Hình vuông có diện tích {0}", x);
                    xuLyDuLieuHinhHoc.Xuat(xuLyDuLieuHinhHoc.TimHinhTheoKieuGoi <HinhVuong>
                                               (danhSachHinhHoc, XuLyDuLieuHinhHoc.TypeCal.DienTich, (float)x));
                    break;

                case 3:
                    Clear();
                    WriteLine("\nTìm hình vuông có chu vi x");
                    xuLyDuLieuHinhHoc.Xuat(
                        xuLyDuLieuHinhHoc.DanhSachTheoKieuHinh <HinhVuong>(danhSachHinhHoc));
                    Write("\n Nhập vào chu vi >> ");
                    x = float.Parse(ReadLine());
                    WriteLine("\n Hình vuông có chu vi {0}", x);
                    xuLyDuLieuHinhHoc.Xuat(xuLyDuLieuHinhHoc.TimHinhTheoKieuGoi <HinhVuong>
                                               (danhSachHinhHoc, XuLyDuLieuHinhHoc.TypeCal.ChuVi, (float)x));
                    break;

                case 4:
                    Clear();
                    WriteLine("\nTìm hình vuông có diện tích nhỏ nhất");
                    xuLyDuLieuHinhHoc.Xuat(
                        xuLyDuLieuHinhHoc.DanhSachTheoKieuHinh <HinhVuong>(danhSachHinhHoc));
                    WriteLine("\nHình vuông có diện tích nhỏ nhất");
                    xuLyDuLieuHinhHoc.Xuat(xuLyDuLieuHinhHoc.TimHinhTheoKieuTinh <HinhVuong>
                                               (danhSachHinhHoc, XuLyDuLieuHinhHoc.TypeMinMax.MinDienTich, XuLyDuLieuHinhHoc.TypeCal.DienTich));
                    break;

                case 5:
                    Clear();
                    WriteLine("\nTìm hình vuông có diện tích lớn nhất");
                    xuLyDuLieuHinhHoc.Xuat(
                        xuLyDuLieuHinhHoc.DanhSachTheoKieuHinh <HinhVuong>(danhSachHinhHoc));
                    WriteLine("\nHình vuông có diện tích lớn nhất");
                    xuLyDuLieuHinhHoc.Xuat(xuLyDuLieuHinhHoc.TimHinhTheoKieuTinh <HinhVuong>
                                               (danhSachHinhHoc, XuLyDuLieuHinhHoc.TypeMinMax.MaxDienTich, XuLyDuLieuHinhHoc.TypeCal.DienTich));
                    break;

                case 6:
                    Clear();
                    WriteLine("\nTìm hình vuông có chu vi nhỏ nhất");
                    xuLyDuLieuHinhHoc.Xuat(
                        xuLyDuLieuHinhHoc.DanhSachTheoKieuHinh <HinhVuong>(danhSachHinhHoc));
                    WriteLine("\nHình vuông có chu vi nhỏ nhất");
                    xuLyDuLieuHinhHoc.Xuat(xuLyDuLieuHinhHoc.TimHinhTheoKieuTinh <HinhVuong>
                                               (danhSachHinhHoc, XuLyDuLieuHinhHoc.TypeMinMax.MinChuVi, XuLyDuLieuHinhHoc.TypeCal.ChuVi));
                    break;

                case 7:
                    Clear();
                    WriteLine("\nTìm hình vuông có chu vi lớn nhất");
                    xuLyDuLieuHinhHoc.Xuat(
                        xuLyDuLieuHinhHoc.DanhSachTheoKieuHinh <HinhVuong>(danhSachHinhHoc));
                    WriteLine("\nHình vuông có chu vi lớn nhất");
                    xuLyDuLieuHinhHoc.Xuat(xuLyDuLieuHinhHoc.TimHinhTheoKieuTinh <HinhVuong>
                                               (danhSachHinhHoc, XuLyDuLieuHinhHoc.TypeMinMax.MaxChuVi, XuLyDuLieuHinhHoc.TypeCal.ChuVi));
                    break;

                case 8:
                    Clear();
                    WriteLine("\nTìm hình vuông có cạnh nhỏ nhất");
                    xuLyDuLieuHinhHoc.Xuat(
                        xuLyDuLieuHinhHoc.DanhSachTheoKieuHinh <HinhVuong>(danhSachHinhHoc));
                    WriteLine("\nHình vuông có cạnh nhỏ nhất");
                    xuLyDuLieuHinhHoc.Xuat(xuLyDuLieuHinhHoc.TimHinhTheoKieuTinh <HinhVuong>
                                               (danhSachHinhHoc, XuLyDuLieuHinhHoc.TypeMinMax.MinCanh, XuLyDuLieuHinhHoc.TypeCal.Canh));
                    break;

                case 9:
                    Clear();
                    WriteLine("\nTìm hình vuông có cạnh lớn nhất");
                    xuLyDuLieuHinhHoc.Xuat(
                        xuLyDuLieuHinhHoc.DanhSachTheoKieuHinh <HinhVuong>(danhSachHinhHoc));
                    WriteLine("\nHình vuông có cạnh lớn nhất");
                    xuLyDuLieuHinhHoc.Xuat(xuLyDuLieuHinhHoc.TimHinhTheoKieuTinh <HinhVuong>
                                               (danhSachHinhHoc, XuLyDuLieuHinhHoc.TypeMinMax.MaxCanh, XuLyDuLieuHinhHoc.TypeCal.Canh));
                    break;

                case 10:
                    Clear();
                    WriteLine("\nTìm hình tròn có diện tích x");
                    xuLyDuLieuHinhHoc.Xuat(
                        xuLyDuLieuHinhHoc.DanhSachTheoKieuHinh <HinhTron>(danhSachHinhHoc));
                    Write("\n Nhập vào diện tích >> ");
                    x = float.Parse(ReadLine());
                    WriteLine("\n Hình tròn có diện tích {0}", x);
                    xuLyDuLieuHinhHoc.Xuat(xuLyDuLieuHinhHoc.TimHinhTheoKieuGoi <HinhTron>
                                               (danhSachHinhHoc, XuLyDuLieuHinhHoc.TypeCal.DienTich, (float)x));
                    break;

                case 11:
                    Clear();
                    WriteLine("\nTìm hình tròn có chu vi x");
                    xuLyDuLieuHinhHoc.Xuat(
                        xuLyDuLieuHinhHoc.DanhSachTheoKieuHinh <HinhTron>(danhSachHinhHoc));
                    Write("\n Nhập vào chu vi >> ");
                    x = float.Parse(ReadLine());
                    WriteLine("\n Hình tròn có chu vi {0}", x);
                    xuLyDuLieuHinhHoc.Xuat(xuLyDuLieuHinhHoc.TimHinhTheoKieuGoi <HinhTron>
                                               (danhSachHinhHoc, XuLyDuLieuHinhHoc.TypeCal.ChuVi, (float)x));
                    break;

                case 12:
                    Clear();
                    WriteLine("\nTìm hình tròn có diện tích nhỏ nhất");
                    xuLyDuLieuHinhHoc.Xuat(
                        xuLyDuLieuHinhHoc.DanhSachTheoKieuHinh <HinhTron>(danhSachHinhHoc));
                    WriteLine("\nHình tròn có diện tích nhỏ nhất");
                    xuLyDuLieuHinhHoc.Xuat(xuLyDuLieuHinhHoc.TimHinhTheoKieuTinh <HinhTron>
                                               (danhSachHinhHoc, XuLyDuLieuHinhHoc.TypeMinMax.MinDienTich, XuLyDuLieuHinhHoc.TypeCal.DienTich));
                    break;

                case 13:
                    Clear();
                    WriteLine("\nTìm hình tròn có diện tích lớn nhất");
                    xuLyDuLieuHinhHoc.Xuat(
                        xuLyDuLieuHinhHoc.DanhSachTheoKieuHinh <HinhTron>(danhSachHinhHoc));
                    WriteLine("\nHình tròn có diện tích lớn nhất");
                    xuLyDuLieuHinhHoc.Xuat(xuLyDuLieuHinhHoc.TimHinhTheoKieuTinh <HinhTron>
                                               (danhSachHinhHoc, XuLyDuLieuHinhHoc.TypeMinMax.MaxDienTich, XuLyDuLieuHinhHoc.TypeCal.DienTich));
                    break;

                case 14:
                    Clear();
                    WriteLine("\nTìm hình tròn có chu vi nhỏ nhất");
                    xuLyDuLieuHinhHoc.Xuat(
                        xuLyDuLieuHinhHoc.DanhSachTheoKieuHinh <HinhTron>(danhSachHinhHoc));
                    WriteLine("\nHình tròn có chu vi nhỏ nhất");
                    xuLyDuLieuHinhHoc.Xuat(xuLyDuLieuHinhHoc.TimHinhTheoKieuTinh <HinhTron>
                                               (danhSachHinhHoc, XuLyDuLieuHinhHoc.TypeMinMax.MinChuVi, XuLyDuLieuHinhHoc.TypeCal.ChuVi));
                    break;

                case 15:
                    Clear();
                    WriteLine("\nTìm hình tròn có chu vi lớn nhất");
                    xuLyDuLieuHinhHoc.Xuat(
                        xuLyDuLieuHinhHoc.DanhSachTheoKieuHinh <HinhTron>(danhSachHinhHoc));
                    WriteLine("\nHình tròn có chu vi lớn nhất");
                    xuLyDuLieuHinhHoc.Xuat(xuLyDuLieuHinhHoc.TimHinhTheoKieuTinh <HinhTron>
                                               (danhSachHinhHoc, XuLyDuLieuHinhHoc.TypeMinMax.MaxChuVi, XuLyDuLieuHinhHoc.TypeCal.ChuVi));
                    break;

                case 16:
                    Clear();
                    WriteLine("\nTìm hình tròn có bán kính nhỏ nhất");
                    xuLyDuLieuHinhHoc.Xuat(
                        xuLyDuLieuHinhHoc.DanhSachTheoKieuHinh <HinhTron>(danhSachHinhHoc));
                    WriteLine("\nHình tròn có bán kính nhỏ nhất");
                    xuLyDuLieuHinhHoc.Xuat(xuLyDuLieuHinhHoc.TimHinhTheoKieuTinh <HinhTron>
                                               (danhSachHinhHoc, XuLyDuLieuHinhHoc.TypeMinMax.MinBanKinh, XuLyDuLieuHinhHoc.TypeCal.BanKinh));
                    break;

                case 17:
                    Clear();
                    WriteLine("\nTìm hình tròn có bán kính lớn nhất");
                    xuLyDuLieuHinhHoc.Xuat(
                        xuLyDuLieuHinhHoc.DanhSachTheoKieuHinh <HinhTron>(danhSachHinhHoc));
                    WriteLine("\nHình tròn có bán kính lớn nhất");
                    xuLyDuLieuHinhHoc.Xuat(xuLyDuLieuHinhHoc.TimHinhTheoKieuTinh <HinhTron>
                                               (danhSachHinhHoc, XuLyDuLieuHinhHoc.TypeMinMax.MaxBanKinh, XuLyDuLieuHinhHoc.TypeCal.BanKinh));
                    break;

                case 18:
                    Clear();
                    WriteLine("\nTìm hình chữ nhật có diện tích x");
                    xuLyDuLieuHinhHoc.Xuat(
                        xuLyDuLieuHinhHoc.DanhSachTheoKieuHinh <HinhChuNhat>(danhSachHinhHoc));
                    Write("\n Nhập vào diện tích >> ");
                    x = float.Parse(ReadLine());
                    WriteLine("\n Hình chữ nhật có diện tích {0}", x);
                    xuLyDuLieuHinhHoc.Xuat(xuLyDuLieuHinhHoc.TimHinhTheoKieuGoi <HinhChuNhat>
                                               (danhSachHinhHoc, XuLyDuLieuHinhHoc.TypeCal.DienTich, (float)x));
                    break;

                case 19:
                    Clear();
                    WriteLine("\nTìm hình chữ nhật có chu vi x");
                    xuLyDuLieuHinhHoc.Xuat(
                        xuLyDuLieuHinhHoc.DanhSachTheoKieuHinh <HinhChuNhat>(danhSachHinhHoc));
                    Write("\n Nhập vào chu vi >> ");
                    x = float.Parse(ReadLine());
                    WriteLine("\n Hình chữ nhật có chu vi {0}", x);
                    xuLyDuLieuHinhHoc.Xuat(xuLyDuLieuHinhHoc.TimHinhTheoKieuGoi <HinhChuNhat>
                                               (danhSachHinhHoc, XuLyDuLieuHinhHoc.TypeCal.ChuVi, (float)x));
                    break;

                case 20:
                    Clear();
                    WriteLine("\nTìm hình chữ nhật có diện tích nhỏ nhất");
                    xuLyDuLieuHinhHoc.Xuat(
                        xuLyDuLieuHinhHoc.DanhSachTheoKieuHinh <HinhChuNhat>(danhSachHinhHoc));
                    WriteLine("\nHình chữ nhật có diện tích nhỏ nhất");
                    xuLyDuLieuHinhHoc.Xuat(xuLyDuLieuHinhHoc.TimHinhTheoKieuTinh <HinhChuNhat>
                                               (danhSachHinhHoc, XuLyDuLieuHinhHoc.TypeMinMax.MinDienTich, XuLyDuLieuHinhHoc.TypeCal.DienTich));
                    break;

                case 21:
                    Clear();
                    WriteLine("\nTìm hình chữ nhật có diện tích lớn nhất");
                    xuLyDuLieuHinhHoc.Xuat(
                        xuLyDuLieuHinhHoc.DanhSachTheoKieuHinh <HinhChuNhat>(danhSachHinhHoc));
                    WriteLine("\nHình chữ nhật có diện tích lớn nhất");
                    xuLyDuLieuHinhHoc.Xuat(xuLyDuLieuHinhHoc.TimHinhTheoKieuTinh <HinhChuNhat>
                                               (danhSachHinhHoc, XuLyDuLieuHinhHoc.TypeMinMax.MaxDienTich, XuLyDuLieuHinhHoc.TypeCal.DienTich));
                    break;

                case 22:
                    Clear();
                    WriteLine("\nTìm hình chữ nhật có chu vi nhỏ nhất");
                    xuLyDuLieuHinhHoc.Xuat(
                        xuLyDuLieuHinhHoc.DanhSachTheoKieuHinh <HinhChuNhat>(danhSachHinhHoc));
                    WriteLine("\nHình chữ nhật có chu vi nhỏ nhất");
                    xuLyDuLieuHinhHoc.Xuat(xuLyDuLieuHinhHoc.TimHinhTheoKieuTinh <HinhChuNhat>
                                               (danhSachHinhHoc, XuLyDuLieuHinhHoc.TypeMinMax.MinChuVi, XuLyDuLieuHinhHoc.TypeCal.ChuVi));
                    break;

                case 23:
                    Clear();
                    WriteLine("\nTìm hình chữ nhật có chu vi lớn nhất");
                    xuLyDuLieuHinhHoc.Xuat(
                        xuLyDuLieuHinhHoc.DanhSachTheoKieuHinh <HinhChuNhat>(danhSachHinhHoc));
                    WriteLine("\nHình chữ nhật có chu vi lớn nhất");
                    xuLyDuLieuHinhHoc.Xuat(xuLyDuLieuHinhHoc.TimHinhTheoKieuTinh <HinhChuNhat>
                                               (danhSachHinhHoc, XuLyDuLieuHinhHoc.TypeMinMax.MaxChuVi, XuLyDuLieuHinhHoc.TypeCal.ChuVi));
                    break;

                case 24:
                    Clear();
                    WriteLine("\nTìm hình chữ nhật có cạnh nhỏ nhất");
                    xuLyDuLieuHinhHoc.Xuat(
                        xuLyDuLieuHinhHoc.DanhSachTheoKieuHinh <HinhChuNhat>(danhSachHinhHoc));
                    WriteLine("\nHình chữ nhật có cạnh nhỏ nhất");
                    xuLyDuLieuHinhHoc.Xuat(xuLyDuLieuHinhHoc.TimHinhTheoKieuTinh <HinhChuNhat>
                                               (danhSachHinhHoc, XuLyDuLieuHinhHoc.TypeMinMax.MinCanhHCN, XuLyDuLieuHinhHoc.TypeCal.CanhHCN));
                    break;

                case 25:
                    Clear();
                    WriteLine("\nTìm hình chữ nhật có cạnh lớn nhất");
                    xuLyDuLieuHinhHoc.Xuat(
                        xuLyDuLieuHinhHoc.DanhSachTheoKieuHinh <HinhChuNhat>(danhSachHinhHoc));
                    WriteLine("\nHình chữ nhật có cạnh lớn nhất");
                    xuLyDuLieuHinhHoc.Xuat(xuLyDuLieuHinhHoc.TimHinhTheoKieuTinh <HinhChuNhat>
                                               (danhSachHinhHoc, XuLyDuLieuHinhHoc.TypeMinMax.MaxCanhHCN, XuLyDuLieuHinhHoc.TypeCal.CanhHCN));
                    break;

                case 26:
                    Clear();
                    WriteLine("\nTìm hình có diện tích nhỏ nhất");
                    danhSachHinhHoc.Xuat();
                    WriteLine("\nHình có diện tích nhỏ nhất");
                    xuLyDuLieuHinhHoc.Xuat(xuLyDuLieuHinhHoc.TimHinhMinMaxKieuTinh <HinhHoc>
                                               (danhSachHinhHoc, XuLyDuLieuHinhHoc.TypeMinMax.MinDienTich, XuLyDuLieuHinhHoc.TypeCal.DienTich));
                    break;

                case 27:
                    Clear();
                    WriteLine("\nTìm hình có diện tích lớn nhất");
                    danhSachHinhHoc.Xuat();
                    WriteLine("\nHình có diện tích lớn nhất");
                    xuLyDuLieuHinhHoc.Xuat(xuLyDuLieuHinhHoc.TimHinhMinMaxKieuTinh <HinhHoc>
                                               (danhSachHinhHoc, XuLyDuLieuHinhHoc.TypeMinMax.MaxDienTich, XuLyDuLieuHinhHoc.TypeCal.DienTich));
                    break;

                case 28:
                    Clear();
                    WriteLine("\nTìm hình có chu vi nhỏ nhất");
                    danhSachHinhHoc.Xuat();
                    WriteLine("\nHình có chu vi nhỏ nhất");
                    xuLyDuLieuHinhHoc.Xuat(xuLyDuLieuHinhHoc.TimHinhMinMaxKieuTinh <HinhHoc>
                                               (danhSachHinhHoc, XuLyDuLieuHinhHoc.TypeMinMax.MinChuVi, XuLyDuLieuHinhHoc.TypeCal.ChuVi));
                    break;

                case 29:
                    Clear();
                    WriteLine("\nTìm hình có chu vi lớn nhất");
                    danhSachHinhHoc.Xuat();
                    WriteLine("\nHình có chu vi lớn nhất");
                    xuLyDuLieuHinhHoc.Xuat(xuLyDuLieuHinhHoc.TimHinhMinMaxKieuTinh <HinhHoc>
                                               (danhSachHinhHoc, XuLyDuLieuHinhHoc.TypeMinMax.MaxChuVi, XuLyDuLieuHinhHoc.TypeCal.ChuVi));
                    break;

                case 30:
                    Clear();
                    WriteLine("\nTìm hình có tổng diện tích nhỏ nhất");
                    danhSachHinhHoc.Xuat();
                    WriteLine("\nHình có tổng diện tích nhỏ nhất");
                    WriteLine(xuLyDuLieuHinhHoc.HinhCoTongPhepTinhMinMax(danhSachHinhHoc, XuLyDuLieuHinhHoc.TypeMinMax.MinDienTich));
                    break;

                case 31:
                    Clear();
                    WriteLine("\nTìm hình có tổng diện tích lớn nhất");
                    danhSachHinhHoc.Xuat();
                    WriteLine("\nHình có tổng diện tích lớn nhất");
                    WriteLine(xuLyDuLieuHinhHoc.HinhCoTongPhepTinhMinMax(danhSachHinhHoc, XuLyDuLieuHinhHoc.TypeMinMax.MaxDienTich));
                    break;

                case 32:
                    Clear();
                    WriteLine("\nTìm hình có tổng chu vi nhỏ nhất");
                    danhSachHinhHoc.Xuat();
                    WriteLine("\nHình có tổng chu vi nhỏ nhất");
                    WriteLine(xuLyDuLieuHinhHoc.HinhCoTongPhepTinhMinMax(danhSachHinhHoc, XuLyDuLieuHinhHoc.TypeMinMax.MinChuVi));
                    break;

                case 33:
                    Clear();
                    WriteLine("\nTìm hình có tổng chu vi lớn nhất");
                    danhSachHinhHoc.Xuat();
                    WriteLine("\nHình có tổng chu vi lớn nhất");
                    WriteLine(xuLyDuLieuHinhHoc.HinhCoTongPhepTinhMinMax(danhSachHinhHoc, XuLyDuLieuHinhHoc.TypeMinMax.MaxChuVi));
                    break;
                }
                break;

            case XuLyMenu.TuyChon.SapXep:
                switch (menu)
                {
                case 0:
                    WriteLine("\n Bạn đã lựa chọn đi ngủ.\n\tCÚT");
                    Environment.Exit(0);
                    return;

                case 1:
                    WriteLine("\nQuay về trang trước");
                    return;

                case 2:
                    Clear();
                    WriteLine("\nSắp xếp hình vuông tăng theo chu vi");
                    danhSachHinhHoc.Xuat();
                    WriteLine("\nDanh sách hình vuông sau khi sắp xếp tăng theo chu vi");
                    xuLyDuLieuHinhHoc.SapXepTheoCachGoi <HinhVuong>(danhSachHinhHoc, XuLyDuLieuHinhHoc.SortBy.SortUpByCV);
                    xuLyDuLieuHinhHoc.Xuat(xuLyDuLieuHinhHoc.SapXepTheoCachGoi <HinhVuong>
                                               (danhSachHinhHoc, XuLyDuLieuHinhHoc.SortBy.SortUpByCV));
                    break;

                case 3:
                    Clear();
                    WriteLine("\nSắp xếp hình vuông giảm theo chu vi");
                    danhSachHinhHoc.Xuat();
                    WriteLine("\nDanh sách hình vuông sau khi sắp xếp giảm theo chu vi");
                    xuLyDuLieuHinhHoc.Xuat(xuLyDuLieuHinhHoc.SapXepTheoCachGoi <HinhVuong>
                                               (danhSachHinhHoc, XuLyDuLieuHinhHoc.SortBy.SortDownByCV));
                    break;

                case 4:
                    Clear();
                    WriteLine("\nSắp xếp hình vuông tăng theo diện tích");
                    danhSachHinhHoc.Xuat();
                    WriteLine("\nDanh sách hình vuông sau khi sắp xếp tăng theo diện tích");
                    xuLyDuLieuHinhHoc.Xuat(xuLyDuLieuHinhHoc.SapXepTheoCachGoi <HinhVuong>
                                               (danhSachHinhHoc, XuLyDuLieuHinhHoc.SortBy.SortUpByDT));
                    break;

                case 5:
                    Clear();
                    WriteLine("\nSắp xếp hình vuông giảm theo diện tích");
                    danhSachHinhHoc.Xuat();
                    WriteLine("\nDanh sách hình vuông sau khi sắp xếp giảm theo diện tích");
                    xuLyDuLieuHinhHoc.Xuat(xuLyDuLieuHinhHoc.SapXepTheoCachGoi <HinhVuong>
                                               (danhSachHinhHoc, XuLyDuLieuHinhHoc.SortBy.SortDownByDT));
                    break;

                case 6:
                    Clear();
                    WriteLine("\nSắp xếp hình tròn tăng theo chu vi");
                    danhSachHinhHoc.Xuat();
                    WriteLine("\nDanh sách hình tròn sau khi sắp xếp tăng theo chu vi");
                    xuLyDuLieuHinhHoc.Xuat(xuLyDuLieuHinhHoc.SapXepTheoCachGoi <HinhTron>
                                               (danhSachHinhHoc, XuLyDuLieuHinhHoc.SortBy.SortUpByCV));
                    break;

                case 7:
                    Clear();
                    WriteLine("\nSắp xếp hình tròn giảm theo chu vi");
                    danhSachHinhHoc.Xuat();
                    WriteLine("\nDanh sách hình tròn sau khi sắp xếp giảm theo chu vi");
                    xuLyDuLieuHinhHoc.Xuat(xuLyDuLieuHinhHoc.SapXepTheoCachGoi <HinhTron>
                                               (danhSachHinhHoc, XuLyDuLieuHinhHoc.SortBy.SortDownByCV));
                    break;

                case 8:
                    Clear();
                    WriteLine("\nSắp xếp hình tròn tăng theo diện tích");
                    danhSachHinhHoc.Xuat();
                    WriteLine("\nDanh sách hình tròn sau khi sắp xếp tăng theo diện tích");
                    xuLyDuLieuHinhHoc.Xuat(xuLyDuLieuHinhHoc.SapXepTheoCachGoi <HinhTron>
                                               (danhSachHinhHoc, XuLyDuLieuHinhHoc.SortBy.SortUpByDT));
                    break;

                case 9:
                    Clear();
                    WriteLine("\nSắp xếp hình tròn giảm theo diện tích");
                    danhSachHinhHoc.Xuat();
                    WriteLine("\nDanh sách hình tròn sau khi sắp xếp giảm theo diện tích");
                    xuLyDuLieuHinhHoc.Xuat(xuLyDuLieuHinhHoc.SapXepTheoCachGoi <HinhTron>
                                               (danhSachHinhHoc, XuLyDuLieuHinhHoc.SortBy.SortDownByDT));
                    break;

                case 10:
                    Clear();
                    WriteLine("\nSắp xếp hình chữ nhật tăng theo chu vi");
                    danhSachHinhHoc.Xuat();
                    WriteLine("\nDanh sách hình chữ nhật tăng theo chu vi");
                    xuLyDuLieuHinhHoc.Xuat(xuLyDuLieuHinhHoc.SapXepTheoCachGoi <HinhChuNhat>
                                               (danhSachHinhHoc, XuLyDuLieuHinhHoc.SortBy.SortUpByCV));
                    break;

                case 11:
                    Clear();
                    WriteLine("\nSắp xếp hình chữ nhật giảm theo chu vi");
                    danhSachHinhHoc.Xuat();
                    WriteLine("\nDanh sách hình chữ nhật giảm theo chu vi");
                    xuLyDuLieuHinhHoc.Xuat(xuLyDuLieuHinhHoc.SapXepTheoCachGoi <HinhChuNhat>
                                               (danhSachHinhHoc, XuLyDuLieuHinhHoc.SortBy.SortUpByCV));
                    break;

                case 12:
                    Clear();
                    WriteLine("\nSắp xếp hình chữ nhật tăng theo diện tích");
                    danhSachHinhHoc.Xuat();
                    WriteLine("\nDanh sách hình chữ nhật tăng theo diện tích");
                    xuLyDuLieuHinhHoc.Xuat(xuLyDuLieuHinhHoc.SapXepTheoCachGoi <HinhChuNhat>
                                               (danhSachHinhHoc, XuLyDuLieuHinhHoc.SortBy.SortUpByDT));
                    break;

                case 13:
                    Clear();
                    WriteLine("\nSắp xếp hình chữ nhật giảm theo diện tích");
                    danhSachHinhHoc.Xuat();
                    WriteLine("\nDanh sách hình chữ nhật giảm theo diện tích");
                    xuLyDuLieuHinhHoc.Xuat(xuLyDuLieuHinhHoc.SapXepTheoCachGoi <HinhChuNhat>
                                               (danhSachHinhHoc, XuLyDuLieuHinhHoc.SortBy.SortDownByDT));
                    break;
                }
                break;

            case XuLyMenu.TuyChon.Xoa:
                switch (menu)
                {
                case 0:
                    WriteLine("\n Bạn đã lựa chọn đi ngủ.\n\tCÚT");
                    Environment.Exit(0);
                    return;

                case 1:
                    WriteLine("\nQuay về trang trước");
                    return;

                case 2:
                    Clear();
                    WriteLine("\nXóa hình có diện tích lớn nhất");
                    danhSachHinhHoc.Xuat();
                    WriteLine("\nDanh sách sau khi xóa hình có diện tích lớn nhất");
                    xuLyDuLieuHinhHoc.XoaTheoCachGoi <HinhHoc>(danhSachHinhHoc, XuLyDuLieuHinhHoc.TypeMinMax.MaxDienTich);
                    xuLyDuLieuHinhHoc.Xuat(danhSachHinhHoc.ListHinhHoc);
                    break;

                case 3:
                    Clear();
                    WriteLine("\nXóa hình có diện tích nhỏ nhất");
                    danhSachHinhHoc.Xuat();
                    WriteLine("\nDanh sách sau khi xóa hình có diện tích nhỏ nhất");
                    xuLyDuLieuHinhHoc.XoaTheoCachGoi <HinhHoc>(danhSachHinhHoc, XuLyDuLieuHinhHoc.TypeMinMax.MinDienTich);
                    xuLyDuLieuHinhHoc.Xuat(danhSachHinhHoc.ListHinhHoc);
                    break;

                case 4:
                    Clear();
                    WriteLine("\nXóa hình có chu vi lớn nhất");
                    danhSachHinhHoc.Xuat();
                    WriteLine("\nDanh sách sau khi xóa hình có chu vi lớn nhất");
                    xuLyDuLieuHinhHoc.XoaTheoCachGoi <HinhHoc>(danhSachHinhHoc, XuLyDuLieuHinhHoc.TypeMinMax.MaxChuVi);
                    xuLyDuLieuHinhHoc.Xuat(danhSachHinhHoc.ListHinhHoc);
                    break;

                case 5:
                    Clear();
                    WriteLine("\nXóa hình có chu vi nhỏ nhất");
                    danhSachHinhHoc.Xuat();
                    WriteLine("\nDanh sách sau khi xóa hình có chu vi nhỏ nhất");
                    xuLyDuLieuHinhHoc.XoaTheoCachGoi <HinhHoc>(danhSachHinhHoc, XuLyDuLieuHinhHoc.TypeMinMax.MinChuVi);
                    xuLyDuLieuHinhHoc.Xuat(danhSachHinhHoc.ListHinhHoc);
                    break;

                case 6:
                    Clear();
                    WriteLine("\nXóa hình tại vị trí");
                    danhSachHinhHoc.Xuat();
                    Write("\n Nhập vào vị trí cần xóa >> ");
                    x = int.Parse(ReadLine());
                    WriteLine("\nDanh sách sau khi xóa hình tại vị trí {0}", x);
                    xuLyDuLieuHinhHoc.XoaHinhTaiViTri(danhSachHinhHoc, (int)x);
                    danhSachHinhHoc.Xuat();
                    break;
                }
                break;

            case XuLyMenu.TuyChon.Khac:
                switch (menu)
                {
                case 0:
                    WriteLine("\n Bạn đã lựa chọn đi ngủ.\n\tCÚT");
                    Environment.Exit(0);
                    return;

                case 1:
                    WriteLine("\nQuay về trang trước");
                    return;

                case 2:
                    Clear();
                    WriteLine("\nThêm 1 hình học tại vị trí");
                    Write("\nNhập vào vị trí để thêm >> ");
                    x = int.Parse(ReadLine());
                    Write("\nBạn muốn thêm hình gì?\nNhập vào số tương ứng ( 0 - Hình Vuông, 1 - Hình Tròn, 2 - Hình Chữ Nhật ) >> ");
                    XuLyDuLieuHinhHoc.TypeList typeList = (XuLyDuLieuHinhHoc.TypeList) int.Parse(ReadLine());
                    xuLyDuLieuHinhHoc.ThemHinhTaiViTri(danhSachHinhHoc, typeList, (int)x);
                    Clear();
                    WriteLine("\n Danh sách hiện hành");
                    danhSachHinhHoc.Xuat();
                    break;

                case 3:
                    Clear();
                    WriteLine("Đếm số lượng các loại hình học");
                    Write("\n\nSố lượng hình vuông là >> " + xuLyDuLieuHinhHoc.DemTheoHinh <HinhVuong>(danhSachHinhHoc));
                    Write("\n\nSố lượng hình tròn là >> " + xuLyDuLieuHinhHoc.DemTheoHinh <HinhTron>(danhSachHinhHoc));
                    Write("\n\nSố lượng hình chữ nhật là >> " + xuLyDuLieuHinhHoc.DemTheoHinh <HinhChuNhat>(danhSachHinhHoc));
                    Write("\n\nTổng số lượng hình học là >> " + xuLyDuLieuHinhHoc.DemTheoHinh <HinhHoc>(danhSachHinhHoc));
                    break;

                case 4:
                    Clear();
                    WriteLine("Ghi file các hình xuống file riêng");
                    WriteLine("Nhan phim bat ki de bat dau thuc hien >> ");
                    xuLyDuLieuHinhHoc.GhiFile <HinhVuong>(danhSachHinhHoc, XuLyDuLieuHinhHoc.TypeList.HinhVuong);
                    xuLyDuLieuHinhHoc.GhiFile <HinhTron>(danhSachHinhHoc, XuLyDuLieuHinhHoc.TypeList.HinhTron);
                    xuLyDuLieuHinhHoc.GhiFile <HinhChuNhat>(danhSachHinhHoc, XuLyDuLieuHinhHoc.TypeList.HinhChuNhat);
                    xuLyDuLieuHinhHoc.GhiFile <HinhHoc>(danhSachHinhHoc, XuLyDuLieuHinhHoc.TypeList.TatCaHinh);
                    ReadLine();
                    WriteLine("Ghi file hoan tat !");
                    break;
                }
                break;
            }
            ReadLine();
        }