3 види потоку : вводу, виводу, вводк-виводу. Для того щоб створити потік вводу потрібно , об’явити потік , що являє собою об’єкт класу 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 чи потрібне поле співпадає з заданим фільтром у даному випадку чи поле “time”>10 і поле “cost”>30 . Якщо так, тоді цей запис переписується у файл „AВ”(попередньо відкритий у режимі дописування в кінець), і виводиться на екран, по вимозі користувача.
Видалення записів відбувається так:
за тим же алгоритмом шукається потрібний запис ;
міняється поле структури lib- show- з „Y”(при заповненні файлу це поле автоматично стає „Y”), на “N” .
структура записується на теж саме місце де й була. За допомогою функції write, (курсор у файлі повертається у те місце де починалось зчитування за допомогою функції seekp()).
При відновленні якогось запису відбувається таж операція , але поле show приймає значення „Y” .
Вивід файлів на екран відбувається за допомогою функції read() . Читаються записи , і якщо поле show=”Y” тоді запис виводиться на екран, якщо ні , тоді вона пропускається.
3 ТЕКСТ ПРОГРАМИ
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <iostream.h>
#include <fstream.h>
#include <io.h>
main()
{
char ch;
int menu,nomer;
char prizvyshe[20];
int k=0;
struct{
int UDK;
char city[20];
int cost,time;
char tel[20];
char show;
}ats;
//----------PROGA-------------------
do {
cout<<"1. Zapovnyty fail C.\n";
cout<<"2. Popovnyty fail C.\n";
cout<<"3. Formuvannja rozmov wo velys dovshe nig 10 hv i dorrogche 30grn\n";
cout<<"4. Vydalennja zapysiv po porjadkovomu nomeru \n";
cout<<"5. Vidnovlennja zapysiv po porjadkovomu nomeru \n";
cout<<"6. Vyvid na ekran Failu C \n";
cout<<"7. Vyvid na ekran failu AB \n";
cout<<"0. Exit\n";
cout<<"Vuberit punkt menu:";
cin>>menu;
if(menu==0) exit(1);
//--------1--------ZAPOVNENNJA-------1-------------------
if (menu==1)
{
ofstream f("C",ios::binary);
if (!f){
cout<<"OOPS-pomylka"<<endl; return 1;}
do {
cout<<"Vvedit nomer zapysu:\n";
cin>>ats.UDK;
cout<<"Vvedit misto zjakym velas rozmova:\n";
cin>>ats.city;
cout<<"VVedit nomer telefonu\n";
cin>>ats.tel;
cout<<"VVedit vartist rozmovy\n";
cin>>ats.cost;
cout<<"Vvedit chas rozmovy:\n";
cin>>ats.time;
ats.show='y';
f.write((char *)&ats, sizeof(ats));
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("C", 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 *) &ats,sizeof(ats));
if(hh=ats.UDK) cout<<”Pomylka vvodu. Vvedit inwyj nomer zapysu! \n”
goto m9;}
ats.UDK=hh;
cout<<"Vvedit misto zjakym velas rozmova:\n";
cin>>ats.city;
cout<<"VVedit nomer telefonu\n";
cin>>ats.tel;
cout<<"VVedit vartist rozmovy\n";
cin>>ats.cost;
cout<<"Vvedit chas rozmovy:\n";
cin>>ats.time;
ats.show='y';
f.write((char *)&ats, sizeof(ats));
f.close();
cout<<"vvesty we?"; cin>>ch;
}while(ch!='n');
}
//--------2--------DOPYSUVANNJA-------2-------------------
//=========1=======POSHUK==============1==================
if (menu==3){
float i=0;
ifstream f("C", ios::in|ios::binary);
if (!f){
cout<<"OOPS-pomylka"<<endl; return 1;}
ofstream fp("AB", ios::out|ios::binary);
if (!fp){
cout<<"OOPS-omylka"<<endl; return 1;}
while(f){
f.read((char *) &ats,sizeof(ats));
if (f.gcount()==0)goto m3;
cout<<"Vyvesty informaciu na ekran?(y/n)";
cin>>ch;
if(ats.time>=10)
if(ats.cost>30)
if(ats.show=='y'){
i+=ats.cost;
if (ch=='y')
cout<<"\nPorjadkovyj nomer: "<<ats.UDK
<<"\nMisto z jakym velas rozmova: "<<ats.city
<<"\nNomer telefonu: "<<ats.tel
<<"\nChas rozmovy: "<<ats.time
<<"\nVartist rozmovy: "<<ats.cost<<endl;
fp.write((char *)&ats, sizeof(ats));
}}m3:
fp.write((char *)&i, sizeof(i));
cout<<"Povna vartist rozmov= "<<i<<endl;
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++
if (menu==4){
do{
cout<<"Vvedit neobhidnyj nomer knygky:";
cin>>nomer;
fstream f("C", ios::in|ios::out|ios::binary);
if (!f){
cout<<"OOPS-pomylka"<<endl; return 1;}
fstream fp("AB", ios::in|ios::out|ios::binary);
if (!fp){
cout<<"OOPS-pomylka"<<endl; return 1;}
k=0;
while(f){
f.read((char *) &ats,sizeof(ats));
if(ats.UDK==nomer){
ats.show='n';
f.seekg(k,ios::beg);
f.write((char*) &ats, sizeof(ats));
}
k+=f.gcount();
}
//????????DUBL??????????????DUBL??????????????DUBL??????????????DUBL?????
k=0;
while(fp){
fp.read((char *) &ats,sizeof(ats));
if(ats.UDK==nomer){
ats.show='n';
fp.seekg(k,ios::beg);
fp.write((char* ) &ats, sizeof(ats));
}
k+=fp.gcount();
}
//????????DUBL??????????????DUBL??????????????DUBL??????????????DUBL?????
cout<<"vvesty we?"; cin>>ch;
}while(ch!='n');
}
//+++++++++++++555555555555555555555555555++++++++++++++++++++++
if (menu==5){
do{
cout<<"Vvedit neobhidnyj nomer zapysu:";
cin>>nomer;
fstream f("C", ios::in|ios::out|ios::binary);
if (!f){
cout<<"OOPS-pomylka"<<endl; return 1;}
fstream fp("AB", ios::in|ios::out|ios::binary);
if (!fp){
cout<<"UPS"<<endl; return 1;}
k=0;
while(f){
f.read((char *) &ats,sizeof(ats));
if(ats.UDK==nomer){
ats.show='y';
f.seekg(k,ios::beg);
f.write((char*) &ats, sizeof(ats));
}
k+=f.gcount();
}
//????????DUBL??????????????DUBL??????????????DUBL?????????????DUBL??????
k=0;
while(fp){
fp.read((char *) &ats,sizeof(ats));
if(ats.UDK==nomer){
ats.show='y';
fp.seekg(k,ios::beg);
fp.write((char* ) &ats, sizeof(ats));
}
k+=fp.gcount();
}
//???????DUBL??????????????DUBL??????????????DUBL??????????????DUBL??????
cout<<"vvesty we?"; cin>>ch;
}while(ch!='n');
}
//++++++++666666666666666666666666++++++++++++++++++++++++++++++
if (menu==6){
ifstream f("C", ios::in|ios::beg|ios::binary);
if (!f){
cout<<"OOPS-pomylka"<<endl; return 1;}
while(f){
f.read((char *) &ats,sizeof(ats));
if (f.gcount()==0)goto m1;
if(ats.show=='y'){
cout<<"\nPorjadkovyj nomer: "<<ats.UDK
<<"\nMisto z jakym velas rozmova: "<<ats.city
<<"\nNomer telefonu: "<<ats.tel
<<"\nChas rozmovy: "<<ats.time
<<"\nVartist rozmovy: "<<ats.cost<<endl;
}
m1:
}}
//+++++++++++++++++++++++++7777777777777777777+++++++++++++++++
if (menu==7){
ifstream fp("AB", ios::in|ios::binary);
if (!fp){
cout<<"OOPS-pomylka"<<endl; return 1;}
while(fp){
fp.read((char *) &ats,sizeof(ats));
if (fp.gcount()<10)goto m2;
if(ats.show=='y'){
cout<<"\nPorjadkovyj nomer: "<<ats.UDK
<<"\nMisto z jakym velas rozmova: "<<ats.city
<<"\nNomer telefonu: "<<ats.tel
<<"\nChas rozmovy: "<<ats.time
<<"\nVartist rozmovy: "<<ats.cost<<endl;
}
}m2: }
cout<<"Vu xochete povernytusja v MENU (y/n)?";
cin>>ch;
}
while(ch!='n');
getch();
}
Результати роботи програми:
Меню:
Сформувати файл С , який містить інформацію телефонні розмови (порядковий номер запису, місто, з яким велась розмова, номер телефону, вартість розмови, час розмови).
Поповнити файл „С”.
Сформувати файл абонентів „АВ”, з якими велась ромова протягом 10 хвилин і більше і витрати на одну розмову переговорів. Вивести цю інформацію по бажанні користувача на екран.
Вилучення обраних по порядковому номеру записів
Відновлення записів .
Вивід файлу „С”
Вивід файлу „АВ”
0. Вихід.
При виборі того чи іншого пункту меню відбувається відповідна операція.
ВИСНОВКИ
В даній курсовій роботі розроблено програму, яка створює файл „С”, що містить інформацію про телефонні розмови (порядковий номер запису, місто, з яким велась розмова, номер телефону, вартість розмови, час розмови).
Створене меню дозволяє виконувати одну із запропонованих операції:
Створювати файл „С”, заповнювати його інформацією про телефонні розмови.
Поповнювати файл „С”.
Виконувати пошук телефонної розмови, що тривала більше 10 хв. і коштувала більше 30грн. .
Видаляти із файлу обрані по порядковому номеру записи.
Відновлення їх.
Виводити файл „С” на екран.
Виводити файл „АВ” на екран.
ПЕРЕЛІК