Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 08.06.2013
Сообщений: 44
1

Класс "Стационарный телефон", реализовать заданные методы

26.09.2014, 12:36. Просмотров 892. Ответов 9
Метки нет (Все метки)

стационарный телефон
свойства:
• состояние линии (сигнал присутствует / отсутствует);
• состояние трубки (на базе / поднятий);
• уровень громкости (0 ... 3);
• наличие гудка (отсутствует / непрерывный / ожидание / занято).
метод:
Подключение к линии
Правила работы метода:
Устанавливает соответствующее состояние линии; включает непрерывный гудок, если трубка поднята.
метод:
Отключение от линии
Правила работы метода:
Устанавливает соответствующее состояние линии; выключает гудок.
метод:
поднятие трубки
Правила работы метода:
Устанавливает соответствующее состояние трубки; включает гудок, если линия активна (есть сигнал).
метод:
опускания трубки
Правила работы метода:
Устанавливает соответствующее состояние трубки; выключает гудок.
метод:
Установка уровня громкости
Правила работы метода:
Устанавливает заданный уровень громкости.
метод:
набор номера
Правила работы метода:
Если есть сигнал линии и трубка поднята устанавливает сигнал "ожидания" или "занято" вероятностью ½.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.09.2014, 12:36
Ответы с готовыми решениями:

Класс "Телефонная книга". Дописать методы, "поиск" и "удаления" абонента
Вот код класса, который должен предоставьте пользователю возможность добавлять новых абонентов,...

Реализовать класс родительский класс "Пара чисел" и класс-наследник "Комплексное число"
Ткма работы создать класс pair (пара чисел); определить метод перемножения полей и операцию...

Реализовать связь классов "телефонная книга" и родительский класс "телефонный номер"
Суть проблемы:есть дочерний класс "телефонная книга" и родительский класс "телефонный номер". В...

Реализовать класс "Квадрат" с данными-членами "центр квадрата" и "сторона квадрата"
Объявить класс по приведенному ниже заданию в соответствии с номером варианта и определить для...

9
78 / 78 / 34
Регистрация: 26.10.2011
Сообщений: 220
Завершенные тесты: 1
26.09.2014, 13:49 2
Лучший ответ Сообщение было отмечено baykersha как решение

Решение

Как то так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#include <stdlib.h>
 
// стационарный телефон 
class LandlinePhone
{
  public:
    LandlinePhone() : lineState(state_off), 
                      phoneState(hang_on),
                      volumeLevel(max_volume_level),
                      signalState(signal_off) 
    {
      Signal();
    }
 
    //метод: 
    //Подключение к линии 
    //Правила работы метода: 
    //Устанавливает соответствующее состояние линии; включает непрерывный гудок, если трубка поднята. 
    void Connect()
    {
      lineState = state_on;
      Signal();
    }
 
    //метод: 
    //Отключение от линии 
    //Правила работы метода: 
    //Устанавливает соответствующее состояние линии; выключает гудок. 
    void Disconnect()
    {
      lineState = state_off;
      Signal();
    }
 
    //метод: 
    //поднятие трубки 
    //Правила работы метода: 
    //Устанавливает соответствующее состояние трубки; включает гудок, если линия активна (есть сигнал). 
    void HangOff()
    {
      phoneState = hang_off;
      Signal();
    }
 
    //метод: 
    //опускания трубки 
    //Правила работы метода: 
    //Устанавливает соответствующее состояние трубки; выключает гудок. 
    void HangOn()
    {
      phoneState = hang_on;
      Signal();
    }
 
    //метод: 
    //Установка уровня громкости 
    //Правила работы метода: 
    //Устанавливает заданный уровень громкости. 
    void SetVolume( int level )
    {
      if( level < min_volume_level ) 
        volumeLevel = min_volume_level;
      else if( level > max_volume_level ) 
        volumeLevel = min_volume_level;
      else volumeLevel = level;
      Signal();
    }
 
 
    //метод: 
    //набор номера 
    //Правила работы метода: 
    //Если есть сигнал линии и трубка поднята устанавливает сигнал "ожидания" или "занято" вероятностью ½.
    void SetCall()
    {
      if( lineState == state_on && phoneState == hang_off ) 
      {
        if(rand()%2) lineState = state_buzy;
        else lineState = state_wait;
      }
      Signal();
    }
 
  private:
    // свойства: 
 
    // состояние линии (сигнал присутствует / отсутствует); 
    enum LineState { state_on, state_off, state_wait, state_buzy };
    LineState lineState;
 
