Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
tema47
0 / 0 / 0
Регистрация: 24.04.2014
Сообщений: 67
#1

Перевести структуру ORDER в класс - C++

04.05.2014, 12:59. Просмотров 439. Ответов 7
Метки нет (Все метки)

Помогите решить!
Требуется решить задачу с использованием классов.
При этом обязательно оформить методы для выполнения каждого из действий: по вводу данных, выводу их в файл, чтению данных из файла и выводу их на экран, сортировке данных.

Дана структура с именем ORDER, состоящая из полей:
- расчетный счет плательщика;
- расчетный счет получателя;
- перечисляемая сумма в руб.
Написать программу, которая выполняет следующие действия:
- ввод с клавиатуры данных в массив, состоящий из 8 элементов типа ORDER, и занесение их в файл данных;
- чтение данных из файла и вывод их на экран;
- вывод на экран информации о сумме, снятой с расчетного счета плательщика, введенного с клавиатуры (если таких нет – вывести об этом сообщение);
- список должен быть упорядочен по расчетным счетам плательщиков.


Вот, что попытался сделать, код программы:
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
#include <tchar.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
 
int const n=3;
 
struct ORDER {
       char plat[n], pol[n];
       float summa;
};
 
 int main()
{
    setlocale (LC_ALL, "rus");
    ORDER tmp;
    ORDER Spisok[15];
    char nomer_plat[15];
    bool r=false;
    float snyataya_summa=0;
    for (int i=0;i<=n;i++)
    { 
        cout<<"Расчетный счет платильщика: ";
        cin>>Spisok[i].plat;
        cout<<"Расчетный счет получателя: ";
        cin>>Spisok[i].pol;
        cout<<"Перечисляемая сумма в руб.: ";
        cin>>Spisok[i].summa;
        cout << endl;
    }
    for (int i=0;i<=n;i++)
    for (int j=0;j<=n;j++)
    {
        if ( i != j )
        if (strcmp(&Spisok[i].plat[0], &Spisok[j].plat[0]))
        {
            tmp=Spisok[j];
            Spisok[j]=Spisok[i];
            Spisok[i]=tmp;
        }
    }
    for (int i=0;i<=n;i++)
    cout<<"Плательщик "<<Spisok[i].plat<<" Получатель "<<Spisok[i].pol<<" Сумма "<<Spisok[i].summa<<"\n";
    cout<<"Введите номер лицевого счета(плательщика)\n";
    cin>>nomer_plat;
    for (int i=0;i<=n;i++)
    if (strcmp(&Spisok[i].plat[0], &nomer_plat[0]) == 0 ) //Здесь выдает ошибку!!!
    {
        snyataya_summa+=Spisok[i].summa;
        r=true;
    }
    if (r==true)
    cout<<"С расчетного счета "<<nomer_plat<<" снято "<<snyataya_summa<<"\n";
    else
    cout<<"Такого счета нет!" << endl;
    system("PAUSE");
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.05.2014, 12:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перевести структуру ORDER в класс (C++):

Описать структуру с именем Order - C++
Описать структуру с именем Order содержащую следующие поля: расчётный счет плательщика, расчётный счёт получатля, перечисляемая сумма в...

Описать структуру с именем ORDER - C++
Описать структуру с именем ORDER, содержащую следующие поля: расчетный счет плательщика; расчетный счет получателя; перечисляемая сумма в...

Описать структуру с именем Order - C++
Описать структуру с именем ORDER, содержащую следующие поля: • расчетный счет плательщика; • расчетный счет получателя; •...

Описать структуру с именем Order - C++
Дорогие форумчане =) мне нужна ваша помощь. Нужно написать программу,первую часть сделал сам. #include &lt;iostream&gt; #include &lt;iomanip&gt; ...

Описать структуру с именем ORDER - C++
Описать структуру с именем ORDER, содержащую следующие поля: • расчетный счет плательщика; • расчетный счет получателя; ...

Описать структуру с именем Order - C++
Доработать структуру. Знающему и понимающему человеку делов на 5 минут, не больше. Ребят, очень прошу, помогите. Собственно вот...

7
tema47
0 / 0 / 0
Регистрация: 24.04.2014
Сообщений: 67
07.05.2014, 20:02  [ТС] #2
Помогите перевести это все на класс!
Требуется решить с использованием классов.
При этом обязательно оформить методы для выполнения каждого из действий: по вводу данных, выводу их в файл, чтению данных из файла и выводу их на экран, сортировке данных.

