Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 26.03.2009
Сообщений: 10

Структуры заменить на классы

20.05.2009, 10:01. Показов 2713. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дана программа, выдающая список дамской обуви и ассортимент обуви нужного артикула. Сведения берутся из файла "READ.DAT"

Код программы:
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
#include<fstream.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
 
typedef char* pchar;
 
struct Shoose 
{
        char artikul[5]; 
        char name[11];   
        int number;      
        float price;  
};
 
int main()
{
const int max_records = 4; //Максимальное количество записей
Shoose sh[max_records];    //Массив структур - записей
ofstream out_f;            //Поток out_f типа потока ввода в файл
ifstream in_f;             //Поток in_f типа потока чтения из файла
pchar name_f = "D:\\READ.DAT";
 
//Промежуточные переменные для записи в файл вводимой с клавиатуры информации
char artikul[5], name[11]; 
int number, i, fl;        
float price;
 
clrscr();
//Открываем файл READ.DAT для ввода информации
in_f.open(name_f);
if (in_f.fail()) //проверяем нет ли ошибки открытия
   {cout << "Ошибка записи! \n"; exit(1);}
else cout << "Открытие файла: Файл открыт! \n\n";
//Читаем файл и заполняем массив объектов структуры Shoose
for (i=0; i<max_records; ++i)
   in_f>>sh[i].artikul>>sh[i].name
       >>sh[i].number>>sh[i].price;
//Закрываем файл READ.DAT для вывода информации
in_f.close();
//Список дамской обуви
cout<< "Список дамской обуви: \n";
for (i=0; i<max_records; ++i)
  {
  if(sh[1].artikul[0]=='w' || sh[i].artikul[0]=='W')
     cout<<sh[i].name<<" - "<<sh[i].number
     <<" пар(ы) по цене "<<sh[i].price<<" руб.\n";
  }
 
//список обуви определенного артикула
cout<<"Введите интересующий вас артикул: ";
cin>>artikul;
for (i=0; i<max_records; ++i)
  {
  if (!strncmp(sh[i].artikul, artikul, 4))
    cout<<sh[i].name<<" -- "<<sh[i].number
    <<" пар(ы) по цене "<<sh[i].price<<"руб.\n";
  }
  return 0;
}
Вот сам файл READ:
Code
1
2
3
4
W111 Сапоги 12 2000
M112 Ботинки 13 1500
W113 Туфли 14 500
C114 Сандали 15 400
Нужно переделать данную программу: разбить ее на функции, заменить СТРУКТУРЫ КЛАССАМИ, сделать конструктор..
Вот собственно начало:
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
#include<fstream.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
 
typedef char* pchar;
 
class Shoose 
{
   private:
        char artikul[5]; 
        char name[11];
        int number;      
        float price;
   public:
        Shoose();
                
};
 
Shoose::Shoose()
   {
   number=0;
   price=0;
   artikul[0]='\0';
   name[0]='\0';
   }
Был бы очень признателен за помощь!)))
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.05.2009, 10:01
Ответы с готовыми решениями:

классы и структуры
различие между классами и структурами заключается только в доступе по-умолчанию к элементам: public в структурах и private в классах ...

Классы vs Структуры
Часто сталкиваюсь в этой ветке форума с вопросами по структурам и на порядок реже -- с вопросами по классам. Я так понимаю, что это связано...

Классы и структуры в С++
Здравствуйте,помогите пожалуйста сделать задание - &quot;Дана вещественная матрица m*n.Найти 2 суммы:наибольших значений элементов ее...

9
 Аватар для RazorQ
591 / 357 / 16
Регистрация: 06.02.2009
Сообщений: 1,386
20.05.2009, 10:18
Вот класс
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
class Shoose 
{
      private:
            char artikul[5]; 
            char name[11];   
            int number;      
            float price;  
    public:
           Shoose(); // конструктор по умолчанию
           char *getartikul(){return artikul;} // функции для возврата значений
           char *getname(){return name;}
           int getnumber(){return number;}
           float getprice(){return price;}
           void setartikul(char art[]){       // функции для установки значений
                for(int i=0; i<5; i++)
                   artikul[i] = art[i];
                   } 
           void setname(char nm[]){
                for(int i=0; i<5; i++)
                   name[i] = nm[i];
                   }
           void setnumber(int num){number = num;}
           void setprice(float pr){price = pr;}
           
};
0
0 / 0 / 0
Регистрация: 26.03.2009
Сообщений: 10
20.05.2009, 21:44  [ТС]
RazorQ, спасибо) дополнил код программы, теперь она выглядит так:

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
#include<fstream.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
 
typedef char* pchar;
 
class Shoose
{
    private:
            char artikul[5]; 
            char name[11];   
            int number;      
            float price;  
    public:
            Shoose(); // конструктор по умолчанию
            char *getartikul(){return artikul;} // функции для возврата значений
            char *getname(){return name;}
            int getnumber(){return number;}
            float getprice(){return price;}
            void setartikul(char art[]){       // функции для установки значений
                    for(int i=0; i<5; i++)
                      artikul[i] = art[i];
                                       } 
            void setname(char nm[]){
                    for(int i=0; i<5; i++)
                      name[i] = nm[i];
                                   }
            void setnumber(int num){number = num;}
            void setprice(float pr){price = pr;}
                   
};
   
