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

Массив и текстовый файл - C++

Восстановить пароль Регистрация
 
MrRuslanBB
4 / 4 / 0
Регистрация: 02.04.2012
Сообщений: 276
02.06.2013, 23:55     Массив и текстовый файл #1
Помогите...
При вводи файлов в текстовый файл ввод почему то начинается со второго элемента и при поиске тоже, поиск должен задаваться по 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
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
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
#include <iostream>
#include <iomanip>
#include <string.h>
#include <conio.h>
#include <fstream>
#include <stdlib.h>
using namespace std;
 
  #define FIO 25 // Длина поля, ФИО.
  #define NZK 16 // Длина поля, название книги.
  #define IZD 14 // Длина поля, издательство.
  #define GIZ 6  // Длина поля, год издания.
  #define KST 6  // Длина поля, количество страниц.
  #define KGL 5  // Длина поля, количество глав.
  #define NDC 14 // Длина поля, название дисциплины.
 
 
struct KNIGI {
  char fio[FIO];
  char nzk[NZK];
  char izd[IZD];
  char giz[GIZ];
  char kst[KST];
  char kgl[KGL];
  char ndc[NDC];
     };
 
// Прототипы функции.
void sozdanie();
void prosmotr();
void vibor();
void tabl();
void tablm();
 
// Определение функции ввода с клавиатуры.
istream &operator>>(istream &in, KNIGI &x) {
 
 cout<<"Введите ФИО: ";
    in.getline(x.fio,FIO);
 
 cout<<"Введите НК: ";
    in.getline(x.nzk,NZK);
 
 cout<<"Введите Изд: ";
    in.getline(x.izd,IZD);
 
 cout<<"Введите ГИз: ";
    in.getline(x.giz,GIZ);
 
 cout<<"Введите КСт: ";
    in.getline(x.kst,KST);
 
 cout<<"Введите КГл: ";
    in.getline(x.kgl,KGL);
 
 cout<<"Введите НД: ";
    in.getline(x.ndc,NDC);
 
 return in;
}
 
// Операция-функция вывода на экран.
ostream &operator<<(ostream &out, KNIGI x) {
 
 out.setf(ios::left); // Установка флага равнения по левому краю.
 out<<"|"<<setw(23)<<x.fio<<"|"<<setw(14)<<x.nzk<<"|"<<setw(12)<<x.izd
  <<"|"<<setw(4)<<x.giz<<"|"<<setw(4)<<x.kst<<"|"<<setw(3)<<x.kgl<<"|"
  <<setw(12)<<x.ndc<<"|"<<endl;
 
 return out;
}
 
// Операция-функция чтения из файла.
ifstream &operator>>(ifstream &in, KNIGI &x) {
 in.getline(x.fio,FIO,'\n');
 in.getline(x.nzk,NZK,'\n');
 in.getline(x.izd,IZD,'\n');
 in.getline(x.giz,GIZ,'\n');
 in.getline(x.kst,KST,'\n');
 in.getline(x.kgl,KGL,'\n');
 in.getline(x.ndc,NDC,'\n');
 
 return in;
}
 
// Операция функции записи в файл.
ofstream &operator<<(ofstream &out, KNIGI &x) {
 out<<x.fio<<endl<<x.nzk<<endl<<x.izd<<endl<<x.giz<<endl<<x.kst<<endl<<x.kgl<<endl<<x.ndc<<endl;
 return out;
}
 
void main(void) {
setlocale (LC_CTYPE,"rus");
 char c;
 while (1)
  {
    cout<<endl<<"1. Создание файла";
    cout<<endl<<"2. Просмотр содержимого";
    cout<<endl<<"3. Вывод информации о книге";
    cout<<endl<<"4. Выход";
    cout<<"\n\n"<<"Выш выбор -> ";
    c=cin.get();
    switch(c)
    {
     case'1':
      sozdanie();
      break;
 
     case'2':
      prosmotr();
      break;
 
     case'3':
      vibor();
      break;
 
     case'4':
      return;
 
     default:
      cout<<"Вводите только цифры 1 do 4"<<endl;
    }
  }
 }
 
