Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
9 / 9 / 2
Регистрация: 01.05.2009
Сообщений: 127

Использование классов

22.05.2009, 11:40. Показов 2130. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте господа программисты. Помогите мне пожалуста. В Курсовой есть такое задание: "Создать телефонную книгу"
Программный проект представляет собой автоматизированную версию телефонной книги. Структура данных в телефонной книге имеет следующие поля:
• фамилия, имя, отчество абонента;
• адрес абонента;
• год установки телефона;
• номер телефона.
Телефонная книга содержит не более 5000 записей и сохраняется в файле telefon.fam.
Прикладная программа содержит следующие процедуры и функции:
• Добавить (добавляет данные о новом абоненте в телефонную книгу);
• Удалить (удаляет сведения о выбывшем абоненте из телефонной книги);
• НайтиПоИмени (по введенной фамилии, инициалам и адресу ищет и выводит на экран телефон абонента. Если адрес абонента не введен ,и абонентов с указанной фамилией несколько, выводятся сведения обо всех таких абонентах);
• Анализ (провести анализ о количестве установленных телефонов в определенном году);
• Конец (выход из программы).

Ввод данных в программу осуществляется в диалоге по запросам программы. Оператор программы инициирует запуск той или иной процедуры нажатием функциональных клавиш.

Вывод результатов выполнения программы осуществляется согласно описаниям процедур, приведенным выше.

ОШИБКИ
Ошибки ввода при диалоге должны приводить к повторению диалога.
Если при поиске абонент с указанной фамилией не найден, то выдается сообщение "Абонент не найден" и процедура поиска завершается без выхода из программы.
Вот мой код:
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
#include <CyrIOS.h>
#include <conio.h>
 
FILE *f=fopen("c:\\telephon.txt", "w");
class Telephon
{
public:
    Telephon();
    void Dobavit();
    void Ydalit();
    void Naity();
    void Analiz();
private:
    struct FIO
    {
        char surname[50];
        char name[50];
        char second_name[50];
    };
    FIO fio;
    char adress[100];
    int year;
    int number;
};
Telephon tel;
Telephon::Telephon()
{
    year=number=0;
}
void Telephon::Dobavit()
{
    cout<<"Введите фамилию, имя, отчество абонента: "<<endl;
    cin>>tel.fio.surname>>tel.fio.name>>tel.fio.second_name;
    cout<<"Введите адрес абонента: "<<endl;
    cin>>tel.adress;
    cout<<"Введите год установки телефона: "<<endl;
    cin>>tel.year;
    cout<<"Введите номер телефона: "<<endl;
    cin>>tel.number;
    fprintf(f,"%s %s %s\n",tel.fio.surname,tel.fio.name,tel.fio.second_name);
    fprintf(f,"%s\n",tel.adress);
    fprintf(f,"%d\n",tel.year);
    fprintf(f,"%d\n",tel.number);
}
void Telephon::Ydalit()
{
}
void Telephon::Naity()
{
    char surname[50];
    cout<<"Введите фамилию нужного абонента"<<endl;
    cin>>surname;
    while(!feof(f))
    {
        if(surname==tel.fio.surname)
    {
        printf("%s %s %s\n",tel.fio.surname,tel.fio.name,tel.fio.second_name);
        printf("%d\n",tel.number);
    }
    }
}
void Telephon::Analiz()
{ 
    
}
int main()
{
    int control;
    cout<<"================================================================================"<<endl;
    cout<<"================================================================================"<<endl;
    cout<<"                       Programmu razrabotal Metlikin Alexey           \n"<<endl;
    cout<<"                                  Gruppa: NZD-107           \n"<<endl;
    cout<<"================================================================================"<<endl;
    cout<<"================================================================================"<<endl;
    cout<<"Выбирите нужную операцию из меню: "<<endl;
    cout<<"\nMENU:\n1. Добавить абонента\n2. Удалить абонента\n3. Нафти абонента\n4. Анализ\n5. Выход\n"<<endl;
    cin>>control;
    for(;;)
    {
        if(control==1)
            tel.Dobavit();
        if(control==)
            tel.Naity();
        cout<<"Выберите строку из меню"<<endl;
        cin>>control;
        if(control==5)break;
    }
    fclose(f); //закрываем файл
    return 0;
}
Объясните мне пожалуйста, как добавить нового абонента в файл не стирая данных в этом файле и как организовать поиск и удаление из телефонной книги. Функцию поиска я в принципе написал, но после ввода фамилии программа ничего не делает...
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.05.2009, 11:40
Ответы с готовыми решениями:

Множественное наследование, Перегрузка функций, Перегрузка операторов, Использование дружественных функций и классов, Использование шаблонов классов
Здравствуйте!!! Я бы хотел попросить помоч решить...ну или скинуть примеры таких задач, если вдруг у вас они завалялись на компе или...

Использование классов
Не хочет запускаться, помогите найти ошибку #include &lt;iostream&gt; #define N 5 using namespace std; class electronic_store { ...

Использование классов
Разработать заголовочный файл, содержащий описание соответствующего класса, функции и операторы. Описание функций-членов класса разместить...

