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

Класс Телефонная Книга - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
EruRorato
 Аватар для EruRorato
0 / 0 / 0
Регистрация: 09.03.2013
Сообщений: 22
26.07.2013, 23:58     Класс Телефонная Книга #1
Доброго времени суток форумчане!
Получил следующее задание, но столкнулся с проблемой..
1) опишите класс "контакт", описывающий имя, номер телефона, примечание
2) опишите класс "Телефонная Книга", содержащий определенное количество контактов(как я понял, создать массив класса "контакт"). Определить методы добавления/удаления человека, а так же поиск по имени или примечанию.
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
class Contact
{
    float num;      //номер
    char name[50]; //имя
    char imp[50]; //примечание
    friend class TelBook;
public:
    Contact()
    {
        num=0;
        name[0]='\0';
        imp[0]='\0';
    }
};
 
class TelBook
{
    int num;
    Contact a;
public:
    void Input()
    {
        printf("\nEnter name: ");
        scanf("%s",&a.name);
        printf("\nEnter phone number: ");
        scanf("%f",&a.num);
        printf("\nEnter notice about contact: ");
        scanf("%s",&a.imp);
    }
    void Output()
    {
        if(a.name[0]=='\0')
        {
            printf("\nError!Contact not found!\n");
        }
        else
        {
            printf("\n%s\t%3.0f\t%s\n",a.name,a.num,a.imp);
        }
    }
    void Del(TelBook b[],int &n)
    {
        printf("enter the number of contact you want to delete:");
        scanf("%d",&num);
        for (int i=num;i<3;i++)
        {
            b[i]=b[i+1];
        }
        n--;
    }
};
.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
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <iostream>
#include <stdlib.h>
#include "Class.h"
#include <string.h>
void main (void)
{
    z=3;
    TelBook b[15];
    for (int n=0;n<3;n++)
    {
    b[n].Input();
    }
    for (int n=0;n<3;n++)
    {
    printf("Contact %d:\t",n);
    b[n].Output();
    }
    
    getch();
}
Я написал функции ввода и вывода контактов на экран(пока ограничился 3мя контактами, но планирую заменить 3 в циклах ввода и вывода на переменную z, которая будет вводиться с клавиатуры), но с удалением и поиском возникли проблемы. Прошу вашей помощи, программисты!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.07.2013, 23:58     Класс Телефонная Книга
Посмотрите здесь:

Работа с файлами. Телефонная книга C++
Телефонная книга C++
Написал класс "Телефонная книга". Но при работе вылетает ошибка. помогите разобраться. C++
C++ Работа с файлами: телефонная книга
Телефонная книга: просмотр, поиск, добавление записей C++
Не обращается к функции из класса. Проект телефонная книга C++
Телефонная книга сортировка пузырьком C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
VLK
 Аватар для VLK
192 / 161 / 12
Регистрация: 05.05.2013
Сообщений: 1,220
27.07.2013, 00:23     Класс Телефонная Книга #2
Ты не знаешь как организовать поиск? или ты хочешь что бы тебе его написали?
nonedark2008
755 / 513 / 95
Регистрация: 28.07.2012
Сообщений: 1,376
27.07.2013, 00:24     Класс Телефонная Книга #3
EruRorato, такая задача или подобные проскакивали уже сотни раз на этом форуме. Воспользуйся поиском, поищи хорошее решение задачи, поизучай его.
EruRorato
 Аватар для EruRorato
0 / 0 / 0
Регистрация: 09.03.2013
Сообщений: 22
27.07.2013, 00:37  [ТС]     Класс Телефонная Книга #4
Я не имею представления о том, как вести поиск по элементам класса и был бы благодарен, если бы его написали)