    // состояние трубки (на базе / поднятий); 
    enum PhoneState { hang_on, hang_off };
    PhoneState phoneState;
 
    // уровень громкости (0 ... 3); 
    enum { min_volume_level = 0, max_volume_level = 3 };
    int volumeLevel;
 
    // наличие гудка (отсутствует / непрерывный / ожидание / занято). 
    enum SignalState { signal_off, signal_on, signal_wait, signal_buzy };
    SignalState signalState;
 
 
    void Signal()
    {
      if( phoneState = hang_on )
      {
        signalState = signal_off;
        return;
      }
 
      switch(lineState)
      {
        case state_off: signalState = signal_off;   break;
        case state_on: signalState = signal_on;     break;
        case state_wait: signalState = signal_wait; break;
        case state_buzy: signalState = signal_buzy; break;
      }
    }
};
1
0 / 0 / 0
Регистрация: 08.06.2013
Сообщений: 44
30.09.2014, 21:37  [ТС] 3
sergestus, а как создать к этой программе меню с вводом цифр,которые бы отвечали за эти методы, тоесть 1 - Connect, 2 - Disonnect и тд. и функции для их выполнения и вывода на экран,но в консоле
0
78 / 78 / 34
Регистрация: 26.10.2011
Сообщений: 220
Завершенные тесты: 1
01.10.2014, 20:03 4
Лучший ответ Сообщение было отмечено baykersha как решение

Решение

С помощью стандартного ввода/вывода и оператора switch, который работает как диспетчер, я еще добавил индикацию состояния телефона, чтобы было понятно что происходит:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
#include <stdlib.h>
#include <iostream>
 
using namespace std;
 
// стационарный телефон 
class LandlinePhone
{
  public:
    LandlinePhone() : lineState(state_off), 
                      phoneState(hang_on),
                      volumeLevel(max_volume_level),
                      signalState(signal_off) 
    {
      Signal();
    }
 
    //метод: 
    //Подключение к линии 
    //Правила работы метода: 
    //Устанавливает соответствующее состояние линии; включает непрерывный гудок, если трубка поднята. 
    void Connect()
    {
      lineState = state_on;
      Signal();
    }
 
    //метод: 
    //Отключение от линии 
    //Правила работы метода: 
    //Устанавливает соответствующее состояние линии; выключает гудок. 
    void Disconnect()
    {
      lineState = state_off;
      Signal();
    }
 
    //метод: 
    //поднятие трубки 
    //Правила работы метода: 
    //Устанавливает соответствующее состояние трубки; включает гудок, если линия активна (есть сигнал). 
    void HangOff()
    {
      phoneState = hang_off;
      Signal();
    }
 
    //метод: 
    //опускания трубки 
    //Правила работы метода: 
    //Устанавливает соответствующее состояние трубки; выключает гудок. 
    void HangOn()
    {
      phoneState = hang_on;
      if( lineState != state_off ) 
        lineState = state_on;
      Signal();
    }
 
    //метод: 
    //Установка уровня громкости 
    //Правила работы метода: 
    //Устанавливает заданный уровень громкости. 
    void SetVolume( int level )
    {
      if( level < min_volume_level ) 
        volumeLevel = min_volume_level;
      else if( level > max_volume_level ) 
        volumeLevel = min_volume_level;
      else volumeLevel = level;
      Signal();
    }
 
 
    //метод: 
    //набор номера 
    //Правила работы метода: 
    //Если есть сигнал линии и трубка поднята устанавливает сигнал "ожидания" или "занято" вероятностью ½.
    void SetCall()
    {
      if( lineState == state_on && phoneState == hang_off ) 
      {
        if(rand()%2) lineState = state_buzy;
        else lineState = state_wait;
      }
      Signal();
    }
 
    void Display()
    {
      system("cls");
      DisplayLineState();
      DisplayPhoneState();
      DisplayVolumeLevel();
      DisplaySignalState();
      DisplayUsage();
    }
 
  private:
    // свойства: 
 
    // состояние линии (сигнал присутствует / отсутствует); 
    enum LineState { state_on, state_off, state_wait, state_buzy };
    LineState lineState;
 
    // состояние трубки (на базе / поднятий); 
    enum PhoneState { hang_on, hang_off };
    PhoneState phoneState;
 
    // уровень громкости (0 ... 3); 
    enum { min_volume_level = 0, max_volume_level = 3 };
    int volumeLevel;
 
