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

Не обращается к функции из класса. Проект телефонная книга - C++

Восстановить пароль Регистрация
 
Strangerr
 Аватар для Strangerr
0 / 0 / 0
Регистрация: 13.10.2013
Сообщений: 8
13.10.2013, 10:37     Не обращается к функции из класса. Проект телефонная книга #1
Здравствуйте! Прошу помощи так как проект нужно сдавать уже на днях
В данном проекте функции уже написаны, но существует следующая проблема: когда пытаешься нажать case 3, то ничего не происходит, т.е. программа работает, но не обращается к функции из класса, а поэтому не выводит каталог телефонной книги. Не знаю, что с этим делать, пожалуйста помогите! Заранее спасибо!

Вот код:

main.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
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
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
#include<iostream>;
#include <fstream>
#include <iomanip>
using namespace std;
#include "classs.h"
 
int main()
    {
        setlocale(LC_ALL, "Russian");//для русского языка
        int phone=0;
        char name[20];
        char comments[50];
        char catalog[50];//сама телефонная книга
 
        int i=0;
        int number=0;
        int numb_row=0;
        int choice=0;
        do
        {
            cout<<"*****Phone Book*****"<<endl;
            cout<<"1) Add New Record"<<endl;
            cout<<"2) Display a Record"<<endl;
            cout<<"3) Display all Records"<<endl;
            cout<<"4) Change the number of the row"<<endl;
            cout<<"5) Exit"<<endl;
            cout<<"Choose your choice : ";
            cin>>choice;
            switch(choice){
                case 1:
                        {
                        cout<<"Set information: "<<endl;
                        int telephone;
                        telephone=phonebook_card::add_element(name, phone, comments);
                        phonebook_card card(name,telephone,comments, &catalog[i],1);//добавляем строку в каталог 
                        card.showMessage();//выводим на экран
                        i++;
                        }
                        break;
                case 2:
                        cout<<"Put the number of the row you want to see: "<<endl;
                        cin>>numb_row;
                        //здесь будет обращение к строке из каталога
                        break;
                case 3:
                        cout<<"Your Phone Book: "<<endl;
                        phonebook_card show_card();//НЕ обращается к функции    
                            break;
                case 4:
                        cout<<"What number do you want to change?"<<endl;
                        cin>>number;
                        phonebook_card::change_number_of_row(number);//выводим ошибку за неимением прав для изменение строки
                        break;
                case 5:
                        exit(0);
        }
            system("pause");
            system("cls");//очистка экрана
    }
        while(choice != 0);
        return 0;
}
 
 
 
 
 
//class.h
class phonebook
{
    char name[20];
    int phone;
    char comments[50];
public:
    phonebook(char*, int, char*);//конструктор
    //~phonebook();//деструктор
    void showMessage(void); 
};
 
 
phonebook :: phonebook(char* name, int phone, char* comments)//конструктор объектов класса phonebook
{
    strcpy(phonebook::name,name);
    phonebook:: phone=phone;
    strcpy(phonebook::comments, comments);
}
 
/*phonebook::~phonebook()
{
    cout<<"Деструктор класса phonebook"<<endl;
}*/
 
 
void phonebook::showMessage(void)
{
    cout<<"Имя: "<<name<<endl;
    cout<<"Телефон: "<<phone<<endl;
    cout<<"Комментарии: "<<comments<<endl;
}
 
 
class phonebook_card : public phonebook//наследование 
{
    int checked_out;
    char catalog[50];
public:
    int i;
    phonebook_card(char*, int, char*, char*, int);//конструктор 
    //~phonebook_card();//Деструктор
    void show_card(void);
    static void change_number_of_row(int);
    static int add_element(char*, int, char*);
};
 
phonebook_card: : phonebook_card(char* name, int phone, char* comments, char* catalog, int checked_out)
    : phonebook(name, phone, comments)//конструктор объектов класса phonebook_card вызывает конструктор phonebook для инициализации элементов класса phonebook
{
    strcpy(phonebook_card::catalog, catalog);
    phonebook_card::checked_out=checked_out;
    catalog[i]=(name +" "+phone+" "+comments);
}
 
/*phonebook_card::~phonebook_card()
{
    cout<<endl<<"Деструктор класса phonebook_card"<<endl;
}*/
 
void phonebook_card::show_card(void)//весь каталог показываем
{
    showMessage();//функция-элемент класса phonebook 
    cout<<"Каталог: "<<catalog<<endl;
    if(checked_out)cout<<"Статус: занята"<<endl;
    else cout<<"Статус: свободна"<<endl;
}
 
