最近 复习了一下基础,感觉有点感觉了,所以想找到题目测试一下哪还有不足,可是从网上找的都是些小例子,感觉不怎么能体现面向对象。。所以特的请各位能给我经典点的题目 ,我去做做,主要是想测一下哪还有不足。。
解决方案 »
- using System.Text.RegularExpressions; 的使用
- 派生的按钮类,如何添加到工具箱中???
- 开源的皮肤控件
- 简单的sql语句
- RichTextBox改变字符颜色问题?
- VB中使用的模块abc.bas和abc.dll,在C#中应该怎么用?
- datagrid的问题,为什么运行的那么慢??:(
- 欢迎正在学习SharpDevelop代码的朋友来参加讨论
- 想问一个C#操作Access的问题,有关查询的
- 如何判断button的单击事件是否发生
- GridView导出到excel时间日期为乱码######如何控制Excel的单元格数据格式 希望指点!
- ajax在winform程序中的应用?
窗户(Window)是一个类,它的属性有水平/垂直坐标(x,y),宽度(width),高度(height),颜色(color),以及绘制自己的方法draw(Graphics g)。
车门(Door)是一个类,它的属性有水平/垂直坐标(x,y),宽度(width),高度(height),颜色(color),以及绘制自己的方法draw(Graphics g)。另外,每个门都含有一个窗户,一个把手。
引擎(Engine)是一个类,它的属性有水平/垂直坐标(x,y),宽度(width),高度(height),颜色(color),以及绘制自己的方法draw(Graphics g)。
轮子(Wheel)是一个类,它的属性有水平/垂直坐标(x,y),直径(Diameter),颜色(color),以及绘制自己的方法draw(Graphics g)。
汽车(Car)也是一个类,它的属性有水平/垂直坐标(x,y),宽度(width),高度(height),颜色(color),以及绘制自己的方法draw(Graphics g)。另外,每部汽车都包括一个车门,两个轮子,一个引擎,以及不定数目的窗户。
要求:请根据上面的需求陈述,用面向对象的思想设计一个车长、车高以及车子的车窗数可动态改变的系统,并用Java语言实现你的设计方案。发挥你的想象力吧!
using System;
using System.Collections.Generic;
using System.Text;namespace ConsoleApplication22
{
//Person 人
//Mouse 老鼠
//Cat 猫 public delegate void CatCryEventHandler(IResponse[] prp, IResponse[] mrp); public interface IResponse
{
void Response();
} public class Psrson:IResponse //起类名的时候笔误了
{
private string PName; public string Name
{
get { return PName; }
set { PName = value; }
} public Psrson(string s)
{
Name = s;
} public void Response()
{
Console.WriteLine(PName + "醒了!!!");
}
} public class Mouse:IResponse
{
private string Mname; public string Name
{
get { return Mname; }
set { Mname = value; }
} public Mouse(string s)
{
Name = s;
} public void Response()
{
Console.WriteLine(Mname + "跑掉了!!");
}
}
public class Cat
{
private string cName; public string Name
{
get { return cName; }
set { cName = value; }
} public Cat(string s)
{
Name = s;
this.catcry += new CatCryEventHandler(Cat_Cry);
} public event CatCryEventHandler catcry; private void Cat_Cry(IResponse[] prp, IResponse[] mrp)
{
foreach (IResponse sprp in prp)
{
sprp.Response();
}
foreach (IResponse smrp in mrp)
{
smrp.Response();
}
} public void Cry(IResponse[] prp, IResponse[] mrp)
{
Console.WriteLine(cName + "叫!");
catcry(prp, mrp);
}
}
public class Start
{
public static void Main()
{
Cat c = new Cat("猫1");
Mouse[] ms = { new Mouse("老鼠1"), new Mouse("老鼠2") };
Psrson[] ps = { new Psrson("张三"), new Psrson("李四"), new Psrson("王五") };
c.Cry(ps,ms); Console.Read();
}
}
}
不用委托的using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;namespace ConsoleApplication20
{ //Observer 观察者
//Subject 受监视者,受影响的
//AimAt 瞄准的目标
//Person 人
//Mouse 老鼠
//Cat 猫 public interface IObserver
{
void Resquest(); //观察者的反应
} public interface ISubject
{
void AimAt(IObserver obs); //被观察者针对观察者的方法
} public class Mouse : IObserver
{
private string mName;
public string Name
{
get { return mName; }
set { mName = value; } } public Mouse(string s)
{
Name = s;
} public void Resquest()
{
Console.WriteLine(this.mName + "跑掉了!");
}
}
public class Person : IObserver
{
private string pName; public string Name
{
get { return pName; }
set { pName = value; }
} public Person(string s)
{
Name = s;
} public void Resquest()
{
Console.WriteLine(this.pName + "醒了!!!");
}
} public class Cat : ISubject
{
private string cName; ArrayList al = new ArrayList();
ArrayList pal = new ArrayList();
public string Name
{
get { return cName; }
set { cName = value; } } public Cat()
{ } public Cat(string s)
{
cName = s;
} public void AimAt(IObserver obj)
{
al.Add(obj);
} public void AimAtp(IObserver pobj)
{
pal.Add(pobj);
} public void Cry()
{
Console.WriteLine(cName +"猫叫!");
foreach (IObserver o in al)
{
o.Resquest();
}
foreach (IObserver i in pal)
{
i.Resquest();
}
}
} public class Start
{
public static void Main()
{
Mouse[] ms = { new Mouse("老鼠1"), new Mouse("老鼠2") };
Person[] ps = { new Person("张三"), new Person("李四"), new Person("王五") }; Cat c1 = new Cat("猫1"); foreach (IObserver obj in ms)
{
c1.AimAt(obj);
}
foreach (IObserver pobj in ps)
{
c1.AimAtp(pobj);
} c1.Cry(); Console.Read();
}
}
}
设计题目:国家宝藏
本·富兰克林·盖茨(尼古拉斯·凯奇饰)是一个喜爱考古的冒险家。从小就梦想要找到国家宝藏,二十年来这个秘密一直萦绕在他的心头,现在他决定完成这一梦想。假设我们知道国家宝藏在哪里,并且想设计一个系统,如果尼古拉斯碰触国家宝藏中的每箱黄金,系统会自动通知宝藏的守护神。
系统中应该有一个抽象的宝藏类(Treature),宝藏类维护着一个聚集,用于对守护神的跟踪,当宝藏被更动时,通知这些守护神,这个聚集可以用一个向量(Vector)作为宝藏类的Obs属性来实现。该类提供一系列的保护神管理方法,可以增加(addObserver())和删除(deleteObserver())宝藏保护神,以及当宝藏状态被更动时,通知(notifyObservers())守护神。当然,宝藏类还要有一些辅助方法,比如探测宝藏状态是否改变的方法(hasChanged()),标记宝藏状态已更动的方法(setChanged())和复位状态变化标志(clearChanged()),以及返回宝藏守护神数目的方法(countObserver())。
具体的宝藏如黄金(Gold)也应是一个类,且是宝藏类的子类,维护着自己的状态(State),这可以用String型变量来实现。当然还有获得状态(getState())和改变状态(setState())的辅助方法,并且当重新设定的状态与原状态不同时,会通知看护该箱黄金的所有守护神。
你还可发挥想象力定义其他的具体宝藏类,比如钻石(Diamond)类等等。
守护神(Eudemon)应是个抽象类或接口,为各种具体的守护神定义一个接口,在得到宝藏的通知时采取行动。这个接口中只包含一个方法update(),用于宝藏状态改变时,具体的保护神所应采取的行动。
具体的守护神比如老虎(Tiger)就是一个实现了抽象守护神接口中update()方法的具体守护神。你还可发挥想象力定义其他的具体守护神类,比如狮子(Lion)类等等。
最后,尼古拉斯·凯奇(Cage)也是一个类,且是具体类,他将凭借智慧和勇敢,更动(touchTreature())这些国家宝藏的状态,这可要惊动宝藏的守护神呦......
要求:请根据上面的剧本陈述,设计一个国家宝藏的守护系统,并用Java语言实现你的设计方案。发挥你的想象力吧!
农夫果园
设计题目:农夫果园
一个农场,专门种植销售各类水果,在这个系统中需要描述下列水果:
葡萄:Grape
草莓:Strawberry
苹果:Apple
水果与其他的植物有很大的不同,水果最终是可以采摘食用的。那么一个自然的做法就是建立一个各种水果都适用的接口,以便与农场里的其他植物区分开。水果接口规定出所有的水果都必须实现的接口,包括任何水果必须具备的方法:种植plant(),生长grow(),收获harvest()。
Apple类是水果中的一种,因此它实现了水果接口所声明的所有方法。另外,由于苹果是多年生植物,因此多出一个treeAge性质,描述苹果树的树龄。
Grape类是水果类的一种,也实现Fruit接口中所声明的所有方法。但由于葡萄分为有籽和无籽的两种,因此比通常的水果多出一个seedless性质。
Strawberry类也是水果的一种,也实现了Fruit接口。
农场的园丁也是系统的一部分,自然要由一个合适的类来代表。这个类就是FruitGardener,它会根据农场老板的要求,使用factory()方法创建出不同的水果对象,比如苹果(Apple),葡萄(Grape)或草莓(Strawberry)的实例。而如果接到不合法的要求,会提示错误。
农场的市场调查员也是系统的一部分,也需要一个类代表,这个类是MarketInquirer,它通过inquire()调查今年市场上哪一种水果热销。
农场的老板也是系统的一部分,仍需要一个类来代表,这个类是FruitBoss,他会根据市场调查员的反馈信息,通知农场的园丁今年种植哪种水果。
要求:请你根据上述系统需求,用Java语言设计这个农场系统,发挥你的想象力吧!
祝你的农场百果丰收!
夏日麽麽茶
设计题目:夏日麽麽茶
在一个茶庄(TeaStall)所使用的系统里,有各种风味的名茶。
茶(Tea)在系统中要用一个类代表,它有一个属性(Flavor)。
茶庄的菜单(TeaMenu)在系统中以用类来表示,也可用接口来实现。其中包含了茶庄中可供顾客点的茶。比如"西湖龙井","洞庭碧螺春","白毫银针","君山银针","黄山毛峰 ","武夷岩茶","安溪铁观音","信阳毛尖","庐山云雾","六安瓜片"等。
茶庄的沏茶员(InfuseMan)是系统中的一个类,他可以根据侍者(Waitor)所下的单,冲泡各种风味的茶,如果订单中风味的茶已沏好,就直接为侍者提供(getTea())茶;如果还没沏好则先冲泡再给侍者提供。沏茶员负责维护茶壶柜(teapotCabinet)和冲泡好的风味数(totalFlavors),这些都可作为沏茶员的属性来维护。由于一个茶庄所能提供的风味数是没有限制的,所以茶壶柜(teapotCabinet)应该能动态调整大小,以容纳下未知数量的茶壶,这可以由一个向量Vecotor来实现。闭店时,沏茶员可以统计(getTotalFlavors())一天冲泡的风味数。
茶客(TeaClient)也是系统中的一个类,他最喜欢的风味(favoriteFlavor)是一个属性。茶客每天根据菜单点(whatIsYourFavoriteFlavor())适合自己心情的茶。
侍者(Waitor)也是一个类,他担负着茶客和沏茶员之间的桥梁。他询问茶客最喜欢的风味,并根据顾客的要求下单(takeOrder())给沏茶员,从沏茶员那里接过茶杯放于茶盘(TeacupTray)上,茶盘也可以用一个向量Vector来表示,作为侍者的一个属性由侍者维护。侍者将茶盘上的茶杯端给(serveTeacup())顾客。侍者会在一天中,统计自己招待过的订单数(totalOrders),这可作为侍者的一个属性实现,并在闭店时,统计(getTotalOrders())服务的订单数。
茶庄(TeaStall)也是系统中的一个类,它聚集了菜单、沏茶员、侍者、顾客,它在创建时会指定一个可容纳的最多顾客数(CLIENT_MAX_NUM),每天开店(open())时,派出一位沏茶员和一位侍者,并接待最多数量的顾客。侍者迎接顾客,为顾客下单,沏茶员沏好茶后,侍者会用茶盘将茶端给顾客。每天闭店(close())后,会统计当天的订单数和沏茶风味数。 要求:你可能玩过大富翁、主题公园、主题医院等策略游戏,这个茶庄系统,就是这类游戏的一个原型,请你根据上述脚本,用Java语言设计这个主题茶馆,发挥你的想象力吧!
茶,
香叶,嫩芽,
慕诗客,爱僧家。
碾雕白玉,罗织红纱。
铫煎黄蕊色,碗转曲尘花。
夜后邀陪明月,晨前命对朝霞。
洗尽古今人不倦,将至醉后岂堪夸。
按照上个题目,代码如下:
public class ShoutEventArgs : EventArgs
{
//构造函数和各种属性
} public class Cat
{
//事件定义
public event EventHandler<ShoutEventArgs> Shout;
//事件处理
protected void OnNewShout(ShoutEventArgs e)
{
EventHandler<ShoutEventArgs> temp = Shout;
if (temp != null) temp(this, e);
}
//引发事件函数
public void Shouting()
{
ShoutEventArgs e = new ShoutEventArgs();
OnNewShout(e);
}
} public class Boss
{
protected Cat thecat;
public Cat HisCat
{
get { return thecat; }
set
{
if (value != null)
value.Shout += new EventHandler<ShoutEventArgs> (ReceiveMouseShout);
else thecat.Shout -=new EventHandler<ShoutEventArgs> (ReceiveMouseShout);
thecat = value;
}
} public void ReceiveMouseShout(object sender,EventArgs e)
{
this.Wake();
}
protected void Wake()
{
Console.WriteLine("Boss wake.");
}
} public class Mouse
{
protected Cat thecat;
public Cat CatNeedNotice
{
get { return thecat; }
set
{
if (value != null)
value.Shout += new EventHandler<ShoutEventArgs>(ReceiveMouseShout);
else thecat.Shout -= new EventHandler<ShoutEventArgs>(ReceiveMouseShout);
thecat = value;
}
} public void ReceiveMouseShout(object sender, EventArgs e)
{
this.Run();
} protected void Run()
{
Console.WriteLine("Mouse run.");
}
} public class MyClass
{
public static void Main()
{
Cat cat = new Cat();
Boss boss = new Boss();
Mouse mouse = new Mouse();
mouse.CatNeedNotice = cat;
boss.HisCat = cat;
cat.Shouting();
boss.HisCat = null;
cat.Shouting();
Console.ReadKey();
}
}
------------------------
Fortner() 从哪能找到相关资料,我对泛型不熟悉,刚才看了相关的资料也没有这方面的。。
using System.Collections.Generic;
using System.Text;namespace MyNewCar
{
public interface CarInter //描述汽车各部件的水平,垂直坐标
{
void Sharep(double x,double y);
void SharepColor(string color);
}
public interface DrawCar //实现汽车各部件的绘制方法
{
void ShareDraw(double a,double b);
}
class Car:CarInter ,DrawCar //定义一个汽车类
{
public string TypeName; //汽车的类型
public Car(string name)
{
this.TypeName = name;
}
public string TypeName1
{
get { return TypeName; }
set { TypeName = value; }
}
public void Sharep(double x, double y)
{
Console.WriteLine("{0}汽车的坐标为:" + "(" + x + "," + y + ")", TypeName1);
}
public void SharepColor(string color)
{
Console.WriteLine("汽车颜色是:{0}", color);
}
public void ShareDraw(double a, double b)
{
double area = 0;
area = a * b;
Console.WriteLine("车的面积是:{0}平方厘米", area);
}
public void Show()
{
Console.WriteLine("汽车由一个车门,两个轮子,一个引擎组成");
}
}
class Window : Car, CarInter, DrawCar //继承一个基类和两个接口
{
public Window(string name) //定义一个汽车的窗口类
: base(name)
{
//this.TypeName1 =
}
public void Sharep(double x, double y)
{
Console.WriteLine("{0}汽车的窗户的坐标为:"+"("+x+","+y+")",TypeName1);
}
public void SharepColor(string color)
{
Console.WriteLine("窗户颜色是:{0}",color);
}
public void ShareDraw(double a, double b)
{
try
{
double area = 0;
area = a * b;
Console.WriteLine("窗户的面积为:{0}平方厘米", area);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
class Cardoor : Car, CarInter, DrawCar //定义一个汽车的车门类
{
//Window carWindows;
public Cardoor(string name):base(name )
{
//this.carWindows = carWindows;
}
public void Sharep(double x, double y)
{
Console.WriteLine("{0}汽车的车门的坐标为:" + "(" + x + "," + y + ")", TypeName1);
}
public void SharepColor(string color)
{
Console.WriteLine("车门颜色是:{0}", color);
}
public void ShareDraw(double a,double b)
{
double area = 0;
area = a * b;
Console.WriteLine("车门占用车的面积是:{0}平方厘米",area );
}
public void ShowDoor()
{ Console.WriteLine("车门有一个窗户");
}
}
class Engine:CarInter ,DrawCar //定义一个汽车的引擎类
{
public Engine()
{
}
public void Sharep(double x, double y)
{
Console.WriteLine("汽车的引擎的坐标为:" + "(" + x + "," + y + ")");
}
public void SharepColor(string color)
{
Console.WriteLine("引擎颜色是:{0}", color);
}
public void ShareDraw(double a, double b)
{
double area = 0;
area = a * b;
Console.WriteLine("引擎占用车的面积是:{0}平方厘米", area);
}
}
class Wheel:CarInter ,DrawCar //定义一个汽车的轮胎类
{
public Wheel ()
{
}
public void Sharep(double x, double y)
{
Console.WriteLine("汽车的车轮的坐标为:" + "(" + x + "," + y + ")");
}
public void SharepColor(string color)
{
Console.WriteLine("车轮颜色是:{0}", color);
}
public void ShareDraw(double a, double b)
{
double area = 0;
area = a * b;
Console.WriteLine("车轮占用车的面积是:{0}平方厘米", area);
}
}
}
using System;
using System.Collections.Generic;
using System.Text;namespace MyNewCar
{
class Program
{
static void Main(string[] args)
{
Car myCar = new Car("宝马");
myCar.Sharep(100,200);
myCar.SharepColor("黑色");
myCar.ShareDraw(300,400);
myCar.Show(); Console.WriteLine(); Window myWin = new Window("宝马");
myWin.Sharep(20,30);
myWin.SharepColor("紫色");
myWin.ShareDraw(15,20); Console.WriteLine(); Cardoor myDoor = new Cardoor("宝马");
myDoor.Sharep(100,50);
myDoor.SharepColor("黑色");
myDoor.ShareDraw(20,30);
myDoor.ShowDoor(); Console.WriteLine(); Engine myEn = new Engine();
myEn.Sharep(15,10);
myEn.SharepColor("红褐色");
myEn.ShareDraw(15,10); Console.WriteLine(); Wheel myWheel = new Wheel();
myWheel.Sharep(20,30);
myWheel.SharepColor("黑白色");
myWheel.ShareDraw(15,10);
Console.WriteLine();
Console.WriteLine("以上是本人对汽车各组成部件的描述!!");
Console.Read();
}
}
}