    // наличие гудка (отсутствует / непрерывный / ожидание / занято). 
    enum SignalState { signal_off, signal_on, signal_wait, signal_buzy };
    SignalState signalState;
 
 
    void Signal()
    {
      if( phoneState == hang_on )
      {
        signalState = signal_off;
        return;
      }
 
      switch(lineState)
      {
        case state_off: signalState = signal_off;   break;
        case state_on: signalState = signal_on;     break;
        case state_wait: signalState = signal_wait; break;
        case state_buzy: signalState = signal_buzy; break;
      }
    }
 
    void DisplayLineState()
    {
      cout << "состояние линии: ";
      switch(lineState)
      {
        case state_off: cout << "сигнал отсутствует";       break;
        case state_on: cout << "сигнал присутствует";       break;
        case state_wait: cout << "сигнал ожидания ответа";  break;
        case state_buzy: cout << "сигнал занято";           break;
      }
      cout << endl;
    }
 
    void DisplayPhoneState()
    {    
      cout << "состояние трубки: ";
      switch(phoneState)
      {
        case hang_on: cout << "на базе";  break;
        case hang_off: cout << "поднята"; break;
      }
      cout << endl;
    }
 
    void DisplayVolumeLevel()
    {
      cout << "уровень сигнала: " << volumeLevel << endl;
    }
 
    void DisplaySignalState()
    {
      cout << "гудок: ";
      switch(signalState)
      {
        case signal_off:  cout << "отсутствует";      break;
        case signal_on:   cout << "присутствует";     break;
        case signal_wait: cout << "ожидания ответа";  break;
        case signal_buzy: cout << "занято";           break;
      }
      cout << endl;   
    }
 
    void DisplayUsage()
    {
      cout << endl << "Введите номер операции:" << endl;
      cout << "1 - подключение к линии;" << endl;
      cout << "2 - отключение от линии;" << endl;
      cout << "3 - поднять трубку;" << endl;
      cout << "4 - опустить трубку;" << endl; 
      cout << "5 - установка уровня громкости;" << endl;
      cout << "6 - набор номера;" << endl;
      cout << "7 - окончание работы;" << endl;
    }
};
 
 
int main()
{
  bool exit = false;
  LandlinePhone p;
  
  setlocale(LC_ALL, "Russian");
 
  while(!exit)
  {
    int temp;
    p.Display();
 
    cin >> temp;
    switch(temp)
    {
      case 1: 
        p.Connect(); 
        break;
      case 2: 
        p.Disconnect(); 
        break;
      case 3: 
        p.HangOff(); 
        break;
      case 4: 
        p.HangOn(); 
        break;
      case 5: 
        cout << "Введите уровень громкости:" << endl;
        cin >> temp;
        p.SetVolume(temp); 
        break;
      case 6: 
        p.SetCall();
        break;
      case 7: 
        exit = true;
        break;
    }
  }  
}
1
0 / 0 / 0
Регистрация: 08.06.2013
Сообщений: 44
01.10.2014, 22:31  [ТС] 5
sergestus, мне при запуске выдаёт вот такой ответ

