Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace HW08
{
public partial class Form1 : Form
{
private double density;
List shapeArr = new List();
public Form1()
{
InitializeComponent();
Lbl_1.Text = "";
Lbl_2.Text = "";
TxtBox_1.Visible = false;
TxtBox_2.Visible = false;
}
//*****************初始設定**************************
private void CMB_2_SelectedIndexChanged(object sender, EventArgs e)
{
switch (CMB_2.SelectedIndex)
{
case 0:
Lbl_1.Text = "半徑";
Lbl_2.Text = "";
TxtBox_1.Visible = true;
TxtBox_2.Visible = false;
break;
case 1:
Lbl_1.Text = "邊長";
Lbl_2.Text = "";
TxtBox_1.Visible = true;
TxtBox_2.Visible = false;
break;
case 2:
Lbl_1.Text = "邊長";
Lbl_2.Text = "高";
TxtBox_1.Visible = true;
TxtBox_2.Visible = true;
break;
case 3:
Lbl_1.Text = "半徑";
Lbl_2.Text = "高";
TxtBox_1.Visible = true;
TxtBox_2.Visible = true;
break;
}
}
//*****************材料參數**************************
private void CMB_1_SelectedIndexChanged(object sender, EventArgs e)
{
switch (CMB_1.SelectedIndex)
{
case 0:
density = 2.7;
break;
case 1:
density = 7.87;
break;
case 2:
density = 11.3;
break;
}
}
//*****************創造物件**************************
private void Btn_1_Click(object sender, EventArgs e)
{
if (CMB_1.SelectedIndex < 0 || CMB_2.SelectedIndex < 0 || TxtBox_1.Text == "0" || (TxtBox_1.Text == "0" && TxtBox_2.Text == "0"))
{
MessageBox.Show("請輸入正確參數!");
return;
}
switch (CMB_2.SelectedIndex)
{
case 0:
Ball ball = Ball.Create(double.Parse(TxtBox_1.Text), density);
shapeArr.Add(ball);
ball.Order = shapeArr.Count;
break;
case 1:
Cube cube = Cube.Create(double.Parse(TxtBox_1.Text), density);
shapeArr.Add(cube);
cube.Order = shapeArr.Count;
break;
case 2:
Pyramid pyramid = Pyramid.Create(double.Parse(TxtBox_1.Text), double.Parse(TxtBox_2.Text), density);
shapeArr.Add(pyramid);
pyramid.Order = shapeArr.Count;
break;
case 3:
Cylinder cylinder = Cylinder.Create(double.Parse(TxtBox_1.Text), double.Parse(TxtBox_2.Text), density);
shapeArr.Add(cylinder);
cylinder.Order = shapeArr.Count;
break;
}
TxtBox_4.Text = shapeArr.Count.ToString();
BallNum_txt.Text = Ball.Amount.ToString();
CubeNum_txt.Text = Cube.Amount.ToString();
PyramidNum_txt.Text = Pyramid.Amount.ToString();
CylinderNum_txt.Text = Cylinder.Amount.ToString();
TxtBox_3.AppendText(shapeArr[shapeArr.Count-1].ShapeProperty());
}
//*****************顯示創造物件**************************
private void Btn_2_Click(object sender, EventArgs e)
{
TxtBox_5.Clear();
Sort();
for (int i = 0; i < shapeArr.Count; i++)
{
TxtBox_5.AppendText(shapeArr[i].ShowAllProperty() + "\n");
}
}
//*****************滾動距離計算**************************
private void button1_Click(object sender, EventArgs e)
{
TxtBox_6.Clear();
Sort();
foreach (var shape3D in shapeArr)
{
IRollable rShape3D = shape3D as IRollable;
if (rShape3D != null)
{
TxtBox_6.AppendText(rShape3D.RollDistance());
}
}
}
//*****************消滅物件**************************
private void button2_Click(object sender, EventArgs e)
{
shapeArr.Sort(CompareByOrder);
int order = int.Parse(CancelNum_txt.Text);
if (shapeArr.Count < order)
{
return;
}
shapeArr[order] = null;
GC.Collect();
GC.WaitForPendingFinalizers();
shapeArr.RemoveAt(order);
TxtBox_4.Text = shapeArr.Count.ToString();
BallNum_txt.Text = Ball.Amount.ToString();
CubeNum_txt.Text = Cube.Amount.ToString();
PyramidNum_txt.Text = Pyramid.Amount.ToString();
CylinderNum_txt.Text = Cylinder.Amount.ToString();
TxtBox_3.Clear();
for (int i = 0; i < shapeArr.Count; i++)
{
TxtBox_3.AppendText(shapeArr[i].ShapeProperty() + "\n");
}
}
//*****************排序**************************
private int CompareByOrder(Shape3D shape_1, Shape3D shape_2)
{
if (shape_1.Order > shape_2.Order)
return 1;
return -1;
}
private int CompareByShape(Shape3D shape_1, Shape3D shape_2)
{
if (shape_1.ShaType > shape_2.ShaType)
return 1;
return -1;
}
private int CompareByDensity(Shape3D shape_1, Shape3D shape_2)
{
if (shape_1.Density > shape_2.Density)
return 1;
return -1;
}
private int CompareByVolume(Shape3D shape_1, Shape3D shape_2)
{
if (shape_1.Volume() > shape_2.Volume())
return 1;
return -1;
}
private int CompareByMass(Shape3D shape_1, Shape3D shape_2)
{
if (shape_1.Mass() > shape_2.Mass())
return 1;
return -1;
}
private void Sort()
{
switch (cmb_sort.SelectedIndex)
{
case 0:
shapeArr.Sort(CompareByOrder);
break;
case 1:
shapeArr.Sort(CompareByShape);
break;
case 2:
shapeArr.Sort(CompareByDensity);
break;
case 3:
shapeArr.Sort(CompareByVolume);
break;
case 4:
shapeArr.Sort(CompareByMass);
break;
default:
break;
}
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void TxtBox_3_TextChanged(object sender, EventArgs e)
{
}
}
}
沒有留言:
張貼留言