Вот код:
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
#include <iostream>
#include <fstream>
using namespace std;
 
int const n=21;
 
struct ORDER
{
       char plat[n], pol[n];                 //Ввод счета длиной 20 символов
       double summa;
};
 
 int main()
{
    setlocale (LC_ALL, "rus");
    ofstream fout; ifstream fin;
    ORDER tmp;
    ORDER Spisok[21];
    char nomer_plat[21];
    bool r=false;
    float snyataya_summa=0;
    fout.open ("input.txt");                                    //Запись данных в файл
    for (int i=1;i<=3;i++)
    { 
        cout<<"# "<<i<<endl;
        cout<<"Расчетный счет плательщика: ";
        cin>>Spisok[i].plat;
        cout<<"Расчетный счет получателя: ";
        cin>>Spisok[i].pol;
        cout<<"Перечисляемая сумма в руб.: ";
        cin>>Spisok[i].summa;
        cout << endl;
        fout<<"# "<<i<<endl<<"Плательщик - "<<Spisok[i].plat<<endl
        <<"Получатель - "<<Spisok[i].pol<<endl<<"Сумма - "<<Spisok[i].summa<<" руб."<<endl<<endl;
    }
    fout.close();
 
 
    fin.open ("input.txt");                                     //Чтение данных из файла
    cout <<"--------------------------------------------------------------------------------"<<"Чтение данных из файла."<<endl;
    for (int i=1;i<=3;i++)
    {
        int a;
        fin >> a;
        cout<<"# "<<i<<endl<<"Плательщик - "<<Spisok[i].plat<<endl
        <<"Получатель - "<<Spisok[i].pol<<endl<<"Сумма - "<<Spisok[i].summa<<" руб."<<endl<<endl;
    }
    cout <<"--------------------------------------------------------------------------------";
    fin.close ();
 
 
    for (int i=1;i<=3;i++)                              //Сортировка по расчетным счетам плательщиков
    for (int j=1;j<=3;j++)
    {
        if (i!=j)
        if (strcmp(&Spisok[i].plat[0], &Spisok[j].plat[0]))
        {
            tmp=Spisok[j];
            Spisok[j]=Spisok[i];
            Spisok[i]=tmp;
        }
    }
    cout<<"Сортировка по расчетным счетам плательщиков.";
    for (int i=1;i<=3;i++)
    cout<<endl<<"# "<<i<<endl<<"Плательщик - "<<Spisok[i].plat<<endl
    <<"Получатель - "<<Spisok[i].pol<<endl<<"Сумма - "<<Spisok[i].summa<<" руб."<<endl;
    cout << "--------------------------------------------------------------------------------";
    cout<<"Введите номер расчетного счета (плательщика): ";                 //Поиск расчетного счета
    cin>>nomer_plat;
    for (int i=1;i<=3;i++)
    if (strcmp(&Spisok[i].plat[0], &nomer_plat[0]) == 0 )
    {
        snyataya_summa+=Spisok[i].summa;
        r=true;
    }
    if (r==true)
    cout<<"С расчетного счета "<<nomer_plat<<" снято "<<snyataya_summa<<" руб."<<endl;
    else
    cout<<"Такого расчетного счета нет!"<<endl;
    system("PAUSE");
    return 0;
}
0
Myptuk
1 / 1 / 0
Регистрация: 01.05.2013
Сообщений: 43
07.05.2014, 21:30 #3
newclass1.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#pragma once
class newclass1
{
    int n;
    char *tmp;
    char *Spisok;
    char *nomer_plat;
    char *plat;
    char *pol;
    double summa;
    float snyataya_summa;
    bool r;
public:
    newclass1(void);
    ~newclass1(void);
    newclass1(int _n);
    void Input(void);
    void Print(void);
    void Sort();
    void Read();
    void Rec();
    void Poisk();
};
newclass1.cpp
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
#include "StdAfx.h"
#include "newclass1.h"
using namespace std;
 
newclass1::newclass1(void)
{
    n = 21;
    plat = 0;
    pol = 0;
    summa = 0;
    tmp = 0;
    Spisok = 0;
    nomer_plat = 0;
    r = false;
    snyataya_summa = 0;
}
 
newclass1::newclass1(int _n)
{
    _n=n;
    plat[n];
    pol[n];
    Spisok[n];
    nomer_plat[n];
}
 
newclass1::~newclass1(void)
{
}
 