// Определение функции вывода на экран шапки таблицы.
void tabl() {
system("cls"); // Очистка экрана перед таблицей "tabl".
         cout<<"=------------------------------------------------------------------------------=";
 cout<<endl<<"|         Ф.И.О.        |  назв. книги | издательство |ГИз |КСт |КГл| дисциплина |";
 cout<<endl<<"|-----------------------|--------------|------------|----|----|---|------------|"<<endl;
}
 
// Определение функции вывода на экран шапки таблицы поиска.
void tablm() {
system("cls"); // Очистка экрана перед таблицей "tablm".
         cout<<"=-------------------------------------------=";
 cout<<endl<<"|         Ф.И.О.        |  назв. книги |КСт |";
 cout<<endl<<"|-----------------------|--------------|----|";
 cout<<endl<<"|";
}
 
 
// Определение функции создания файла.
void sozdanie() {
system("cls"); // Очистка экрана перед созданием файла.
 char c;
 ofstream ff;       // Создание потока ff для записи в файл.
 KNIGI s;
 ff.open("knigi.txt");  // Открытие файла knigi.txt и связывание его с потоком ff.
 
if(!ff) {   // Проверка открытия файла.
 cerr<<"Ошибка открытия файла knigi.txt для записи."<<endl;
 exit(1);   // avariyniy vihod
}
                // Цикл записи элементов в файл.
do {
 cin>>s;        // Обращение к операции-функции ввода с клавиатуры.
 ff<<s;     // Обращение к операции-функции записи в файл.
 cout<<endl<<"Продолжить ввод (Y/N) - ";
 c=cin.get();
}
while(c=='y'||c=='Y');
ff.close();     // Закрытие файла.
}
 
// Определение функции вывода всей информации на экран.
void prosmotr()
{
 ifstream finp; // Создание потока finp для чтения из файла.
 KNIGI s;
 finp.open("knigi.txt",ios::in);
        // Открытие файла kadry.txt и связывание его с потоком finp.
 
if(!finp)       // Проверка открытия файла.
  {
    cerr<<"Oshibka otkritia fayla knigi.txt dly 4tenia"<<endl;
    exit(1);       // Аварийный выход.
  }
cout<<endl<<" Spisok elementov iz fayla:"<<endl;
tabl(); // Вывод на экран шабки таблицы.
while(finp)
 {
  finp>>s;      // obrshenie k operacii-funkcii 4tenia iz fayla
 // if(strlen(s.fio)<=0)    // dlina pervogo poly v zapici menshe libo = 0
    break;               // vihod iz cikla
 
  cout<<s;      // Обращение к операции-функции вывода на экран.
 }
 finp.close(); // Закрытие файла.
 cout<<"=------------------------------------------------------------------------------="<<endl;
}
 
