Форум программистов, компьютерный форум CyberForum.ru

Автоматическое изменение префикса телефонного номера в зависимости от страны. Класс Person. - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Построить однонаправленный список из элементов файла http://www.cyberforum.ru/cpp-beginners/thread1188363.html
Помогите составить программу, которая строит однонаправленный список из элементов файла. Элементы списка вывести на экран.
C++ Траектория движения фигуры Подскажите,пожалуйста, нужно написать алгоритм программы, кторая задает определенную границу, за которую нельзя выходить, и внутри этой границы должна быть фигура, которая движется не выходя за границы, и при касании границы отталкивается от неё. Подскажите алгоритм или источник где можно об этом почитать http://www.cyberforum.ru/cpp-beginners/thread1188360.html
C++ Найти произведение элементов числового массива
параллельное программирование Всем привет,подскажите пожалуйста правильный ли код Найти произведение элементов числового массива #include <iostream> #include <functional> #include <algorithm>
C++ Вывод числа в ASCII
Здравствуйте, помогите пожалуйста не могу понять в чём ошибка, программа считывает символ, и выводит на экран код этого символа в ASСII и 16 ричной системе, вроде бы код правильный , но программа не работает , помогите понять в чём проблема? Вот код: #include <conio.h>//getch #include <iostream> using namespace std; int main(){
C++ Объявить класс Triangle, который бы находил периметр треугольника по его трем сторонам http://www.cyberforum.ru/cpp-beginners/thread1188331.html
1 . Подключить необходимые файлы заголовков. 2 . Объявить класс triangle . В качестве открытых элементов задайте конструктор класса, функцию присвоения значений соответствующим сторонам setSide, функцию вывода на экран результата программы printP, т. е. периметру. Значение сторон должны относиться к типу float . В качестве закрытых элементов класса задайте три стороны треугольника a, b, c . ...
C++ Поиск подстроки (Кнут-Моррис-Пратт) Добрый день! Начал реализацию КМП Текст задачи: В первой строке входного файла INPUT.TXT записана строка S, во второй строке записана строка T. Обе строки состоят только из латинских букв. Длины строк больше 0 и меньше 50 000. Входные данные: ababbababa aba Вывод: 0 5 7 подробнее

Показать сообщение отдельно
1Вирт1
55 / 53 / 5
Регистрация: 25.08.2011
Сообщений: 428
26.05.2014, 12:19     Автоматическое изменение префикса телефонного номера в зависимости от страны. Класс Person.
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
#include <iostream>
using namespace std;
#include <stdlib.h>
 
class Person {
private:
  string fname, lname;
  int age, height, weight;
  string gender, country, city, phone;
public:
  void in();
  void show();
  void set_h(int height1)
  {
    if(height1 < 150 || height1 > 250)
      throw "wrong";
    else
      height=height1;
  }
  int get_h() { return height; }
  void set_city(string c1) { city=c1; }
  string get_city(){return city;}
  void set_w(int weight1)
  {
    if(weight1 < 35 || weight1 > 150)
      throw "wrong";
    else
      weight=weight1;
  }
  void set_cou(string c) { country=c; }
  string get_cou() { return country; }
  void set_ph(string phone1) { phone=phone1; }
  string get_ph() {return phone;}
  int test_ph(string, string);
  bool tall(int);
  bool wdl(string country1);
  Person();
  Person(string, string, int, int, int, string, string, string, string);
};
 
Person::Person()
{
  string fname = "unnamed";
  string lname = "unnamed";
  age = 0;
  height = 0;
  weight = 0;
  gender = "unknown";
  string city = "unknown";
  string country = "unknown";
  string phone = "no phone";
}
 
Person::Person(string a, string b, int height1, int weight1, int age1,
  string gender1, string c, string ci, string ph)
{
  fname = a;
  lname = b;
  set_h(height1);
  set_w(weight1);
  age = age1;
  gender = gender1;
  country = c;
  city = ci;
  phone = ph;
}
 
 
int Person::test_ph(string ph1, string country1)
{
  ph1 = get_ph();
  if(ph1[0] == '0' && !country1.compare("Ukraine")) {
    ph1.insert(0, "+38");
  }
  cout<<"Tелефон был изменен: "<<ph1;
  return true;
}
 
 
bool Person::tall(int ab)
{
  if (ab > 200)
    return true;
  else
    return false;
}
 
