高级语言程序的设计大作业_第1页
高级语言程序的设计大作业_第2页
高级语言程序的设计大作业_第3页
高级语言程序的设计大作业_第4页
高级语言程序的设计大作业_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

./高级语言程序设计大作业__001112二零一二年十一月二十四需求分析问题描述用C#语言编写"电视机-遥控器"仿真程序,实现:电视机可以打开、关闭、搜索节目、调节音量、加减换台。遥控器可以遥控电视机进行打开、关闭、搜索节目、调节音量、加减换台、数字换台〔输入1、2、3….可以切换频道〕。通过遥控器可以进行数字换台,通过操作电视机不能进行数字换台。搜索电视频道用随机数实现,也即,每一次搜索到的频道数不同。使用遥控器上的数字换台时,如果没有相应频道〔如:选择45,而保存的频道只有29个〕应给出相应提示。6,实现每个频道音量单独调整〔选做〕。对问题的理解这个问题的设定主要是老师为了考察一下我们这些初接触面向对象语言〔C#〕的学生面向对象的思想是否初步形成,题目以日常生活中我们频繁接触的电视机和遥控器作为仿真对象,通过建立一些类与其属性和方法,来实现对真实电视机和遥控器的功能与交互关系的仿真。这个题目首先需要电视机和遥控器的两个类,而电视机上的控制功能遥控器都能实现,但是我认为又不将遥控器类设计成对电视机类的继承。因为频道的储存存在于电视机类中,遥控器和电视机控制频道和音量都是存储于这个二维数组,所以在遥控器类中应将各种方法的参数设为对电视机类的引用,在遥控器类中增加频道搜索功能。和多种换台模式程序设计概要设计根据题目的要求,我要实现的功能应该有:电视机的打开,关闭,音量调节,加减换台。遥控器对电视机的打开,关闭,搜索节目,调节音量,加减换台,"--"〔包括"-","1--"〕键数字换台、0~9数字键盘换台.详细设计;对于电视机类,根据题目要求和我对自己家中老"春兰"牌彩电的了解,设计了符合题目要求的"春兰"彩电和遥控器的仿真,详细设计如下: 定义二维数组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整型变量。在本方法中做了变化之后的频道值是在原频道数变化的基础上对总频道值取余的操作,这样便实现了当频道变化X围超出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的赋值操作,在此处由于我觉得在二次输入命令时需要进行输入格式的检验,但实现起来对我来说太困难了,所以就没有了格式检验这一步。代码清单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!">;elseConsole.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!">;elseConsole.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<TV.Channels;j++>//设自动搜索时电视机把每个台随机的搜出并保存在前面的频道数中,搜出所有台后停止搜索{for<k=0,Channel_Found1=a.Next<1,TV.Channels>;k<j;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!">;}elseConsole.WriteLine<"Channel:{0}",TV.Channel[TV.Present_Channel,0]>;}}publicvoidPrint_P<Television_setTV>//输出所有频道{if<TV.TVopened>{intm;for<m=0;m<TV.Channels;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=="--"||Comm

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论