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

Реализовать класс вместо структуры - C++

Восстановить пароль Регистрация
 
fors-dnet
 Аватар для fors-dnet
3 / 3 / 0
Регистрация: 11.12.2011
Сообщений: 88
31.01.2012, 22:21     Реализовать класс вместо структуры #1
Здравстуйте буду благодарен если кто-то поможет.

Вот само задание:
создать программу по индивидуальному варианту, которая:
1.1. открывает внешний файл Input.txt и считывает с него данные согласно индивидуальным заданием;
1.2. запоминает полученные данные в виде класса;
1.3. сортирует данные структуры за числовым полем любым методом сортировки;
1.4. записывает полученные результаты сортировки во внешний файл Output.txt в виде таблицы с соответствующей шапкой и табулирования данных.
2. Выполнить пункты 1.3 и 1.4 для сортировки данных структуры по символьным полем.

1. Закрытые данные-члены класса:
- Мобильный номер;
- Остаток средств на счете;
- Название тарифного плана.
Открытые функции-члены класса:
- Инициализация (введение через аргументы функции информации в данные-члены класса);
- Вывод на экран информации, сохранения в данных-членах.
а.


Файл допустим такого содержания:
09342598623 56.30 life
05085458748 23.10 mtc
09765874598 11.20 kyivstar
09345874122 89.65 life
09645874114 11.50 mtc.

Предыдущее задание было такое же только со структурой и на языке Си:
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
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
 
struct Abonent
{
    char nomer[11];
    double ostatok;
    char tarif[15];
}arr [5];
 
int load (struct Abonent *arr)
{
    int i=0;
    FILE *f=NULL; 
    f=fopen("D:\Input.txt", "rt");
    if (f==NULL)
    {
        printf ("No file!!!\n");
        exit (0);
    }
    
    for(i=0;i<5;i++)
    {
        fscanf(f,"%s", &arr[i].nomer);
        fscanf(f,"%lf", &arr[i].ostatok);
        fscanf(f,"%s", &arr[i].tarif);
    }
    fclose (f);
 
    return 0;
}
 
int sortost (struct Abonent *t)
{
    struct Abonent x;
    int i=0, j=0;   
    for(i=0;i<5;i++)
    {
        for(j=0; j<4; j++)
        {
            if( t[j].ostatok > t[j+1].ostatok )
            {
                x=t[j];
                t[j]=t[j+1];
                t[j+1]=x;
            }
            
        }
    }
 
    return 0;
}
 
int sorttar (struct Abonent *arr)
{
    int i=0, j=0;
    struct Abonent temp;
    for (i=0; i<5; i++)
    {
        for (j=0; j<4; j++)
        {
            if (strcmp(arr[j].tarif, arr [j+1].tarif) >= 0)
            {
                temp=arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=temp;
            }
        }
    }
 
    return 0;
}
 
int save (struct Abonent *arr)
{
    int i=0;
    FILE *f=NULL;
    f=fopen ("D:\Result.txt", "wt");
    if (f==NULL)
    {
        printf ("No file!!!\n");
        exit (0);
    }
    fprintf (f, "Spisok abonentov:\n\n");
    for(i=0;i<5;i++)
    {
        fprintf(f,"%s\t", arr[i].nomer);
        fprintf(f,"%lf\t", arr[i].ostatok);
        fprintf(f,"%s\t", arr[i].tarif);
        fprintf(f,"\n");
    }
    fclose (f);
 
    return 0;
}
 
void main (void)
{
    int n=0, i=0;
L:  printf("1.load\n2.sortorovka po osratky\n3.sortirovka po tarify\n4.save\n5.exit\n");
    printf ("Input number : ");
    scanf ("%d", &n);
    printf ("\n");
 
    switch (n)
    {
    case 1 : load(arr);
             break;
 
    case 2 : sortost (arr);
             break;
 
    case 3 : sorttar (arr);
             break;
 
    case 4 : save (arr);
             break;
 
    case 5 : exit (0);
             break;
    }
    for (i=0;i<5;i++)
    printf("%s %2.2lf %s\n",arr[i].nomer,arr[i].ostatok,arr[i].tarif);
    printf("\n");
    goto L;
    
}
Теперь нужно вместо структуры класс сделать, я Си++ не разбирал ещё, а лабу завтра здать надо. Помогите пожалуйста у кого есть свободных минут 20. )
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
01.02.2012, 00:17     Реализовать класс вместо структуры #2
Цитата Сообщение от fors-dnet Посмотреть сообщение
Си++ не разбирал ещё
за чем же дело стало? надо ж когда-то и начать
AzaKendler
 Аватар для AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