bool Person::wdl(string country1)
{
  int x = country1.find("Ukraine");
  if ( x >= 0)
    return true;
  else
    return false;
}
 
void Person::show()
{
  cout << "\n Имя и Фамилия " <<fname<< " " << lname;
  cout << "\n Рост " << height << " см, Вес " << weight << " кг";
  cout << "\n Возраст " << age;
  int x = gender.find("female");
  int y = gender.find("male");
  int z = gender.find("unknown");
  if (z >= 0) {
    cout << " unknown ";
    goto m1;
  }
  if (x >= 0)
    cout << " Женский ";
  else
    cout << " Мужской ";
  m1: cout << " \n Страна " << country;
  cout << "\n Город " << city;
  cout << "\n Телефон " << phone;
}
 
void Person::in()
{
  cout << "\n Страна ";
  getline(cin,country);
  cout << "\n Город ";
  getline(cin,city);
  cout << "\n Телефон ";
  getline(cin,phone);
  cout << "\n Пол ";
  getline(cin,gender);
  cout << "\n Имя ";
  cin >> fname;
  cout << " Фамилия ";
  cin >> lname;
  cout << "\n Рост ";
  cin >> height;
  cout << " Вес ";
  cin >> weight;
  cout << "\n Возраст ";
  cin >> age;
}
 
void menu()
{
  cout << endl;
  cout << endl;
  cout << "\n 'a' Выше ли 200 см?";
  cout << "\n 'b' Живет ли в Украине?";
  cout << "\n 'c' Проверить номер телефона";
}
 
int main()
{
  setlocale( LC_ALL,"Russian" );
  Person b;
  b.in();
  b.show();
  cout << endl << " Для дополнительных вопросов нажмите 'y' ";
  char c;
  getchar();
  c = getchar();
  if (c == 'y') {
    char k;
    do {
      menu();
      getchar();
      k = getchar();
      switch (k) {
        case 'a':
          if (b.tall(b.get_h()) == 1)
            cout << "Да ";
          else
            cout << "Нет";
        break;
        case 'b':
          if (b.wdl(b.get_cou()) == 1)
            cout << "\n Да";
          else
            cout << " \n Нет ";
        break;
        case 'c':
          if (b.test_ph(b.get_ph(), b.get_cou()) == 1)
            cout << endl;
          else
            cout << " ";
          break;
      }
    }while(k != 'n');
  }
  else {
    b.in();
    cout << endl;
    system("cls");
    b.show();
    cout << endl;
  }
}
С первого взгляда (ну кроме того что код читать не возможно) код выглядел нормально. Но потом обнаружились страшные вещи))). goto - да иногда полезная штука но очень очень и очень редко) в вашем случае можно было обойтись. Функция system(): в вашем случае програма под линуксом будет ругатся на cls. Дальше есть целая куча интересного и непонятного мне кода:
C++
1
2
3
4
5
6
7
8
9
int Person::test_ph(string ph1, string country1)
{
  ph1 = get_ph();
  if(ph1[0] == '0' && !country1.compare("Ukraine")) {
    ph1.insert(0, "+38");
  }
  cout<<"Tелефон был изменен: "<<ph1;
  return true;
}
Какая цель преследовалась в передаче ph1 как параметра? У вас в классе есть поля данные phone и country. Зачем писать такую вещь:
C++
1
b.test_ph(b.get_ph(), b.get_cou())
не проще было зделать вот так?:
C++
1
2
3
4
5
6
7
8
int Person::test_ph()
{
  if(phone[0] == '0' && !country.compare("Ukraine")) {
    phone.insert(0, "+38");
  }
  cout<<"Tелефон был изменен: "<<phone;
  return true;
}
Это был только один пример таких ошибок там целая куча, я не говорю о том что я мог вводить в програму что захочю, а она вела себе так как ей надо было или просто падала.
И так что мы имеем: 1. учимся писать читабельный код. Набить хороший код стиль это важно. 2. надо пересмотреть логику в некоторых функциях. 3. надо посидеть и пописать классы. С того что я увидел у вас слабые пока что знания по ООП. 4. старайтесь писать програмы так что бы они не боялись фантазии пользователя, а в случае ошибок старались указывать на её проблему. Но в целом очень хорошо что вы пытаетесь что то писать, по крайней мере вы выложили свой вариант, а не написали что то типа есть задача а вам господа надо её сделать.
 
Текущее время: 18:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru