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

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

Войти
Регистрация
Восстановить пароль
 
MrRuslanBB
6 / 6 / 0
Регистрация: 02.04.2012
Сообщений: 318
#1

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

02.06.2013, 23:55. Просмотров 355. Ответов 8
Метки нет (Все метки)

Помогите...
При вводи файлов в текстовый файл ввод почему то начинается со второго элемента и при поиске тоже, поиск должен задаваться по 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.06.2013, 23:55
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Массив и текстовый файл (C++):

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

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

Текстовый файл UTF-8 сохранить как текстовый файл ANSI - C++
Есть текстовый файл в UTF-8 Нужно рядом сохранить его же, но в ANSI Как сделать это средствами c++? Среда Visual Studio 2010 ...

Как полностью считать текстовый файл в массив символов? - C++
ifstream file(name); char line; char *text = new char; char symbol; int i = 0; while (!file.eof()) { file.getline(line,...

Дан текстовый файл. Извлечь из файла цифры записать их в массив - C++
Дан текстовый файл . В файле находятся строки 5-6 строк . В каждой строке есть цифры . Извлечь из файла цифры записать их в массив...

Дано число k (< 10) и текстовый файл, содержащий более k строк. Создать новый текстовый файл, содержащий k последних строк исходного файла - C++
Дано число k (&lt; 10) и текстовый файл, содержащий более k строк. Создать новый текстовый файл, содержащий k последних строк исходного...

8
alsav22
5426 / 4821 / 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();
...
1
MrRuslanBB
6 / 6 / 0
Регистрация: 02.04.2012
Сообщений: 318
03.06.2013, 00:29  [ТС] #3
Цитата Сообщение от alsav22 Посмотреть сообщение
В main() так сделайте:
C++
1
2
3
4
5
...
char c;
...
cin.get(c).get();
...
Получилось, что если вводить лишь информацию о одной книге, то нормально, а вот если продолжить вводить инфу ещё о книгах, то сного ввод начинается со второй строчки и меню перестает работать! Нажимаю допустим 4, чтоб закрыть прогу и не работает!

P.S. Конечно из-за это спасибо, ещё один шаг к рабочей программе)
0
alsav22
5426 / 4821 / 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();
...
}
1
MrRuslanBB
6 / 6 / 0
Регистрация: 02.04.2012
Сообщений: 318
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;
}
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.06.2013, 01:17 #6
Изменения, как в 4 посте, внесёте и всё должно заработать.
1
MrRuslanBB
6 / 6 / 0
Регистрация: 02.04.2012
Сообщений: 318
03.06.2013, 01:19  [ТС] #7
Цитата Сообщение от alsav22 Посмотреть сообщение
Изменения, как в 4 посте, внесёте и всё должно заработать.
До самого дошло пару секунд назад)) просто в глазах уже всё размыто и впритык не видел этой проклятой строчки))

Всё программа вроде полностью работает)))))
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.06.2013, 01:22 #8
На будущее: там где делается ввод через cin >> (не перегруженный) или cin.get(char) и далее используюся функции строкового чтения (типа getline()), нужно убирать из потока (после работы cin >> ) '\n'. Делается это разными способами. Один я показал. Можно просто: cin.get().
1
MrRuslanBB
6 / 6 / 0
Регистрация: 02.04.2012
Сообщений: 318
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;
}
0
05.06.2013, 00:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.06.2013, 00:30
Привет! Вот еще темы с ответами:

Файл: Скопировать текст в другой текстовый файл файл, но чётные строки должны быть с большой буквы... - C++
Создать текстовый файл. Скопировать текст в другой текстовый файл файл, но чётные строки должны быть с большой буквы, а нечетные с...

Даны натуральное , символьный файл и текстовый файл . Файл содержит 30 слов , каждое из которых будем называть ключевым - C++
Добрый день, помогите пожалуйста сделать вот такую программу. Даны натуральное k , символьный файл f и текстовый файл f1 . Файл f...

Текстовый файл перевести в двоичный, а потом полученный двоичный файл перевести обратно в текстовый - C++
Всем привет. Есть такая задачка: &quot;текстовый файл перевести в двоичный, а потом полученный двоичный файл перевести обратно в текстовый&quot; ...

Не получается прочесть правильно текстовый файл в структуру а затем в бинарный файл - C++
Нужно просто прочесть файл в структуру данных а потом оттуда записать в бинарный файл Вот как выглядит текстовый файл: 11122 Mary...


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

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

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