版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
高级语言程序设计大作业
班级:001112
十一月二十四
1.需求分析
11问题描述
用C#语言编写“电视机-遥控器”仿真程序,实现:
1、电视机可以打开、关闭、搜索节目、调节音量、加减换台。
2、遥控器可以遥控电视机进行打开、关闭、搜索节目、调节音量、加减换台、数字换
台(输入1、2、3.…可以切换频道)。
3、通过遥控器可以进行数字换台,通过操作电视机不能进行数字换台。
4、搜索电视频道用随机数实现,也即,每一次搜索到的频道数不同。
5、使用遥控器上的数字换台时,假如没有相应频道(如:选择45,而保存的频道只有
29个)应给出相应提醒。
6,实现每个频道音量单独调整(选做).
12对问题的理解
这个问题的设定重要是老师为了考察一下我们这些初接触面向对象语言(C#)的学生面
向对象的思想是否初步形成,题目以平常生活中我们频繁接触的电视机和遥控器作为仿真对
象,通过建立一些类及其属性和方法,来实现对真实电视机和遥控器的功能及交互关系的仿
真。
这个题目一方面需要电视机和遥控器的两个类,而电视机上的控制功能遥控器都能实现,
但是我认为又不将遥控器类设计成对电视机类的继承。由于频道的储存存在于电视机类中,
遥控器和电视机控制频道和音量都是存储于这个二维数组,所以在遥控器类中应将各种方法
的参数设为对电视机类的引用,在遥控器类中增长频道搜索功能。和多种换台模式
2.程序设计
21概要设计
根据题目的规定,我要实现的功能应当有:电视机的打开,关闭,音量调节,加减换台。遥
控器对电视机的打开,关闭,搜索节目,调节音量,加减换台,(涉及“1——”)
键数字换台、0~9数字键盘换台.
22具体设计;
对于电视机类,根据题目规定和我对自己家中老“春兰”牌彩电的了解,设计了符合题
目规定的“春兰”彩电和遥控器的仿真,具体设计如下:
定义二维数组Channel[200,2]用来存储最多200个台(0〜199)和每个台的可单独调
节的音量。
»一一-一构造函数电视机类构造函数中,运用随机数函数产生一个21-200的随机数,来表
达电视机当前能搜到的所有台数。
用for循环将每个台音量初始化为20,由于对于作者熟悉的“春兰”彩电,最大音量
为63,通常情况下正常收看电视时音量为20。这样可方便用户直接观看。
---开关机方法PublicvoidTV_Open()
。publicvoidTVClose()
看关机方法在屏幕上输出提醒,并显示电视机品牌的“Log。”,在屏幕上打出“一
__________________”
———频道加减方法pub1icvoidP_Add()
。opublicvoidP_Subtract()
。我们平时遥控器上和电视机上控制频道加减的按键上都是字母“P",所以这两个方法名字设为P加和
P减。本方法仿照电视机在换台时在屏幕上显示出当前频道,所以打印出
“PresentP:PresentChannelw的字符串。其中Present_Channel是表达当前频道数的i
nt整型变量。
在本方法中做了变化之后的频道值是在原频道数变化的基础上对总频道值取余的操作,这样便实现了当频
道变化范围超过。〜199时,频道数循环。
。------音量加减方法publicvoidV_Add()
。。publicvoidVSubtrac10
我们平时遥控器上和电视机上控制音量加减的按键上都是字母“V",所以这两个方法名字设为V加
和V减。本方法仿照电视机在换台时在屏幕上显示出当前音量,所以打印出
Volume:Channe1[Present_Channel,1]的字符串。其中
Channel[Present_Channe1,1]表达当前频道的音量。
在本方法中做了对当前音量值的判断,假如音量变化超过0〜63,则本方法对声音加减的
操作不做出响应,这与实际相符。
。在设计这些方法时,我设立了一个b0O1类型的变量pub1icboolTVopened;作为状态变
量,表达这个电视机目前是否被打开,这样在调用开机方法时必须是关机状态才会有响应,在
调用其他方法时必须是开机状态才有响应。
对于遥控器类,它实现了电视机类中的每一个方法,每个方法与在电视机类中相应方法同
名且以电视机的的实例化引用为参数并在方法的实现上直接调用电视机类相应方法。同时按
规定和常识,我们知道遥控器上应增长“频道搜索”功能。及遥控器类应增长频道搜索方法,
作者在设计中实现了频道自动搜索和对单个台的单独搜索频道功能。
一—一频道自动搜索方法publicvoidAutoChanne1_Search(TeIevisionset
TV),在设计这个方法时,我按照自己对题目规定的理解,按照如下操作设计了此方法:对电视自动搜台即
把所有台用随机数的方法找出来,存储在前TV.Channels个频道中。
--频道手动搜索方法PublicvoidManua1_Channe1_Search(Television_setT
V),这个方法用来对任意一个频道进行搜台。
----换台方法pub1icvoidChange_Channel(Te1evision_setTV,stringcomma
nd),在执行中假如输入"-”或“--”或,则可以跳跃换台,此时再次输入一个命令,此方法把
此命令由string转换为int从而实现对Present_Channe1的赋值操作,在此处由于我觉得在二次输入
命令时需要进行输入格式的检查,但实现起来对我来说太困难了,所以就没有了格式检查这一步。
3.代码清单
usingSystem;
usingSystem.Co11ections.Generic;
usingSystem.Linq;
usingSystem.Text;
namespace电视机和遥控器仿真
{
//**********************电视机类**************************************
classTelevision_set
(
pub1icint[,]Channel=newint[200,2];//设电视机共能存储200个
台,编号为0~199,每个台都能单独调节音量
inti;
pub1icintChannels
{get;set;}
pub1icboolTVopened;//电视机当前状态是否开机
publicTelevision_set()
{
System.Randonia=newRandom(System.DateTime.Now.Millisecond);
Channels=a.Next(21,200);〃此构造函数拟
定电视机当前能搜到的所有台数,我假定台数在2r200之间
for(i=0;i<200;i++)
Channel[i,11=20:〃初始化每个台都有默认音量20;
)
publicintPresent_Channe1=1;
publicvoidTVOpen()
(
if(!TVopened)
(
Console.WriteLine(HTVopened");
Console.WriteLine("------------------春兰----------------");
Conso1e.WriteLine();
TVopened=true;
)
}
publicvoidTV_Close()
(
if(TVopened)
(
Console.WriteLine("TVclosed");
Conso1e.WriteLine('-------------------春兰------------------
Console.WriteLine();
TVopened=false;
)
)
pub1icvoidP_Adcl()
{
if(TVopened)
(
this.Present_Channel=(Present_Channel+1)%200;
Console.WriteLine('P:{0}”,Present_Channel);
if(Channe1[Present_Channel,0]==0)
Console.WriteLine('*Nochannel!”);
else
Console.WriteLine(,zChannel:{O}^,Channel[Present_Channel,
0]);
)
}
publicvoidP_Subtract()
(
if(TVopened)
{
this.Present_Channe1=(Present_Channe1-1+200)%200;
Conso1e.WriteLine("P:{0}u,Present_Channe1);
if(Channe1[Present_Channel,0]==0)
Console.WriteLineNochanne1!”);
else
Conso1e.WriteLine("Channel:{0}”,Channel[Present_Channel,
0]);
)
)
publicvoidV_Add()
(
if(TVopened)
(
if(Channe1[Present_Channe1,1]<63)
//春兰电视机最大音量为63
Channe1[PresentChanne1,1]++;
)
Console.WriteLine("Volume:{0}",Channe1[Present_Channe
1,1]);
)
}
publicvoidV_Subtract()
(
1f(TVopened)
(
if(Channel[PresentChannel,1]>0)
//春兰电视机最大音量为63
{
Channe1[PresentChanne1,1]一;
)
Console.WriteLine(,zVoIurae:{0}",Channel[PresentChannel,1]);
}
}
)
//*********************遥控器类********************************
c1assDistantControl1er
(
publicvoidTV_Open(Te1evisionsetTV)
(
TV.TV_0pen();
)
pub1icvoidTVClose(Te1evision_setTV)
(
TV.TVCloseO;
}
publievoidPAdd(Television_setTV)
(
TV.P_Add();
)
pub1icvoidPSubtract(Te1evisionsetTV)
(
TV.P_Subtract();
)
pub1icvoidVAdd(TelevisionsetTV)
(
TV.V_Add();
)
publicvoidVSubtract(Television_setTV)
TV.V_Subtract();
publicvoidAutoChannel.Search(TelevisionsetTV)
(
if(TV.TVopened)
(
System.Randoma=newRandom(System.DateTime.Now.Mi11i
second);
intj,k;
intChannel_Found1;
for(j=0;j<200&&j<TV.Channels;j++)//
设自动搜索时电视机把每个台随机的搜出并保存在前面的频道数中,搜出所有台后停止搜索
(
for(k=0,Channel_Found1=a.Next(1,TV.Channe1s);k<j;
k++)
(
if(TV.Channe1[k,0]==Channe1_Found1)continu
e;
)
TV.Channel[j,0]=Channel_Found1;
)
Console.WriteLine(z,Autochanne1searchcompleted");
)
}
publicvoidManua1_Channe1_Search(To1evisionsetTV)
{
if(TV.TVopened)
{
intChanneI_Found2;
System.Randomb=newRandom(System.DateTime.Now.Mi1lisecond);
〃额手动搜索又用到个随机数,换个名字吧
ChanneIFound2=b.Next(1,TV.Channe1s);
TV.Channe1[TV.Present_Channel,0]=Channe1_Found2;
Console.WriteLine('*Manualsearchcompleted");
Console.WriteLine("P:{0}Thechanne1ofthisP:{1}”,TV.Pr
esent_Channel,TV.Channe1[TV.Present_Channe1,0]);
)
}
publicvoidChange_Channe1(TeIevision_setTV,stringcommand)
(
if(TV.TVopened)
TV.PresentChannel=int.Parse(command);
if(TV.Channel[TV.Present_Channel,0]==0)
(
Conso1e.WriteLine("P:{0}”,TV.Present_Channel);
Console.WriteLine("Nochanne1!”);
)
else
Console.WriteLine("Channel:{0}z/,TV.Channe1[TV.Present
_Channel,0]);
}
}
publievoidPrint_P(Television_setTV)//输出所有频道
(
if(TV.TVopened)
(
intm:
for(m=0;m<TV.Channels;m++)
(
Console.WriteLine('P:{0}Channel:{1}”,叫TV.Channel[m,0]);
)
Console.WriteLine(MA11oftheChanne1sisshown.");
}
)
)
//**************火*****Program类*************大**********大**************
classProgram
staticvoidMain(string[]args)
(
TelevisionsetMyTV=newTelevisionset();
DistantContro1JerMyDC=newDi$tant_Contvollei();
StringCommand;
whi1e(true)
(
Command=Console.ReadLine();
〃下面是电视机上操作
if(Command=="o"){MyTV.TV_Open。;}
if(Command==nc"){MyTV.TV_Close();}
if(Command二="p+"){MyTV.P_Add();}
if(Command=="p-"){MyTV.P_Subtract();}
if(Command=="v+"){MyTV.VAddO;}
if(Commancl=="v-"){MyTV.V_Subtract();}
〃下面是遥控器上操作
if(Command="ro"){MyDC.TV_Open(MyTV);}
if(Command=="rc"){MyDC.TVClose(MyTV);}
if(Command=二"rp+〃){MyDC.P_Add(MyTV);}
if(Coinmand=="rp—"){MyDC.P_Subtract(MyTV);}
if(Command="rv+"){MyDC.V_Add(MyTV);}
if(Command=="rv—"){MyDC.V_Subtract(MyTV);}
if(Command=="as"){MyDC.Auto_Channe1Search(MyTV);}
if(Command="ms"){MyDC.Manual_Channel_Search(MyTV);}
if(Command=="showp"){MyDC.Print_P(MyTV);}
if(Command=="-"|ICommand=="—"IICommand=="1
-—〃)//没能力实现输入格式的检查
{
Command=Conso1e.ReadLine();
MyDC.Change_Channe1(MyTV,Command);
)
5运营结果
电视机开机显示的1Ogo,春兰大彩电
•file:///C:/Users/Administrator/Documents/VisualStudio2008/Projects/电视机彳仿真/…回区
o
TUopened
------------春兰.
频道加,频道减,显示当前各频道都没有台
•file:///C:/Users/Administrator/Documents/VisualStudio2008/Project、健视机和遥控器仿真/…0回
o
TUopened
春兰------------
■Nochannel?
P+
P:3
Nochanne1?
P-
P:2
Nochannel?
音量加减
遥控器在实现上述功能时命令符前都加上“r”
下面是遥控器特有操作:
手动搜台:
1•file:///C:/Users/Administrator/Documents/VisualStudio2008/Projects/电视机和®真/.,10।回区
o
TUopened
春兰,
P+
P:2
Nochannel?
P+
P:3
Nochannel?
P-
P:2
Nochannel?
u+
Uolune:21
u+
Uolune:22
Uolune:21
ms
Manualsearchcompleted
P:2ThechannelofthisP:152
自动搜台
•file:///C:/Users/Administrator/Documents/VisualStudio2008/Project$/电视机和®真/…三回
[TUopened
春兰,
l:
■No2channel!
P+
P:3
Nochannel?
P:2
Nochannel?
ftJolune:21
lUolume:22
u-
Uolune:21
ms
Manualsearchcompleted
P:2ThechannelofthisP:152
as
Autochannelsearchcompleted
自动搜台后显示所有搜到的台:下图显示搜到143个台
•file:///C:/Users/Administrator/Documents/VisualStudio2008/Projects/电视机彳器仿助I口I回汉
P:137Channel:115
P:138Channel:125
P:139Channel:94
P:140Channel:19
P:141Channel:54
P:142Channel:143
P:143Channel:130
P:144Channel:35
P:145Channel:99
P:146Channel:26
P:147Channel:!
P:148Channel:158
P:149Channel:96
P:150Channel:121
P:151Channel:19
|P:152Channel:68
|P:153Channel:86
P:154Channel:59
P:155Channel:65
P:156Channel:47
P:157Channel:67
P:158Channel:68
P:159Channel:143
AlloftheChannelsisshov/n.
换台
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 苹果素描课件教学课件
- 质量方针目标培训课件
- 内分泌治疗仪设备使用
- 学涯规划演讲
- 你好法语课件教学课件
- 企业文化工作规划行动方案
- 高三化学一轮复习 原电池课件
- 第二章 相互作用-共点力的平衡 2025年高考物理基础专项复习
- 3.4 1沉淀溶解平衡 课件 高二上学期化学人教版(2019)选择性必修1
- 防台风暴雨演练动员大会
- 2024年长沙市事业单位招聘计算机岗位专业知识试题
- 2024年中国家用燃气采暖炉市场调查研究报告
- 咨询咨询合同三篇
- 2024年中国心力衰竭诊断和治疗指南2024版
- 师范大学学术规范测试
- 四年级数学上册 第五、六单元过关检测卷(苏教版)
- 2024陕西延长石油集团炼化公司操作工校园招聘170人高频难、易错点500题模拟试题附带答案详解
- 福建师范大学《数字摄像》2023-2024学年第一学期期末试卷
- 期末模拟练习(试题)-2024-2025学年苏教版二年级上册数学
- 2023阿里云ACA大数据复习题题库及答案
- 基于PLC的物料分拣系统设计
评论
0/150
提交评论