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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.71
Fourees
0 / 0 / 0
Регистрация: 23.05.2013
Сообщений: 17
#1

Телефонная книга: просмотр, поиск, добавление записей - C++

24.05.2013, 11:08. Просмотров 2172. Ответов 17
Метки нет (Все метки)

Доброго вечера.

Такая проблема. Завтра в универ нужно сдать программу, с которой вышла полная запара, т.к. не имею представления как её вообще писать.
Просьба заключается в следующем: Напишите, пожалуйста, кому не сложно и есть желание помочь нюбам, программку за меня.

Программирование в MS Visual studio 2010 (Visual c++ 2010)

Программа должна выглядеть в виде консоли, с массивом, и данные должны браться из текстового файла (тхт).

Вот, собственно, задание:

Написать программу с объектами, работающую как адресная /*телефонная*/ книга. Вся информация должна считываться и записываться из/в текстовый файл. Должно быть реализовано:
а) Просмотр всей адресной книги на экране
б) Поиск по имени, адресу и тел. номеру
в) Возможность дополнения адресной книги

Заранее огромнейшее СПАСИБО!

Добавлено через 10 часов 54 минуты
Актуально и нужно очень срочно. спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.05.2013, 11:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Телефонная книга: просмотр, поиск, добавление записей (C++):

Реализовать поиск по заданному полю в списке объектов пользовательского типа (структура "Телефонная книга") - C++
Дано задание, готово все, кроме последнего пункта, подскажите пожалуйста как реализовать его 20. Дан файл, содержащий сведения о...

Телефонная книга - C++
В общем, ребят, мне надо сделать подобие телефонной книги. Для записи контактов определить структуру: {Фамилия,Имя,Адрес,Номер телефона}....

Телефонная книга - C++
помогите найти хоть пример кода программа телефонная книга,имеет менюшку ее функционал:добавление\удаление абонента,его редактирование ...

Класс Телефонная Книга - C++
Доброго времени суток форумчане! Получил следующее задание, но столкнулся с проблемой.. 1) опишите класс "контакт", описывающий имя,...

Работа с файлами: телефонная книга - C++
Здравствуйте участники форума! Помогите, если сможете, разобраться какие ошибки в программе. Задание такое: составить программу...

Работа с файлами. Телефонная книга - C++
Вечер добрый. задание: А. Создать файл, содержащий сведения о телефонах абонентов. Каждая записаь имеет поля: фамилия абонентов, год...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
24.05.2013, 11:45 #2
типа вот так, только дальше сами думайте
C++
map<string, string> book;
 
