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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Sniti01
0 / 0 / 0
Регистрация: 25.10.2012
Сообщений: 50
#1

Работа с файлами: телефонная книга - C++

14.01.2013, 23:44. Просмотров 1631. Ответов 2

Здравствуйте участники форума! Помогите, если сможете, разобраться какие ошибки в программе.
Задание такое: составить программу телефонная книга. В которой есть функции ввода данных в книгу (Фамилия имя отчество номер телефона), вывод содержимое книги и поиск в книге. Все данные записуются в файл.
Вот что у меня получилось:
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
#include "stdafx.h"
#include "iostream"
 
#include "fstream"
#include "conio.h"
#include "string.h"
 
using namespace std;
 
struct dan {
 char fam[100] ;
 char name[100] ;
 char otchestvo[100];
 char adres[100];
 char nomer_tel[100];
};
 
class Set_Vod_Dan {
 
public:
    dan t;
    
    void vod () {
    cout << "Введите сколько граждан будут занесены в список :";
    int chel; cin >> chel;
    
    for (int i = 0; i < chel; i++){
 
    cout << " Введите Имя: " ;
    cin >> t.name ;
    cout << " Введите Фамилию: ";
    cin >> t.fam ;
    cout << " Введите Отчество: ";
    cin >> t.otchestvo ;
    cout << " Введите адрес: ";
    cin >> t.adres;
    cout << " Введите номер телефона: " ;
    cin >> t.nomer_tel ;
    cout << endl;
        //      ******запишем данные в файл*******
    ofstream kniga (" telefon.txt ", ios_base::app);
    
    if (!kniga.is_open()) // если файл небыл открыт
    {
     cout << "Файл не может быть открыт или создан\n"; // напечатать соответствующее сообщение
    }
    else{
            
    kniga << t.name << " ";
    kniga << t.fam << " ";
    kniga << t.otchestvo << " ";
    kniga << t.adres << " ";
    kniga << t.nomer_tel << endl;
    }
    }
    }
};
 
 
class Get_Poisk {
public:
    dan w;
    void vciy_kniga (){
    char buf [1000];
    ifstream kniga (" telefon.txt ", ios_base::in ); // открываем файл только для чтения
    if (!kniga.is_open()) // если файл небыл открыт
    {
     cout << "Файл не может быть открыт или создан\n"; // напечатать соответствующее сообщение
    }
    else{
            cout << "    Телефонная книга!!! " << endl;
        while (!kniga.eof() ){
        kniga.getline(buf,1000) ;
        cout << buf << endl;
        }
    }   
    }
 
    void poisk (){
        char a[1000], b[1000], c[1000], e[1000];
        ifstream kniga (" telefon.txt ");
        
    cout << "Введите имя гражданина-   ";
        cin >> w.name ;
        cout << "введите фамилию гражданина-   ";
            cin >> w.fam;
            cout << "Введите Отчество гражданина-   ";
            cin >> w.otchestvo;
    
        while (!kniga.eof() ) {
            //kniga.getline(e,1000);
            kniga >> a;
            kniga >> b;
            kniga >> c;
            if( ( w.name ) == a && (w.fam) == b && (w.otchestvo) == c){  
                cout << a << endl;
            }   
        else {cout << "В телефонной книге нет номера!" << endl;   }
    }
    }
};
 
 
int _tmain(int argc, _TCHAR* argv[]){
 
    setlocale(LC_CTYPE, "rus"); // не функционирует с потоком ввода
    Set_Vod_Dan Object;
    Get_Poisk Object_1;
    
      //         ***********меню программы***********
    
      cout << "        MENU" << endl;
      cout << "Для ввода данных нажмите 1 " << endl;
      cout << "Для поросмотра записной книги нажмите 2 " << endl;
      cout << "Для поиска в записной книге нажмите 3 " << endl;
      cout << "Для выхода с программы нажмите 4 " << endl;
      int d;
      cin >> d;
 
      switch(d){
      case 1 : {Object.vod ();
                  break;
               }
     case 2 : { Object_1.vciy_kniga ();
                  break;
               }
      case 3 : { Object_1.poisk();
                 break;
               } 
      case 4 : { return 0;
          break;
               }
          
   default: {
       cout << "Ошибка! Введите правельный знак операции!" << endl;
      }
      }
      
    
    system("pause");
    return 0;
}
Не получается создать функцию поиска по файлу (void poisk ()) , точнее она есть но не выполняется поиск. Помогите, у кого есть время, исправить ошибки.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.01.2013, 23:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Работа с файлами: телефонная книга (C++):

Работа с файлами. Телефонная книга - C++
Вечер добрый. задание: А. Создать файл, содержащий сведения о телефонах абонентов. Каждая записаь имеет поля: фамилия абонентов, год...

Телефонная книга - C++
В общем, ребят, мне надо сделать подобие телефонной книги. Для записи контактов определить структуру: {Фамилия,Имя,Адрес,Номер телефона}....

Телефонная книга - C++
помогите найти хоть пример кода программа телефонная книга,имеет менюшку ее функционал:добавление\удаление абонента,его редактирование ...

Класс Телефонная Книга - C++
Доброго времени суток форумчане! Получил следующее задание, но столкнулся с проблемой.. 1) опишите класс &quot;контакт&quot;, описывающий имя,...

Телефонная книга сортировка пузырьком - C++
Сортировка массива записей (телефонной книги) методом Пузырька. Записи считываются из текстового файла, каждая запись состоит из двух...