1>------ Построение начато: проект: phone, Конфигурация: Debug Win32 ------
1>Сборка начата 01.10.2014 21:28:14.
1>PrepareForBuild:
1> Создание каталога "c:\users\dina\documents\visua l studio 2010\Projects\phone\Debug\".
1>InitializeBuildStatus:
1> Создание "Debug\phone.unsuccessfulbuild ", так как было задано "AlwaysCreate".
1>ClCompile:
1> stdafx.cpp
1> phone.cpp
1>c:\users\dina\documents\visu al studio 2010\projects\phone\phone\phon e.cpp(1): warning C4627: #include <stdlib.h>: пропущен при поиске использования предкомпилированного заголовка
1> Добавление директивы в "StdAfx.h" или перестройка предкомпилированного заголовка
1>c:\users\dina\documents\visu al studio 2010\projects\phone\phone\phon e.cpp(2): warning C4627: #include <iostream>: пропущен при поиске использования предкомпилированного заголовка
1> Добавление директивы в "StdAfx.h" или перестройка предкомпилированного заголовка
1>c:\users\dina\documents\visu al studio 2010\projects\phone\phone\phon e.cpp(233): fatal error C1010: непредвиденный конец файла во время поиска предкомпилированного заголовка. Возможно, вы забыли добавить директиву "#include "StdAfx.h"" в источник.
1>
1>СБОЙ построения.
1>
1>Затраченное время: 00:00:02.68
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
0
78 / 78 / 34
Регистрация: 26.10.2011
Сообщений: 220
Завершенные тесты: 1
02.10.2014, 07:20 6
Думаю нужно в самое начало файла включить #include "StdAfx.h"
1
0 / 0 / 0
Регистрация: 08.06.2013
Сообщений: 44
02.10.2014, 23:24  [ТС] 7
sergestus, всё равно
1>------ Построение начато: проект: phone, Конфигурация: Debug Win32 ------
1>Сборка начата 02.10.2014 22:23:40.
1>InitializeBuildStatus:
1> Обращение к "Debug\phone.unsuccessfulbuild ".
1>ClCompile:
1> Для всех выходных данных обновления не требуется.
1> phone.cpp
1>LINK : fatal error LNK1123: сбой при преобразовании в COFF: файл недопустим или поврежден
1>
1>СБОЙ построения.
1>
1>Затраченное время: 00:00:05.74
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
0
78 / 78 / 34
Регистрация: 26.10.2011
Сообщений: 220
Завершенные тесты: 1
03.10.2014, 10:53 8
Вот здесь люди столкнулись с такой же проблемой:
http://social.msdn.microsoft.com/For...8/-?forum=vsru
1
0 / 0 / 0
Регистрация: 08.06.2013
Сообщений: 44
29.11.2014, 15:04  [ТС] 9
sergestus, как в этом коде можно реализовать подклассы:
Мобильный телефон
свойства:
объем телефонной книги;
абонент.
методы:
поиск абонента;
добавление абонента в телефонную книгу.
"Программа Skype"
свойства:
контакт;
состояние контакта.
методы:
определение состояния контакта;
передача данных контакта.
0
78 / 78 / 34
Регистрация: 26.10.2011
Сообщений: 220
Завершенные тесты: 1
02.12.2014, 08:19 10
Общее направление такое, только нужно реализовать методы:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
class CellPhone: public LandlinePhone
{
  public:
    CellPhone():LandlinePhone(),phoneBookSize(0)
    {
    }
 
    // поиск абонента;
    bool SearchSubscrivber(char *subscrivber, int &phoneNumber)
    {
      // реализация...
    }
 
    // добавление абонента в телефонную книгу.
    bool AddSubscrivber(char *subscrivber, int phoneNumber)
    {
      // реализация...
    }
    
    // запись телефонной книги.
    struct PhoneBoookEntry
    {
      // номер абонента.
      int PhoneNumber;
      // абонент.
      char Subscrivber[64];
    };
 
  private:
    
    // максимальный разме телефонная книги.
    enum{ phone_boook_capacity = 32 };
    
    // телефонная книга.
    PhoneBoookEntry phoneBook[phone_boook_capacity];
 
    // объем телефонной книги;
    int phoneBookSize;
};
 
class Skype: public LandlinePhone
{
  public:
    Skype():LandlinePhone(),contactsSize(0)
    {
    }
 
    // состояние контакта.
    enum ContactState{ on_line, off_Line, do_not_distarb };
 
    // запись контактов
    struct ContactEntry
    {
      // данные контакта.
      char name[64];
      char gender[16];
      ContactState state;
    };
 
    // определение состояния контакта;
    bool GetContactState(char *subscrivber, ContactState &contactState)
    {
      // реализация...
    }
  
    // добавление контакта.
    bool AddContact(ContactEntry *contact)
    {
      // реализация...
    }
 
    // передача данных контакта.
    ContactEntry * GetContact(char *name)
    {
      // реализация...
    }
 
  private:
 
    // максимальный размер контактов.
    enum{ contacts_capacity = 32 };
 
    // контакты
    ContactEntry contacts[contacts_capacity];
    // размер контактов.
    int contactsSize;
};
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.12.2014, 08:19

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Реализовать родительский класс "Геометрическая фигура" и потомок "Конус"
Всем привет. Впервые сюда обращаюсь за помощью. На данный момент, закрываю сессию и сегодня...

Реализовать класс комплексных чисел с полями "модуль" и "аргумент"
Создать класс, в котором поля соответствуют модулю и аргументу комплексного числа. Функция класса...

Класс "Студент", реализовать динамический список "Группа студентов"
реализовать динамический список &quot; группа студентов&quot;. Узел: -группа -фамилия Функции списка:...

Реализовать классы "Воин", "Пехотинец", "Винтовка", "Матрос", "Кортик" (наследование)
Разработать программу с использованием наследования классов, реализующую классы: − воин;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.