void add(string name, string phone)
{
    book.insert(pair<string, string>(name, phone);
}
void del(string name)
{
    map<string, string>::iterator it = book.find(name);
    book.erase(it);
}
// итд
Fourees
0 / 0 / 0
Регистрация: 23.05.2013
Сообщений: 17
24.05.2013, 12:36  [ТС] #3
Да я то додумаю, но нет времени всё обдумывать. через 15-20 мин сдавать надо а у меня ничего не написано вручите пжлст
programina
24.05.2013, 13:03
  #4

Не по теме:

Цитата Сообщение от Fourees Посмотреть сообщение
Да я то додумаю, но нет времени всё обдумывать. через 15-20 мин сдавать надо а у меня ничего не написано вручите пжлст
А зачем вы вообще пошли учиться, если вам некогда?

Fourees
0 / 0 / 0
Регистрация: 23.05.2013
Сообщений: 17
26.05.2013, 17:57  [ТС] #5
Цитата Сообщение от programina Посмотреть сообщение

Не по теме:


А зачем вы вообще пошли учиться, если вам некогда?

некогда было потому, что было очень мало времени до срока сдачи. договорился с преподом перенести сорк сдачи. теперь обдумаю сам. спасибо.
MarVaL
С++ Beginner
116 / 116 / 16
Регистрация: 28.02.2013
Сообщений: 246
26.05.2013, 20:34 #6
Исходник:
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <fstream>
#include <string>
 
struct Phone {
    int number;
    std::string name;
    std::string address;
};
 
struct PhoneBook {
    Phone *phone;
    int count;
};
 
 
PhoneBook* load();
void menu();
void print(PhoneBook *phone_book);
void find(PhoneBook *phone_book);
void add();
 
int main() {
    setlocale(LC_ALL, "RUS");
    menu();
    return 0;
}
 
void print(PhoneBook *phone_book) {
    std::cout << "\nPhone Book: " << std::endl;
    for(int j = 0; j < phone_book->count; ++j)
        std::cout << phone_book->phone[j].number << ' ' << phone_book->phone[j].name << ' ' << phone_book->phone[j].address << std::endl;
    std::cout << std::endl;
}
 
void menu() {
    PhoneBook *phone_book =  load();
    int ans;
    do {
        std::cout << "Please Enter: " << std::endl;
        std::cout << "1 - Find" << std::endl;
        std::cout << "2 - Print" << std::endl;
        std::cout << "3 - Add" << std::endl;
        std::cout << "4 - exit" << std::endl;
        
        std::cin >> ans;
        switch(ans) {
        case 1:
            find(phone_book);
            break;
        case 2:
            print(phone_book);
            break;
        case 3:
            add();
            phone_book = load();
            break;
        case 4:
            break;
        default:
            std::cout << "Invalid command" << std::endl;
        }
    } while(ans != 4);
    delete[] phone_book->phone;
    delete phone_book;
}
 
void find(PhoneBook *phone_book) {
    bool found = false;
    int ans, _number;
    std::string _name, _street;
    std::cout << "Find by: " << std::endl;
    std::cout << "1 - Name" << std::endl;
    std::cout << "2 - Number" << std::endl;
    std::cout << "3 - Street" << std::endl;
    std::cin >> ans;
    switch(ans) {
    case 1:
        std::cout << "Please enter Name: ";
        std::cin >> _name;
        for(int i = 0; i < phone_book->count; ++i) {
            if(_name == phone_book->phone[i].name) {
                std::cout << "Found!" << std::endl;
                std::cout << phone_book->phone[i].number << ' ' << phone_book->phone[i].name << ' ' << phone_book->phone[i].address << std::endl;
                found = true;
            }
        }
        break;
    case 2:
        std::cout << "Please enter Number: ";
        std::cin >> _number;
        for(int i = 0; i < phone_book->count; ++i) {
            if(_number == phone_book->phone[i].number) {
                std::cout << "Found!" << std::endl;
                std::cout << phone_book->phone[i].number << ' ' << phone_book->phone[i].name << ' ' << phone_book->phone[i].address << std::endl;
                found = true;
            }
        }
        break;
        case 3:
            std::cout << "Please enter Number: ";
            std::cin >> _street;
            for(int i = 0; i < phone_book->count; ++i) {
                if(_street == phone_book->phone[i].address) {
                    std::cout << "Found!" << std::endl;
                    std::cout << phone_book->phone[i].number << ' ' << phone_book->phone[i].name << ' ' << phone_book->phone[i].address << std::endl;
                    found = true;
                }
            }
        break;
    default:
        std::cout << "Invalid command" << std::endl;
    }
    
    if(!found)
        std::cout << "Sorry, not found" << std::endl;
    
    std::cout << std::endl;
    std::cin.clear();
}
 
void add() {
    int number;
    std::string name, address;
    std::cout << "Please enter Number: ";
    std::cin >> number;
    std::cout << "Name: ";
    std::cin >> name;
    std::cout << "Address: ";
    std::cin >> address;
    std::ofstream out("tel.txt", std::ios::app);
    out << '\n' << number << ' ' << name << ' ' << address;
    out.close();
}
 
PhoneBook* load() {
    std::ifstream in("tel.txt");
    PhoneBook *phone_book = new PhoneBook;
    phone_book->phone = new Phone[100];
    phone_book->count = 0;
    
    if(!in.good())
        std::cout << "File can't be found" << std::endl;
        
    while(!in.eof()) {
        in >> phone_book->phone[phone_book->count].number;
        in >> phone_book->phone[phone_book->count].name;
        in >> phone_book->phone[phone_book->count].address;
        phone_book->count++;
    }
    in.close(); 
    return phone_book;
}

tel.txt
Кликните здесь для просмотра всего текста
455635 ALEXANDER LENINA
555195 ANASTASIYA NIKIFOROVA
432933 SERGEY KIROVA
663344 NIKOLAY KIROVA
456781 MAKSIM MIRA
338543 MARIYA FROLOVA
655778 VLADIMIR MIRA
899311 ANDREY GREEN
551951 SERGEY GORNYAKOV
355611 EVGENIY MALINOVA
741378 KRISTINA TITOVA
661995 MIKE BORISOVA
553661 MAKSIM TITOVA
Fourees
0 / 0 / 0
Регистрация: 23.05.2013
Сообщений: 17
27.05.2013, 20:03  [ТС] #7
Цитата Сообщение от MarVaL Посмотреть сообщение
Исходник:
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <fstream>
#include <string>
 
struct Phone {
    int number;
    std::string name;
    std::string address;
};
 
struct PhoneBook {
    Phone *phone;
    int count;
};
 
 
PhoneBook* load();
void menu();
void print(PhoneBook *phone_book);
void find(PhoneBook *phone_book);
void add();
 
int main() {
    setlocale(LC_ALL, "RUS");
    menu();
    return 0;
}
 
void print(PhoneBook *phone_book) {
    std::cout << "\nPhone Book: " << std::endl;
    for(int j = 0; j < phone_book->count; ++j)
        std::cout << phone_book->phone[j].number << ' ' << phone_book->phone[j].name << ' ' << phone_book->phone[j].address << std::endl;
    std::cout << std::endl;
}
 
void menu() {
    PhoneBook *phone_book =  load();
    int ans;
    do {
        std::cout << "Please Enter: " << std::endl;
        std::cout << "1 - Find" << std::endl;
        std::cout << "2 - Print" << std::endl;
        std::cout << "3 - Add" << std::endl;
        std::cout << "4 - exit" << std::endl;
        
        std::cin >> ans;
        switch(ans) {
        case 1:
            find(phone_book);
            break;
        case 2:
            print(phone_book);
            break;
        case 3:
            add();
            phone_book = load();
            break;
        case 4:
            break;
        default:
            std::cout << "Invalid command" << std::endl;
        }
    } while(ans != 4);
    delete[] phone_book->phone;
    delete phone_book;
}
 
void find(PhoneBook *phone_book) {
    bool found = false;
    int ans, _number;
    std::string _name, _street;
    std::cout << "Find by: " << std::endl;
    std::cout << "1 - Name" << std::endl;
    std::cout << "2 - Number" << std::endl;
    std::cout << "3 - Street" << std::endl;
    std::cin >> ans;
    switch(ans) {
    case 1:
        std::cout << "Please enter Name: ";
        std::cin >> _name;
        for(int i = 0; i < phone_book->count; ++i) {
            if(_name == phone_book->phone[i].name) {
                std::cout << "Found!" << std::endl;
                std::cout << phone_book->phone[i].number << ' ' << phone_book->phone[i].name << ' ' << phone_book->phone[i].address << std::endl;
                found = true;
            }
        }
        break;
    case 2:
        std::cout << "Please enter Number: ";
        std::cin >> _number;
        for(int i = 0; i < phone_book->count; ++i) {
            if(_number == phone_book->phone[i].number) {
                std::cout << "Found!" << std::endl;
                std::cout << phone_book->phone[i].number << ' ' << phone_book->phone[i].name << ' ' << phone_book->phone[i].address << std::endl;
                found = true;
            }
        }
        break;
        case 3:
            std::cout << "Please enter Number: ";
            std::cin >> _street;
            for(int i = 0; i < phone_book->count; ++i) {
                if(_street == phone_book->phone[i].address) {
                    std::cout << "Found!" << std::endl;
                    std::cout << phone_book->phone[i].number << ' ' << phone_book->phone[i].name << ' ' << phone_book->phone[i].address << std::endl;
                    found = true;
                }
            }
        break;
    default:
        std::cout << "Invalid command" << std::endl;
    }
    
    if(!found)
        std::cout << "Sorry, not found" << std::endl;
    
    std::cout << std::endl;
    std::cin.clear();
}
 
void add() {
    int number;
    std::string name, address;
    std::cout << "Please enter Number: ";
    std::cin >> number;
    std::cout << "Name: ";
    std::cin >> name;
    std::cout << "Address: ";
    std::cin >> address;
    std::ofstream out("tel.txt", std::ios::app);
    out << '\n' << number << ' ' << name << ' ' << address;
    out.close();
}
 
PhoneBook* load() {
    std::ifstream in("tel.txt");
    PhoneBook *phone_book = new PhoneBook;
    phone_book->phone = new Phone[100];
    phone_book->count = 0;
    
    if(!in.good())
        std::cout << "File can't be found" << std::endl;
        
    while(!in.eof()) {
        in >> phone_book->phone[phone_book->count].number;
        in >> phone_book->phone[phone_book->count].name;
        in >> phone_book->phone[phone_book->count].address;
        phone_book->count++;
    }
    in.close(); 
    return phone_book;
}

tel.txt
Кликните здесь для просмотра всего текста
455635 ALEXANDER LENINA
555195 ANASTASIYA NIKIFOROVA
432933 SERGEY KIROVA
663344 NIKOLAY KIROVA
456781 MAKSIM MIRA
338543 MARIYA FROLOVA
655778 VLADIMIR MIRA
899311 ANDREY GREEN
551951 SERGEY GORNYAKOV
355611 EVGENIY MALINOVA
741378 KRISTINA TITOVA
661995 MIKE BORISOVA
553661 MAKSIM TITOVA

Огромнейшее спасибо буду пробовать изучить и написать самому.
tarakan.nvkz
1 / 1 / 0
Регистрация: 10.09.2011
Сообщений: 145
26.01.2016, 07:19 #8
здравствуйте!
Я только начинаю осваивать Visual Studio, раньше писал на борландовском С++..
MarVaL, я добавляю вашу программу в Vusual Studio, но он пишет фатал ерор и не хочет компилироваться.. что я делаю не так?
Вложения
Тип файла: 7z Test1.7z (4.62 Мб, 5 просмотров)
tarakan.nvkz
1 / 1 / 0
Регистрация: 10.09.2011
Сообщений: 145
26.01.2016, 08:04 #9
MarVaL, разобрался, все работает, огромное спасибо.
Не могли бы вы прокоментировать каждую запись?)
gru74ik
Модератор
Эксперт CЭксперт С++
4150 / 1776 / 197
Регистрация: 20.02.2013
Сообщений: 4,898
Записей в блоге: 21
26.01.2016, 11:39 #10
tarakan.nvkz, человека больше года на форуме нет. Вы в профиль его в раздел "Статистика" загляните. Последняя активность: 04.10.2014 18:01
Весьма вероятно, что он Вам вообще не ответит.
tarakan.nvkz
1 / 1 / 0
Регистрация: 10.09.2011
Сообщений: 145
26.01.2016, 11:49 #11
gru74ik, эх, а я и не посмотрел..
мне непонятен некоторый синтаксис, все что происходит в циклах/функциях мне понятно.
Придется видимо долго разбираться самому)
gru74ik
Модератор
Эксперт CЭксперт С++
4150 / 1776 / 197
Регистрация: 20.02.2013
Сообщений: 4,898
Записей в блоге: 21
26.01.2016, 11:51 #12
tarakan.nvkz, что именно непонятно?
tarakan.nvkz
1 / 1 / 0
Регистрация: 10.09.2011
Сообщений: 145
26.01.2016, 11:55 #13
gru74ik, я сейчас напишу коментарии к его исходнику и прикреплю
gru74ik
Модератор
Эксперт CЭксперт С++
4150 / 1776 / 197
Регистрация: 20.02.2013
Сообщений: 4,898
Записей в блоге: 21
26.01.2016, 12:03 #14
Цитата Сообщение от tarakan.nvkz Посмотреть сообщение
я сейчас напишу коментарии к его исходнику и прикреплю
Хорошо. Только быстро не обещаю. Я на работе. Иногда тут начальство ходит, клиенты, опять же.
tarakan.nvkz
1 / 1 / 0
Регистрация: 10.09.2011
Сообщений: 145
26.01.2016, 12:05 #15
gru74ik,
Кликните здесь для просмотра всего текста
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
 