// opredelenie funkcii vivoda na ekran informacii, otve4aushey usloviu poiska
void vibor() {
 char izd[IZD],giz[GIZ];      // Для ввода условия поиска.
 ifstream fi;                  // Создание потока fi для чтения из файла.
 KNIGI b;
 fi.open("knigi.txt",ios::in); // Открытие файла kadry.txt и связывание его с потоком fi.
 
if(!fi)         // Проверка открытия файла.
 {
  cerr<<"Ошибка открытия файла knigi.txt для чтения!"<<endl;
  exit(1);      // Аварийный выход.
 }
 
cout<<endl<<"Введите издательство книги - ";
  cin.getline(izd,IZD,'\n');
 
cout<<endl<<"Введите год издания - ";
  cin.getline(giz,GIZ,'\n');
 
 
cout<<endl<<" Информация о книге:"<<endl;
tablm();                    // Вывод на экран шабки таблицы.
while(!fi.eof()) {
 fi>>b;                     // Обращение к операции-функции чтения из файла.
 if (strcmp(b.izd,izd)==0)  // Издательства совпали.
  if (strcmp(b.giz,giz)==0) // Год издания совпал.
 
 
cout<<setw(23)<<(b.fio)<<"|"
     <<setw(14)<<(b.nzk)<<"|"
     <<setw(4)<<(b.kst)
     <<"|";
 
    }
fi.close();
cout<<endl<<"=-------------------------------------------="<<endl;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.06.2013, 23:55     Массив и текстовый файл
Посмотрите здесь:

C++ Дан текстовый файл (файл для чтения во вложениях) с упрощённым каталогом выставки собак.
Дан текстовый файл. Извлечь из файла цифры записать их в массив C++
C++ Дан текстовый файл. Перепишите его в выходной файл, удалив все знаки препинания
C++ Дан текстовый файл. Перепишите его в выходной файл, удалив все знаки препинания
дан входной текстовый файл. Вывести в выходной файл строку с максимальным количеством слов C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.06.2013, 00:00     Массив и текстовый файл #2
В main() так сделайте:
C++
1
2
3
4
5
...
char c;
...
cin.get(c).get();
...
MrRuslanBB
4 / 4 / 0
Регистрация: 02.04.2012
Сообщений: 276
03.06.2013, 00:29  [ТС]     Массив и текстовый файл #3
Цитата Сообщение от alsav22 Посмотреть сообщение
В main() так сделайте:
C++
1
2
3
4
5
...
char c;
...
cin.get(c).get();
...
Получилось, что если вводить лишь информацию о одной книге, то нормально, а вот если продолжить вводить инфу ещё о книгах, то сного ввод начинается со второй строчки и меню перестает работать! Нажимаю допустим 4, чтоб закрыть прогу и не работает!

P.S. Конечно из-за это спасибо, ещё один шаг к рабочей программе)
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.06.2013, 01:11     Массив и текстовый файл #4
Цитата Сообщение от MrRuslanBB Посмотреть сообщение
P.S. Конечно из-за это спасибо
Я плюсы коллекционирую.

Добавлено через 10 минут
В функции sozdanie():
C++
1
2
3
4
5
6
7
8
...
do {
 cin>>s;        // Обращение к операции-функции ввода с клавиатуры.
 ff<<s;     // Обращение к операции-функции записи в файл.
 cout<<endl<<"Продолжить ввод (Y/N) - ";
 (cin.get(c)).get();
...
}
MrRuslanBB
4 / 4 / 0
Регистрация: 02.04.2012
Сообщений: 276
03.06.2013, 01:11  [ТС]     Массив и текстовый файл #5
Цитата Сообщение от alsav22 Посмотреть сообщение
Я плюсы коллекционирую.
Код покажите с изменениями.
Вот тут и поиск благодаря вам заработал, теперь только осталось чтоб при нажатии Y и инфа о следующей книге начиналась заполняться с ФИО и при нажатии N программа продолжала корректно работать, ато потом что не нажимай о по фазе)))

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
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
#include <iostream>
#include <iomanip>
#include <string.h>
#include <conio.h>
#include <fstream>
#include <stdlib.h>
using namespace std;
 
  #define FIO 25 // Длина поля, ФИО.
  #define NZK 16 // Длина поля, название книги.
  #define IZD 14 // Длина поля, издательство.
  #define GIZ 6  // Длина поля, год издания.
  #define KST 6  // Длина поля, количество страниц.
  #define KGL 5  // Длина поля, количество глав.
  #define NDC 14 // Длина поля, название дисциплины.
 
 
struct KNIGI {
  char fio[FIO];
  char nzk[NZK];
  char izd[IZD];
  char giz[GIZ];
  char kst[KST];
  char kgl[KGL];
  char ndc[NDC];
     };
 
// Прототипы функции.
void sozdanie();
void prosmotr();
void vibor();
void tabl();
void tablm();
 