int main()
{
const int max_records = 4; //Максимальное количество записей
Shoose sh[max_records];    //Массив структур - записей
ofstream out_f;            //Поток out_f типа потока ввода в файл
ifstream in_f;             //Поток in_f типа потока чтения из файла
pchar name_f = "D:\\output\\READ.DAT";
 
//Промежуточные переменные для записи в файл вводимой с клавиатуры информации
char art[5], nm[11]; 
int num, i, fl;        
float pr;
 
clrscr();
//Открываем полученный файл READ.DAT для ввода информации
in_f.open(name_f);
if (in_f.fail()) //проверяем нет ли ошибки открытия
   {cout << "Ошибка записи! \n"; exit(1);}
else cout << "Открытие файла: Файл открыт! \n\n";
//Читаем файл и заполняем массив объектов структуры Shoose
for (i=0; i<max_records; ++i)
   in_f>>sh[i].art>>sh[i].nm
       >>sh[i].num>>sh[i].pr;
//Закрываем файл READ.DAT для вывода информации
in_f.close();
//Список дамской обуви
cout<< "Список дамской обуви: \n";
for (i=0; i<max_records; ++i)
  {
  if(sh[1].art[0]=='w' || sh[i].art[0]=='W')
     cout<<sh[i].nm<<" - "<<sh[i].num
     <<" пар(ы) по цене "<<sh[i].pr<<" руб.\n";
  }
 
//список обуви определенного артикула
cout<<"Введите интересующий вас артикул: ";
cin>>art;
for (i=0; i<max_records; ++i)
  {
  if (!strncmp(sh[i].art, art, 4))
    cout<<sh[i].nm<<" -- "<<sh[i].num
    <<" пар(ы) по цене "<<sh[i].pr<<"руб.\n";
  }
  return 0;
}
но компилятор выдает ошибку..
Function containing for are not expanded inline
0
инженер-системотехник
 Аватар для Haster
111 / 111 / 5
Регистрация: 10.03.2009
Сообщений: 533
20.05.2009, 22:18
Косяки в строках 56-57,64-66, 74-76.
ННапример в строках 56-57,
C++
1
2
3
for (i=0; i<max_records; ++i)
   in_f>>sh[i].art>>sh[i].nm
       >>sh[i].num>>sh[i].pr;
в классе у тебя нет членов art, nm, num, а есть только artikul, name, number.
Но даже при исправлении работать не будет, т.к. эти члены закрытые, и к ним нужно обращаться с помощью методов класса, а не на прямую
0
47 / 47 / 3
Регистрация: 07.01.2009
Сообщений: 297
20.05.2009, 22:22
Ошибка такая,что не может компилятор функцию сделать in-line.
Возможно,эти функции нельзя сделать in-line,описывайте их в cpp:
void setartikul(char art[]){ // функции для установки значений
for(int i=0; i<5; i++)
artikul[i] = art[i];
}
void setname(char nm[]){
for(int i=0; i<5; i++)
name[i] = nm[i];
Заодно проверьте и напишите, в какой строчке ошибка,чтобы не гадать.
1
0 / 0 / 0
Регистрация: 26.03.2009
Сообщений: 10
20.05.2009, 23:04  [ТС]
Переписал..
Ошибка "Function containing for are not expanded inline" выходит на той же строке что и выходила, на 23.
0
47 / 47 / 3
Регистрация: 07.01.2009
Сообщений: 297
20.05.2009, 23:18
Такой ошибки у меня нет(скомпилировал Вашу программу). Уменя только ошибки, про которые говорил Haster. откуда вы взяли члены art, nm, num?

Нужно писать фукнции get к каждому члену. Короче, не буду дублировать сообщение Haster, все у него написано.
1
 Аватар для RazorQ
591 / 357 / 16
Регистрация: 06.02.2009
Сообщений: 1,386
21.05.2009, 08:42
Структура - не класс. Я же написал функции доступа, вот через них и задавай значения или считывай. Тут в целом программу можно переписать
0
17 / 17 / 7
Регистрация: 06.05.2009
Сообщений: 115
21.05.2009, 08:47
Но если не хочешь чере функции обращаться к закрытам членам класса, то объяви
C++
1
2
3
4
            char artikul[5]; 
            char name[11];   
            int number;      
            float price;
после public:
1
0 / 0 / 0
Регистрация: 26.03.2009
Сообщений: 10
21.05.2009, 09:55  [ТС]
Всем спасибо, разобрался!)))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.05.2009, 09:55
Помогаю со студенческими работами здесь

Классы и структуры...
Здраствуйте. Прошу помочь вот с такой вещью. У меня есть структура(SPI) в классе(NOTE). Подскажите пожалуйста каким образом мне можно...

переделать структуры в классы
Найти корни квадратного трехчлена с заданными комплексными коэффициентами. Для моделирования комплексных чисел объявите класс. ...

Структуры и функции (КЛАССЫ)
1. Создать структуру, которая описывает указанную в задании сущность. 2. Написать функции, которые служат для обработки данных,...

тема структуры(классы)
Выдает такую ошибку что в этой строке if (stricmp(a.adress,&quot;exit&quot;)==0) invalid conversation from char to const char Заранее огромное...

Классы / Структуры и русский язык
Вобщем у меня такой баг вылазиет незнаю как побороть... Подскажите в чём грабли, и как решить. Если создаю массив обьектов то начиная...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru