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

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

Восстановить пароль Регистрация
 
tema47
0 / 0 / 0
Регистрация: 24.04.2014
Сообщений: 67
04.05.2014, 12:59     Перевести структуру ORDER в класс #1
Помогите решить!
Требуется решить задачу с использованием классов.
При этом обязательно оформить методы для выполнения каждого из действий: по вводу данных, выводу их в файл, чтению данных из файла и выводу их на экран, сортировке данных.

Дана структура с именем 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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
tema47
0 / 0 / 0
Регистрация: 24.04.2014
Сообщений: 67
07.05.2014, 20:02  [ТС]     Перевести структуру ORDER в класс #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;
}
Myptuk
1 / 1 / 0
Регистрация: 01.05.2013
Сообщений: 43
07.05.2014, 21:30     Перевести структуру ORDER в класс #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;
}
Вариант не рабочий, раскидал как должно быть, над мелкими ошибками покипи, работы не много, просто лень исправлять.
tema47
0 / 0 / 0
Регистрация: 24.04.2014
Сообщений: 67
07.05.2014, 21:53  [ТС]     Перевести структуру ORDER в класс #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-ей строке!
Myptuk
1 / 1 / 0
Регистрация: 01.05.2013
Сообщений: 43
07.05.2014, 21:56     Перевести структуру ORDER в класс #5
не люблю всё в один файл пихать, но можно и так, главное чтоб работало )

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

Добавлено через 4 минуты
на счет массивов забудьте, я не прав)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.05.2014, 22:26     Перевести структуру ORDER в класс
Еще ссылки по теме:

Класс ORDER. Сортировка по расчетным счетам плательщиков выполнена неверно C++
C++ Описать структуру с именем Order
Создать класс Order C++
C++ Описать структуру с именем Order
Описать структуру с именем ORDER C++

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

Или воспользуйтесь поиском по форуму:
tema47
0 / 0 / 0
Регистрация: 24.04.2014
Сообщений: 67
07.05.2014, 22:26  [ТС]     Перевести структуру ORDER в класс #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;
}
Yandex
Объявления
07.05.2014, 22:26     Перевести структуру ORDER в класс
Ответ Создать тему
Опции темы

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