void phonebook_card::change_number_of_row(int a)//a - номер строки, сама функция доступна для использования пользователем, но вывод ошибки, за неимением прав!
{
            cout<<"Error! You don't have rights for it!"<<endl;
}
 
int phonebook_card::add_element(char* name, int phone, char* comments)//добавляем элементы в строку
{
            int j=0;
            int rest=0;
            int i;
            cout<<"Put full name: ";
            cin>>name;
            do
            {
                i=0;
                cout<<"Put phone number (only 7 numbers!!): ";
                cin>>phone;
 
                int phone2=phone;
                while(phone2>0)//считаем количество цифр в phone
            {
                phone2/=10;
                i++;
            }
 
                if(i<7 || i>7)
                {
                    cout<<"Incorrect phone number!"<<endl;
                    j=1;
                }
                else if(i==7)
                {
                    j=2;
                }
            }
            while(j != 2);
            cout<<"Put comments: ";
            cin>>comments;
            cout<<endl;
 
            return phone;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.10.2013, 10:37     Не обращается к функции из класса. Проект телефонная книга
Посмотрите здесь:

C++: работа с файлами. Телефонная книга. C++
Телефонная книга C++
C++ Работа с файлами: телефонная книга
Телефонная книга: просмотр, поиск, добавление записей. C++
Класс Телефонная Книга C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.10.2013, 11:02     Не обращается к функции из класса. Проект телефонная книга #2
Цитата Сообщение от Strangerr Посмотреть сообщение
но не обращается к функции из класса
Вот это не вызов функции:
C++
1
phonebook_card show_card();
Добавлено через 3 минуты
Вот это - непонятно что:
C++
1
catalog[i] = (name + " " + phone + " " + comments);
Strangerr
 Аватар для Strangerr
0 / 0 / 0
Регистрация: 13.10.2013
Сообщений: 8
13.10.2013, 11:26  [ТС]     Не обращается к функции из класса. Проект телефонная книга #3
"Вот это не вызов функции:"
Код C++
1. phonebook_card show_card();


Да уже поняла, что не сказала к какой конкретно обращаться...

Код C++
1. catalog[i] = (name + " " + phone + " " + comments);


Исправлено на
C++
1
2
3
4
void phonebook::showMessage(void)
{
    cout<<"Ваша запись:"<<dataStr<<endl;
}
, где
C++
1
2
3
4
5
6
7
8
phonebook::phonebook(char* name, int phone, char* comments, char* dest)//конструктор объектов класса phonebook
{
    strcpy(dest, name);
    char phoneStr[10];
    itoa(phone, phoneStr, 10);
    strcat(dest, phoneStr);
    strcat(dest, comments);
}

Ну и:
C++
1
2
3
4
5
6
7
phonebook_card::phonebook_card(char* name, int phone, char* comments, char* catalog, int checked_out)
    :phonebook(name, phone, comments, dataStr)
{
    strcpy(phonebook_card::catalog, catalog);
    phonebook_card::checked_out=checked_out;
    strcat(catalog, dataStr);
}
То есть в строчку вложена вся информация, которую ввел пользователь за один раз и это записывается в каталог.

Что то я торможу к какой функции обратиться в phonebook_card show_card();.....?

Добавлено через 55 секунд
Извиняюсь за смайлики(

Добавлено через 7 минут
И есть ли возможность вывода каталога в данном случае построчно (то есть вывод определенной записи)?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.10.2013, 11:37     Не обращается к функции из класса. Проект телефонная книга #4
Когда код выкладываете, то заключайте его в теги С++ (выделить и нажать кнопку С++ (вверху-слева)).
Strangerr
 Аватар для Strangerr
0 / 0 / 0
Регистрация: 13.10.2013
Сообщений: 8
13.10.2013, 12:13  [ТС]     Не обращается к функции из класса. Проект телефонная книга #5
Спасибо
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void phonebook::showMessage(void)
{
cout<<"Ваша запись:"<<dataStr<<endl;
}
 
phonebook:honebook(char* name, int phone, char* comments, char* dest)//конструктор объектов класса phonebook
{
strcpy(dest, name);
char phoneStr[10];
itoa(phone, phoneStr, 10);
strcat(dest, phoneStr);
strcat(dest, comments);
}
 
phonebook_card:honebook_card(char* name, int phone, char* comments, char* catalog, int checked_out)
honebook(name, phone, comments, dataStr)
{
strcpy(phonebook_card::catalog, catalog);
phonebook_card::checked_out=checked_out;
strcat(catalog, dataStr);
}
Добавлено через 2 минуты
разумеется везде phoonebook

Добавлено через 30 минут
Как разрешить оставшиеся проблемы?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.10.2013, 12:30     Не обращается к функции из класса. Проект телефонная книга #6
Цитата Сообщение от Strangerr Посмотреть сообщение
Как разрешить оставшиеся проблемы?
Для этого их надо узнать, и увидеть отформатированный код, в котором они есть.
Strangerr
 Аватар для Strangerr
0 / 0 / 0
Регистрация: 13.10.2013
Сообщений: 8
13.10.2013, 12:37  [ТС]     Не обращается к функции из класса. Проект телефонная книга #7
Код:

Class.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
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
class phonebook
{
    char name[20];
    int phone;
    char comments[50];
public:
    char dataStr[150];
    phonebook(char*, int, char*, char*);//конструктор
    //~phonebook();//деструктор
    void showMessage(void); 
};
 
 
phonebook::phonebook(char* name, int phone, char* comments, char* dest)//конструктор объектов класса phonebook
{
    strcpy(dest, name);
    char phoneStr[10];
    itoa(phone, phoneStr, 10);
    strcat(dest, phoneStr);
    strcat(dest, comments);
}
 
/*phonebook::~phonebook()
{
    cout<<"Деструктор класса phonebook"<<endl;
}*/
 
 
void phonebook::showMessage(void)
{
    cout<<"Ваша запись:"<<dataStr<<endl;
}
 
 
class phonebook_card : public phonebook//наследование 
{
    int checked_out;
    char catalog[50];
public:
    int i;
    phonebook_card(char*, int, char*, char*, int);//конструктор 
    //~phonebook_card();//Деструктор
    void show_card(void);
    static void change_number_of_row(int);
    static int add_element(char*, int, char*);
};
 
phonebook_card::phonebook_card(char* name, int phone, char* comments, char* catalog, int checked_out)
    :phonebook(name, phone, comments, dataStr)//конструктор объектов класса phonebook_card вызывает конструктор phonebook для инициализации элементов класса phonebook
{
    strcpy(phonebook_card::catalog, catalog);
    phonebook_card::checked_out=checked_out;
    strcat(catalog, dataStr);
}
 
/*phonebook_card::~phonebook_card()
{
    cout<<endl<<"Деструктор класса phonebook_card"<<endl;
}*/
 
void phonebook_card::show_card(void)//весь каталог показываю
{
    showMessage();//функция-элемент класса phonebook 
    cout<<"Каталог: "<<catalog<<endl;
    if(checked_out)cout<<"Статус: занята"<<endl;
    else cout<<"Статус: свободна"<<endl;
}
 
void phonebook_card::change_number_of_row(int a)//a - номер строки, сама функция доступна для исользования пользователем, но вывод ошибки, за неимением прав!
{
            cout<<"Error! You don't have rights for it!"<<endl;
}
 
int phonebook_card::add_element(char* name, int phone, char* comments)//добавляем эллементы в строку
{
            int j=0;
            int rest=0;
            int i;
            cout<<"Put full name: ";
            cin>>name;
            do
            {
                i=0;
                cout<<"Put phone number (only 7 numbers!!): ";
                cin>>phone;
 
                int phone2=phone;
                while(phone2>0)//считаем колличество цифр в phone
            {
                phone2/=10;
                i++;
            }
 
                if(i<7 || i>7)
                {
                    cout<<"Incorrect phone number!"<<endl;
                    j=1;
                }
                else if(i==7)
                {
                    j=2;
                }
            }
            while(j != 2);
            cout<<"Put comments: ";
            cin>>comments;
            cout<<endl;
 
            return phone;
}
Main.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
#include<iostream>;
#include <fstream>
#include <iomanip>
using namespace std;
#include "classs.h"
 
int main()
    {
 
        setlocale(LC_ALL, "Russian");//для русского языка
        int phone=0;
        char name[20];
        char comments[50];
        char catalog[50];//сама телефонная книга
 
        int i=0;
        int number=0;
        int numb_row=0;
        int choice=0;
 
        do
        {
            cout<<"*****Phone Book*****"<<endl;
            cout<<"1) Add New Record"<<endl;
            cout<<"2) Display a Record"<<endl;
            cout<<"3) Display all Records"<<endl;
            cout<<"4) Change the number of the row"<<endl;
            cout<<"5) Exit"<<endl;
            cout<<"Choose your choice : ";
            cin>>choice;
            switch(choice){
                case 1:
                        {
                        cout<<"Set information: "<<endl;
                        int telephone;
                        telephone=phonebook_card::add_element(name, phone, comments);//отправляем для добавление строки
                        phonebook_card card(name,telephone,comments, &catalog[i],1);//добавляем строку в каталог
                        card.showMessage();//выводим на экран
                        i++;
                        }
                        break;
                case 2:
                        cout<<"Put the number of the row you want to see: "<<endl;//проблема
                        cin>>numb_row;
                        
                        break;
                case 3:
                        cout<<"Your Phone Book: "<<endl;//проблема
                        phonebook_card show_card(.....?);//[B]к какой функции обратиться для вывода [/B]каталога? 
                        break;
                case 4:
                        cout<<"What number do you want to change?"<<endl;
                        cin>>number;
                        phonebook_card::change_number_of_row(number);//выводим ошибку за неимением прав для изменение строки
                        break;
                case 5:
                        exit(0);
        }
            system("pause");
            system("cls");//очистка экрана
    }
        while(choice != 0);
        return 0;
}

Проблемы:

1) Как отобразить все записи в каталоге? (точнее к чему для этого нужно обратиться в)
C++
1
phonebook_card show_card(.....?);
2) Можно ли будет вывести конкретную запись в каталоге?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.10.2013, 13:24     Не обращается к функции из класса. Проект телефонная книга #8
Закоментируйте проблемную строку и попробуйте пункт 1. Посмотрите на результат.
В этом массиве, что должно содержаться?
C++
1
char catalog[50];//сама телефонная книга
Strangerr
 Аватар для Strangerr
