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

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

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

Использование класса ORDER - C++

09.05.2014, 17:58. Просмотров 786. Ответов 22
Метки нет (Все метки)

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

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

Вот, что попытался сделать:
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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2014, 17:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Использование класса ORDER (C++):

Использование объекта одного класса при создании нового класса - C++
Добрый вечер. У меня такая проблема. Есть готовый класс L2 - список, на его основе нужно создать дек. Я поступил так: в приватной части...

Использование в качестве поля класса указатель на объект другого класса - C++
Ошибка в названии - &quot;указателЯ&quot; Вот, пытаюсь освоить ООП (пока только учусь): создаю класс person (человек) и car (модель машины). ...

Использование перегруженного оператора ввода/вывода в поток базового класса для объекта производного класса - C++
Здравствуйте! Можно ли использовать перегруженный оператор ввода/вывода в поток из базового класса для объекта производного класса, если...

Использование класса - C++
Доброго времени суток! Подскажите пожалуйста... Я как-то неправильно использую класс: #include &lt;windows.h&gt; class Timer { ...

Использование класса String - C++
//Èñïîëüçîâàíèå êëàññà string. #include &lt;iostream&gt; #include &lt;string.h&gt; using namespace std; class String { public: ...

Использование шаблона класса - C++
Здравствуйте. у меня возникла проблемка при использовании шаблона класса. template &lt;class X&gt; class CArray { public: X *myarray; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Lom1
1 / 1 / 0
Регистрация: 09.05.2014
Сообщений: 79
10.05.2014, 18:31  [ТС] #16
zss, Не совсем вас понимаю, отправьте код лучше, а дальше я разберусь.
DrNIX
Сообщений: n/a
10.05.2014, 18:32 #17
Сложная задача, проект, обращайтесь во фриланс.
zss
Модератор
Эксперт С++
6359 / 5923 / 1920
Регистрация: 18.12.2011
Сообщений: 15,226
Завершенные тесты: 1
10.05.2014, 19:05 #18
А чем Вам не угодил мой пост №6
Использование класса ORDER
Lom1
1 / 1 / 0
Регистрация: 09.05.2014
Сообщений: 79
11.05.2014, 13:09  [ТС] #19
zss, Тем, что он выводит сразу данные, нет ввода, записи.

Добавлено через 1 минуту
zss, А, и еще вывода чтения.

Добавлено через 17 часов 45 минут
zss, Спасибо, я добился все-таки.
Но теперь проблема с тем, что когда я ввожу в поле плательщика или получателя 21 символ то у меня происходит при вводе слитность плательщика и получателя, хотелось бы с циклом while сделать так чтобы допустим пользователь вводит 21 цифру и ему выдает сообщение ввести корректный номер лицевого счета, а когда 20 проходит цикл.

Вот код:
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
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
 
const int n=21;
 
class ORDER
{
private:
    char plat[n], pol[n];        //Ввод счета длиной 20 символов
    double summa;
public:
    void setDATA (char* plat_s, char* pol_s, double summa_r)
    {
        strcpy(plat,plat_s);
        strcpy(pol, pol_s);
        summa = summa_r;
    }
 
    void getDATA()               //Ввод данных
    {
        cout<<"Расчетный счет плательщика: ";
        cin>>plat;
        int count_plat = strlen(plat);
        while (count_plat>=21)
        {
            cout << "Введите корректный расчетный счет плательщика (20 цифр): ";
            cin>>plat;
        }
        cout<<"Расчетный счет получателя: ";
        cin>>pol;
        int count_pol = strlen(pol);
        while (count_pol>=21)
        {
            cout << "Введите корректный расчетный счет получателя (20 цифр): ";
            cin>>pol;
        }
        cout<<"Перечисляемая сумма в руб.: ";
        cin>>summa;
        cout << endl;
    }
 
    void WriteDATA(ofstream& fout)          //Запись данных
    {
        fout<<endl<<plat<<endl<<pol<<endl<<summa<<endl<<endl;
    }
 
    void ReadDATA(ifstream& fin)            //Чтение данных и вывод их на экран
    {
        fin>>plat;
        fin>>pol;
        fin>>summa;
        cout<<endl<<"Плательщик - "<<plat<<endl
        <<"Получатель - "<<pol<<endl<<"Сумма - "<<summa<<" руб."<<endl<<endl;
   }
    friend void sort(ORDER* Spisok)         //Сортировка по расчетным счетам плательщиков (исправить)
    {
        ORDER tmp;
        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 << "--------------------------------------------------------------------------------";
    }
 
    friend void search(ORDER* Spisok)       //Поиск расчетного счета и вывод на экран информации о сумме, cнятой с расчетного счета плательщика
    {
        bool r=false;
        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)
        cout<<"С расчетного счета "<<nomer_plat<<" снято "<<snyataya_summa<<" руб."<<endl;       
        else
        cout<<"Такого расчетного счета нет!"<<endl;
    }
};
 
 int main()
{
    setlocale (LC_ALL, "rus");
    char plat[n], pol[n];
    double summa=0;
    
 
    ORDER Spisok[4];
    for (int i=1;i<=3;i++)
    { 
        Spisok[i].setDATA (plat, pol, summa);
        cout<<"# "<<i<<endl;
        Spisok[i].getDATA();
    }
 
 
    ofstream fout("input.txt");
    if(!fout)
        return 0;
    for (int i=1;i<=3;i++)
    { 
        fout<<i;
        Spisok[i].WriteDATA(fout);
    }
    fout.close();
 
 
    ifstream fin("input.txt");
    cout <<"--------------------------------------------------------------------------------"<<"Чтение данных из файла."<<endl;
    if(!fin)
        return 0;
    for (int i=1;i<=3;i++)
    { 
        fin >> i;
        cout<<"# "<<i;
        Spisok[i].ReadDATA(fin);
    }
    cout <<"--------------------------------------------------------------------------------";
    fin.close();
    sort(Spisok);    
    search(Spisok);
    system("PAUSE");
    return 0;
}
zss
Модератор
Эксперт С++
6359 / 5923 / 1920
Регистрация: 18.12.2011
Сообщений: 15,226
Завершенные тесты: 1
11.05.2014, 13:25 #20
Цитата Сообщение от Lom1 Посмотреть сообщение
for (int i=1;i<=3;i++)
Почему не от нуля?
Цитата Сообщение от Lom1 Посмотреть сообщение
for (int i=1;i<=3;i++) { fin >> i;
fin>>i затрет i (переменную цикла).
Цитата Сообщение от Lom1 Посмотреть сообщение
while (count_plat>=21) { cout << "Введите корректный расчетный счет плательщика (20 цифр): "; cin>>plat; }
Это и есть проверка на корректный размер. Только надо проверять на неравно
while (count_plat!=20).
Lom1
1 / 1 / 0
Регистрация: 09.05.2014
Сообщений: 79
11.05.2014, 14:05  [ТС] #21
zss, Дело в том, что мне номер нужен не 0 же, а 1. Мы же не говорим 0-ой номер, мы говорим 1-ый номер. Не затрет, проверял! Сейчас попробую цикл.

Добавлено через 3 минуты
zss, Не, цикл не пашет, когда я ввожу допустим от 1-20 цифр он меня бросает на цикл.

Добавлено через 2 минуты
zss, Если ставить как я:
while (count_plat>=21) { cout << "Введите корректный расчетный счет плательщика (20 цифр): "; cin>>plat; }
то от 1-20 пропускает, когда 21 не пропускает, все верно.
НО: когда я ввел больше 20 цифр, цикл не дает мне ни малейшего шанса выбраться оттуда, т.е. от 1-20 цифр он не воспринимает, и кидает в любом случае снова на цикл.
zss
Модератор
Эксперт С++
6359 / 5923 / 1920
Регистрация: 18.12.2011
Сообщений: 15,226
Завершенные тесты: 1
11.05.2014, 14:07 #22
Цитата Сообщение от Lom1 Посмотреть сообщение
Мы же не говорим 0-ой номер
Мало ли чего мы не говорим.
Однако в массивах первый элемент массива имеет номер НОЛЬ.
Lom1
1 / 1 / 0
Регистрация: 09.05.2014
Сообщений: 79
11.05.2014, 14:13  [ТС] #23
zss, Еще, если ставить как я:
while (count_plat>=21) { cout << "Введите корректный расчетный счет плательщика (20 цифр): "; cin>>plat; }
то он цифры от 1-20 пропускает, когда 21 кидает на цикл. Все верно.
НО, если я в цикле, то он мне не даст ни малейшего шанса выбраться оттуда, т.е. от 1-20 цифры не воспринимает, в любом случае он меня кидает снова на цикл.

Добавлено через 58 секунд
zss, Дак я в цикле FOR указал что он начинает с 1, разница есть?
мне не 0 нужен, а 1

Добавлено через 3 минуты
zss, Кстати то что ты сейчас сказал про первый элемент массива, может ли это влиять на сортировку, просто у меня сортировка по пузырю, но он не сортирует по 1 цифре.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.05.2014, 14:13
Привет! Вот еще темы с ответами:

Использование абстрактного класса - C++
Доброго времени. Использую абстрактный класс Algorithm с абстрактным методом Calculate() и 5 производных от него классов, реализующих тот...

Использование this в методе класса - C++
Добрый день! Пытаюсь написать класс красно-чёрного дерева. Вот фрагмент класса: class Tree { long value; Tree* parent; ...

Использование вложенного класса - C++
Доброго времени суток. Решил подтянуть знания в базовых алгоритмах и структурах данных, а заодно попрактиковаться в шаблонах и обобщенном...

Использование дружественного класса - C++
Нужно что бы классы стали общее дружеские вложенные классы поидее в книге написано можно добавить всего лишь к примеру friend class Remote;...


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

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

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