// Определение функции ввода с клавиатуры.
istream &operator>>(istream &in, KNIGI &x) {
 
 cout<<"Введите ФИО: ";
    in.getline(x.fio,FIO);
 
 cout<<"Введите название книги: ";
    in.getline(x.nzk,NZK);
 
 cout<<"Введите издание: ";
    in.getline(x.izd,IZD);
 
 cout<<"Введите год издания: ";
    in.getline(x.giz,GIZ);
 
 cout<<"Введите количество страниц: ";
    in.getline(x.kst,KST);
 
 cout<<"Введите количество глав: ";
    in.getline(x.kgl,KGL);
 
 cout<<"Введите название дисциплины: ";
    in.getline(x.ndc,NDC);
 
 return in;
}
 
// Операция-функция вывода на экран.
ostream &operator<<(ostream &out, KNIGI x) {
 
 out.setf(ios::left); // Установка флага равнения по левому краю.
 out<<"|"<<setw(23)<<x.fio<<"|"<<setw(14)<<x.nzk<<"|"<<setw(12)<<x.izd
  <<"|"<<setw(4)<<x.giz<<"|"<<setw(4)<<x.kst<<"|"<<setw(3)<<x.kgl<<"|"
  <<setw(12)<<x.ndc<<"|"<<endl;
 
 return out;
}
 
// Операция-функция чтения из файла.
ifstream &operator>>(ifstream &in, KNIGI &x) {
 in.getline(x.fio,FIO,'\n');
 in.getline(x.nzk,NZK,'\n');
 in.getline(x.izd,IZD,'\n');
 in.getline(x.giz,GIZ,'\n');
 in.getline(x.kst,KST,'\n');
 in.getline(x.kgl,KGL,'\n');
 in.getline(x.ndc,NDC,'\n');
 
 return in;
}
 
// Операция функции записи в файл.
ofstream &operator<<(ofstream &out, KNIGI &x) {
 out<<x.fio<<endl<<x.nzk<<endl<<x.izd<<endl<<x.giz<<endl<<x.kst<<endl<<x.kgl<<endl<<x.ndc<<endl;
 return out;
}
 
void main(void) {
setlocale (LC_CTYPE,"rus");
 char c;
 
 while (1) {
    cout<<endl<<"1. Создание файла";
    cout<<endl<<"2. Просмотр содержимого";
    cout<<endl<<"3. Вывод информации о книге";
    cout<<endl<<"4. Выход";
    cout<<endl<<endl<<"Выш выбор -> ";
    cin.get(c).get();
    switch(c)
    {
     case'1':
      sozdanie();
      break;
 
     case'2':
      prosmotr();
      break; 
 
     case'3':
      vibor();
      break;
 
     case'4':
      return;
 
     default:
      cout<<"Вводите только цифры 1 до 4"<<endl;
    }
  }
 }
 
// Определение функции вывода на экран шапки таблицы.
void tabl() {
system("cls"); // Очистка экрана перед таблицей "tabl".
         cout<<"=------------------------------------------------------------------------------=";
 cout<<endl<<"|         Ф.И.О.        |  назв. книги | издательство |ГИз |КСт |КГл| дисциплина |";
 cout<<endl<<"|-----------------------|--------------|------------|----|----|---|------------|"<<endl;
}
 
// Определение функции вывода на экран шапки таблицы поиска.
void tablm() {
system("cls"); // Очистка экрана перед таблицей "tablm".
         cout<<"=-------------------------------------------=";
 cout<<endl<<"|         Ф.И.О.        |  назв. книги |КСт |";
 cout<<endl<<"|-----------------------|--------------|----|";
 cout<<endl<<"|";
}
 
 
// Определение функции создания файла.
void sozdanie() {
system("cls"); // Очистка экрана перед созданием файла.
 char c;
 ofstream ff;       // Создание потока ff для записи в файл.
 KNIGI s;
 ff.open("knigi.txt");  // Открытие файла knigi.txt и связывание его с потоком ff.
 
if(!ff) {   // Проверка открытия файла.
 cerr<<"Ошибка открытия файла knigi.txt для записи."<<endl;
 exit(1);   // Аварийный выход.
}
                // Цикл записи элементов в файл.
do {
 cin>>s;        // Обращение к операции-функции ввода с клавиатуры.
 ff<<s;     // Обращение к операции-функции записи в файл.
 cout<<endl<<"Продолжить ввод (Y/N) - ";
 c=cin.get();
}
while(c=='y'||c=='Y');
ff.close();     // Закрытие файла.
}
 