10
 Аватар для MrAndrey_ka
79 / 79 / 20
Регистрация: 13.05.2009
Сообщений: 537
Записей в блоге: 1
22.05.2009, 12:00
Объясните мне пожалуйста, как добавить нового абонента в файл не стирая данных в этом файле и как организовать поиск и удаление из телефонной книги. Функцию поиска я в принципе написал, но после ввода фамилии программа ничего не делает...
1 как добавить нового абонента в файл не стирая данных в этом файле - никак(придется все переписать), можно создать поле и помечать данные на удаление а при выходе из программы удалять их в файле!
2 не ищет потому что из файла данные не читаются
3 удалеть нужно по каким либо критериям, скорее всего использовать функцию поиска, которая в свою очередь будет возвращать некий указатель на ссылку.

Не работай с каждой отдельной записью, загружай все из файла в память, легче всего в массив, а еще лучше создай класс tellbook в котором будет массив класса tellephon

примерно так:

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
class Telephon
{
public:
        struct FIO
        {
                char surname[50];
                char name[50];
                char second_name[50];
        };
        FIO fio;
        char adress[100];
        int year;
        int number;
};
 
class TelBook
{public:
        TelBook();
        void Dobavit();
        void Ydalit();
        void Naity();
        void Analiz();
        void LoadFile(string name);
        void SaveFile(string name);
        int Length();
private:
Telephon Data[5000];
int len; 
}
продолжать?? или идею понял?
1
9 / 9 / 2
Регистрация: 01.05.2009
Сообщений: 127
22.05.2009, 12:28  [ТС]
я понимаю че в коде написано,но че то не совсем понимаю, как загрузить все из файла в память,и почем у не работать с каждой отдельной записью(так же удобней и понятней)...
0
 Аватар для MrAndrey_ka
79 / 79 / 20
Регистрация: 13.05.2009
Сообщений: 537
Записей в блоге: 1
22.05.2009, 12:36
я понимаю че в коде написано,но че то не совсем понимаю, как загрузить все из файла в память,и почем у не работать с каждой отдельной записью(так же удобней и понятней)...
а еще дольше каждый раз весь файл перелиставать...

Добавлено через 4 минуты 54 секунды
напишу выложу
0
9 / 9 / 2
Регистрация: 01.05.2009
Сообщений: 127
22.05.2009, 12:37  [ТС]
Понятна...Тогда не очень понятна что дальше делать...
0
 Аватар для MrAndrey_ka
79 / 79 / 20
Регистрация: 13.05.2009
Сообщений: 537
Записей в блоге: 1
23.05.2009, 12:55
писал на билдере, так что придется чуть подправить

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
struct Telephon
{
        struct FIO
        {
                char surname[50];
                char name[50];
                char second_name[50];
        };
        FIO fio;
        char adress[100];
        int year;
        int number;
};
 
class TelBook
{public:
        TelBook(String Name);
        ~TelBook();
        void Dobavit(Telephon Dat);
        void Ydalit(char surname[]="", char name[]="",char second_name[]="",char adress[]="");
        void Ydalit(int number);
        String Naity(char surname[]="", char name[]="",char second_name[]="",char adress[]="");
        int Analiz(int year);
        void LoadFile(String Name);
        void SaveFile(String Name);
        int Length();
        Telephon Element(int index);
private:
void DelOne(int num);
Telephon Data[5000];
int len;
String NF;
} ;
 
TelBook::TelBook(String Name)\\требует имя файла с базой
{len=0;
NF=Name;
LoadFile(Name);}
 
TelBook::~TelBook()
{SaveFile(NF);}
 
Telephon TelBook::Element(int index)\\доступ к элементу
{ Telephon a;
if(index<len)a=Data[index];
return a;}
 
void TelBook::DelOne(int num)\\внутренняя, удаляет элемент в средине масива
{if(len<=num)return;
int i;
for(i=num;i<len-1;i++)
 Data[i]=Data[i+1];
len--;}
 
int TelBook::Length()\\количество элементов
{return len;}
 
int TelBook::Analiz(int year)\\возвращает количество элементов с годом
{
int i,j=0;
for(i=0;i<len;i++)
 if(Data[i].year==year)
  j++;
return j;
}
 
String TelBook::Naity(char surname[], char name[],char second_name[],char adress[])
{int i;            \\ищет в списке элементы удовлетворяющим записи
BOOL rs; \\ пустые строки в учет не берутся, 
              \\если вызвать просто Naity() выведет все записи
String s;
for(i=0;i<len;i++)
 {rs=true;
 if((rs)&&(StrLen(surname)>0))
  rs=surname==Data[i].fio.surname;
 if((rs)&&(StrLen(name)>0))
  rs=name==Data[i].fio.surname;
 if((rs)&&(StrLen(second_name)>0))
  rs=second_name==Data[i].fio.surname;
 if((rs)&&(StrLen(adress)>0))
  rs=adress==Data[i].fio.surname;
 if(rs)
  s+="\n"+String(Data[i].fio.surname)+" "+String(Data[i].fio.name)+" "+
  String(Data[i].fio.second_name)+" "+String(adress)+" : "+IntToStr(Data[i].number)
  +"/"+IntToStr(Data[i].year);
   }
return s;
}
 
