1. 基于坐标的形状设计
题目描述:以点为基础,组建不同形状,可以创建点,圆,三角形,绘出对应图形。
功能要求:
(1) 创建一个Point类,表示平面上的一个点,有两个数据成员,分别表示点的横、纵坐标。
(2) 创建一个Circle类,表示平面上的一个圆,包含一个Point类的成员,表示圆心,另外,还有一个数据成员表示半径,Circle类包含一个判断给定点是在圆内,圆外,还是圆上的函数成员。
(3) 创建一个Triangle类,表示平面上的一个三角形,包含三个Point类的成员,表示三角形的三边,Triangle类包含一个计算周长的函数成员。
(4) 要注意进行合法性检查,例如,并不是任意三点都可以构成三角形,在对三角形进行初始化时要考虑指定的点能不能构成三角形。
(5) 思考:如果要求构建一个抽象类,怎么设计?
MainForm窗体是实现显示3个例子的功能
第一, 例1显示Points类。
第二, 例2显示Circle类
第三, 例3显示Triangle类。
B2文件夹中放入了Points类,Circle类,Triangle类。
Points类实现建立一个坐标点(x,y)功能。Circle类实现建立一个圆心及半径来画圆的功能。Triangle类实现建立三个点求其边来画三角形。
测试结果
(列出本次课程设计所使用的测试方法,关键功能测试的实现过程,关键代码以及测试结果。)
1.测试方法:利用C#语言中window窗体和类来实现
2.关键功能测试的实现过程
创建1个窗体,实现显示3个例子的功能。创建三个类,分别是Points类,Circle类,Triangle类,分别来实现画点,画圆,画三角形。然后实现在调用主窗体MainForm,实现其功能!
3.关键代码
(1)MainFrom窗体:
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
this.StartPosition = FormStartPosition.CenterScreen;
foreach (var v in this.Controls)
{
Button button = v as Button;
button.Click += button_Click;
}
}
void button_Click(object sender, EventArgs e)
{
string s = (sender as Button).Text;
switch (s)
{
case "例1":
Points p = new Points();
p.x = 1; p.y = 1;
string z1 = "Point点的横坐标是" + p.getX();
string z2 = "Point点的纵坐标是" + p.getY();
MessageBox.Show(z1 + "\n" + z2);
break;
case "例2":
Points centre = new Points();
Circle cc = new Circle();
Points p1 = new Points();
p1.x = 9; p1.y = 9;
centre.x = 2; centre.y = 3;
cc.setCircle(3, centre);
string z3 = "圆心是:" + "(" + centre.x + "," + centre.y + ")" + " 输入的半径是:" + cc.getR();
MessageBox.Show(z3 + "\n" + cc.JudgePlaceOfPointAboutCircle(p1));
break;
case "例3":
Points a = new Points();
Points b = new Points();
Points c = new Points();
Triangle tt = new Triangle(a, b, c);
a.x = 0; a.y = 0; b.x = 3; b.y = 0; c.x = 0; c.y = 4;
string z4 = "这三点分别是:" + "(" + a.x + "," + a.y + ")" + "(" + b.x + "," + b.y + ")" + "(" + c.x + "," + c.y + ")";
MessageBox.Show(z4 + "\n" + tt.GetTriangleSideLength(a, b, c));
break;
}
}
}
}
(2)Points类
{
public class Points
{
public int x,y; //以下成员为公有
public int getX()
{
return x;
}
public void setX(int x)
{
this.x = x;
}
public int getY()
{
return y;
}
public void setY(int y)
{
this.y = y;
}
}
}
(3)Circle类
{
public class Circle : Points
{
private int R;Points centre; //以下成员为公有
public int getR()//成员函数
{
return this.R;
}
public Points Getcentre()//成员函数
{
return this.centre;
}
public void setCircle(int R, Points centre)//声明带参数的构造函数
{
this.R = R;
this.centre = centre;
}
public string JudgePlaceOfPointAboutCircle(Points pt)
{
double RR = Math.Pow(R, 2);
Console.WriteLine(RR.ToString());
double pt2 = Math.Pow((pt.x - this.centre.x), 2) + Math.Pow((pt.y - this.centre.y), 2);
if (pt2 < RR)
{
string s1="在圆里面";
return s1;
}
else if (pt2 == RR)
{
string s2 = "在圆的边上";
return s2;
}
else
{
string s3 = "在圆外面";
return s3;
}
}
}
}
(4)Triangle类
{
public class Triangle : Points
{
private Points a, b, c;
public Triangle(Points a, Points b, Points c)
{
this.a = a;
this.b = b;
this.c = c;
}
void setTriangle(Points a, Points b, Points c)
{
this.a = a;
this.b = b;
this.c = c;
}
Points Geta()
{
return this.a;
}
Points Getb()
{
return this.b;
}
Points Getc()
{
return this.c;
}
double lenght1; double lenght2; double lenght3;
public string GetTriangleSideLength(Points a,Points b,Points c)
{
lenght1 = Math.Pow(this.a.x - this.b.x, 2) + Math.Pow(this.a.y - this.b.y, 2);
lenght2 = Math.Pow(this.b.x - this.c.x, 2) + Math.Pow(this.b.y - this.c.y, 2);
lenght3 = Math.Pow(this.a.x - this.c.x, 2) + Math.Pow(this.a.y - this.c.y, 2);
lenght1 = Math.Sqrt(lenght1);
lenght2 = Math.Sqrt(lenght2);
lenght3 = Math.Sqrt(lenght3);
double l;
l = lenght1 + lenght2 + lenght3;
Console.WriteLine("三角形的周长为:{0}", l);
if ((lenght1 + lenght2 > lenght3) && (lenght1 + lenght3 > lenght2) && (lenght2 + lenght3 > lenght1))
{
return "这三个点能够构成三角形";
}
else
{
return "这三个点不能够构成三角形";
}
}
}
}
4.测试结果