Добавлено через 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
class Contact
{
    float num;      //номер
    char name[50]; //имя
    char imp[50]; //примечание
    friend class TelBook;
public:
    Contact()
    {
        num=0;
        name[0]='\0';
        imp[0]='\0';
    }
        void Input()
    {
        printf("\nEnter name: ");
        scanf("%s",&name);
        printf("\nEnter phone number: ");
        scanf("%f",&num);
        printf("\nEnter tag of contact: ");
        scanf("%s",&imp);
    }
        void Output()
    {
        if(name[0]=='\0')
        {
            printf("\nError!Contact not found!\n");
        }
        else
        {
            printf("\n%s\t%3.0f\t%s\n",name,num,imp);
        }
    }
};
class TelBook
{
    int q;
    Contact *a;
public:
TelBook(int q1)
{
    q=q1;
    a=new Contact[q];
}
void InputT()
{ 
for(int i=0;i<q;i++)
a[i].Input(); 
}
void OutputT()
{ 
    printf("Entered contacts: \n");
for(int i=0;i<q;i++)
a[i].Output(); 
}
void AddContact()
{ int q1=q+1;
printf("Contact number %d will be added now. Enter data for this contact:\n",q1);
a[q].Input(); 
q++;
}
void DelContact(int j)
{ 
printf("Contact number %d deleted\n",j);
j=j-1;
for(int i=j;i<q;i++)
a[i]=a[i+1];
q--;
}
 
};
};
.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
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <iostream>
#include <stdlib.h>
#include "Class.h"
#include <string.h>
void main (void)
{
//Contact a;
//a.Input();
//a.Output();
printf("Input and Output\n");
TelBook a(3);
a.InputT();
a.OutputT();
a.AddContact();
a.OutputT();
int sc;
printf("Enter the number of contact for delete: ");
scanf("%d",&sc);
a.DelContact(sc);
a.OutputT();
getch();
}
alsav22
5284 / 4803 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.07.2013, 00:41     Класс Телефонная Книга #5
Как-то так... Не компилировал, но идея должна быть понятна:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void Find(TelBook b[], int n)
{
        printf("Enter the name: ");
        char name[50];
        scanf("%s", name);
        int flag = 0;
        for (int i = 0; i < n; i++)
        {
            if (!strcmp(b[i].name, name)
            {
                printf("%s", b[i].name);
                flag = 1;
            }
        }
        if (!flag) printf("Not found!");
}
EruRorato
 Аватар для EruRorato
0 / 0 / 0
Регистрация: 09.03.2013
Сообщений: 22
27.07.2013, 00:42  [ТС]     Класс Телефонная Книга #6
+Я добавил удаление элемента в своем посте выше
VLK
 Аватар для VLK
192 / 161 / 12
Регистрация: 05.05.2013
Сообщений: 1,220
27.07.2013, 00:43     Класс Телефонная Книга #7
Писать конечно не напишу, ночь уже, бошка не особо варит, короче в main создаешь массив в котором будут введенные данные для поиска

char search[50]
std::cin >> search;

потом в классе TelBook делаешь еще одну функцию, поиск, которая получает как раз этот массив (search)

и в этой функции она осуществляет поиск по списку

if (name == search)
{...}



Вообще вот, хорошая статья, про связанные списки и поиск по ним, почитай, там и программа написана - http://iguania.ru/stati-po-programmi...iy-spisok.html

мне очень когда то помогла эта статья.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.07.2013, 01:05     Класс Телефонная Книга
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
EruRorato
 Аватар для EruRorato
0 / 0 / 0
Регистрация: 09.03.2013
Сообщений: 22
27.07.2013, 01:05  [ТС]     Класс Телефонная Книга #8
Цитата Сообщение от alsav22 Посмотреть сообщение
Как-то так... Не компилировал, но идея должна быть понятна:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void Find(TelBook b[], int n)
{
        printf("Enter the name: ");
        char name[50];
        scanf("%s", name);
        int flag = 0;
        for (int i = 0; i < n; i++)
        {
            if (!strcmp(b[i].name, name)
            {
                printf("%s", b[i].name);
                flag = 1;
            }
        }
        if (!flag) printf("Not found!");
}
Очень помогло, спасибо! Поправил ваш код и все отлично работает! Итоговый вариант выложу позже в этой теме
Yandex
Объявления
27.07.2013, 01:05     Класс Телефонная Книга
Ответ Создать тему
Опции темы

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