01.02.2012, 00:33     Реализовать класс вместо структуры #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
чтоб не переделывать твое, просто в класс завернуто. попробуй
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
#include <conio.h>
#include <stdio.h>
#include <string>
#include <stdlib.h>
 
class Abonent
{
public:
        char nomer[11];
        double ostatok;
        char tarif[15];
 
int load (Abonent *arr)
{
        int i=0;
        FILE *f=NULL; 
        f=fopen("D:\Input.txt", "rt");
        if (f==NULL)
        {
                printf ("No file!!!\n");
                exit (0);
        }
        
        for(i=0;i<5;i++)
        {
                fscanf(f,"%s", &arr[i].nomer);
                fscanf(f,"%lf", &arr[i].ostatok);
                fscanf(f,"%s", &arr[i].tarif);
        }
        fclose (f);
 
        return 0;
}
 
int sortost (Abonent *t)
{
         Abonent x;
        int i=0, j=0;   
        for(i=0;i<5;i++)
        {
                for(j=0; j<4; j++)
                {
                        if( t[j].ostatok > t[j+1].ostatok )
                        {
                                x=t[j];
                                t[j]=t[j+1];
                                t[j+1]=x;
                        }
                        
                }
        }
 
        return 0;
}
 
int sorttar (Abonent *arr)
{
        int i=0, j=0;
        struct Abonent temp;
        for (i=0; i<5; i++)
        {
                for (j=0; j<4; j++)
                {
                        if (strcmp(arr[j].tarif, arr [j+1].tarif) >= 0)
                        {
                                temp=arr[j];
                                arr[j]=arr[j+1];
                                arr[j+1]=temp;
                        }
                }
        }
 
        return 0;
}
 
int save (Abonent *arr)
{
        int i=0;
        FILE *f=NULL;
        f=fopen ("D:\Result.txt", "wt");
        if (f==NULL)
        {
                printf ("No file!!!\n");
                exit (0);
        }
        fprintf (f, "Spisok abonentov:\n\n");
        for(i=0;i<5;i++)
        {
                fprintf(f,"%s\t", arr[i].nomer);
                fprintf(f,"%lf\t", arr[i].ostatok);
                fprintf(f,"%s\t", arr[i].tarif);
                fprintf(f,"\n");
        }
        fclose (f);
 
        return 0;
};
 
 
};
 
 
void main (void)
{
Abonent manager;
 
Abonent arr [5];
 
        int n=0, i=0;
L:      printf("1.load\n2.sortorovka po osratky\n3.sortirovka po tarify\n4.save\n5.exit\n");
        printf ("Input number : ");
        scanf ("%d", &n);
        printf ("\n");
 
        switch (n)
        {
        case 1 :  manager.load(arr);
                         break;
 
        case 2 :  manager.sortost (arr);
                     break;
 
        case 3 : manager.sorttar (arr);
                     break;
 
        case 4 :  manager.save (arr);
                     break;
 
        case 5 : exit (0);
                     break;
        }
        for (i=0;i<5;i++)
    printf("%s %2.2lf %s\n",arr[i].nomer,arr[i].ostatok,arr[i].tarif);
        printf("\n");
        goto L;
        
}
stawerfar
 Аватар для stawerfar
140 / 54 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
01.02.2012, 00:44     Реализовать класс вместо структуры #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
#include<iostream>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
 
