I
ilya1989
Уважаемые господа-программисты!
Не могу уже который день разобраться с 2-мя проблемами:
1.В данной программе первая функция sozdanie() организованна с циклом while при вводе данных с клавиатуры.В данном случае,вводится информация по книгам(библиотека).После(окончания ввода данных
об одной книге в цикле while задано,что пока пользователь нажимает 'Д','д','Y','y'.ввод данных с клавиатуры не прекращается.ПРОГРАММУ ПИСАЛ ПО МЕТОДИЧКЕ ПРЕПОДАВАТЕЛЯ,Т.К. ПРЕПОД УКАЗАЛ,ЧТО ОТКЛОНЕНИЙ ПРИ НАПИСАНИИ ПРОГРАММЫ ОТ ЕЁ РАБОТЫ БЫТЬ НЕ ДОЛЖНО!
Но,при нажатии вышеуказанных символов программа почему-то возвращает меня в main().
2.Функция prosmotr() так же тупит!Она почему-то выдает при выводе не 5 введенных данных,а 6
Вот код программы
вот скриншот первой функции
1.jpg
в данном случае я ввел ради проверки все "1"
после нажатия 'Y' меня вернуло в главное меню,а ввод-то должен продолжаться!
вот второй скриншот вывода всех данных из файла,но вывод так же не работает,поскольку откуда-то взялась при выводе лишняя 1!
2.jpg
Заранее очень благодарен всем,кто откликнется!
Не могу уже который день разобраться с 2-мя проблемами:
1.В данной программе первая функция sozdanie() организованна с циклом while при вводе данных с клавиатуры.В данном случае,вводится информация по книгам(библиотека).После(окончания ввода данных
об одной книге в цикле while задано,что пока пользователь нажимает 'Д','д','Y','y'.ввод данных с клавиатуры не прекращается.ПРОГРАММУ ПИСАЛ ПО МЕТОДИЧКЕ ПРЕПОДАВАТЕЛЯ,Т.К. ПРЕПОД УКАЗАЛ,ЧТО ОТКЛОНЕНИЙ ПРИ НАПИСАНИИ ПРОГРАММЫ ОТ ЕЁ РАБОТЫ БЫТЬ НЕ ДОЛЖНО!
Но,при нажатии вышеуказанных символов программа почему-то возвращает меня в main().
2.Функция prosmotr() так же тупит!Она почему-то выдает при выводе не 5 введенных данных,а 6
Вот код программы
C++:
#include <iostream.h>
#include <fstream.h>
#include <conio.h>
#include <iomanip.h>
#include <io.h>
#define A 2
class Book
{
public:
char name[15];
char FIO[20];
int page;
char publishing_office[15];
char publication_date[12];
};
void sozdanie();
void tabl();
void prosmotr();
void poisk();
//1.ввод с клавиатуры
istream &operator>>(istream &vvod,Book &book)
{
cout<<"\nВведите название книги :";
vvod.ignore();
vvod.get(book.name,14,'\n');
cout<<"\nВведите ФИО Автора :";
vvod.ignore();
vvod.get(book.FIO,19,'\n');
cout<<"\nВведите колличество страниц в книге :";
cin.ignore();
cin>>book.page;
cout<<"\nВведите название издательства книги :";
vvod.ignore();
vvod.get(book.publishing_office,14,'\n');
cout<<"\nВведите дату публикации книги(год) :";
vvod.ignore();
vvod.get(book.publication_date,11,'\n');
return vvod;
}
//2.Вывод на дисплей
ostream &operator<<(ostream &vivod,Book &book)
{
vivod.setf(ios::left);
vivod<<setw(15)<<book.name<<"|"<<setw(20)<<book.FIO<<"|"<<setw(5)
<<book.page<<"|"<<setw(15)<<book.publishing_office<<"|"<<setw(12)<<book.publication_date<<endl;
return vivod;
}
//3.Чтение из файла
ifstream &operator>>(ifstream &read,Book &book)
{
read.getline(book.name,15,'\n');
read.getline(book.FIO,20,'\n');
read>>book.page;
read.seekg(2L,ios::cur);
read.getline(book.publishing_office,15,'\n');
read.getline(book.publication_date,12,'\n');
return read;
}
//4.Запись в файл
ofstream &operator<<(ofstream &write,Book &book)
{
write<<book.name<<endl;
write<<book.FIO<<endl;
write<<book.page<<endl;
write<<book.publishing_office<<endl;
write<<book.publication_date<<endl;
return write;
}
void tabl()
{
cout<<"------------------------------------------------------------------------\n";
cout<<"| Название | ФИО | Кол.| Наименование | Дата |\n";
cout<<"| книги | АВТОРА | стр.| издательства | публикации|\n";
cout<<"------------------------------------------------------------------------\n";
}
//создание файла
void sozdanie()
{
char x;
ofstream new_f("Book.txt",ios::app);
Book a;
if(!new_f)
{
cerr<<"Do not create of file Book.txt"<<endl;
return;
}
do
{
cin>>a;
new_f<<a;
cout<<"Продолжить ввод? (Д/Н,Y/N)";
cin.get(x);
}
while(x=='Y'||x=='y'||x=='Д'||x=='д');
new_f.close();
getch();
}
//вывод всей информации на дисплей
void prosmotr()
{
ifstream out("Book.txt",ios::in);
Book b;
if(!out)
{
cerr<<"Не удалось открыть файл Book.txt для чтения!"<<endl;
return;
}
cout<<"Вывод всей информации из файла \n";
tabl();
while(out)
{
out>>b;
cout<<b;
}
out.close();
cout<<"\n|--------------|------------------|----------|---------------|----------|"<<endl;
getch();
}
//поиск данных по условиям
void poisk()
{
char izdatelstvo[15];
char date[12];
int kol=0;
ifstream poisk("Book.txt",ios::in);
Book s;
if(!poisk)
{
cerr<<"Ошибка открытия файла Book.txt для чтения ";
return;
}
cin.ignore();
cout<<"Введите наименование издательства :";
cin.getline(izdatelstvo,14,'\n');
cout<<"Введите год издания книги :";
cin.getline(date,11,'\n');
cout<<"Результаты поиска";
tabl();
while(!poisk.eof())
{
poisk>>s;
if(!strcmp(izdatelstvo,s.publishing_office)||(!strcmp(date,s.publication_date)))
{
kol++;
cout<<s;
}
}
if(kol==0)
{
cout<<"Zapisey ne naydeno!";
}
getch();
poisk.close();
cout<<"|--------------|------------------|----------|---------------|----------|"<<endl;
}
void main(void)
{
char c;
while (1)
{
cout << endl << "1. Создание файла";
cout << endl << "2. Просмотр содержимого";
cout << endl << "3. Вывод информации о книге(ах)";
cout << endl << "4. Выход";
cout << endl << "Ваш выбор -> ";
cin.get(c);
switch(c)
{
case '1':
sozdanie();
break;
case '2':
prosmotr();
break;
case '3':
poisk();
break;
case '4':
return;
default:
cout << "Вводите только цифры от 1 до 4" << endl;
}
}
}
вот скриншот первой функции
1.jpg
в данном случае я ввел ради проверки все "1"
после нажатия 'Y' меня вернуло в главное меню,а ввод-то должен продолжаться!
вот второй скриншот вывода всех данных из файла,но вывод так же не работает,поскольку откуда-то взялась при выводе лишняя 1!
2.jpg
Заранее очень благодарен всем,кто откликнется!