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

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

Восстановить пароль Регистрация
 
katkat95
0 / 0 / 0
Регистрация: 20.03.2014
Сообщений: 11
26.05.2014, 10:58     Автоматическое изменение префикса телефонного номера в зависимости от страны. Класс Person. #1
Есть класс Person. Так же пару функций. Одно из заданий не работает:
Если номер телефона начинается с 0 и страна «Украина» добавить вначале телефона +38
Эта функция у меня в коде называется test_ph. Помогите найти в чем ошибка
Кликните здесь для просмотра всего текста

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
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="+38"+ph1;
}
(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; c=getch();
if(c=='y')
{char k;
    do
{
menu();
 k=getch();
switch(k)
{
case 'a' :
    system("cls"); if(b.tall(b.get_h())==1)
    cout<<"Да ";
    else
    cout<<"Нет";
break;
case 'b': system("cls"); 
    if(b.wdl(b.get_cou())==1)
    cout<<"\n Да";
    else cout<<" \n Нет "; break;
case 'с': system("cls");  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;
}
_getch();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.05.2014, 10:58     Автоматическое изменение префикса телефонного номера в зависимости от страны. Класс Person.
Посмотрите здесь:

Класс Person. Класс String C++
C++ Генератор слов для телефонного номера
C++ Функция strtok. Представление телефонного номера в виде строки.
C++ Класс: создать класс "Person"
C++ Класс Person
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Евгений Буланов
6 / 6 / 4
Регистрация: 23.10.2013
Сообщений: 63
26.05.2014, 11:01     Автоматическое изменение префикса телефонного номера в зависимости от страны. Класс Person. #2
Как читать такой код?
Тамика
Котовчанин
 Аватар для Тамика
860 / 440 / 129
Регистрация: 16.02.2010
Сообщений: 2,543
Записей в блоге: 27
26.05.2014, 11:10     Автоматическое изменение префикса телефонного номера в зависимости от страны. Класс Person. #3
Тегги, пожалуйста. А то кровь из глаз покапывает...
1Вирт1
55 / 53 / 5
Регистрация: 25.08.2011
Сообщений: 428
26.05.2014, 12:19     Автоматическое изменение префикса телефонного номера в зависимости от страны. Класс Person. #4
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. старайтесь писать програмы так что бы они не боялись фантазии пользователя, а в случае ошибок старались указывать на её проблему. Но в целом очень хорошо что вы пытаетесь что то писать, по крайней мере вы выложили свой вариант, а не написали что то типа есть задача а вам господа надо её сделать.
SatanaXIII
26.05.2014, 12:48     Автоматическое изменение префикса телефонного номера в зависимости от страны. Класс Person.
  #5

Не по теме:

Цитата Сообщение от Тамика Посмотреть сообщение
Тегги, пожалуйста. А то кровь из глаз покапывает...
Я даже не знаю стоило ли мне править теги, или надо было оставить?..

Yandex
Объявления
26.05.2014, 12:48     Автоматическое изменение префикса телефонного номера в зависимости от страны. Класс Person.
Ответ Создать тему
Опции темы

Текущее время: 12:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru