У нас: 141825 рефератів
Щойно додані Реферати Тор 100
Скористайтеся пошуком, наприклад Реферат        Грубий пошук Точний пошук
Вхід в абонемент


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грн. .

Видаляти із файлу обрані по порядковому номеру записи.

Відновлення їх.

Виводити файл „С” на екран.

Виводити файл „АВ” на екран.

ПЕРЕЛІК


Сторінки: 1 2 3