Form1
namespace Hw8
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
InitialSet();
// txt_number.Text = "0";
}
double[] densityArr = { 2.7, 7.87, 11.3 };
List shapeArr = new List();
private void cbo_shape_SelectedIndexChanged(object sender, EventArgs e)
{
switch (cbo_shape.SelectedIndex)
{
case 0:
lbl_1.Text = "半徑";
txt_2.Visible = false;
lbl_2.Visible = false;
break;
case 1:
lbl_1.Text = "邊長";
txt_2.Visible = false;
lbl_2.Visible = false;
break;
case 2:
lbl_1.Text = "半徑";
txt_2.Visible = true;
lbl_2.Visible = true;
break;
case 3:
lbl_1.Text = "邊長";
txt_2.Visible = true;
lbl_2.Visible = true;
break;
default:
MessageBox.Show("Erorr");
break;
}
}
void InitialSet()
{
cbo_shape.SelectedIndex = 0;
cbo_matirial.SelectedIndex = 0;
}
private void btn_add_Click(object sender, EventArgs e)
{
switch (cbo_shape.SelectedIndex)
{
case 0:
if(txt_1.Text=="")
MessageBox.Show("Erorr");
else
{
Ball ball=new Ball(double.Parse(txt_1.Text),densityArr[cbo_matirial.SelectedIndex]);
ball.Order = shapeArr.Count;
shapeArr.Add(ball);
}
break;
case 1:
if(txt_1.Text=="")
MessageBox.Show("Erorr");
else
{
Cube cube=new Cube(double.Parse(txt_1.Text),densityArr[cbo_matirial.SelectedIndex]);
cube.Order = shapeArr.Count;
shapeArr.Add(cube);
}
break;
case 2:
if (txt_1.Text == "" || txt_2.Text == "")
MessageBox.Show("Erorr");
else
{
Cylinder cylinder = new Cylinder(double.Parse(txt_1.Text), double.Parse(txt_2.Text), densityArr[cbo_matirial.SelectedIndex]);
cylinder.Order = shapeArr.Count;
shapeArr.Add(cylinder);
}
break;
case 3:
if (txt_1.Text == "" || txt_2.Text == "")
MessageBox.Show("Erorr");
else
{
Pyramid pyramid = new Pyramid(double.Parse(txt_1.Text), double.Parse(txt_2.Text), densityArr[cbo_matirial.SelectedIndex]);
pyramid.Order = shapeArr.Count;
shapeArr.Add(pyramid);
}
break;
default:
MessageBox.Show("Erorr");
break;
}
txt_showall.AppendText(shapeArr[shapeArr.Count - 1].ShowAll());
txt_number.Text = shapeArr.Count.ToString();
txt_nOfBall.Text = Ball.Number.ToString();
txt_nOfCube.Text = Cube.Number.ToString();
txt_nOfCylinder.Text = Cylinder.Number.ToString();
txt_nOfPyramid.Text = Pyramid.Number.ToString();
}
private void btn_calall_Click(object sender, EventArgs e)
{
Sort();
txt_B1.Text = "";
foreach (var Shape3D in shapeArr)
{
txt_B1.AppendText(Shape3D.ShowAllAll());
}
}
private void btn_caldistance_Click(object sender, EventArgs e)
{
Sort();
txt_B2.Text = "";
foreach (var IRollable in shapeArr)
{
Ball ball = IRollable as Ball;
if (ball != null)
txt_B2.AppendText(ball.AddDistance());
Cylinder cylinder = IRollable as Cylinder;
if (cylinder != null)
txt_B2.AppendText(cylinder.AddDistance());
}
}
private void btn_cancel_Click(object sender, EventArgs e)
{
int order = int.Parse(txt_order.Text);
if (shapeArr.Count <= order)
return;
shapeArr[order] = null;
GC.Collect();
GC.WaitForPendingFinalizers();
shapeArr.RemoveAt(int.Parse(txt_order.Text));
txt_showall.Text = "";
foreach(var Shape3D in shapeArr)
txt_showall.AppendText(Shape3D.ShowAll());
txt_number.Text = shapeArr.Count.ToString();
txt_nOfBall.Text = Ball.Number.ToString();
txt_nOfCube.Text = Cube.Number.ToString();
txt_nOfCylinder.Text = Cylinder.Number.ToString();
txt_nOfPyramid.Text = Pyramid.Number.ToString();
}
private void Sort()
{
switch (cbo_sort.SelectedIndex)
{
case 0:
shapeArr.Sort(CompareByOrder);
break;
case 1:
shapeArr.Sort(CompareByType);
break;
case 2:
shapeArr.Sort(CompareByMaterial);
break;
case 3:
shapeArr.Sort(CompareByVolume);
break;
case 4:
shapeArr.Sort(CompareByQuality);
break;
default:
break;
}
}
private int CompareByOrder(Shape3D a, Shape3D b)
{
if (a.Order > b.Order)
return 1;
else
return -1;
}
private int CompareByType(Shape3D a, Shape3D b)
{
if (a.Type > b.Type)
return 1;
else
return -1;
}
private int CompareByMaterial(Shape3D a, Shape3D b)
{
if (a.Density > b.Density)
return 1;
else
return -1;
}
private int CompareByVolume(Shape3D a, Shape3D b)
{
if (a.Volume() > b.Volume())
return 1;
else
return -1;
}
private int CompareByQuality(Shape3D a, Shape3D b)
{
if (a.Quality() > b.Quality())
return 1;
else
return -1;
}
}
Shape3D
Shape3D
namespace Hw8
{
abstract class Shape3D
{
protected int order;
protected double density;
protected ShapeType.Types shapeType;
public static double pi = 3.1415926;
public static int amount = 0;
public abstract double Volume();
public Shape3D(double density)
{
this.density = density;
}
public double Quality()
{
return Volume() * density;
}
public abstract string Show();
public string ShowAll()
{
string str="";
str += Show() + "\t";
str += density + "\n";
return str;
}
public string ShowAllAll()
{
string str = "";
str += Show() + "\t";
str += density + "\t";
str += Math.Round(Volume(),2) + "\t";
str += Math.Round(Quality(),2) + "\n";
return str;
}
public double Density
{
get { return density; }
set { density = value; }
}
public int Order
{
get { return order; }
set { order = value; }
}
public int Type
{
get { return (int)shapeType; }
}
}
static class ShapeType
{
public enum Types { Unknown = 0, Ball, Cube, Cylinder, Pyramid };
}
}
Ball
Ball
namespace Hw8
{
class Ball : Shape3D,IRollable
{
double radius;
static int number = 0;
public Ball(double radius, double density):base(density)
{
this.radius = radius;
shapeType = ShapeType.Types.Ball;
Number++;
}
static public int Number
{
set { number = value; }
get { return number; }
}
~Ball()
{
Number--;
}
public override double Volume()
{
return pi * radius * radius * radius * 4 / 3;
}
public override string Show()
{
String str="";
str += "Ball" + "\t";
str += radius + "\t";
str += "";
return str;
}
public string AddDistance()
{
string str = "";
str += Show() + "\t";
str += density + "\t";
str += Math.Round(radius * radius,2) + "\n";
return str;
}
}
}
Cube
Cube
namespace Hw8
{
class Cube : Shape3D
{
double side;
static int number = 0;
public Cube(double side, double density)
: base(density)
{
this.side = side;
this.density = density;
shapeType = ShapeType.Types.Cube;
Number++;
}
static public int Number
{
set { number = value; }
get { return number; }
}
public override double Volume()
{
return side * side * side;
}
public override string Show()
{
String str = "";
str += "Cube" + "\t";
str += side + "\t";
str += "";
return str;
}
~Cube()
{
Number--;
}
}
}
Cylinder
Cylindr
namespace Hw8
{
class Cylinder : Shape3D,IRollable
{
double radius, height;
static int number = 0;
public Cylinder(double radius, double height, double density)
: base(density)
{
this.radius = radius;
this.height = height;
this.density = density;
shapeType = ShapeType.Types.Cylinder;
Number++;
}
static public int Number
{
set { number = value; }
get { return number; }
}
public override double Volume()
{
return pi * radius * radius * height;
}
public override string Show()
{
String str = "";
str += "Cylinder" + "\t";
str += radius + "\t";
str += height;
return str;
}
public string AddDistance()
{
string str = "";
str += Show() + "\t";
str += density + "\t";
str += Math.Round(5 * radius, 2) + "\n";
return str;
}
~Cylinder()
{
Number--;
}
}
}
Pyrmaid
Pyrmaid
namespace Hw8
{
class Pyramid : Shape3D
{
double side, height;
static int number = 0;
public Pyramid(double side, double height, double density)
: base(density)
{
this.side = side;
this.height = height;
this.density = density;
shapeType = ShapeType.Types.Pyramid;
Number++;
}
static public int Number
{
set { number = value; }
get { return number; }
}
public override double Volume()
{
return side * side * height / 3;
}
public override string Show()
{
String str = "";
str += "Pyramid" + "\t";
str += side + "\t";
str += height;
return str;
}
~Pyramid()
{
Number--;
}
}
}
IRollable
IRollable
namespace Hw8
{
interface IRollable
{
string AddDistance();
}
}
沒有留言:
張貼留言