Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.60
Alik-Soldier
9 / 9 / 0
Регистрация: 01.05.2009
Сообщений: 127
#1

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

22.05.2009, 11:40. Просмотров 1220. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.05.2009, 11:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Использование классов (C++):

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

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

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

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

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

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

10
MrAndrey_ka
78 / 78 / 2
Регистрация: 13.05.2009
Сообщений: 537
Записей в блоге: 1
22.05.2009, 12:00 #2
Объясните мне пожалуйста, как добавить нового абонента в файл не стирая данных в этом файле и как организовать поиск и удаление из телефонной книги. Функцию поиска я в принципе написал, но после ввода фамилии программа ничего не делает...
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
Alik-Soldier
9 / 9 / 0
Регистрация: 01.05.2009
Сообщений: 127
22.05.2009, 12:28  [ТС] #3
я понимаю че в коде написано,но че то не совсем понимаю, как загрузить все из файла в память,и почем у не работать с каждой отдельной записью(так же удобней и понятней)...
0
MrAndrey_ka
78 / 78 / 2
Регистрация: 13.05.2009
Сообщений: 537
Записей в блоге: 1
22.05.2009, 12:36 #4
я понимаю че в коде написано,но че то не совсем понимаю, как загрузить все из файла в память,и почем у не работать с каждой отдельной записью(так же удобней и понятней)...
а еще дольше каждый раз весь файл перелиставать...

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

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
Alik-Soldier
9 / 9 / 0
Регистрация: 01.05.2009
Сообщений: 127
23.05.2009, 14:15  [ТС] #7
спасибо,будем разбираться
0
Alik-Soldier
9 / 9 / 0
Регистрация: 01.05.2009
Сообщений: 127
24.05.2009, 22:39  [ТС] #8
Подскажите пжл как все из файла загрузить в структуру???
0
MrAndrey_ka
78 / 78 / 2
Регистрация: 13.05.2009
Сообщений: 537
Записей в блоге: 1
25.05.2009, 11:56 #9
есть 2 способа
1: в конструкторе вводиь имя файла
2: Вызвать LoadFile
0
Alik-Soldier
9 / 9 / 0
Регистрация: 01.05.2009
Сообщений: 127
25.05.2009, 16:42  [ТС] #10
То есть если мой файл называется f, то его записывать так в коструктор:
C++
1
2
3
4
5
Telephon::Telephon()            
{
    FILE *f=fopen("c:\\telephon.txt", "a");
    fclose(f);
}
?
0
Alik-Soldier
9 / 9 / 0
Регистрация: 01.05.2009
Сообщений: 127
27.05.2009, 12:05  [ТС] #11
Подскажите пжл что за функция fstream, какие аргументы принимает и если можно покажите на примере...
0
27.05.2009, 12:05
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.05.2009, 12:05
Привет! Вот еще темы с ответами:

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

Использование классов (sha1) - C++
В sha1.h /* sha1.h */ #ifndef SHA1_H #define SHA1_H #include &lt;stdint.h&gt; #ifdef __cplusplus extern &quot;C&quot; { ...

Создание и использование классов - C++
Здравствуйте програмисты. Помогите пожалуйста. В лабораторке есть задание: Организовать класс треугольник, определенный по длинам трех...

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.