#include <iostream>
#include <fstream>
#include <string>
 
struct Phone {
    int number;
    std::string name;
    std::string address; //обьявляется структура для хранения номер,имени и адреса
};
 
struct PhoneBook {
    Phone *phone;  //зачем нужна эта струткура?
    int count;
};
 
 
PhoneBook* load();  //что это?
void menu();
void print(PhoneBook *phone_book);
void find(PhoneBook *phone_book);  //это я так понимаю прототипы
void add();
 
int main() {
    setlocale(LC_ALL, "RUS");
    menu();  //вызов функции меню в мэйне
    return 0;
}
 
void print(PhoneBook *phone_book) {
    std::cout << "\nPhone Book: " << std::endl;
    for(int j = 0; j < phone_book->count; ++j)
        std::cout << phone_book->phone[j].number << ' ' << phone_book->phone[j].name << ' ' << phone_book->phone[j].address << std::endl; //вот этот оператор -> что выполняет
    std::cout << std::endl;
}
 
void menu() {
    PhoneBook *phone_book =  load();
    int ans;
    do {
        std::cout << "Please Enter: " << std::endl;
        std::cout << "1 - Find" << std::endl;
        std::cout << "2 - Print" << std::endl;
        std::cout << "3 - Add" << std::endl;
        std::cout << "4 - exit" << std::endl;
        
        std::cin >> ans;
        switch(ans) {
        case 1:
            find(phone_book);                      //это то что видим на экране и вызов каких функциий происходит при вводе определенных цифр
            break;
        case 2:
            print(phone_book);
            break;
        case 3:
            add();
            phone_book = load();
            break;
        case 4:
            break;
        default:
            std::cout << "Invalid command" << std::endl;
        }
    } while(ans != 4);
    delete[] phone_book->phone;
    delete phone_book;
}
 
