ifstream. Так само для створення потоку виводу об’єкт класу ofstream, вводу-виводу-fstream.
Створений потік можна зв’язати з файлом за допомогою функції open.
Також можна об’являти спосіб відкриття файлу:
fstream::open(const char *filename, ios::open mode mode);
mode може приймати таких значень:
ios::app( дописуваня в кінець)
ios::binary(відкриття файлу в бінарному режимі)
ios::in(файл відкривається для вводу)
ios::out(файл відкривається для виводу)
ios::trunk(файл з таким же ім’ям буде знищений)
2.3 Ввід, вивід з файлу.
У цій програмі ввід у файл відбувається за допомогою функції write().
Її прототип:
istream &write(const char *buf, streamsize num);
Приклад застосуваня:
f.write((char*) &lib, sizeof(lib));
Тут структура lib записується до файлу.
Вивід з файлу відбувається за допомогою функції read().
Її прототип :
istream &read( char *buf, streamsize num);
Приклад застосуваня:
f.read((char *) &lib,sizeof(lib));
Тут з файлу читається структура lib.
2.4 Функції
У даній програмі застосовуються такі функції:
1. istream &seekg(of_type offset, seekdir origin);
Ця функція забезпечує довільний доступ до файлу.
Приклад:
fp.seekg(k,ios::beg);
Курсор переміщається на num+1 символ від початку файлу.
2. streamsize gcount();
Ця функція повертає кількість зчитаних символів.
Приклад:
k+=fp.gcount();
До зміної к додасться кількість зчитаних символів.
Опис виконання програми.
Спочатку реалізовується заповнення файлу „А”. Створюється файл „А” в бінарному режимі , і реалізується потік на ввід інформації у файл. Заповнюється структура з клавіатури, і за допомогою функції write () структура записується у файл.
Наступний блок програми створений для дописування інформації у файл . Реалізований він так як попередній , але файл відкривається на дописування за допомогою класу ios і члена цього класу :app.
Третій блок реалізує фільтрування записів. Тобто з файлу „А” зчитується запис і перевіряється оператором if чи потрібне поле співпадає з заданим фільтром у даному випадку чи поле “vydavnyctvo”= Дніпро і поле кrik>1990 . Якщо так тоді цей запис переписується у файл „В”(попередньо відкритий у режимі дописування в кінець).
Видалення записів відбувається так:
за тим же алгоритмом шукається потрібний запис ;
міняється поле структури lib- show- з „Y”(при заповненні файлу це поле автоматично стає „Y”), на “N” .
структура записується на теж саме місце де й була. За допомогою функції write, (курсор у файлі повертається у те місце де починалось зчитування за допомогою функції seekp()).
При відновленні якогось запису відбувається таж операція , але поле show приймає значення „Y” .
Вивід файлів на екран відбувається за допомогою функції read() . Читаються записи , і якщо поле show=”Y” тоді запис виводиться на екран, якщо ні , тоді вона пропускається.
3 ТЕКСТ ПРОГРАМИ
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream.h>
#include <fstream.h>
#include <io.h>
#include <conio.h>
main()
{
char ch;
int menu,nomer;
int k=0;
struct{
int UDK;
char surname[20];
int rik,kil_stor;
char book_name[20];
char vydavnyctvo[20];
char show;
}lib;
//----------PROGA-------------------
do {
cout<<"1. Zapovnyty fail A.\n";
cout<<"2. Popovnyty fail A\n";
cout<<"3. Poshuk knygok za prizvyshem avtora ta rokom vydannja\n";
cout<<"4. Vydalennja zapysiv po porjadkovomu nomeru \n";
cout<<"5. Vidnovlennja zapysiv po porjadkovomu nomeru \n";
cout<<"6. Vyvid na ekran Failu A \n";
cout<<"7. Vyvid na ekran failu B \n";
cout<<"0. Exit\n";
cout<<"Vuberit punkt menu:";
cin>>menu;
if(menu==0) exit(1);
//--------1--------ZAPOVNENNJA-------1-------------------
if (menu==1)
{
ofstream f("A",ios::binary);
if (!f){
cout<<"OOPS-pomylka"<<endl; return 1;}
do {
cout<<"Vvedit nomer UDK:\n";
cin>>lib.UDK;
cout<<"Vvedit prizvuw4e avtora:\n";
cin>>lib.surname;
cout<<"VVedit nazvu knygky\n";
cin>>lib.book_name;
cout<<"VVedit vydavnyctvo\n";
cin>>lib.vydavnyctvo;
cout<<"Vvedit rik vudannja:\n";
cin>>lib.rik;
cout<<"VVedit kil stor:\n";
cin>>lib.kil_stor;
lib.show='y';
f.write((char *)&lib, sizeof(lib));
cout<<"Vu budete vvodutu nastupni dani (y/n)?:\n";
cin>>ch;
}while(ch!='n');
f.close();
}
//--------2--------ZAPOVNENNJA-------2-------------------
//--------1--------DOPYSUVANNJA-------1-------------------
if (menu==2)
{
do {
ofstream f("A", ios::app|ios::end|ios::binary);
if (!f){
cout<<"OOPS-pomylka"<<endl; return 1;}
//-----------------------------------------
int hh;
m9:cout<<"Vvedit porjadkovyj nomer:\n";
cin>>hh;
while(f){
f.read((char *) &lib,sizeof(lib));
if(hh=lib.UDK) cout<<”Pomylka vvodu. Vvedit inwyj nomer zapysu! \n”
goto m9;}
lib.UDK=hh;
cout<<"Vvedit prizvuw4e avtora:\n";
cin>>lib.surname;
cout<<"VVedit nazvu knygky\n";
cin>>lib.book_name;
cout<<"VVedit vydavnyctvo\n";
cin>>lib.vydavnyctvo;
cout<<"Vvedit rik vudannja:\n";
cin>>lib.rik;
cout<<"VVedit kil stor:\n";
cin>>lib.kil_stor;
lib.show='y';
f.write((char *)&lib, sizeof(lib));
f.close();
cout<<"vvesty we?"; cin>>ch;
}while(ch!='n');
}
//--------2--------DOPYSUVANNJA-------2-------------------
//=========1=======POSHUK==============1==================
if (menu==3){
ifstream f("A", ios::in|ios::binary);
if (!f){
cout<<"OOPS-pomylka"<<endl; return 1;}
ofstream fp("B", ios::out|ios::binary);
if (!fp){
cout<<"OOPS-pomylka"<<endl; return 1;}
while(f){
f.read((char *) &lib,sizeof(lib));
if (f.gcount()==0)goto m3;
if(strstr(lib.vydavnyctvo,"Dnipro"))
if(lib.rik>=1990)
if(lib.show=='y'){
fp.write((char *)&lib, sizeof(lib));
fp.close();
}}m3:}
//|||||||||||+++++++++++++++++++++++++++++++++++++++++++++++++++
if (menu==4){
do{
cout<<"Vvedit neobhidnyj nomer knygky:";
cin>>nomer;
fstream f("A", ios::in|ios::out|ios::binary);
if (!f){
cout<<"OOPS-pomylka"<<endl; return 1;}
fstream fp("B", ios::in|ios::out|ios::binary);
if (!fp){
cout<<"OOPS-pomylka"<<endl; return 1;}
k=0;
while(f){
f.read((char *) &lib,sizeof(lib));
if(lib.UDK==nomer){
lib.show='n';
cout<<"Teeling"<<f.tellg()<<endl;
f.seekg(k,ios::beg);
f.write((char*) &lib, sizeof(lib));
}
k+=f.gcount();
}
//????????DUBL??????????????DUBL?????????????DUBL??????????????DUBL??????
k=0;
while(fp){
fp.read((char *) &lib,sizeof(lib));
if(lib.UDK==nomer){
lib.show='n';
fp.seekg(k,ios::beg);
fp.write((char* ) &lib, sizeof(lib));
}
k+=fp.gcount();
}
//????????DUBL??????????????DUBL??????????????DUBL?????????????DUBL??????
cout<<"vvesty we?"; cin>>ch;
}while(ch!='n');
}
//+++++++++++++555555555555555555555555555++++++++++++++++++++++
if (menu==5){
do{
cout<<"Vvedit neobhidnyj nomer knygky:";
cin>>nomer;
fstream f("A", ios::in|ios::out|ios::binary);
if (!f){
cout<<"OOPS-pomylka"<<endl; return 1;}
fstream fp("B", ios::in|ios::out|ios::binary);
if (!fp){
cout<<"OOPS-pomylka"<<endl; return 1;}
k=0;
while(f){
f.read((char *) &lib,sizeof(lib));
if(lib.UDK==nomer){
lib.show='y';
f.seekg(k,ios::beg);
f.write((char*) &lib, sizeof(lib));
}
k+=f.gcount();
}
//????????DUBL??????????????DUBL?????????????DUBL??????????????DUBL??????
k=0;
while(fp){
fp.read((char *) &lib,sizeof(lib));
if(lib.UDK==nomer){
lib.show='y';
fp.seekg(k,ios::beg);
fp.write((char* ) &lib, sizeof(lib));
}
k+=fp.gcount();
}
//????????DUBL??????????????DUBL?????????????DUBL??????????????DUBL??????
cout<<"vvesty we?"; cin>>ch;
}while(ch!='n');
}
//++++++++666666666666666666666666++++++++++++++++++++++++++++++
if (menu==6){
ifstream f("A", ios::in|ios::beg|ios::binary);
if (!f){
cout<<"OOPS-pomylka"<<endl; return 1;}
while(f){
f.read((char *) &lib,sizeof(lib));
if (f.gcount()==0)goto m1;
if(lib.show=='y'){
cout<<"\nnomer UDK: "<<lib.UDK
<<"\nnazva knugu: "<<lib.book_name
<<"\nprizvush4e avtora: "<<lib.surname
<<"\nvydavnyctvo: "<<lib.vydavnyctvo
<<"\nrik vudanna: "<<lib.rik
<<"\nKilkist storinok: "<<lib.kil_stor<<endl;
}
m1:
}}
//+++++++++++++++++++++++++7777777777777777777+++++++++++++++++
if (menu==7){
ifstream fp("B", ios::in|ios::binary);
if (!fp){
cout<<"OOPS-pomylka"<<endl; return 1;}
while(fp){
fp.read((char *) &lib,sizeof(lib));
if (fp.gcount()==0)goto m2;
if(lib.show=='y'){
cout<<"\nnomer UDK: "<<lib.UDK
<<"\nnazva knugu: "<<lib.book_name
<<"\nprizvush4e avtora: "<<lib.surname
<<"\nvydavnyctvo: "<<lib.vydavnyctvo
<<"\nrik vudanna: "<<lib.rik
<<"\nkil stor: "<<lib.kil_stor<<endl;
}
m2:
} }
cout<<"Vu xochete povernytusja v MENU (y/n)?";
cin>>ch;
}
while(ch!='n');
getch();
}
Результати роботи програми:
Меню:
Сформувати файл А , який містить інформацію книги: порядковий номер запису, автор книги, назва книги, назва видавництва, обсяг книги кількість сторінок, рік видання.
Поповнити файл „С”.
Занести у файл „В” книги , що видпні у видавництві „Дніпро” після 1990р.
Вилучення обраних по порядковому номеру записів
Відновлення записів .
Вивід файлу „А”
Вивід файлу „В”
0. Вихід.
При виборі того чи іншого пункту меню відбувається відповідна операція.
ВИСНОВКИ
В даній курсовій роботі розроблено програму, яка створює файл „А”, що містить бібліографічну інформацію: порядковий номер запису, автор книги, назва книги, назва видавництва, обсяг книги кількість сторінок, рік видання.
Створене меню дозволяє виконувати одну із запропонованих операції:
Створювати файл „А”, заповнювати його інформацією про книги.
Поповнювати файл „В”.
Виконувати пошук книг, що видані у видавництві ”Дніпро”, після 1990р., та записувати йі дані до файлу „В”.
Видаляти із файлу обрані по порядковому номеру записи.
Відновлення їх.
Виводити файл „А” на екран.
Виводити файл „В” на екран.
ПЕРЕЛІК ВИКОРИСТАНОЇ ЛІТЕРАТУРИ
Глушаков С.В., Коваль А.В., Смирнов С.В. Язык программирования С++. – Харьков: Фолио, 2002. – 500 с.
Г. Шилдт. Самоучитель C++: Пер. с англ. - Санкт-Петербург: BHV-Санкт-Петербург, 1998. 620с.
К. Джамса. Учимся программировать на языке C++: Пер. с англ. - Москва: Мир, 1997. 320с.
4. Т.А. Павловська. С/С++ Програмирование на языке высокогоуровня. Издательский дом „Питер”, 2004. 460 с.