У нас: 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();

До зміної к додасться кількість зчитаних символів.

Опис виконання програми.

Спочатку реалізовується заповнення файлу „B”. Створюється файл „В” в бінарному режимі , і реалізується потік на ввід інформації у файл. Заповнюється структура з клавіатури, і за допомогою функції 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 <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 surname[20];

int rik;

char al_name[20];

char vydavnyctvo[20];

char show;

}lib;

//----------PROGA-------------------

do {

cout<<"1. Zapovnyty fail B.\n";

cout<<"2. Popovnyty fail B\n";

cout<<"3. Druk knygok nadrukovanyh v vydavnyctvi "<<"Prosvita"<<" pislja 1990\n";

cout<<"4. Vydalennja zapysiv po porjadkovomu nomeru \n";

cout<<"5. Vidnovlennja zapysiv po porjadkovomu nomeru \n";

cout<<"6. Vyvid na ekran Failu B \n";

cout<<"7. Vyvid na ekran failu BI \n";

cout<<"0. Exit\n";

cout<<"Vuberit punkt menu:";

cin>>menu;

if(menu==0) exit(1);

//--------1--------ZAPOVNENNJA-------1-------------------

if (menu==1)

{

ofstream f("B",ios::binary);

if (!f){

cout<<"OOPS-pomylka"<<endl; return 1;}

do {

cout<<"Vvedit porjadkovyj nomer:\n";

cin>>lib.UDK;

cout<<"Vvedit prizvuw4e avtora:\n";

cin>>lib.surname;

cout<<"VVedit nazvu knygky\n";

cin>>lib.al_name;

cout<<"VVedit vydavnyctvo\n";

cin>>lib.vydavnyctvo;

cout<<"Vvedit rik vudannja:\n";

cin>>lib.rik;

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("B", 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 algorytmichnoji movy\n";

cin>>lib.al_name;

cout<<"VVedit vydavnyctvo\n";

cin>>lib.vydavnyctvo;

cout<<"Vvedit rik vudannja:\n";

cin>>lib.rik;

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){

int n=0;

ifstream f("B", ios::in|ios::binary);

if (!f){

cout<<"OOPS-pomylka"<<endl; return 1;}

ofstream fp("BI", 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,"Prosvita"))

if(lib.rik>1990)

if(lib.show=='y'){

cout<<"\nazva knugu: "<<lib.al_name

<<"\nPorjadkovyj nomer: "<<lib.UDK

<<"\nprizvush4e avtora: "<<lib.surname

<<"\nvydavnyctvo: "<<lib.vydavnyctvo

<<"\nrik vudanna: "<<lib.rik<<endl;

if (strstr(lib.al_name,"C")) n+=1;

fp.write((char *)&lib, sizeof(lib));

}}

m3:

fp.write((char *)&n, sizeof(n));

cout<<"Po movi C:"<<n<<"knygka(ok)\n";

}

//|||||||||||+++++++++++++++++++++++++++++++++++++++++++++++++++

if (menu==4){

do{

cout<<"Vvedit neobhidnyj nomer knygky:";

cin>>nomer;

fstream f("B", ios::in|ios::out|ios::binary);

if (!f){

cout<<"OOPS-pomylka"<<endl; return 1;}

fstream fp("BI", 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';

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("B", ios::in|ios::out|ios::binary);

if (!f){

cout<<"OOPS-pomylka"<<endl; return 1;}

fstream fp("BI", 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("B", 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<<"\nAlgorytmichna mova: "<<lib.al_name

<<"\nPorjadkovyj nomer: "<<lib.UDK

<<"\nprizvush4e avtora: "<<lib.surname

<<"\nvydavnyctvo: "<<lib.vydavnyctvo

<<"\nrik vudanna: "<<lib.rik<<endl;

}

m1:

}}

//+++++++++++++++++++++++++7777777777777777777+++++++++++++++++

if (menu==7){

ifstream fp("BI", 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<<"\nAlgorytmichna mova: "<<lib.al_name

<<"\nPorjadkovyj nomer: "<<lib.UDK

<<"\nprizvush4e avtora: "<<lib.surname

<<"\nvydavnyctvo: "<<lib.vydavnyctvo

<<"\nrik vudanna: "<<lib.rik<<endl;

}

m2:

} }

cout<<"Vu xochete povernytusja v MENU (y/n)?";

cin>>ch;

}

while(ch!='n');

getch();

}

Результати роботи програми:

Меню:

Сформувати файл В , який містить інформацію про книги по програмуванню : порядковий номер запису, прізвище автора , назва книги, назва видавництва, алгоритмічна мова, рік видання.

Поповнити файл „В”.

Занести у файл „В” книги , що видані у видавництві „Просвіта” після 1990р, написані по мові „С”.

Вилучення обраних по порядковому номеру записів

Відновлення записів .

Вивід файлу „В”

Вивід файлу „ВІ”

0. Вихід.

При виборі того чи іншого пункту меню відбувається відповідна операція.

ВИСНОВКИ

В даній курсовій роботі розроблено програму, яка створює файл „В”, що містить інформацію про книги по програмуванню : порядковий номер запису, автор книги, назва видавництва, алгоритмічна мова, рік видання.

Створене меню дозволяє виконувати одну із запропонованих операції:

Створювати файл „В”, заповнювати його інформацією про книги.

Поповнювати файл „В”.

Виконувати пошук книг, що видані у видавництві ”Дніпро”, після 1990р.,і написані на мові „С” , та записувати йі дані до файлу „ВІ”.

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

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

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

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

ПЕРЕЛІК ВИКОРИСТАНОЇ ЛІТЕРАТУРИ

Глушаков С.В., Коваль А.В., Смирнов С.В. Язык программирования С++. – Харьков: Фолио, 2002. – 500 с.

Г. Шилдт. Самоучитель C++: Пер. с англ. - Санкт-Петербург:


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