// Определение функции вывода всей информации на экран.
void prosmotr()
{
 ifstream finp; // Создание потока finp для чтения из файла.
 KNIGI s;
 finp.open("knigi.txt",ios::in);
        // Открытие файла kadry.txt и связывание его с потоком finp.
 
if(!finp)       // Проверка открытия файла.
  {
    cerr<<"Ошибка открытия файла knigi.txt для чтения!"<<endl;
    exit(1);       // Аварийный выход.
  }
cout<<endl<<" Список элементов из файла:"<<endl;
tabl(); // Вывод на экран шабки таблицы.
while(finp)
 {
  finp>>s;      // Обращение к операции-функции чтения из файла.
  if(strlen(s.fio)<=0)  // Длина первого поля в записи  меньше либо равна 0.
    break;               // Выход из цикла.
 
  cout<<s;      // Обращение к операции-функции вывода на экран.
 }
 finp.close(); // Закрытие файла.
 cout<<"=------------------------------------------------------------------------------="<<endl;
}
 
// Определение функции вывода на экран информации отвечающей условию поиска.
void vibor() {
 char izd[IZD],giz[GIZ];      // Для ввода условия поиска.
 ifstream fi;                  // Создание потока fi для чтения из файла.
 KNIGI b;
 fi.open("knigi.txt",ios::in); // Открытие файла kadry.txt и связывание его с потоком fi.
 
if(!fi)         // Проверка открытия файла.
 {
  cerr<<"Ошибка открытия файла knigi.txt для чтения!"<<endl;
  exit(1);      // Аварийный выход.
 }
 
cout<<endl<<"Введите издательство книги - ";
  cin.getline(izd,IZD);
 
cout<<endl<<"Введите год издания - ";
  cin.getline(giz,GIZ);
 
 
cout<<endl<<" Информация о книге:"<<endl;
tablm();                    // Вывод на экран шабки таблицы.
while(!fi.eof()) {
 fi>>b;                     // Обращение к операции-функции чтения из файла.
 if (strcmp(b.izd,izd)==0)  // Издательства совпали.
  if (strcmp(b.giz,giz)==0) // Год издания совпал.
 
 
cout<<setw(23)<<(b.fio)<<"|"
     <<setw(14)<<(b.nzk)<<"|"
     <<setw(4)<<(b.kst)
     <<"|";
 
    }
fi.close();
cout<<endl<<"=-------------------------------------------="<<endl;
}
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.06.2013, 01:17     Массив и текстовый файл #6
Изменения, как в 4 посте, внесёте и всё должно заработать.
MrRuslanBB
4 / 4 / 0
Регистрация: 02.04.2012
Сообщений: 276
03.06.2013, 01:19  [ТС]     Массив и текстовый файл #7
Цитата Сообщение от alsav22 Посмотреть сообщение
Изменения, как в 4 посте, внесёте и всё должно заработать.
До самого дошло пару секунд назад)) просто в глазах уже всё размыто и впритык не видел этой проклятой строчки))

Всё программа вроде полностью работает)))))
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.06.2013, 01:22     Массив и текстовый файл #8
На будущее: там где делается ввод через cin >> (не перегруженный) или cin.get(char) и далее используюся функции строкового чтения (типа getline()), нужно убирать из потока (после работы cin >> ) '\n'. Делается это разными способами. Один я показал. Можно просто: cin.get().
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.06.2013, 00:30     Массив и текстовый файл
Еще ссылки по теме:

дан текстовый файл.определить количество нечетных чисел и записать их в др текст файл C++
C++ Дан текстовый файл F. Переписать в другой файл G все символы, отличные от букв и пробела
Дан текстовый файл f. Переписать текст в файл g, удалив все группы букв s (s передается параметром) C++

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