Не обращается к функции из класса. Проект телефонная книга - C++
Здравствуйте! Прошу помощи так как проект нужно сдавать уже на днях :( В данном проекте функции уже написаны, но существует следующая...

2
Sniti01
0 / 0 / 0
Регистрация: 25.10.2012
Сообщений: 50
18.01.2013, 13:20  [ТС] #2
Помогите, пожалуйста разобраться!
0
ZYL
3 / 3 / 0
Регистрация: 12.01.2013
Сообщений: 47
18.01.2013, 15:21 #3
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
/*
1. Описать структуру с именем NOTE, содержащую следующие поля:
•   фамилия, имя;
•   номер телефона;
•   день рождения (структура с тремя полями).
2. Написать программу, выполняющую следующие действия:
•   ввод с клавиатуры данных в массив, состоящий из n элементов типа NOTE; 
•   сортировку данных массива по первому полю;
•   вывод данных;
•   поиск информации о человеке по фамилии (записать в отдельный массив; если данных нет, выдать соответствующее сообщение).
*/
 
#include<iostream>
#include<conio.h>
using namespace std;
 
struct birthday
{
    int day;
    int month;
    int year;
};
 
struct NOTE
{
    char surname[10];
    char name[10];
    char number[12];
    birthday Birthday;
};
 
////////////////////////////////////// Ввод данных
void inp_struct(NOTE *&a, int n)
{  
    int i;
    for(i=0;i<n;i++)
  {
    cout<<"Имя: ";
    cin>>a[i].name;
 
    cout<<"Фамилия: ";
    cin>>a[i].surname;  
 
    cout<<"Номер телефона: ";
    cin>>a[i].number;
 
    cout<<"Введите дату рождения: "<<endl;
 
    cout<<"День: ";
    cin>>a[i].Birthday.day;
 
    cout<<"Месяц: ";
    cin>>a[i].Birthday.month;
 
    cout<<"Год: ";
    cin>>a[i].Birthday.year;
 
    cout<<endl;
  }
}
 
////////////////////////////////////// Вывод данных
void out_Struct(NOTE *&a, int n)
{
    int i;
    for(i=0;i<n;i++)
  {
    cout<<a[i].surname<<" "<<a[i].name<<"\n"<<a[i].number<<"\n"<<a[i].Birthday.day<<"."<<a[i].Birthday.month<<"."<<a[i].Birthday.year<<endl;
    cout<<endl;
  }
}
 
/////////////////////////////////////// Cортировка 
void Sort(NOTE *&a, int n)
{
    int i=n-1, j, l, r, p;
    NOTE t;
    l=1; r=n-1; p=0;
    do
    {
        for (j=r; j>=l; j--)
            if (strcmp(a[j-1].surname,a[j].surname) > 0) 
        {
            t=a[j-1];
            a[j-1]=a[j];    
            a[j]=t;
            i=j;
        }
        l=i+1;
        for (j=l; j<=r; j++)
            if (strcmp(a[j-1].surname,a[j].surname) > 0) 
        {
            t=a[j-1];
            a[j-1]=a[j];    
            a[j]=t;
            i=j;
        }
            r=i-1;
    }
    while (l<=r);
}
 
///////////////////////////////////// Логическое значение
bool q(NOTE &x,char *s)
{
if(strcmp(x.surname,s)==0) return true;
else return false;
}
 
///////////////////////////////////// Поиск фамилии
void search(int n,NOTE *&a,char *s,NOTE*&y,int &k)
{
    int i,j=0; 
    for (i=0;i<n;i++)
    {
     if (q(a[i],s))
        {
          y[j]=a[i];
          j++;
        }
    }
k=j;
}
 
////////////////////////////////// Удаление памяти
void del(NOTE*&y,int k, int n, NOTE*&x)
{
    delete []y;     
    y=NULL;
 
    delete []x;     
    x=NULL;
}
 
//////////////////////////////////// Главная функция
void main()
{
setlocale (LC_ALL,"Russian");
 
char s[10];     //
int n,k;
 
cout<<"n=";
cin>>n;
 
NOTE *x=new NOTE[n];        
NOTE *y=new NOTE[n];        
inp_struct(x, n);
 
out_Struct(x, n);
 
Sort(x, n);
cout<<"Отсортированные данные: "<<endl;
cout<<endl;
out_Struct(x, n);
 
cout<<"Фамилия: ";
cin>>s;
search(n,x,s,y,k);
 
if (k==0) cout<<"Человека с фамилией "<<s<<" не найдено.";
else
out_Struct(y,k);
 del(y, k, n, x);
 cout<<x<<" "<<y;
cout<<endl;
}
Делал такую, но без файлов. Функция поиска работает.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.01.2013, 15:21
Привет! Вот еще темы с ответами:

Телефонная книга: просмотр, поиск, добавление записей - C++
Доброго вечера. Такая проблема. Завтра в универ нужно сдать программу, с которой вышла полная запара, т.к. не имею представления как...

Телефонная книга: подскажите алгоритм быстрого поиска контактов - C++
привет всем! какой самый быстрий алгоритм поиска контактов.и какие вы предлагайте допустим у нас имена Anton Aren Arsen Arkadi ...

Структура "Телефонная книга", файловый ввод/вывод - C++
#define _CRT_SECURE_NO_WARNINGS #include&lt;iostream&gt; #include&lt;cstdio&gt; #include&lt;cstdlib&gt; #include &lt;tchar.h&gt; #include &lt;conio.h&gt; ...

Написал класс "Телефонная книга". Но при работе вылетает ошибка. помогите разобраться. - C++
Доброго времени суток! Пацаны, дайте подсказку. Пишу телефонную книгу с классами и у меня возникла проблемка (чтение из файла по полям...


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

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

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