void newclass1::Input(void)
{
    //ввод
}
 
void newclass1::Print(void)
{
    //вывод
}
 
void newclass1::Sort() //Сортировка по расчетным счетам плательщиков
{
    for (int i=1;i<=3;i++)
        for (int j=1;j<=3;j++)
        {
            if (i!=j)
                if (strcmp(&Spisok[i].plat[0], &Spisok[j].plat[0]))
                {
                    tmp=Spisok[j];
                    Spisok[j]=Spisok[i];
                    Spisok[i]=tmp;
                }
        }
        cout<<"Сортировка по расчетным счетам плательщиков.";
        for (int i=1;i<=3;i++)
            cout<<endl<<"# "<<i<<endl<<"Плательщик - "<<Spisok[i].plat<<endl
            <<"Получатель - "<<Spisok[i].pol<<endl<<"Сумма - "<<Spisok[i].summa<<" руб."<<endl;
        cout << "--------------------------------------------------------------------------------"
}
 
void newclass1::Read() //Чтение данных из файла
{
    fin.open ("input.txt");
    cout <<"--------------------------------------------------------------------------------"<<"Чтение данных из файла."<<endl;
    for (int i=1;i<=3;i++)
    {
        int a;
        fin >> a;
        cout<<"# "<<i<<endl<<"Плательщик - "<<Spisok[i].plat<<endl
            <<"Получатель - "<<Spisok[i].pol<<endl<<"Сумма - "<<Spisok[i].summa<<" руб."<<endl<<endl;
    }
    cout <<"--------------------------------------------------------------------------------";
    fin.close();
}
 
void newclass1::Rec() //Запись данных в файл
{
    fout.open ("input.txt");
    for (int i=1;i<=3;i++)
    { 
        cout<<"# "<<i<<endl;
        cout<<"Расчетный счет плательщика: ";
        cin>>Spisok[i].plat;
        cout<<"Расчетный счет получателя: ";
        cin>>Spisok[i].pol;
        cout<<"Перечисляемая сумма в руб.: ";
        cin>>Spisok[i].summa;
        cout << endl;
        fout<<"# "<<i<<endl<<"Плательщик - "<<Spisok[i].plat<<endl
            <<"Получатель - "<<Spisok[i].pol<<endl<<"Сумма - "<<Spisok[i].summa<<" руб."<<endl<<endl;
    }
    fout.close();
}
 
void newclass1::Poisk() //Поиск расчетного счета
{
    cout<<"Введите номер расчетного счета (плательщика): ";
    cin>>nomer_plat;
    for (int i=1;i<=3;i++)
        if (strcmp(&Spisok[i].plat[0], &nomer_plat[0]) == 0 )
        {
            snyataya_summa+=Spisok[i].summa;
            r=true;
        }
        if (r==true)
            cout<<"С расчетного счета "<<nomer_plat<<" снято "<<snyataya_summa<<" руб."<<endl;
        else
            cout<<"Такого расчетного счета нет!"<<endl;
}
Вариант не рабочий, раскидал как должно быть, над мелкими ошибками покипи, работы не много, просто лень исправлять.
0
tema47
0 / 0 / 0
Регистрация: 24.04.2014
Сообщений: 67
07.05.2014, 21:53  [ТС] #4
Myptuk, Можно ли это реализовать на стандартных библиях, имеется ввиду, не создавая свою.

Вот что у меня получилось:

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
#include <iostream>
#include <fstream>
using namespace std;
 
int const n=21;
 
class ORDER
{
public:
    char plat[n], pol[n];                 //Ввод счета длиной 20 символов
    double summa;
public:
    void setDATA (char plat_s, char pol_s, double summa_r)
    {
        plat[n] = plat_s;
        pol[n] = pol_s;
        summa = summa_r;
    }
 
    void getDATA()
    {
        ORDER Spisok[21];
        ifstream fin;
        fin.open ("input.txt");                                     //Чтение данных из файла
        cout <<"--------------------------------------------------------------------------------"<<"Чтение данных из файла."<<endl;
        for (int i=1;i<=3;i++)
        {
            int a;
            fin >> a;
            cout<<"# "<<i<<endl<<"Плательщик - "<<Spisok[i].plat<<endl
            <<"Получатель - "<<Spisok[i].pol<<endl<<"Сумма - "<<Spisok[i].summa<<" руб."<<endl<<endl;
        }
        cout <<"--------------------------------------------------------------------------------";
        fin.close ();
    }
 