Или воспользуйтесь поиском по форуму:
MrRuslanBB
4 / 4 / 0
Регистрация: 02.04.2012
Сообщений: 276
05.06.2013, 00:30  [ТС]     Массив и текстовый файл #9
Вот рабочая программа в VisualStudio2012

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
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
#include <iostream>
#include <iomanip>
#include <string.h>
#include <conio.h>
#include <fstream>
#include <stdlib.h>
using namespace std;
 
  #define FIO 25 // Длина поля, ФИО.
  #define NZK 16 // Длина поля, название книги.
  #define IZD 14 // Длина поля, издательство.
  #define GIZ 6  // Длина поля, год издания.
  #define KST 6  // Длина поля, количество страниц.
  #define KGL 5  // Длина поля, количество глав.
  #define NDC 14 // Длина поля, название дисциплины.
 
 
struct KNIGI {
  char fio[FIO];
  char nzk[NZK];
  char izd[IZD];
  char giz[GIZ];
  char kst[KST];
  char kgl[KGL];
  char ndc[NDC];
     };
 
// Прототипы функции.
void sozdanie();
void prosmotr();
void vibor();
void tabl();
void tablm();
 
// Определение функции ввода с клавиатуры.
istream &operator>>(istream &in, KNIGI &x) {
 
 cout<<"Введите ФИО: ";
    in.getline(x.fio,FIO);
 
 cout<<"Введите название книги: ";
    in.getline(x.nzk,NZK);
 
 cout<<"Введите издание: ";
    in.getline(x.izd,IZD);
 
 cout<<"Введите год издания: ";
    in.getline(x.giz,GIZ);
 
 cout<<"Введите количество страниц: ";
    in.getline(x.kst,KST);
 
 cout<<"Введите количество глав: ";
    in.getline(x.kgl,KGL);
 
 cout<<"Введите название дисциплины: ";
    in.getline(x.ndc,NDC);
 
 return in;
}
 
// Операция-функция вывода на экран.
ostream &operator<<(ostream &out, KNIGI x) {
 
 out.setf(ios::left); // Установка флага равнения по левому краю.
 out<<"|"<<setw(23)<<x.fio<<"|"<<setw(14)<<x.nzk<<"|"<<setw(12)<<x.izd
  <<"|"<<setw(4)<<x.giz<<"|"<<setw(4)<<x.kst<<"|"<<setw(3)<<x.kgl<<"|"
  <<setw(12)<<x.ndc<<"|"<<endl;
 
 return out;
}
 
// Операция-функция чтения из файла.
ifstream &operator>>(ifstream &in, KNIGI &x) {
 in.getline(x.fio,FIO,'\n');
 in.getline(x.nzk,NZK,'\n');
 in.getline(x.izd,IZD,'\n');
 in.getline(x.giz,GIZ,'\n');
 in.getline(x.kst,KST,'\n');
 in.getline(x.kgl,KGL,'\n');
 in.getline(x.ndc,NDC,'\n');
 
 return in;
}
 
// Операция функции записи в файл.
ofstream &operator<<(ofstream &out, KNIGI &x) {
 out<<x.fio<<endl<<x.nzk<<endl<<x.izd<<endl<<x.giz<<endl<<x.kst<<endl<<x.kgl<<endl<<x.ndc<<endl;
 return out;
}
 
void main(void) {
setlocale (LC_CTYPE,"rus");
 char c;
 
 while (1) {
    cout<<endl<<"1. Создание файла";
    cout<<endl<<"2. Просмотр содержимого";
    cout<<endl<<"3. Вывод информации о книге";
    cout<<endl<<"4. Выход";
    cout<<endl<<endl<<"Выш выбор -> ";
    cin.get(c).get();
    switch(c)
    {
     case'1':
      sozdanie();
      break;
 
     case'2':
      prosmotr();
      break; 
 
     case'3':
      vibor();
      break;
 
     case'4':
      return;
 
     default:
      cout<<"Вводите только цифры 1 до 4"<<endl;
    }
  }
 }
 
