高级语言程序的设计大作业.docx
- 文档编号:11878300
- 上传时间:2023-06-03
- 格式:DOCX
- 页数:17
- 大小:290.52KB
高级语言程序的设计大作业.docx
《高级语言程序的设计大作业.docx》由会员分享,可在线阅读,更多相关《高级语言程序的设计大作业.docx(17页珍藏版)》请在冰点文库上搜索。
高级语言程序的设计大作业
高级语言程序设计大作业
班级:
001112
二零一二年十一月二十四
1.需求分析
1.1.问题描述
用C#语言编写“电视机-遥控器”仿真程序,实现:
1、电视机可以打开、关闭、搜索节目、调节音量、加减换台。
2、遥控器可以遥控电视机进行打开、关闭、搜索节目、调节音量、加减换台、数字换台(输入1、2、3….可以切换频道)。
3、通过遥控器可以进行数字换台,通过操作电视机不能进行数字换台。
4、搜索电视频道用随机数实现,也即,每一次搜索到的频道数不同。
5、使用遥控器上的数字换台时,如果没有相应频道(如:
选择45,而保存的频道只有29个)应给出相应提示。
6,实现每个频道音量单独调整(选做)。
1.2.对问题的理解
这个问题的设定主要是老师为了考察一下我们这些初接触面向对象语言(C#)的学生面向对象的思想是否初步形成,题目以日常生活中我们频繁接触的电视机和遥控器作为仿真对象,通过建立一些类及其属性和方法,来实现对真实电视机和遥控器的功能及交互关系的仿真。
这个题目首先需要电视机和遥控器的两个类,而电视机上的控制功能遥控器都能实现,但是我认为又不将遥控器类设计成对电视机类的继承。
因为频道的储存存在于电视机类中,遥控器和电视机控制频道和音量都是存储于这个二维数组,所以在遥控器类中应将各种方法的参数设为对电视机类的引用,在遥控器类中增加频道搜索功能。
和多种换台模式
2.程序设计
2.1.概要设计
根据题目的要求,我要实现的功能应该有:
电视机的打开,关闭,音量调节,加减换台。
遥控器对电视机的打开,关闭,搜索节目,调节音量,加减换台,“--”(包括“-”,“1--”)键数字换台、0~9数字键盘换台.
2.2.详细设计;
对于电视机类,根据题目要求和我对自己家中老“春兰”牌彩电的了解,设计了符合题目要求的“春兰”彩电和遥控器的仿真,详细设计如下:
定义二维数组Channel[200,2]用来存储最多200个台(0~199)和每个台的可单独调节的音量。
-----构造函数电视机类构造函数中,利用随机数函数产生一个21~200的随机数,来表示电视机当前能搜到的所有台数。
用for循环将每个台音量初始化为20,因为对于作者熟悉的“春兰”彩电,最大音量为63,通常情况下正常收看电视时音量为20。
这样可方便用户直接观看。
-----开关机方法publicvoidTV_Open()
publicvoidTV_Close()
看关机方法在屏幕上输出提示,并显示电视机品牌的“Logo”,在屏幕上打出“-------------春兰-------------”
-----频道加减方法publicvoidP_Add()
publicvoidP_Subtract()
我们平时遥控器上和电视机上控制频道加减的按键上都是字母“P”,所以这两个方法名字设为P加和P减。
本方法仿照电视机在换台时在屏幕上显示出当前频道,所以打印出
“PresentP:
Present_Channel”的字符串。
其中Present_Channel是表示当前频道数的int整型变量。
在本方法中做了变化之后的频道值是在原频道数变化的基础上对总频道值取余的操作,这样便实现了当频道变化范围超出0~199时,频道数循环。
-----音量加减方法publicvoidV_Add()
publicvoidV_Subtract()
我们平时遥控器上和电视机上控制音量加减的按键上都是字母“V”,所以这两个方法名字设为V加和V减。
本方法仿照电视机在换台时在屏幕上显示出当前音量,所以打印出
Volume:
Channel[Present_Channel,1]的字符串。
其中
Channel[Present_Channel,1]表示当前频道的音量。
在本方法中做了对当前音量值的判断,如果音量变化超过0~63,则本方法对声音加减的操作不做出响应,这与实际相符。
在设计这些方法时,我设置了一个bool类型的变量publicboolTVopened;作为状态变量,表示这个电视机目前是否被打开,这样在调用开机方法时必须是关机状态才会有响应,在调用其他方法时必须是开机状态才有响应。
对于遥控器类,它实现了电视机类中的每一个方法,每个方法与在电视机类中对应方法同名且以电视机的的实例化引用为参数并在方法的实现上直接调用电视机类对应方法。
同时按要求和常识,我们知道遥控器上应增加“频道搜索”功能。
及遥控器类应增加频道搜索方法,作者在设计中实现了频道自动搜索和对单个台的单独搜索频道功能。
-----频道自动搜索方法publicvoidAuto_Channel_Search(Television_setTV),在设计这个方法时,我按照自己对题目要求的理解,按照如下操作设计了此方法:
对电视自动搜台即把所有台用随机数的方法找出来,存储在前TV.Channels个频道中。
-----频道手动搜索方法publicvoidManual_Channel_Search(Television_setTV),这个方法用来对任意一个频道进行搜台。
----换台方法publicvoidChange_Channel(Television_setTV,stringcommand),在执行中如果输入“-”或“--”或“1--”,则可以跳跃换台,此时再次输入一个命令,此方法把此命令由string转换为int从而实现对Present_Channel的赋值操作,在此处由于我觉得在二次输入命令时需要进行输入格式的检验,但实现起来对我来说太困难了,所以就没有了格式检验这一步。
3.代码清单
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
namespace电视机和遥控器仿真
{
//**********************电视机类*************************************************
classTelevision_set
{
publicint[,]Channel=newint[200,2];//设电视机共能存储200个台,编号为0~199,每个台都能单独调节音量
inti;
publicintChannels
{get;set;}
publicboolTVopened;//电视机当前状态是否开机
publicTelevision_set()
{
System.Randoma=newRandom(System.DateTime.Now.Millisecond);
Channels=a.Next(21,200);//此构造函数确定电视机当前能搜到的所有台数,我假定台数在21~200之间
for(i=0;i<200;i++)
Channel[i,1]=20;//初始化每个台都有默认音量20;
}
publicintPresent_Channel=1;
publicvoidTV_Open()
{
if(!
TVopened)
{
Console.WriteLine("TVopened");
Console.WriteLine("-------------春兰-------------");
Console.WriteLine();
TVopened=true;
}
}
publicvoidTV_Close()
{
if(TVopened)
{
Console.WriteLine("TVclosed");
Console.WriteLine("-------------春兰-------------");
Console.WriteLine();
TVopened=false;
}
}
publicvoidP_Add()
{
if(TVopened)
{
this.Present_Channel=(Present_Channel+1)%200;
Console.WriteLine("P:
{0}",Present_Channel);
if(Channel[Present_Channel,0]==0)
Console.WriteLine("Nochannel!
");
else
Console.WriteLine("Channel:
{0}",Channel[Present_Channel,0]);
}
}
publicvoidP_Subtract()
{
if(TVopened)
{
this.Present_Channel=(Present_Channel-1+200)%200;
Console.WriteLine("P:
{0}",Present_Channel);
if(Channel[Present_Channel,0]==0)
Console.WriteLine("Nochannel!
");
else
Console.WriteLine("Channel:
{0}",Channel[Present_Channel,0]);
}
}
publicvoidV_Add()
{
if(TVopened)
{
if(Channel[Present_Channel,1]<63)//春兰电视机最大音量为63
{
Channel[Present_Channel,1]++;
}
Console.WriteLine("Volume:
{0}",Channel[Present_Channel,1]);
}
}
publicvoidV_Subtract()
{
if(TVopened)
{
if(Channel[Present_Channel,1]>0)//春兰电视机最大音量为63
{
Channel[Present_Channel,1]--;
}
Console.WriteLine("Volume:
{0}",Channel[Present_Channel,1]);
}
}
}
//*********************遥控器类********************************
classDistant_Controller
{
publicvoidTV_Open(Television_setTV)
{
TV.TV_Open();
}
publicvoidTV_Close(Television_setTV)
{
TV.TV_Close();
}
publicvoidP_Add(Television_setTV)
{
TV.P_Add();
}
publicvoidP_Subtract(Television_setTV)
{
TV.P_Subtract();
}
publicvoidV_Add(Television_setTV)
{
TV.V_Add();
}
publicvoidV_Subtract(Television_setTV)
{
TV.V_Subtract();
}
publicvoidAuto_Channel_Search(Television_setTV)
{
if(TV.TVopened)
{
System.Randoma=newRandom(System.DateTime.Now.Millisecond);
intj,k;
intChannel_Found1;
for(j=0;j<200&&j { for(k=0,Channel_Found1=a.Next(1,TV.Channels);k { if(TV.Channel[k,0]==Channel_Found1)continue; } TV.Channel[j,0]=Channel_Found1; } Console.WriteLine("Autochannelsearchcompleted"); } } publicvoidManual_Channel_Search(Television_setTV) { if(TV.TVopened) { intChannel_Found2; System.Randomb=newRandom(System.DateTime.Now.Millisecond);//额手动搜索又用到个随机数,换个名字吧 Channel_Found2=b.Next(1,TV.Channels); TV.Channel[TV.Present_Channel,0]=Channel_Found2; Console.WriteLine("Manualsearchcompleted"); Console.WriteLine("P: {0}ThechannelofthisP: {1}",TV.Present_Channel,TV.Channel[TV.Present_Channel,0]); } } publicvoidChange_Channel(Television_setTV,stringcommand) { if(TV.TVopened) { TV.Present_Channel=int.Parse(command); if(TV.Channel[TV.Present_Channel,0]==0) { Console.WriteLine("P: {0}",TV.Present_Channel); Console.WriteLine("Nochannel! "); } else Console.WriteLine("Channel: {0}",TV.Channel[TV.Present_Channel,0]); } } publicvoidPrint_P(Television_setTV)//输出所有频道 { if(TV.TVopened) { intm; for(m=0;m { Console.WriteLine("P: {0}Channel: {1}",m,TV.Channel[m,0]); } Console.WriteLine("AlloftheChannelsisshown."); } } } //********************Program类*************************************** classProgram { staticvoidMain(string[]args) { Television_setMyTV=newTelevision_set(); Distant_ControllerMyDC=newDistant_Controller(); StringCommand; while(true) { Command=Console.ReadLine(); //下面是电视机上操作 if(Command=="o"){MyTV.TV_Open();} if(Command=="c"){MyTV.TV_Close();} if(Command=="p+"){MyTV.P_Add();} if(Command=="p-"){MyTV.P_Subtract();} if(Command=="v+"){MyTV.V_Add();} if(Command=="v-"){MyTV.V_Subtract();} //下面是遥控器上操作 if(Command=="ro"){MyDC.TV_Open(MyTV);} if(Command=="rc"){MyDC.TV_Close(MyTV);} if(Command=="rp+"){MyDC.P_Add(MyTV);} if(Command=="rp-"){MyDC.P_Subtract(MyTV);} if(Command=="rv+"){MyDC.V_Add(MyTV);} if(Command=="rv-"){MyDC.V_Subtract(MyTV);} if(Command=="as"){MyDC.Auto_Channel_Search(MyTV);} if(Command=="ms"){MyDC.Manual_Channel_Search(MyTV);} if(Command=="show_p"){MyDC.Print_P(MyTV);} if(Command=="-"||Command=="--"||Command=="1--")//没能力实现输入格式的检验 { Command=Console.ReadLine(); MyDC.Change_Channel(MyTV,Command); } } } } } 5运行结果 电视机开机显示的logo,春兰大彩电 频道加,频道减,显示当前各频道都没有台 音量加减 遥控器在实现上述功能时命令符前都加上“r” 下面是遥控器特有操作: 手动搜台: 自动搜台 自动搜台后显示所有搜到的台: 下图显示搜到143个台 换台 遥控器关机 6感谢与体会 这是我在学了C#这门面向对象语言后,第一次全方位的相对比较自由的设计“类”,印象很深刻的是老师布置完作业时,感觉这可麻烦大了,我面向对象思想还没形成呢。 而且老师还说不要去详细的把C#学玩,这只是个大作业而已。 我当时心想,这不学根本做不了啊。 后来老师在课堂上举了像建立“汽车”这样的类的例子,于是自己慢慢有了些想法,但是对大作业还是一筹莫展。 其实大一结束我就开始由C转向学C++了,但是选了这门课之后,我又转向学C#了,自己书桌上放了本C#的参考书。 于是自己C#语法基础还算可以。 我是在十一月23号左右开始认真着手做大作业的,经过半天的思考,自己由一筹莫展渐渐开始有眉目了,于是我是在写大作业的同时编写程序的,甚至大作业要超前于报告的进程。 自己的程序真是这样,从刚开始的一点点,一个方法一个方法的添,自己C语言编程的很多习惯还没完全改过来,有些函数在C#中不会用,以及变量的受限等等一些问题是自己经过看书上网搜逐一解决的。 于是渐渐发现老师布置的作业真的挺简单的,就是设计两个类而已,C#的语法根本用不多少。 自己的这点底子再加上网络的帮助完全应付的了,自己在写报告的时候很真实的记录下来了自己的想法历程和一些小的idea。 这个大作业做下来,感觉收获太多了,最重要的是用C#编程时感觉自己在真正的像个程序员在工作了
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 高级 语言 程序 设计 作业