потоку : вводу, виводу, вводк-виводу. Для того щоб створити потік вводу потрібно , об’явити потік , що являє собою об’єкт класу 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 чи потрібне поле співпадає з заданим фільтром у даному випадку чи поле “obl”= Івано-Франківськ і поле rik>=19. Якщо так тоді цей запис виводиться на екран.
Видалення записів відбувається так:
за тим же алгоритмом шукається потрібний запис ;
міняється поле структури 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,slash;
int menu,nomer;
int k=0;
struct{
int UDK;
char surname[20];
int rik,misjac,den;
char obl[20];
char misto[20];
char vyl[20];
char stat;
char show;
}stud;
//----------PROGA-------------------
do {
cout<<"1. Zapovnyty fail A.\n";
cout<<"2. Popovnyty fail A\n";
cout<<"3. Prizvysha studentiv, sho progyvaut v Ivano-Frankivskij oblasti,\n choloviky, starshe 18 rokiv\n";
cout<<"4. Vydalennja zapysiv pro studentiv \n";
cout<<"5. Vidnovlennja zapysiv pro dtudentiv \n";
cout<<"6. Vyvid na ekran Failu A \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 orjadkovyj nomer:\n";
cin>>stud.UDK;
cout<<"Vvedit prizvuw4e studenta:\n";
cin>>stud.surname;
cout<<"VVedit datu.misjac.rik narodgennja\n";
cin>>stud.den>>slash>>stud.misjac>>slash>>stud.rik;
cout<<"VVedit misce progyvannja:\n";
cout<<"VVedit oblast progyvannja studenta:\n";
cin>>stud.obl;
cout<<"VVedit misto progyvannja:\n";
cin>>stud.misto;
cout<<"VVedit vyl, budynok, kvartyru:\n";
cin>>stud.vyl;
cout<<"Vvedit stat studenta (m/f):\n";
cin>>stud.stat;
stud.show='y';
f.write((char *)&stud, sizeof(stud));
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 *) &stud,sizeof(stud));
if(hh=stud.UDK) cout<<”Pomylka vvodu. Vvedit inwyj nomer zapysu! \n”
goto m9;}
stud.UDK=hh;
cout<<"Vvedit prizvuw4e studenta:\n";
cin>>stud.surname;
cout<<"VVedit datu.misjac.rik narodgennja\n";
cin>>stud.den>>slash>>stud.misjac>>slash>>stud.rik;
cout<<"VVedit misce progyvannja:\n";
cout<<"VVedit oblast progyvannja studenta:\n";
cin>>stud.obl;
cout<<"VVedit misto progyvannja:\n";
cin>>stud.misto;
cout<<"VVedit vyl, budynok, kvartyru:\n";
cin>>stud.vyl;
cout<<"Vvedit stat studenta (m/f):\n";
cin>>stud.stat;
stud.show='y';
f.write((char *)&stud, sizeof(stud));
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;}
cout<<"Prizvysha studentiv, sho progyvaut v Ivano-Frankivskij oblasti, choloviky, starshe 18 rokiv\n";
while(f){
f.read((char *) &stud,sizeof(stud));
if (f.gcount()==0)goto m3;
if(stud.stat=='m')
if(strstr(stud.obl,"Ivano-Frankivsk"))
if(stud.rik<=1985)
if(stud.show=='y'){
if (ch=='y'){
cout<<stud.surname<<endl;
f.close();
}
}}m3:}
//|||||||||||+++++++++++++++++++++++++++++++++++++++++++++++++++
if (menu==4){
do{
cout<<"Vvedit neobhidnyj nomer studenta, jakogo otribno vyluchyty:";
cin>>nomer;
fstream f("A", ios::in|ios::out|ios::binary);
if (!f){
cout<<"OOPS-pomylka"<<endl; return 1;}
k=0;
while(f){
f.read((char *) &stud,sizeof(stud));
if(stud.UDK==nomer){
stud.show='n';
f.seekg(k,ios::beg);
f.write((char*) &stud, sizeof(stud));
}
k+=f.gcount();
}
cout<<"vvesty we?"; cin>>ch;
}while(ch!='n');
}
//+++++++++++++555555555555555555555555555++++++++++++++++++++++
if (menu==5){
do{
cout<<"Vvedit neobhidnyj nomer studenta, jakogo potribno vidnovyty:";
cin>>nomer;
fstream f("A", ios::in|ios::out|ios::binary);
if (!f){
cout<<"OOPS-pomylka"<<endl; return 1;}
k=0;
while(f){
f.read((char *) &stud,sizeof(stud));
if(stud.UDK==nomer){
stud.show='y';
f.seekg(k,ios::beg);
f.write((char*) &stud, sizeof(stud));
}
k+=f.gcount();
}
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 *) &stud,sizeof(stud));
if (f.gcount()==0)goto m1;
if(stud.show=='y'){
cout<<"\nnomer UDK: "<<stud.UDK
<<"\nprizvyshe: "<<stud.surname
<<"\nNarodyvsja: "<<stud.den<<slash<<stud.misjac<<slash<<stud.rik
<<"\nProgyvae: "<<stud.obl<<" "<<stud.misto<<" "<<stud.vyl
<<"\nstat studenta: "<<stud.stat<<endl;
}
m1:
}}
cout<<"Vu xochete povernytusja v MENU (y/n)?";
cin>>ch;
}
while(ch!='n');
getch();
}
Результати роботи програми:
Меню:
Сформувати файл С , який містить інформацію про студентів вашої групи: порядковий номер запису, день ,місяць, рік народження, місце проживання, стать (Ч або Ж)
Поповнити файл „С”.
Вивести на друк студентів, що проживають в Івано-Франківській область і яким на даний момент виповнилось 19 років
Вилучення обраних по порядковому номеру записів
Відновлення записів .
Вивід файлу „С”
0. Вихід.
При виборі того чи іншого пункту меню відбувається відповідна операція.
ВИСНОВКИ
В даній курсовій роботі написано програму, яка створює файл „С”, що містить інформацію про студентів вашої групи: порядковий номер запису, день ,місяць, рік народження, місце проживання, стать (Ч або Ж),.
Створене меню дозволяє виконувати одну із запропонованих операції:
Створювати файл „С”, заповнювати його інформацією про студентів.
Поповнювати файл „С”.
Виконувати пошук студентів, що проживають в Івано-Франківській область і яким на даний момент виповнилось 19 років
Видаляти із файлу обрані по порядковому номеру записи.
Відновлення їх.
Виводити файл „С” на екран.
ПЕРЕЛІК ВИКОРИСТАНОЇ ЛІТЕРАТУРИ
Глушаков С.В., Коваль А.В., Смирнов С.В. Язык программирования С++. – Харьков: Фолио, 2002. – 500 с.
Г. Шилдт. Самоучитель C++: Пер. с англ. - Санкт-Петербург: BHV-Санкт-Петербург, 1998. 620с.
К. Джамса. Учимся программировать на языке C++: Пер. с англ. - Москва: Мир, 1997. 320с.
4. Т.А. Павловська. С/С++ Програмирование на языке высокогоуровня. Издательский дом „Питер”, 2004. 460 с.