// Определение функции вывода на экран шапки таблицы.
void tabl() {
system("cls"); // Очистка экрана перед таблицей "tabl".
    cout<<"=------------------------------------------------------------------------------=\n";
    cout<<"|         Ф.И.О.        |  Назв. книги | Издательство |ГИз |КСт |КГл| Дисциплн |\n";
    cout<<"|-----------------------|--------------|------------|----|----|---|------------|\n";
}
 
// Определение функции вывода на экран шапки таблицы поиска.
void tablm() {
system("cls"); // Очистка экрана перед таблицей "tablm".
    cout<<"=-------------------------------------------=\n";
    cout<<"|         Ф.И.О.        |  Назв. книги |КСт |\n";
    cout<<"|-----------------------|--------------|----|\n";
    cout<<"|";
}
 
 
// Определение функции создания файла.
void sozdanie() {
system("cls");  // Очистка экрана перед созданием файла.
 char c;
 ofstream ff;   // Создание потока ff для записи в файл.
 KNIGI s;
 ff.open("knigi.txt");  // Открытие файла knigi.txt и связывание его с потоком ff.
 
if(!ff) {   // Проверка открытия файла.
 cerr<<"Ошибка открытия файла knigi.txt для записи."<<endl;
 exit(1);   // Аварийный выход.
}
                // Цикл записи элементов в файл.
do {
 cin>>s;    // Обращение к операции-функции ввода с клавиатуры.
 ff<<s;     // Обращение к операции-функции записи в файл.
 cout<<endl<<"Продолжить ввод (Y/N) - ";
 cin.get(c).get();
}
while(c=='y'||c=='Y');
ff.close();     // Закрытие файла.
}
 
// Определение функции вывода всей информации на экран.
void prosmotr()
{
 ifstream finp; // Создание потока finp для чтения из файла.
 KNIGI s;
 finp.open("knigi.txt",ios::in);
        // Открытие файла kadry.txt и связывание его с потоком finp.
 
if(!finp)       // Проверка открытия файла.
  {
    cerr<<"Ошибка открытия файла knigi.txt для чтения!"<<endl;
    exit(1);       // Аварийный выход.
  }
cout<<endl<<" Список элементов из файла:"<<endl;
tabl(); // Вывод на экран шабки таблицы.
while(finp)
 {
  finp>>s;      // Обращение к операции-функции чтения из файла.
  if(strlen(s.fio)<=0)  // Длина первого поля в записи  меньше либо равна 0.
    break;               // Выход из цикла.
 
  cout<<s;      // Обращение к операции-функции вывода на экран.
 }
 finp.close(); // Закрытие файла.
 cout<<"=------------------------------------------------------------------------------="<<endl;
}
 
// Определение функции вывода на экран информации отвечающей условию поиска.
void vibor() {
 char izd[IZD],giz[GIZ];    // Для ввода условия поиска.
 ifstream fi;               // Создание потока fi для чтения из файла.
 KNIGI b;
 fi.open("knigi.txt",ios::in);  // Открытие файла kadry.txt и связывание его с потоком fi.
 
if(!fi)     // Проверка открытия файла.
 {
  cerr<<"Ошибка открытия файла knigi.txt для чтения!"<<endl;
  exit(1);      // Аварийный выход.
 }
 
cout<<endl<<"Введите издательство книги - ";
  cin.getline(izd,IZD);
 
cout<<endl<<"Введите год издания - ";
  cin.getline(giz,GIZ);
 
 
cout<<endl<<" Информация о книге:"<<endl;
tablm();                    // Вывод на экран шабки таблицы.
while(!fi.eof()) {
 fi>>b;                     // Обращение к операции-функции чтения из файла.
 if (strcmp(b.izd,izd)==0)  // Издательства совпали.
  if (strcmp(b.giz,giz)==0) // Год издания совпал.
 
 
cout<<setw(23)<<(b.fio)<<"|"
     <<setw(14)<<(b.nzk)<<"|"
     <<setw(4)<<(b.kst)
     <<"|";
 
    }
fi.close();
cout<<endl<<"=-------------------------------------------="<<endl;
}
Yandex
Объявления
05.06.2013, 00:30     Массив и текстовый файл
Ответ Создать тему
Опции темы

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