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


того щоб створити потік вводу потрібно , об’явити потік , що являє собою об’єкт класу 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 чи потрібне поле співпадає з заданим фільтром у даному випадку чи поле surname=prizvyshe(введене прізвище з клавіатури) і поле rik=rik_vydannja . Якщо так,тоді по вимозі користувача , цей запис переписується у файл „В”(попередньо відкритий у режимі дописування в кінець), і виводиться на екран.

Видалення записів відбувається так:

за тим же алгоритмом шукається потрібний запис ;

міняється поле структури 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 book_name[20];

char vydavnyctvo[20];

char show;

}lib;

//----------PROGRAMA-------------------

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<<"UPS"<<endl; return 1;}

do {

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 prizvuwshe 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;

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<<"UPS"<<endl; return 1;}

//-----------------------------------------

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

cin>>lib.UDK;

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

cin>>lib.surname;

cout<<"VVedit nazvu knygky";

cin>>lib.book_name;

cout<<"VVedit vydavnyctvo";

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

cout<<"VVedit prizvyshe vykladacha dlja poshuku";

int rik_vydannja;

cin>>prizvyshe;

cout<<"VVedit rik vydannja knygky dlja poshuku";

cin>>rik_vydannja;

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

if (!f){

cout<<"UPS"<<endl; return 1;}

while(f){

f.read((char *) &lib,sizeof(lib));

if (f.gcount()==0)goto m3;

if(strstr(lib.surname,prizvyshe))

if(lib.rik==rik_vydannja)

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

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

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

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

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

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

cout<<"Zanosyty do failu B ? (y/n)";

cin>>ch;

if (ch=='y'){

ofstream fp("B", ios::out|ios::binary);

if (!fp){

cout<<"UPS"<<endl; return 1;}

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<<"UPS"<<endl; return 1;}

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

if (!fp){

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

if (!f){

cout<<"UPS"<<endl; return 1;}

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

if (!fp){

cout<<"UPS"<<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<<"UPS"<<endl; return 1;}

while(f){

f.read((char *) &lib,sizeof(lib));

if (f.gcount()==0)goto m1;

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

cout<<"\nnazva knugu: "<<lib.book_name

<<"\nnomer UDK: "<<lib.UDK

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

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

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

}m1:}}

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

if (menu==7){

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

if (!fp){

cout<<"UPS"<<endl; return 1;}

while(fp){

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

if (fp.gcount()==0)goto m2;

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

cout<<"\nnazva knugu: "<<lib.book_name

<<"\nnomer UDK: "<<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();

}

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

Меню:

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

Додати книгу у бібліотеку.

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

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

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

Вивід файлу А

Вивід файлу В

0. Вихід.

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

ВИСНОВКИ

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

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

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

Поповнювати файл А.

Виконувати пошук необхідної книги за порядковим номером.

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

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

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

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

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

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

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

К. Джамса. Учимся программировать на языке C++: Пер. с англ. - Москва: Мир, 1997. 320с.

4. Т.А. Павловська. С/С++ Програмирование на языке


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