void TelBook::Dobavit(Telephon Dat)\\ добавляет элемент если их меньше 5000
{if(len==5000)
 return;
Data[len]=Dat;
len++;}
 
void TelBook::Ydalit(char surname[], char name[],char second_name[],char adress[])
{int i;   \\ работает также как и поис, только удаляет
BOOL rs;
for(i=len-1;i>=0;i--)
 {rs=true;
 if((rs)&&(StrLen(surname)>0))
  rs=surname==Data[i].fio.surname;
 if((rs)&&(StrLen(name)>0))
  rs=name==Data[i].fio.surname;
 if((rs)&&(StrLen(second_name)>0))
  rs=second_name==Data[i].fio.surname;
 if((rs)&&(StrLen(adress)>0))
  rs=adress==Data[i].fio.surname;
 if(rs)DelOne(i);}
}
 
void TelBook::Ydalit(int number)\\удаляет одну запись номер которой равен number
{int i;                       \\вторую не ищет, т.к. 2 одинаковых номеров не должно быть
for(i=0;i<len;i++)
 if(number==Data[i].number)
  {DelOne(i);
  return;}
}
 
 
void TelBook::LoadFile(String Name)\\загружает базу из файла
{
FILE *F;
Telephon a;
F = fopen(Name.c_str(),"r");
if( F==NULL )
 {ShowMessage("Íåâîçìîæíî îòêðûòü ôàéë\n"+Name);
 return;}
char s[100];
AnsiString S;
int i=fgetc(F);
for(;i>0;i--)
 {S=fgets(s,100,F);
 S.SetLength(S.Length()-1);
 StrCopy(a.fio.surname,S.c_str());
 S=fgets(s,10,F);
 S.SetLength(S.Length()-1);
 StrCopy(a.fio.name,S.c_str());
 S=fgets(s,100,F);
 S.SetLength(S.Length()-1);
 StrCopy(a.fio.second_name,S.c_str());
 S=fgets(s,100,F);
 S.SetLength(S.Length()-1);
 StrCopy(a.adress,S.c_str());
 fread(&a.year, sizeof(int), 1, F);
 fread(&a.number, sizeof(int), 1, F);
 Dobavit(a);}
fclose(F);}
 
void TelBook::SaveFile(String Name)\\сохраняет базу
{if(len==0)return;
FILE *F;
char *s;
F = fopen(Name.c_str(),"wt");
if( F==NULL )
 {ShowMessage("Íåâîçìîæíî ñîõðàíèòü ôàéë\n"+Name);
 return;}
int x;
fputc(len,F);
for(x=0;x<len;x++)
 {fputs(StrCat(Data[x].fio.surname,"\n"),F);
 fputs(StrCat(Data[x].fio.name,"\n"),F);
 fputs(StrCat(Data[x].fio.second_name,"\n"),F);
 fputs(StrCat(Data[x].adress,"\n"),F);
 fwrite(&Data[x].year, sizeof(int), 1, F);
 fwrite(&Data[x].number, sizeof(int), 1, F);}
fclose(F);}
1
9 / 9 / 2
Регистрация: 01.05.2009
Сообщений: 127
23.05.2009, 14:15  [ТС]
спасибо,будем разбираться
0
9 / 9 / 2
Регистрация: 01.05.2009
Сообщений: 127
24.05.2009, 22:39  [ТС]
Подскажите пжл как все из файла загрузить в структуру???
0
 Аватар для MrAndrey_ka
79 / 79 / 20
Регистрация: 13.05.2009
Сообщений: 537
Записей в блоге: 1
25.05.2009, 11:56
есть 2 способа
1: в конструкторе вводиь имя файла
2: Вызвать LoadFile
0
9 / 9 / 2
Регистрация: 01.05.2009
Сообщений: 127
25.05.2009, 16:42  [ТС]
То есть если мой файл называется f, то его записывать так в коструктор:
C++
1
2
3
4
5
Telephon::Telephon()            
{
    FILE *f=fopen("c:\\telephon.txt", "a");
    fclose(f);
}
?
0
9 / 9 / 2
Регистрация: 01.05.2009
Сообщений: 127
27.05.2009, 12:05  [ТС]
Подскажите пжл что за функция fstream, какие аргументы принимает и если можно покажите на примере...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.05.2009, 12:05
Помогаю со студенческими работами здесь

Использование классов
Составить программу для объявления и использования данных типа класс согласно индивидуальному заданию, Базовый (транспортное средство) ...

Использование классов
Расскажите пожалуйста на кокретных примерах как и где модно использовать классы?

Использование классов
Класс Члены класса Методы Операторы перегрузки Исходные данные Матрица Размерность ...

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

Использование наследования классов
День добрый, форум! Вот такой вопрос: Есть родительский класс A, у него 2 потомка, B и C. Внутри другого класса F я создаю объект...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru