Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Questions

.pdf
Скачиваний:
9
Добавлен:
11.03.2016
Размер:
1.14 Mб
Скачать

// requires that we're not already in an active call public void Dial(string n)

{

loop:

{

if (!battary)

{

Console.WriteLine("The battary is low. At first time you must recharge battary!");

Console.WriteLine("For this purpose press a key."); //Напоминаем о необходимости зарядить батарею //Нажатие клавиши - зарядка окончена

Console.ReadLine();

Charge_Battary(); goto loop;

}

if (!this.offHook)

{

Console.WriteLine("Phone must be switch-on before dialing."); return;

}

if (!m_on_zone)

{

Console.WriteLine("Out off-zone. Please? come back to station!"); Console.WriteLine("For this purpose press a key.");

//Напоминаем о необходимости нахождения трубки в зоне действия

станции

//Нажатие клавиши - вхождение в зону

Console.ReadLine(); this.OnZone(); goto loop;

}

if (m_activeCall)

{

Console.WriteLine("Already in a call."); return;

}

m_activeCall = true; Console.WriteLine("Dialing " + n);

}

}

}

}

----

using System; namespace Telephone

{

public class AutoDialer //Автоматический набор

{

public void Call(string[] numbers, string message, ITelephone phone)

{

foreach (string n in numbers)

{

phone.PickUpReceiver();// поднятие трубки phone.Dial(n);// набор

Console.WriteLine("Reading \"" + message + "\" to " + n);//Вывод на

консоль

phone.HangUpReceiver();// опускание трубки

}

}

}

class Telemarketer

{

static void Main()

{

POTSPhone t = new POTSPhone();//Объект класса POTSPhone, наследуемый интерфейс ITelephone

CordlessPhone c = new CordlessPhone();//Объект класса CordlessPhone,

наследуемый интерфейс ITelephone

string[] numbers = new string[4];//Создание массива

numbers[0] = "555-1211"; numbers[1] = "555-1212"; numbers[2] = "555-1213"; numbers[3] = "555-1214";

AutoDialer a = new AutoDialer();//Объект класса AutoDialer a.Call(numbers, "Hello. Am I interrupting dinner?", t);//Вызов метода

Call для объекта а, который принимает также аргумент типа любого класса который наследует интерфейс ITelephone

a.Call(numbers, "Hello. Am I interrupting dinner?", c);//Вызов метода

Call для объекта а, который принимает также аргумент типа любого класса который наследует интерфейс ITelephone

Console.Read();

}

}

}

2. Исследуйте наследование интерфейсов путем создания нового интерфейса, который унаследован от ITelephone и создайте новый класс, который реализует новый интерфейс (обратите внимание на то, что ваш новый класс должен реализовывать два интерфейса – новый интерфейс и интерфейс

ITelephone). Ваш новый интерфейс может быть специальным интерфейсом (для сотовых телефонов,

к примеру).

Пример:

using System;

using System.Collections.Generic; using System.Text;

namespace Telephone

{

public interface ITelephone

{

bool offHook

{

get;

}

void PickUpReceiver(); // поднятие трубки void HangUpReceiver(); // опускание трубки void Dial(string n); // циферблат

}

public interface ISotTelephone: ITelephone

{

void WriteSMS(); // набор сообщения bool rouming //Активность роуминга

{

get;

}

int accaunt //баланс на счету

{

get;

}

}

// POTSPhone implements the ITelephone interface public class POTSPhone : ITelephone

{

//private members holds state about the hook

//status of the receiver and if we're in a

//call or not.

private bool m_offHook;//Состояние поднятости трубки (поднята, опущена) private bool m_activeCall;//Состояние режима телефона (активный вызов и нет)

//read only property as required by ITelephone

//returns the boolean state of the hook status

//of the receiver.

public bool offHook

{

get { return m_offHook; }

}

//constructor to initialize the POTSPhone public POTSPhone()

{

m_offHook = false; m_activeCall = false;

}

//take the receiver

public void PickUpReceiver()

{

m_offHook = true;

}

//return the phone to on hook and end any

//active calls

public void HangUpReceiver()

{

m_offHook = false; m_activeCall = false;

}

//dial a phone number

//requires that the phone be off hook

//requires that we're not already in an active call public void Dial(string n)

{

if (!this.offHook)

{

Console.WriteLine("Phone must be off-hook before dialing."); return;

}

if (m_activeCall)

{

Console.WriteLine("Already in a call."); return;

}

m_activeCall = true;

Console.WriteLine("Dialing " + n);

}

}

public class CordlessPhone : ITelephone

{

//private members holds state about the hook

//status of the receiver and if we're in a

//call or not.

private bool m_on_off;//Состояние включенности трубки (включена, выключена) private bool m_activeCall;//Состояние режима телефона (активный вызов и нет) private bool m_on_zone;

private bool battary;

//read only property as required by ITelephone

//returns the boolean state of the hook status

//of the receiver. public bool offHook

{

get { return m_on_off; }

}

//constructor to initialize the POTSPhone public CordlessPhone()

{

battary = false;//Состояние заряда батареи

m_on_zone = false;//Состояние нахождения в зоне действия станции m_on_off = false;//Состояние трубки (вкл/выкл)

m_activeCall = false;//Состояние активного звонка

}

//take the receiver

public void PickUpReceiver()

{

m_on_off = true;

}

//return the phone to on hook and end any

//active calls

public void HangUpReceiver()

{

m_on_off = false; m_activeCall = false;

}

//Вхождение в зону действия станции public void OnZone()

{

m_on_zone = true;

}

//Процесс заряда батареи public void Charge_Battary()

{

battary = true;

}

//dial a phone number

//requires that the phone be off hook

//requires that we're not already in an active call public void Dial(string n)

{

loop:

{

if (!battary)

{

Console.WriteLine("The battary is low. At first time you must recharge battary!");

Console.WriteLine("For this purpose press a key."); //Напоминаем о необходимости зарядить батарею //Нажатие клавиши - зарядка окончена

Console.ReadLine();

Charge_Battary(); goto loop;

}

if (!this.offHook)

{

Console.WriteLine("Phone must be switch-on before dialing."); return;

}

if (!m_on_zone)

{

Console.WriteLine("Out off-zone. Please? come back to station!"); Console.WriteLine("For this purpose press a key.");

//Напоминаем о необходимости нахождения трубки в зоне действия

станции

//Нажатие клавиши - вхождение в зону

Console.ReadLine(); this.OnZone(); goto loop;

}

if (m_activeCall)

{

Console.WriteLine("Already in a call."); return;

}

m_activeCall = true; Console.WriteLine("Dialing " + n);

}

}

}

public class MobileFone: ISotTelephone

{

//private members holds state about the hook

//status of the receiver and if we're in a

//call or not.

private bool m_on_off;//Состояние включенности трубки (включена, выключена) private bool m_activeCall;//Состояние режима телефона (активный вызов и нет) private bool m_on_zone;//Факт нахождения в зоне покрытия

private bool battary;//Уровень заряда батареи private bool sms;//текст сообщения

public bool Rouming;//роуминг

private int balance;//размер суммы на сету

private const int price_by_sms = 5;//цена за одно sms

//read only property as required by ITelephone

//returns the boolean state of the hook status

//of the receiver. public bool offHook

{

get { return m_on_off; }

}

public bool rouming

{

get {return Rouming; }

}

public int accaunt

{

get {return balance; }

}

//constructor to initialize the POTSPhone public MobileFone()

{

battary = false;//Состояние заряда батареи

m_on_zone = false;//Состояние нахождения в зоне действия станции m_on_off = false;//Состояние трубки (вкл/выкл)

m_activeCall = false;//Состояние активного звонка sms =false;//текст сообщения

Rouming =false;//роуминг balance =0;//состояние счета

}

//take the receiver

public void PickUpReceiver()

{

m_on_off = true;

}

//return the phone to on hook and end any

//active calls

public void HangUpReceiver()

{

m_on_off = false; m_activeCall = false;

}

//Вхождение в зону действия станции public void OnZone()

{

m_on_zone = true;

}

//Процесс заряда батареи public void Charge_Battary()

{

battary = true;

}

public void sms_go()

{

balance -= price_by_sms;

}

public void add_balance()

{

string s;

Console.WriteLine("Для пополнения cчета введите сумму цифрами:"); s = Console.ReadLine();

balance += (Convert.ToInt32(s));

Console.WriteLine("На Вашем счету "+accaunt+ " единиц"); return;

}

public void WriteSMS() // набор и отправка сообщения

{

loop:

if (sms)

{

if (rouming)

{

if (accaunt >= (10 * price_by_sms))

{

Console.WriteLine("Сообщение отправлено"); sms = false;

sms_go(); return;

}

else

Console.WriteLine("Недостаточно денег для отправки сообщения. Пополните Ваш счет.");

add_balance(); goto loop;

}

else

if (accaunt >= price_by_sms)

{

Console.WriteLine("Сообщение отправлено"); Console.ReadLine(); sms = false;

sms_go(); return;

}

else

{

Console.WriteLine("Недостаточно денег для отправки сообщения.

Пополните Ваш счет.");

add_balance(); goto loop;

}

}

else

{

Console.WriteLine("Для отправки сообщения, наберите его текст:\n" + "для этого нажмите любую клавишу");

Console.ReadLine();// Console.Read(); sms = true;

goto loop;

}

}

//dial a phone number

//requires that the phone be off hook

//requires that we're not already in an active call public void Dial(string n)

{

loop:

{

if (!battary)

{

Console.WriteLine("The battary is low. At first time you must recharge battary!");

Console.WriteLine("For this purpose press a key."); //Напоминаем о необходимости зарядить батарею //Нажатие клавиши - зарядка окончена

Console.ReadLine();

Charge_Battary(); goto loop;

}

if (!this.offHook)

{

Console.WriteLine("Phone must be blockoff before dialing."); return;

}

if (!m_on_zone)

{

Console.WriteLine("Out off-zone."); Console.WriteLine("For this purpose press a key.");

//Напоминаем о необходимости нахождения трубки в зоне действия

станции

//Нажатие клавиши - вхождение в зону

Console.ReadLine(); this.OnZone(); goto loop;

}

if (m_activeCall)

{

Console.WriteLine("Already in a call."); return;

}

m_activeCall = true; Console.WriteLine("Dialing " + n);

}

}

}

}

-----

using System; namespace Telephone

{

public class AutoDialer //Автоматический набор

{

public void Call(string[] numbers, string message, ITelephone phone)

{

foreach (string n in numbers)

{

phone.PickUpReceiver();// поднятие трубки phone.Dial(n);// набор

Console.WriteLine("Reading \"" + message + "\" to " + n);//Вывод на

консоль

phone.HangUpReceiver();// опускание трубки

}

}

}

class Telemarketer

{

static void Main()

{

POTSPhone t = new POTSPhone();//Объект класса POTSPhone, наследуемый интерфейс ITelephone

CordlessPhone c = new CordlessPhone();//Объект класса CordlessPhone,

наследуемый интерфейс ITelephone

MobileFone m = new MobileFone();// Объект класса MobileFone string[] numbers = new string[4];//Создание массива

numbers[0] = "555-1211"; numbers[1] = "555-1212"; numbers[2] = "555-1213"; numbers[3] = "555-1214";

AutoDialer a = new AutoDialer();//Объект класса AutoDialer a.Call(numbers, "Hello. Am I interrupting dinner?", t);//Вызов метода

Call для объекта а, который принимает также аргумент типа любого класса который наследует интерфейс ITelephone

Console.Read();

a.Call(numbers, "Hello. Am I interrupting dinner?", c);//Вызов метода

Call для объекта а, который принимает также аргумент типа любого класса который наследует интерфейс ITelephone

Console.Read();

a.Call(numbers, "Hello. Am I interrupting dinner?", m);//Вызов метода

Call для объекта а, который принимает также аргумент типа любого класса который наследует интерфейс ITelephone

//m.add_balance(); m.Rouming = true; m.WriteSMS();

Console.Read(); Console.WriteLine("На Вашем счету осталось "+m.accaunt+ "

единиц");

Console.ReadLine(); Console.ReadLine();

}

}

}

Опубликуйте ваш новый класс и интерфейс на форуме.

В данной программе реализован новый интерфейс IsotTelephone, который наследует интерфейс Itelephone. В новом интерфейсе описан метод WriteSMS() (написание сообщения),

свойство rouming (определяющий тарифы связи) и свойство accaunt (сумма на счету).

В классе MobileFone реализуется метод WriteSMS() таким образом, что для написания и отправки смс автоматически проверяется состояние смс-редактора: если смс уже пишется, то начать писать новое невозможно. Также мы не можем отправить смс в случае когда оно не написано. То-есть для его отправки необходимо активизировать смс-редактор. Когда же смс готово мы можем его отправить только в том случае, если колличество денежных единиц на счету как минимум равно стоимости отправки одного смс учитывая местные расценки,

колторые, в свою очередь, зависят от активности роуминга. Если роуминг активен, то тарифы на связь возростают в 10 раз. Мы можем пополнять счет на любую сумму путем ввода ее с

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]