当前位置:首页 > 高级语言程序设计大作业
高级语言程序设计大作业
班级: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。这样可方便用户直接观看。
-----开关机方法public void TV_Open()
public void TV_Close()
看关机方法在屏幕上输出提示,并显示电视机品牌的“Logo”,在屏幕上打出
“-------------春兰-------------”
-----频道加减方法public void P_Add()
public void P_Subtract()
我们平时遥控器上和电视机上控制频道加减的按键上都是字母“P”,所以这两个方法名字设为P加 和
P减。本方法仿照电视机在换台时在屏幕上显示出当前频道,所以打印出
“Present P: Present_Channel”的字符串。其中Present_Channel是表示当前频道数的int整型变量。 在本方法中做了变化之后的频道值是在原频道数变化的基础上对总频道值取余的操作,这样便实现了当频道变化范围超出0~199时,频道数循环。
-----音量加减方法public void V_Add()
public void V_Subtract()
我们平时遥控器上和电视机上控制音量加减的按键上都是字母“V”,所以这两个方法名字设为V加 和
V减。本方法仿照电视机在换台时在屏幕上显示出当前音量,所以打印出 Volume: Channel[Present_Channel, 1]的字符串。其中 Channel[Present_Channel, 1]表示当前频道的音量。
在本方法中做了对当前音量值的判断,如果音量变化超过0~63,则本方法对声音加减的操作不做出响应,这与实际相符。 在设计这些方法时,我设置了一个bool类型的变量public bool TVopened;作为状态变量,表示这个电视机目前是否被打开,这样在调用开机方法时必须是关机状态才会有响应,在调用其他方法时必须是开机状态才有响应。
对于遥控器类,它实现了电视机类中的每一个方法,每个方法与在电视机类中对应方法同名且以电视机的的实例化引用为参数并在方法的实现上直接调用电视机类对应方法。同时按要求和常识,我们知道遥控器上应增加“频道搜索”功能。及遥控器类应增加频道搜索方法,作者在设计中实现了频道自动搜索和对单个台的单独搜索频道功能。
-----频道自动搜索方法public void Auto_Channel_Search(Television_set TV),在设计这个方
法时,我按照自己对题目要求的理解,按照如下操作设计了此方法:对电视自动搜台即把所有台用随机数的方法找出来,存储在前TV.Channels个频道中。
----- 频道手动搜索方法public void Manual_Channel_Search(Television_set TV),这个方法用来对 任意一个频道进行搜台。
----换台方法public void Change_Channel(Television_set TV,string command),在执行中如果输入“-”或“--”或“1--”,则可以跳跃换台,此时再次输入一个命令,此方法把此命令由string转换为int从而实现对Present_Channel的赋值操作,在此处由于我觉得在二次输入命令时需要进行输入格式的
检验,但实现起来对我来说太困难了,所以就没有了格式检验这一步。
3. 代码清单
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 电视机和遥控器仿真 { //**********************电视机类************************************************* class Television_set { public int[,] Channel=new int[200,2]; //设电视机共能存储200个台,编号为0~199,每个台都能单独调节音量 int i; public int Channels {get;set;} public bool TVopened; //电视机当前状态是否开机 public Television_set() { System.Random a = new Random(System.DateTime.Now.Millisecond); Channels = a.Next(21, 200); //此构造函数确定电视机当前能搜到的所有台数,我假定台数在21~200之间 for(i=0;i<200;i++) Channel[i,1]=20; //初始化每个台都有默认音量20; } public int Present_Channel=1; public void TV_Open() { if (!TVopened) { Console.WriteLine(\); Console.WriteLine(\春兰-------------\); Console.WriteLine(); TVopened = true; } } public void TV_Close() {
共分享92篇相关文档