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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Sniti01
0 / 0 / 0
Регистрация: 25.10.2012
Сообщений: 50
14.01.2013, 23:44     Работа с файлами: телефонная книга #1
Здравствуйте участники форума! Помогите, если сможете, разобраться какие ошибки в программе.
Задание такое: составить программу телефонная книга. В которой есть функции ввода данных в книгу (Фамилия имя отчество номер телефона), вывод содержимое книги и поиск в книге. Все данные записуются в файл.
Вот что у меня получилось:
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 ()) , точнее она есть но не выполняется поиск. Помогите, у кого есть время, исправить ошибки.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.01.2013, 23:44     Работа с файлами: телефонная книга
Посмотрите здесь:

C++: работа с файлами. Телефонная книга. C++
Телефонная книга C++
Телефонная книга: просмотр, поиск, добавление записей. C++
Класс Телефонная Книга C++
Не обращается к функции из класса. Проект телефонная книга C++
Телефонная книга сортировка пузырьком C++
C++ Телефонная книга: подскажите алгоритм быстрого поиска контактов
C++ Телефонная книга

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Sniti01
0 / 0 / 0
Регистрация: 25.10.2012
Сообщений: 50
18.01.2013, 13:20  [ТС]     Работа с файлами: телефонная книга #2
Помогите, пожалуйста разобраться!
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;
}
Делал такую, но без файлов. Функция поиска работает.
Yandex
Объявления
18.01.2013, 15:21     Работа с файлами: телефонная книга
Ответ Создать тему

Метки
note, note c++, описать структуру note c++, описать структуру note, описать структуру с именем note c++, описать структуру с именем note, структура note, структура note c++, структуры данных, структуры данных c++
Опции темы

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