0 / 0 / 0
Регистрация: 13.10.2013
Сообщений: 8
13.10.2013, 13:38  [ТС]     Не обращается к функции из класса. Проект телефонная книга #9
Цитата Сообщение от alsav22 Посмотреть сообщение
Закоментируйте проблемную строку и попробуйте пункт 1. Посмотрите на результат.
В этом массиве, что должно содержаться?
C++
1
char catalog[50];//сама телефонная книга

В каталоге содержится непосредственно телефонная книга, то есть все записи по ней.

Я так понимаю закоментировать
C++
1
phonebook_card show_card(.....?);
А смысл? Она же не ругается...Или я не правильно поняла?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.10.2013, 13:58     Не обращается к функции из класса. Проект телефонная книга #10
Цитата Сообщение от Strangerr Посмотреть сообщение
Она же не ругается...
Со знаком вопроса в параметрах? Если не ругается, то так пробуйте, без закоментирования.
Цитата Сообщение от Strangerr Посмотреть сообщение
В каталоге содержится непосредственно телефонная книга, то есть все записи по ней.
Как это может быть, если это массив на 50 символов? Это и есть все записи?
Strangerr
 Аватар для Strangerr
0 / 0 / 0
Регистрация: 13.10.2013
Сообщений: 8
13.10.2013, 14:08  [ТС]     Не обращается к функции из класса. Проект телефонная книга #11
Цитата Сообщение от alsav22 Посмотреть сообщение
Со знаком вопроса в параметрах? Если не ругается, то так пробуйте, без закоментирования.
Просто знак вопроса добавила для форума)