void find(PhoneBook *phone_book) {
    bool found = false;
    int ans, _number;
    std::string _name, _street;
    std::cout << "Find by: " << std::endl;
    std::cout << "1 - Name" << std::endl;
    std::cout << "2 - Number" << std::endl;
    std::cout << "3 - Street" << std::endl;
    std::cin >> ans;
    switch(ans) {
    case 1:
        std::cout << "Please enter Name: ";
        std::cin >> _name;
        for(int i = 0; i < phone_book->count; ++i) {
            if(_name == phone_book->phone[i].name) {
                std::cout << "Found!" << std::endl;
                std::cout << phone_book->phone[i].number << ' ' << phone_book->phone[i].name << ' ' << phone_book->phone[i].address << std::endl;
                found = true;
            }
        }
        break;
    case 2:
        std::cout << "Please enter Number: ";
        std::cin >> _number;
        for(int i = 0; i < phone_book->count; ++i) {
            if(_number == phone_book->phone[i].number) {
                std::cout << "Found!" << std::endl;
                std::cout << phone_book->phone[i].number << ' ' << phone_book->phone[i].name << ' ' << phone_book->phone[i].address << std::endl;
                found = true;
            }
        }
        break;
        case 3:
            std::cout << "Please enter Number: ";
            std::cin >> _street;
            for(int i = 0; i < phone_book->count; ++i) {
                if(_street == phone_book->phone[i].address) {
                    std::cout << "Found!" << std::endl;
                    std::cout << phone_book->phone[i].number << ' ' << phone_book->phone[i].name << ' ' << phone_book->phone[i].address << std::endl;
                    found = true;
                }
            }
        break;
    default:
        std::cout << "Invalid command" << std::endl;
    }
    
    if(!found)
        std::cout << "Sorry, not found" << std::endl;
    
    std::cout << std::endl;
    std::cin.clear();
}
 
void add() {
    int number;
    std::string name, address;
    std::cout << "Please enter Number: ";
    std::cin >> number;
    std::cout << "Name: ";
    std::cin >> name;
    std::cout << "Address: ";
    std::cin >> address;
    std::ofstream out("tel.txt", std::ios::app);
    out << '\n' << number << ' ' << name << ' ' << address;
    out.close();
}
 
PhoneBook* load() {
    std::ifstream in("tel.txt");
    PhoneBook *phone_book = new PhoneBook;
    phone_book->phone = new Phone[100];
    phone_book->count = 0;
    
    if(!in.good())
        std::cout << "File can't be found" << std::endl;
        
    while(!in.eof()) {
        in >> phone_book->phone[phone_book->count].number;
        in >> phone_book->phone[phone_book->count].name;
        in >> phone_book->phone[phone_book->count].address;
        phone_book->count++;
    }
    in.close(); 
    return phone_book;
}


Добавлено через 2 минуты
gru74ik, видимо у меня проблема с незнанием некоторых операторов, т.к. c++ я изучал в университете, там одна лабораторная была по структурам..
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.01.2016, 12:05
Привет! Вот еще темы с ответами:

Телефонная книга сортировка пузырьком - C++
Сортировка массива записей (телефонной книги) методом Пузырька. Записи считываются из текстового файла, каждая запись состоит из двух...

Не обращается к функции из класса. Проект телефонная книга - C++
Здравствуйте! Прошу помощи так как проект нужно сдавать уже на днях :( В данном проекте функции уже написаны, но существует следующая...

Телефонная книга: подскажите алгоритм быстрого поиска контактов - C++
привет всем! какой самый быстрий алгоритм поиска контактов.и какие вы предлагайте допустим у нас имена Anton Aren Arsen Arkadi ...

Организовать добавление данных в файл, просмотр, поиск и очистку данных - C++
НАписать программу. Компонентами типизированного файла являются записи, состоящие из следующих полей: - фамилия; - имя; - отчество; - город...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
26.01.2016, 12:05
Ответ Создать тему
Опции темы

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