class Abonent
{
private:   
        char nomer[11];
        double ostatok;
        char tarif[15];
public:
    int load (Abonent *arr);
    int sortost (Abonent *t);
    int sorttar ( Abonent *arr);
    int save ( Abonent *arr);
    void get(void);
 
 
}arr [5];
 int Abonent:: load (Abonent *arr)
 {
        int i=0;
        FILE *f=NULL; 
        f=fopen("D:\Input.txt", "rt");
        if (f==NULL)
        {
                std::cout<< "No file!!!\n";
                exit (0);
        }
        
        for(i=0;i<5;i++)
        {
               //найди аналог на С++ для fscanf(f,"%s", &arr[i].nomer);
                // я ещё пока не знаю как писать из файла в с++
                fscanf(f,"%s", &arr[i].nomer);
                fscanf(f,"%lf", &arr[i].ostatok);
                fscanf(f,"%s", &arr[i].tarif);
        }
        fclose (f);
 
        return 0;
 }
 
 
 
 int Abonent:: sortost (class Abonent *t)
 {
        class Abonent x;
        int i=0, j=0;   
        for(i=0;i<5;i++)
        {
                for(j=0; j<4; j++)
                {
                        if( t[j].ostatok > t[j+1].ostatok )
                        {
                                x=t[j];
                                t[j]=t[j+1];
                                t[j+1]=x;
                        }
                        
                }
        }
 
        return 0;   
 }
 int Abonent:: sorttar (class Abonent *arr)
 {
        int i=0;
        FILE *f=NULL; 
        f=fopen("D:\Input.txt", "rt");
        if (f==NULL)
        {
                printf ("No file!!!\n");
                exit (0);
        }
        
        for(i=0;i<5;i++)
        {
                fscanf(f,"%s", &arr[i].nomer);
                fscanf(f,"%lf", &arr[i].ostatok);
                fscanf(f,"%s", &arr[i].tarif);
        }
        fclose (f);
 
        return 0;
 }
 
int Abonent:: save (class Abonent *arr)
{
        int i=0;
        FILE *f=NULL;
        f=fopen ("D:\Result.txt", "wt");
        if (f==NULL)
        {
                std::cout<<"No file!!!\n";
                exit (0);
        }
      //я не знаю оналога для  fprintf (f, "Spisok abonentov:\n\n");
        fprintf (f, "Spisok abonentov:\n\n");
        for(i=0;i<5;i++)
        {
                //я не знаю оналога для fprintf(f,"%s\t", arr[i].nomer);
                fprintf(f,"%s\t", arr[i].nomer);
                fprintf(f,"%lf\t", arr[i].ostatok);
                fprintf(f,"%s\t", arr[i].tarif);
                fprintf(f,"\n");
        }
        fclose (f);
 
        return 0;
}
 void Abonent:: get(void)
 {
        int n=0, i=0;
      while(1)
      {
        std::cout<<"1.load\n2.sortorovka po osratky\n3.sortirovka po tarify\n4.save\n5.exit\n";
        std::cout<<"Input number : ";
        std::cin>>n;
        std::cout<<std::endl;
 
        switch (n)
        {
        case 1 : load(arr);
                         break;
 
        case 2 : sortost (arr);
                     break;
 
        case 3 : sorttar (arr);
                     break;
 
        case 4 : save (arr);
                     break;
 
        case 5 : exit (0);
                     break;
        }
        for (i=0;i<5;i++)
        std::cout<<arr[i].nomer<<arr[i].ostatok<<arr[i].tarif<<std::endl;
     } 
 }
void main (void)
{
    class Abonent Abonent_val;
    Abonent_val.get();
       system("pause");
 
}
вот только как из файла закачивать значения в переменные я не знаю.
В C++ анологи scanf and printf это cin and cout.
Код рабочий тебе только надо в двух местах заменить я там коменты оставил.
А вобще часто программисты используют смешаный стиль, по этому можно и так оставить решай сам.
fors-dnet
 Аватар для fors-dnet
3 / 3 / 0
Регистрация: 11.12.2011
Сообщений: 88
01.02.2012, 20:15  [ТС]     Реализовать класс вместо структуры #5
AzaKendler,
stawerfar, Cпасибо большое за помощь.
Особенное спасибо
stawerfar, всё расписал дельно, приятно что есть добрые люди.
ValeryS
Модератор
6374 / 4840 / 441
Регистрация: 14.02.2011
Сообщений: 16,040
01.02.2012, 20:29     Реализовать класс вместо структуры #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
структура в С++ это тот же класс
стой лишь разницей что в структуре все члены по умолчанию открытые(public)
а в классе закрытые (privat)
C++
1
2
3
4
5
6
class My
{
public:
 int a1;
 int a2;
};
и
C++
1
2
3
4
5
6
struct My
{
//public: Это не обязательно в структуре по умолчанию 
 int a1;
 int a2;
};
Эквивалентны
т.е в своей программе напиши class вместо struct и добавь public
но скорее всего тебя просят описать методы класса
например для доступа к первой переменной
C++
1
2
3
4
5
6
7
8
9
class My
{
public:
 void SetA1(int a){a1=a};//записать значение
 int GetA1(){return a1};// прочитать значения
privat:                       // теперь к членам класса снаружи доступа нет
int a1;
 int a2;
};
Yandex
Объявления
01.02.2012, 20:29     Реализовать класс вместо структуры
Ответ Создать тему
Опции темы

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