求助各路大神。用C#语言编写“电视机

[复制链接]
查看11 | 回复1 | 2013-1-24 11:55:21 | 显示全部楼层 |阅读模式
pubic interface ITVFunction{
void Open();
void TurnOFF();
void SearCh();
void TurnUP();
void TurnDown();} 电视机部分功能 public interface ITVFunctionE{
void Turn(int Num);}数字换台功能 publi class TVSet : ITVFunction,ITVFunctionE{
private Dictionarystring,int TvSeters;记录电录频道
private KeyValuePairstring,int CurrentTVseters;当前台
public TVSet()
{
this.TvSeters = ne Dictionarystring,int();
}
回显功能,显示当前播放的信息
private void Display()
{
if(CurrentTVseters == null)
{
Console.WriteLine(满屏的雪花啊,你也不搜索一下台);
}
else
{
Console.WriteLine(正在播放{0}电台,音量为{1}%,CurrnetTVseters.Key,CurrentTseters.value);
}
}
public void open()
{
Console.WriteLine(电视机打开);
Display();
}
public void TurnOff()
{
Console.WriteLine(电视关闭);
}
public void Search()
{
Console.WriteLine(电视机正在搜索电台...);
电视台规定频道为15kHz到22KHz中
TvSeters.Clear();
while(true)
{
开始搜索台
string temp = string.Format({0}Khz,new Math.Random()*Next(700)100+15.0);
try
{
TvSeters.Add(temp,10);存台,默认音量为10
Console.WriteLine(“找到频率为{0}的台,temp);
}
catch
{} 只是防止加入重复的电台
if(new Math.Random().Next(20)==0) break;
为了随机跳出,跳出比例是19:1,生成的随机数字是0时直接跳出。该数字可以进行更改。
}
Console.WriteLine(搜索台结束);
CurrentTvseters = TvSeters.MinKeyValuePairstring,int(_Item =_Item.Key);
取得0号台;频率最低的。
Display();
}
public void TurnUP()
{
CurrentTvseters = TvSeters.WhereKeyValuePairstring,int(_Item=_Item.Key CurrnetTvseters.Key).MinKeyValuePairstring,int(Item = _Item.Key);
找出比当前台频道大的所有台中的最小频道台,
if(CurrentTVseters == null)
currnetTVseters = TvSeters.MinKeyValuePairstring,int(_Item = _Item.Key);
如果没有当前转入最小台,也就是表示是最大台了
Display();
向上换台没有考虑如果没有搜索台或搜索台为空的情况。
}
public void TurnDown()
{
CurrentTvseters = TvSeters.WhereKeyValuePairstring,int(_Item=_Item.KeyCurrnetTvseters.Key).MaxKeyValuePairstring,int(Item = _Item.Key);
找出比当前台频道大的所有台中的最小频道台,
if(CurrentTVseters == null)
currnetTVseters = TvSeters.MaxKeyValuePairstring,int(_Item = _Item.Key);
如果没有当前转入最大台,也就是表示是最小台了
Display();
向下换台没有考虑如果没有搜索台或搜索台为空的情况。
}
public void Turn(int Num)
{
if(Num0) num = 0; 实际操作中不可能输入负数的
if(NumTvSeters.Count-1)
{
Console.WriteLine(输入频道号超出范围);
}else
{
CurrentTVseters = TvSeters.OrderByKeyValuePairstring,int(_Item = _Item.Key).Item[Num];
排序后选相应的频道号;
Display();
}
}
} 电视操作面板代理public class TVOp : ITVFunction{
private TvSet tv;
public TVOp(TvSet tvset)
{
this.tv = tvset;
}
public void Open(){tv.Open();}
public void TurnOff(){tv.TurnOff();}
public void TurnUP(){tv.TurnUP();}
public void TurnDown(){tv.TurnDown();}
public void Search(){tv.Search();}} 遥控器操作代理public class WireLessOp : ITVFunction,ITVFunctionE{
private TvSet tv; public WireLessOp(TvSet tvset){
this.tv = tvset;} public void Open(){tv.Open();} public void TurnOff(){tv.TurnOff();} public void TurnUP(){tv.TurnUP();} public void TurnDown(){tv.TurnDown();} public void Search(){tv.Search();} public void Turn(Int Num){tv.Turn(Num);}} 该设计使用了代理模式,电视操作其实与电视功能是两个不同的类,虽然在现在世界中电视上的按键是在电视台上,但在软件世界中两者必须是不同的类的,当然如果你非要模拟成现实,那么再包装一块即可,但是问题是那样还用代理与接口有什么意义呢,所以两者是分开的。 设计中使用了代理模块,电视机上的按键操作与遥控器上的按钮操作其实是电视机功能的两个不同代理,只不过一个不继承数字接口而已。所以由于功能的分化,使用了两个接口,一个是普通功能,另一个是扩功能,扩展功能中实现了数字换台,而电视机必须实现这两者的功能,所以才有以上的继承方式。至于类,肯定是电视机是一个类,电视机上操作面板又是一个类,遥控器肯定还是一个类,所以使用了两个接口三个类。 而所有功能其实是属于电视台,所以功能全部在电视机类上。而代理类中,只须要生成代理的对象即可。其他的都是一般平常的功能。至于其中的所使用的东西,可以查看msdn,其实就利用了一个dictionary而已,不过这个玩意是支持lambda表达式的,所以这里直接使用Lambda表达式进行了计算而已。没有任何复杂的地方。好象忘记调节音量了,同调台是一样的,也加在ITVFunction中, 同样在电视功能中实现代码:public void VoiceUP(){
TVSeters.Remove(CurrnetTVseters);清除原来的
CurrentTVseters.value +=10;
if(CurrentTVseters.Value 100) CurrentTVseters.Value =100;
TVSeters.Add(CurrentTVSeters);添加修改后的
Display();}减小音量的你要以参考这个;并在代理中实现即可。赞同0|评论
回复

使用道具 举报

千问 | 2013-1-24 11:55:21 | 显示全部楼层
已发你邮箱赞同0|评论
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行