執行檔 Shape3D.csabstract class Shape3D
{
protected double density;
public Shape3D()
{
density = 0;
}
public Shape3D(double d)
{
Density = d;
}
public double Density
{
get { return density; }
set
{
if (value < 0)
density = 0;
else
density = value;
}
}
public double Weight()
{
return Density * Volume();
}
//Virtual Method
public abstract double Volume();
public string ShowVolumeWeight()
{
string str = ShapeProperty();
str += '\t';
str += string.Format("{0,8:F2}", density);
str += '\t';
str += string.Format("{0,8:F2}", Volume());
str += '\t';
str += string.Format("{0,8:F2}", Weight());
return str;
}
public abstract string ShapeProperty();
}
IRollable.csinterface IRollable
{
double Distance();
string DisplayDistance();
}
Ball.csclass Ball : Shape3D,IRollable
{
private double radius;
// private static double pi = 3.1415926;
public Ball(double radius, double density)
: base(density)
{
Radius = radius;
}
public double Radius
{
get { return radius; }
set
{
if (value < 0)
radius = 0;
else
radius = value;
}
}
public override double Volume()
{
return 4.0/3*GeoConstant.pi*radius*radius*radius;
}
public double Distance()
{
return radius*radius;
}
public string DisplayDistance()
{
string str = "";
str += ShapeProperty();
str += '\t';
str += string.Format("{0,8:F2}", density);
str += '\t';
str += string.Format("{0,8:F2}", Distance());
return str;
}
public override string ShapeProperty()
{
string str = string.Format("{0,8}", "Ball");
str += '\t';
str += string.Format("{0,8:F2}", radius);
str += '\t';
str += string.Format("{0,8}", "");
return str;
}
}
Cylinder.csclass Cylinder : Shape3D,IRollable
{
private double radius;
private double height;
// private static double pi = 3.1415926;
public Cylinder(double radius, double height,double density)
: base(density)
{
Radius = radius;
Height = height;
}
public double Radius
{
get { return radius; }
set
{
if (value < 0)
radius = 0;
else
radius = value;
}
}
public double Height
{
get { return height; }
set
{
if (value < 0)
height = 0;
else
height = value;
}
}
public override double Volume()
{
return GeoConstant.pi * radius * radius * height;
}
public double Distance()
{
return 5 * radius;
}
public string DisplayDistance()
{
string str = "";
str += ShapeProperty();
str += '\t';
str += string.Format("{0,8:F2}", density);
str += '\t';
str += string.Format("{0,8:F2}", Distance());
return str;
}
public override string ShapeProperty()
{
string str = string.Format("{0,8}", "Cylinder");
str += '\t';
str += string.Format("{0,8:F2}", radius);
str += '\t';
str += string.Format("{0,8:F2}", height);
return str;
}
}
Square.csclass Cube : Shape3D
{
private double side;
public Cube(double side, double density)
: base(density)
{
Side = side;
}
public double Side
{
get { return side; }
set
{
if (value < 0)
side = 0;
else
side = value;
}
}
public override double Volume()
{
return side*side*side;
}
public override string ShapeProperty()
{
string str = string.Format("{0,8}", "Cube");
str += '\t';
str += string.Format("{0,8:F2}", side);
str += '\t';
str += string.Format("{0,8}", "");
return str;
}
}
Pyramid.csclass Pyramid : Shape3D
{
private double side;
private double height;
public Pyramid(double side, double height,double density)
: base(density)
{
Side = side;
Height = height;
}
public double Side
{
get { return side; }
set
{
if (value < 0)
side = 0;
else
side = value;
}
}
public double Height
{
get { return height; }
set
{
if (value < 0)
height = 0;
else
height = value;
}
}
public override double Volume()
{
return 1.0/3*side*side*height;
}
public override string ShapeProperty()
{
string str = string.Format("{0,8}", "Pyramid");
str += '\t';
str += string.Format("{0,8:F2}", side);
str += '\t';
str += string.Format("{0,8:F2}", height);
return str;
}
}
Form.cspublic partial class Form1 : Form
{
ListshapeArr=new List();
List rollArr = new List();
string str="";
private static double[] densityArr = { 2.7, 7.87, 11.3 };
public Form1()
{
InitializeComponent();
cbox_ShapeSelect.SelectedIndex = 0;
cbox_MaterialSelect.SelectedIndex = 0;
}
private void cbox_ShapeSelect_SelectedIndexChanged(object sender, EventArgs e)
{
switch (cbox_ShapeSelect.SelectedIndex)
{
case 0:
lbl_Para1.Text = "半徑";
lbl_Para2.Visible = false;
txt_Para2.Visible = false;
break;
case 1:
lbl_Para1.Text = "邊長";
lbl_Para2.Visible = false;
txt_Para2.Visible = false;
break;
case 2:
lbl_Para1.Text = "半徑";
lbl_Para2.Text = "高";
lbl_Para2.Visible = true;
txt_Para2.Visible = true;
break;
case 3:
lbl_Para1.Text = "邊長";
lbl_Para2.Text = "高";
lbl_Para2.Visible = true;
txt_Para2.Visible = true;
break;
default:
break;
}
}
private void btn_Add_Click(object sender, EventArgs e)
{
double density = densityArr[cbox_MaterialSelect.SelectedIndex];
switch (cbox_ShapeSelect.SelectedIndex)
{
case 0:
Ball ball = new Ball(double.Parse(txt_Para1.Text), density);
shapeArr.Add(ball);
rollArr.Add(ball);
break;
case 1:
shapeArr.Add( new Cube(double.Parse(txt_Para1.Text), density));
break;
case 2:
Cylinder cylinder = new Cylinder(double.Parse(txt_Para1.Text), double.Parse(txt_Para2.Text), density);
shapeArr.Add(cylinder);
rollArr.Add(cylinder);
break;
case 3:
shapeArr.Add(new Pyramid(double.Parse(txt_Para1.Text), double.Parse(txt_Para2.Text), density));
break;
default:
break;
}
str += shapeArr[shapeArr.Count - 1].ShapeProperty() + Environment.NewLine;
txt_Message.Text=str+Show();
txt_AmountOfShape.Text = shapeArr.Count.ToString();
}
private void btn_Calculate_Click(object sender, EventArgs e)
{
for (int i = 0; i < shapeArr.Count; i++)
{
string str = (shapeArr[i].ShowVolumeWeight() + Environment.NewLine);
txt_Display.AppendText(str);
}
txt_Display.AppendText(Show() + string.Format("{0,8}", "體積") + "\t" + string.Format("{0,8}", "重量"));
}
private void btn_RollDistance_Click(object sender, EventArgs e)
{
for (int i = 0; i < rollArr.Count; i++)
{
string str = (rollArr[i].DisplayDistance()+ Environment.NewLine);
txt_Roll.AppendText(str);
}
txt_Roll.AppendText(Show() + "滾動的距離");
}
private string Show()
{
string str = "";
str += Environment.NewLine;
str += string.Format("{0,8}", "型別");
str += string.Format("{0,8}", "邊長(半徑)");
str += string.Format("{0,4}", "高");
str += '\t';
str += string.Format("{0,5}", "密度");
str += '\t';
return str;
}
}
沒有留言:
張貼留言