Попробовала, запись добавляется при вводе данных, а когда обращаешься к case 3 ничего нет.


Цитата Сообщение от alsav22 Посмотреть сообщение
Как это может быть, если это массив на 50 символов? Это и есть все записи?
Вначале предполагалось, что i-тому значению каталога добавляем строку, но сейчас при исправлении этот вариант отпадает, поэтому значение каталога увеличим до 500.

Проблема опять же как вызвать каталог уже после записи строки пользователем, то есть case 3.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.10.2013, 14:31     Не обращается к функции из класса. Проект телефонная книга
Еще ссылки по теме:

Телефонная книга сортировка пузырьком C++
C++ Телефонная книга: подскажите алгоритм быстрого поиска контактов
C++ Телефонная книга

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.10.2013, 14:31     Не обращается к функции из класса. Проект телефонная книга #12
Цитата Сообщение от Strangerr Посмотреть сообщение
запись добавляется при вводе данных,
Как выглядит на консоли то, что этот метод выводит (в первом пункте)?
C++
1
card.showMessage();//выводим на экран
Цитата Сообщение от Strangerr Посмотреть сообщение
поэтому значение каталога увеличим до 500.
И что это даёт? Что в этом массиве должно храниться и в каком виде? Строка в 500 символов?

Добавлено через 1 минуту
Цитата Сообщение от Strangerr Посмотреть сообщение
Проблема опять же как вызвать каталог уже после записи строки пользователем, то есть case 3.
Проблем намного больше, чем вам кажется.
Yandex
Объявления
13.10.2013, 14:31     Не обращается к функции из класса. Проект телефонная книга
Ответ Создать тему
Опции темы

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