    void sort()
    {
        ORDER tmp;
        ORDER Spisok[21];
        for (int i=1;i<=3;i++)                              //Сортировка по расчетным счетам плательщиков (исправить)
        for (int j=1;j<=3;j++)
        {
            if (i!=j)
            if (strcmp(&Spisok[i].plat[0], &Spisok[j].plat[0]))
            {
                tmp=Spisok[j];
                Spisok[j]=Spisok[i];
                Spisok[i]=tmp;
            }
        }
        cout<<"Сортировка по расчетным счетам плательщиков.";
        for (int i=1;i<=3;i++)
        cout<<endl<<"# "<<i<<endl<<"Плательщик - "<<Spisok[i].plat<<endl
        <<"Получатель - "<<Spisok[i].pol<<endl<<"Сумма - "<<Spisok[i].summa<<" руб."<<endl;
        cout << "--------------------------------------------------------------------------------";
    }
 
    void search()
    {
        bool r=false;
        ORDER Spisok[21];
        double snyataya_summa=0;
        char nomer_plat[21];
        cout<<"Введите номер расчетного счета (плательщика): ";                 //Поиск расчетного счета
        cin>>nomer_plat;
        for (int i=1;i<=3;i++)
        if (strcmp(&Spisok[i].plat[0], &nomer_plat[0]) == 0 )
        {
            snyataya_summa+=Spisok[i].summa;
            r=true;
        }
        if (r==true)
        cout<<"С расчетного счета "<<nomer_plat<<" снято "<<snyataya_summa<<" руб."<<endl;
        else
        cout<<"Такого расчетного счета нет!"<<endl;
    }
};
 
 int main()
{
    setlocale (LC_ALL, "rus");
    char plat[n], pol[n];
    double summa;
    ofstream fout;
    ORDER Spisok[21];
    fout.open ("input.txt");                                    //Запись данных в файл
    ORDER *obj = new ORDER;
    for (int i=1;i<=3;i++)
    { 
        cout<<"# "<<i<<endl;
        cout<<"Расчетный счет плательщика: ";
        cin>>Spisok[i].plat;
        cout<<"Расчетный счет получателя: ";
        cin>>Spisok[i].pol;
        cout<<"Перечисляемая сумма в руб.: ";
        cin>>Spisok[i].summa;
        cout << endl;
        fout<<"# "<<i<<endl<<"Плательщик - "<<Spisok[i].plat<<endl
        <<"Получатель - "<<Spisok[i].pol<<endl<<"Сумма - "<<Spisok[i].summa<<" руб."<<endl<<endl;
    }
    fout.close();
    obj->setDATA(plat[n], pol[n], summa);
    obj->getDATA();
    obj->sort();    
    obj->search();
    delete obj;
    system("PAUSE");
    return 0;
}
Как только ввел значения, выдает ошибку про неинициализированные переменные на 103-ей строке!
0
Myptuk
1 / 1 / 0
Регистрация: 01.05.2013
Сообщений: 43
07.05.2014, 21:56 #5
не люблю всё в один файл пихать, но можно и так, главное чтоб работало )

Добавлено через 1 минуту
ошибка выше. 9-11 строки. char объявляется без скобок. и указателем вроде надо. посмотрите мой пример.
0
tema47
0 / 0 / 0
Регистрация: 24.04.2014
Сообщений: 67
07.05.2014, 21:57  [ТС] #6
Myptuk, Просто нам задание дали на лабораторную, делать все в одном файле, вот и сижу стругаю, про 103-ю троку, как эту ошибку убить?
0
Myptuk
1 / 1 / 0
Регистрация: 01.05.2013
Сообщений: 43
07.05.2014, 22:12 #7
в 9 строке паблик не нужен)))

Добавлено через 4 минуты
на счет массивов забудьте, я не прав)
0
tema47
0 / 0 / 0
Регистрация: 24.04.2014
Сообщений: 67
07.05.2014, 22:26  [ТС] #8
Myptuk, Ok.

Добавлено через 4 минуты
Myptuk, Использовал ваш код, но там пишет везде где Spisok (выражение должно иметь тип класса)

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
#include <iostream>
#include <fstream>
using namespace std;
 
class newclass1
{
    int n;
    char *tmp;
    char *Spisok;
    char *nomer_plat;
    char *plat;
    char *pol;
    double summa;
    float snyataya_summa;
    bool r;
public:
    newclass1(void);
    ~newclass1(void);
    newclass1(int _n);
    void Input(void);
    void Print(void);
    void Sort();
    void Read();
    void Rec();
    void Poisk();
};
 
 
 
newclass1::newclass1(void)
{
    n = 21;
    plat = 0;
    pol = 0;
    summa = 0;
    tmp = 0;
    Spisok = 0;
    nomer_plat = 0;
    r = false;
    snyataya_summa = 0;
}
 
newclass1::newclass1(int _n)
{
    _n=n;
    plat[n];
    pol[n];
    Spisok[n];
    nomer_plat[n];
}
 
newclass1::~newclass1(void)
{
}
 
void newclass1::Input(void)
{
    //ввод
}
 
void newclass1::Print(void)
{
    //вывод
}
 
void newclass1::Sort() //Сортировка по расчетным счетам плательщиков
{
    for (int i=1;i<=3;i++)
        for (int j=1;j<=3;j++)
        {
            if (i!=j)
                if (strcmp(&Spisok[i].plat[0], &Spisok[j].plat[0]))
                {
                    tmp=Spisok[j];
                    Spisok[j]=Spisok[i];
                    Spisok[i]=tmp;
                }
        }
        cout<<"Сортировка по расчетным счетам плательщиков.";
        for (int i=1;i<=3;i++)
            cout<<endl<<"# "<<i<<endl<<"Плательщик - "<<Spisok[i].plat<<endl
            <<"Получатель - "<<Spisok[i].pol<<endl<<"Сумма - "<<Spisok[i].summa<<" руб."<<endl;
        cout << "--------------------------------------------------------------------------------"
}
 
void newclass1::Read() //Чтение данных из файла
{
    ifstream fin;
    fin.open ("input.txt");
    cout <<"--------------------------------------------------------------------------------"<<"Чтение данных из файла."<<endl;
    for (int i=1;i<=3;i++)
    {
        int a;
        fin >> a;
        cout<<"# "<<i<<endl<<"Плательщик - "<<Spisok[i].plat<<endl
            <<"Получатель - "<<Spisok[i].pol<<endl<<"Сумма - "<<Spisok[i].summa<<" руб."<<endl<<endl;
    }
    cout <<"--------------------------------------------------------------------------------";
    fin.close();
}
 
void newclass1::Rec() //Запись данных в файл
{
    ofstream fout;
    fout.open ("input.txt");
    for (int i=1;i<=3;i++)
    { 
        cout<<"# "<<i<<endl;
        cout<<"Расчетный счет плательщика: ";
        cin>>Spisok[i].plat;
        cout<<"Расчетный счет получателя: ";
        cin>>Spisok[i].pol;
        cout<<"Перечисляемая сумма в руб.: ";
        cin>>Spisok[i].summa;
        cout << endl;
        fout<<"# "<<i<<endl<<"Плательщик - "<<Spisok[i].plat<<endl
            <<"Получатель - "<<Spisok[i].pol<<endl<<"Сумма - "<<Spisok[i].summa<<" руб."<<endl<<endl;
    }
    fout.close();
}
 
void newclass1::Poisk() //Поиск расчетного счета
{
    cout<<"Введите номер расчетного счета (плательщика): ";
    cin>>nomer_plat;
    for (int i=1;i<=3;i++)
        if (strcmp(&Spisok[i].plat[0], &nomer_plat[0]) == 0 )
        {
            snyataya_summa+=Spisok[i].summa;
            r=true;
        }
        if (r==true)
            cout<<"С расчетного счета "<<nomer_plat<<" снято "<<snyataya_summa<<" руб."<<endl;
        else
            cout<<"Такого расчетного счета нет!"<<endl;
}
0
07.05.2014, 22:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.05.2014, 22:26
Привет! Вот еще темы с ответами:

Описать структуру с именем Order - C++
1. Разработать программный блок, который позволяет выполнять обработку динамического массива структур. Предусмотреть возможность создания,...

Описать структуру с именем ORDER - C++
Помогите написать программу в MS Visual Studio 2008. Описать структуру с именем ORDER , содержащую следующие поля: 1) расчетный счет...

Описать структуру с именем Order - C++
Всем Привет! #include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;algorithm&gt; struct Order { long payer; long receiver; ...

Структура: Описать структуру с именем ORDER - C++
Описать структуру с именем ORDER, содержащую следующие поля: • расчетный счет плательщика; • расчетный счет получателя; ...


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

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

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