You are on page 1of 14

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

НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”

Кафедра САПР

ІНДЕКСНО-ПОСЛІДОВНИЙ МЕТОД ДОСТУПУ ДО ФАЙЛІВ НА


ЗОВНІШНІХ ЗАПАМ’ЯТОВУЮЧИЙ ПРИСТРОЯХ

ЗВІТ
до лабораторної роботи № 3 з курсу:
“ Організація баз даних і знань ”

Виконав:
студент групи КН-24
Дикий Н. В.
Прийняв:
Головацький Р. І.

ЛЬВІВ 2016
1. ТЕМА

Індексно-послідовний метод доступу до файлів на зовнішніх


запам’ятовуючих пристроях.

2. МЕТА РОБОТИ

Розглянути органiзацiю i ведення файлiв iндексно-послiдовного


доступу; набути практичнi навички у програмуваннi алгоритмiв iндексно-
послiдовного доступу до файлiв на зовнiшнiх запам'ятовуючих пристроях.

3. ЛАБОРАТОРНЕ ЗАВДАННЯ

Написати програму для підтримки індексно-послідовного методу доступу до


файлів, яка реалiзує такi функцiї:
1. Створення файлу бази даних.
2. Друк бази даних.
3. Читання запису за введеним ключем.
4. Пошук запису за введеним ключем (не менше 3х полів).
5. Видалення запису за введеним ключем.
6. Вставлення запису.
7. Модифiкацiя запису.
8. Захист від переповнень.

Тема бази даних: «Веломагазин»

4. ТЕОРЕТИЧНІ ВІДОМОСТІ

Головною особливiстю прямого методу доступу є взаємна однозначна


вiдповiднiсть мiж ключем запису i його фiзичною адресою. Фiзичне
розмiщення запису визначається безпосередньо iз значення ключа.
Створивши файл прямого доступу i видiливши для нього необхiдну
дiлянку пам’ятi, можна вставляти записи у будь-якi мiсця файла. Перевага
такого пiдходу над послiдовною органiзацiєю файла полягає у тому, що
вдається отримати запис за заданим значенням ключа без попереднього
перегляду всiх попереднiх записiв файла.
ЕФЕКТИВНІСТЬ ДОСТУПУ дорiвнює одиницi.
ЕФЕКТИВНІСТЬ ЗБЕРІГАННЯ залежить вiд густини ключiв. Якщо
густина низька, пам’ять використовується неефективно, оскiльки
резервуються адреси, що вiдповiдають вiдсутнiм ключам. У цьому випадку
доцiльно використовувати для органiзацiї файла метод хешування. Пряму
адресацiю можна важати частковим випадком методу хешування.
На практицi кiлькiсть можливих значень ключiв набагато перевищує
кiлькiсть реально присутнiх у будь-який момент значень цього ключа. У
цьому випадку пряма адресацiя є невигiдною, оскiльки надто багато пам’ятi
резервується для записiв, яких немає i нiколи не буде у файлi. Метод
хешування дає змогу уникнути цього i водночас зберегти ефективнiсть,
властиву прямiй адресацiї.
На основi iнформацiї про множину фактичних значень ключiв створюється
файл прямого доступу з такою кiлькiстю записiв, яка дещо перевищує
фактичне значення ключiв.

5. ТЕКСТ ПРОГРАМИ
#include <iostream> char*
#include <fstream> strcpy(config, c = new char;
#include <conio.h> "-");
#include <locale.h> group = 0; f.read(c,
#include <iomanip> subgr = 0; sizeof(char));
}
using namespace std; void Enter() { f.seekg(-1,
cin >> num ios::cur);
struct Index { >> name >> shrt >> mass cout
int min; >> melt >> boil >> val >> << "==========Блок " << +
int pos; config >> group >> subgr; +i << "==========" <<
}; } endl;
void Print(int w) while
Index GetData(fstream { (*c != 0) {
&f);
void WriteData(Index tmp,
fstream &f); if (f.tellg() >=
cout.setf(ios::left); tmp.pos + 500) {
void IndexSort();
cout <<
void
setw(w) << num << setw(w)
RemakePointers(fstream& break;
<< name << setw(w) <<
f);
shrt << setw(w) << mass
<< setw(w) << melt << }
class Element {
setw(w) << boil <<
int num; pos = f.tellg();
setw(w) << val << setw(w)
char name[20];
<< config << setw(w) <<
char shrt[5];
group << setw(w) << subgr Get(f);
double mass;
<< endl;
double melt;
} Print(15);
double boil;
void
int val;
Print_All(fstream& f,
char config[20]; f.seekg(pos + 100,
fstream& in) {
int group; ios::beg);
Index tmp;
int subgr;
int pos;
public: f.read(c,
int i = 0;
Element() { sizeof(char));
f.seekg(0,
num = 19;
ios::beg);
while if (!f.eof()) {
strcpy(name, "-"); (in.tellg() <
FileLength(in)) { f.seekg(-1,
strcpy(shrt, "-"); tmp ios::cur);
mass = 0; = GetData(in);
melt = 0;
boil = 0; }
f.seekg(tmp.pos,
val = 0; ios::beg);
else {
ofstream f <<
*c = 0; e("D:\\Mykola\\ (char)0;
Elem_Index.txt"); }
char* c = int
}
new char; FindOffset(fstream& in,
}
int a; int ck) {
}
cout << Index tmp;
}
"Виберiть варiант:" << Index last;
int GetNum() {
endl; in.seekg(0,
return num;
cout << "1 ios::beg);
}
- Створити пустий файл" tmp =
void Get(fstream&
<< endl; GetData(in);
f) {
cout << "2 if (ck <
f >> num >>
- Заповнити файл даними" tmp.min) return 0;
name >> shrt >> mass >>
<< endl; while
melt >> boil >> val >>
cin >> a; (in.tellg() <
config >> group >> subgr;
switch (a) FileLength(in)) {
}
{ last
int
case 1: = tmp;
FileLength(fstream& f) {
cout tmp =
int off =
<< "Файл створено" << GetData(in);
f.tellg();
endl; if
int len =
((ck < tmp.min) && (ck >=
0;
BlockCreate(f, 0); last.min))
f.seekg(0,
ios::end); e <<
len = 0 << " " << 0 << endl; return last.pos;
f.tellg(); }
break; if (ck >=
case 2: tmp.min) return tmp.pos;
f.seekg(off,
}
ios::beg);
void
return len; d.read(c,
Reorganize(fstream &f,
} sizeof(char));
fstream& in, int off) {
void
cout <<
BlockCreate(fstream& f, while (!d.eof()){ "Reorganizing" << endl;
int pos) {
Element
f.write(c, *arr = new Element[6];
f.seekp(pos, sizeof(char)); Index ob;
ios::beg); int pos =
f.seekp(pos off;
d.read(c,
+ 499, ios::beg); int end =
sizeof(char));
f << FileLength(f);
}
(char)0; arr[0] =
cout
} *this;
<< "Файл створено" <<
void
endl;
BlockCreate(ofstream& f,
f.seekg(pos,
int pos) {
f.close(); ios::beg);
for (int i
f.seekp(pos, = 1; i < 6; i++) {
ios::beg); d.close();
f.seekp(pos
e.close(); Get(f);
+ 499, ios::beg);
f <<
(char)0; arr[i] = *this;
break;
} }
void CreateFile() } ClearEntry(f,
{ void pos);
ofstream ClearEntry(fstream& f,
f("D:\\Mykola\\ int pos) { f.seekg(pos + 100,
Elem_1.txt"); ios::beg);
ifstream pos =
f.seekp(pos,
d("D:\\Mykola\\ ios::beg); f.tellg();
Elem_Original.txt"); }
for (int i
= 0; i < 100; i++)
for (int i Reorganize(f, in, f.read(c,
= 0; i < 5; i++) off); sizeof(char));
for
(int j = 0; j < 5 - i; j+ return; f.seekg(-1,
+) ios::cur);
} while
if (arr[j].num > (*c != 0) {
arr[j + 1].num)
f.read(c,
swap(arr[j], arr[j + 1]); if (f.tellg() >=
sizeof(char));
ob.pos = tmp.pos + 500) {
FileLength(f);
ob.min = if (!f.eof()) {
break;
arr[3].num;
cout << f.seekg(-1,
"Створено новий блок" << ios::cur); }
endl;
} pos = f.tellg();
BlockCreate(f,
end); else *c = 0; Get(f);
in.seekg(0, }
ios::end); cout << if (num == a) {
"After" << endl;
WriteData(ob, in); f << num << cout <<
" " << name << " " << "Запис знайдено:" <<
f.seekg(off, shrt << " " << mass << " endl;
ios::beg); " << melt << " " << boil
for (int i << " " << val << " " <<
b = true;
= 0; i < 3; i++) config << " " << group <<
" " << subgr << endl;
cout << Print(15);
"Entered" << endl;
arr[i].FileWrite(f, in, }
off);
for (int i f.seekp(off,
= 3; i < 6; i++) ios::beg); f.seekg(pos + 100,
f.seekp(off ios::beg);
+ 100, ios::beg);
} f.read(c,
arr[i].FileWrite(f, in,
void sizeof(char));
end);
Search_1(fstream& f,
}
fstream& in) {
void if (!f.eof()) {
int a;
FileWrite(fstream& f,
bool b =
fstream & in, int off) { f.seekg(-1,
false;
Index tmp; ios::cur);
f.seekg(off, int pos;
ios::beg); f.seekg(0, }
char* c = ios::beg);
new char; cout << else {
f.read(c, "Введiть данi:" << endl;
sizeof(char)); cin >> a;
f.seekg(-1, *c = 0;
while
ios::cur); (in.tellg() <
FileLength(in)) { }
while (*c != 0) { tmp }
= GetData(in); }
if (!b)
f.seekp(100, cout << "Запис не
ios::cur); f.seekg(tmp.pos, знайдено" << endl;
ios::beg); }
if void
((int)f.tellp()==(off + char* c = new Search_2(fstream& f,
500)) { char; fstream& in) {
char *s =
new char[20];
bool b =
false; f.seekg(-1, if (strcmp(s,
Index tmp; ios::cur); shrt) == 0) {
int pos;
f.seekg(0,
} cout <<
ios::beg);
"Запис знайдено:" <<
cout <<
else { endl;
"Введiть данi:" << endl;
cin >> s;
while *c = 0; b = true;
(in.tellg() <
FileLength(in)) { } Print(15);
tmp }
= GetData(in); } }
if (!b)
f.seekg(tmp.pos, cout << "Запис не f.seekg(pos + 100,
ios::beg); знайдено" << endl; ios::beg);
}
char* c = new void
f.read(c,
char; Search_3(fstream& f,
sizeof(char));
fstream& in) {
char *s =
f.read(c, if (!f.eof()) {
new char[5];
sizeof(char));
bool b =
false; f.seekg(-1,
f.seekg(-1, Index tmp; ios::cur);
ios::cur); int pos;
f.seekg(0, }
while (*c != 0) { ios::beg);
cout << else {
if (f.tellg() >= "Введiть данi:" << endl;
tmp.pos + 500) { cin >> s;
while *c = 0;
(in.tellg() <
break; }
FileLength(in)) {
tmp }
} = GetData(in); }
if (!b)
pos = f.tellg(); f.seekg(tmp.pos, cout << "Запис не
ios::beg); знайдено" << endl;
Get(f); }
void
char* c = new Search_4(fstream& f,
if (strcmp(s, char;
fstream& in) {
name) == 0) {
double d;
f.read(c, bool b =
cout << sizeof(char)); false;
"Запис знайдено:" << Index tmp;
endl; f.seekg(-1, int pos;
ios::cur); f.seekg(0,
b = true; ios::beg);
while (*c != 0) { cout <<
Print(15); "Введiть данi:" << endl;
cin >> d;
if (f.tellg() >=
while
} tmp.pos + 500) {
(in.tellg() <
FileLength(in)) {
f.seekg(pos + 100, break; tmp =
ios::beg); GetData(in);
}
f.read(c, f.seekg(tmp.pos,
sizeof(char)); pos = f.tellg(); ios::beg);
char*
if (!f.eof()) { Get(f); c = new char;
bool b = f.seekg(-1,
f.read(c, false; ios::cur);
sizeof(char)); Index tmp;
int pos; }
f.seekg(0,
f.seekg(-1,
ios::beg);
ios::cur); else {
cout <<
"Введiть данi:" << endl;
while (*c != 0) { cin >> d; *c = 0;
while
if (f.tellg() >= (in.tellg() < }
tmp.pos + 500) { FileLength(in)) { }
tmp }
break; = GetData(in); if (!b)
cout << "Запис не
f.seekg(tmp.pos, знайдено" << endl;
}
ios::beg); }
void
pos = f.tellg(); Search_6(fstream& f,
char* c = new
fstream& in) {
Get(f); char;
double d;
bool b =
f.read(c, false;
if (mass == d) {
sizeof(char)); Index tmp;
cout << int pos;
f.seekg(-1, f.seekg(0,
"Запис знайдено:" <<
endl; ios::cur); ios::beg);
cout <<
while (*c != 0) { "Введiть данi:" << endl;
b = true; cin >> d;
while
Print(15); if (f.tellg() >=
(in.tellg() <
tmp.pos + 500) {
FileLength(in)) {
} tmp =
break; GetData(in);
f.seekg(pos + 100,
} f.seekg(tmp.pos,
ios::beg);
ios::beg);
f.read(c, pos = f.tellg(); char*
sizeof(char)); c = new char;
Get(f);
if (!f.eof()) { f.read(c,
if (melt == d) { sizeof(char));
f.seekg(-1,
ios::cur); cout << f.seekg(-1,
"Запис знайдено:" << ios::cur);
endl; while
} (*c != 0) {

else { b = true;
if (f.tellg() >=
Print(15); tmp.pos + 500) {
*c = 0;
break;
} }
} }
} f.seekg(pos + 100,
if (!b) ios::beg);
cout << "Запис не pos = f.tellg();
знайдено" << endl; f.read(c,
} sizeof(char)); Get(f);
void
Search_5(fstream& f, if (!f.eof()) { if (boil == d) {
fstream& in) {
double d; cout <<
"Запис знайдено:" << f.seekg(-1, int pos;
endl; ios::cur); f.seekg(0,
ios::beg);
b = true; while (*c != 0) { cout <<
"Введiть данi:" << endl;
cin >> s;
Print(15); if (f.tellg() >=
while
tmp.pos + 500) {
(in.tellg() <
} FileLength(in)) {
break; tmp =
f.seekg(pos + 100, GetData(in);
ios::beg); }
f.seekg(tmp.pos,
f.read(c, pos = f.tellg(); ios::beg);
sizeof(char)); char*
Get(f); c = new char;
if (!f.eof()) {
if (val == a) { f.read(c,
f.seekg(-1, sizeof(char));
ios::cur); cout <<
"Запис знайдено:" << f.seekg(-1,
} endl; ios::cur);
while
(*c != 0) {
else { b = true;

*c = 0; Print(15); if (f.tellg() >=


tmp.pos + 500) {
} }
} break;
} f.seekg(pos + 100,
if (!b) }
ios::beg);
cout << "Запис не
знайдено" << endl; pos = f.tellg();
f.read(c,
}
sizeof(char));
void Get(f);
Search_7(fstream& f,
fstream& in) { if (!f.eof()) {
if (strcmp(s,
int a;
config) == 0) {
bool b = f.seekg(-1,
false; ios::cur);
Index tmp; cout <<
int pos; "Запис знайдено:" <<
}
f.seekg(0, endl;
ios::beg); else {
cout << b = true;
"Введiть данi:" << endl;
cin >> a; *c = 0;
Print(15);
while
(in.tellg() < }
}
FileLength(in)) { }
tmp }
= GetData(in); if (!b) f.seekg(pos + 100,
cout << "Запис не ios::beg);
f.seekg(tmp.pos, знайдено" << endl;
ios::beg); } f.read(c,
void sizeof(char));
Search_8(fstream& f,
char* c = new
fstream& in) { if (!f.eof()) {
char; char *s =
new char[20];
f.read(c, f.seekg(-1,
bool b =
sizeof(char)); ios::cur);
false;
Index tmp;
}
while
else { b = true; (*c != 0) {

*c = 0; Print(15); if (f.tellg() >=


tmp.pos + 500) {
} }
} break;
} f.seekg(pos + 100,
if (!b) ios::beg); }
cout << "Запис не
знайдено" << endl; pos = f.tellg();
f.read(c,
}
sizeof(char));
void
Get(f);
Search_9(fstream& f,
fstream& in) { if (!f.eof()) {
int a; if (subgr == a) {
bool b = f.seekg(-1,
false; ios::cur); cout <<
Index tmp; "Запис знайдено:" <<
int pos; } endl;
f.seekg(0,
ios::beg); b = true;
else {
cout <<
"Введiть данi:" << endl;
*c = 0; Print(15);
cin >> a;
while
(in.tellg() < } }
FileLength(in)) { }
tmp } f.seekg(pos + 100,
= GetData(in); if (!b) ios::beg);
cout << "Запис не
f.seekg(tmp.pos, знайдено" << endl; f.read(c,
ios::beg); } sizeof(char));
void
Search_10(fstream& f,
char* c = new if (!f.eof()) {
fstream& in) {
char;
int a;
bool b = f.seekg(-1,
f.read(c, false; ios::cur);
sizeof(char)); Index tmp;
int pos; }
f.seekg(-1, f.seekg(0,
ios::cur); ios::beg); else {
cout <<
while (*c != 0) { "Введiть данi:" << endl; *c = 0;
cin >> a;
while
if (f.tellg() >= }
(in.tellg() <
tmp.pos + 500) { }
FileLength(in)) {
tmp }
break; = GetData(in); if (!b)
cout << "Запис не
} знайдено" << endl;
f.seekg(tmp.pos,
}
ios::beg); void
pos = f.tellg();
ClearBlock(fstream &f,
char* c = new int pos) {
Get(f); char; ofstream
d("D:\\Mykola\\
if (group == a) { f.read(c, Elem_2.txt");
sizeof(char)); bool b =
cout << false;
"Запис знайдено:" << f.seekg(-1, cout <<
endl; ios::cur); "Position" << pos <<
endl;
char *c =
new char; remove("D:\\ f.seekg(pos + 100,
char *buf = Mykola\\Elem_2.txt"); ios::beg);
new char; }
} f.read(c,
f.seekg(pos, void sizeof(char));
ios::beg); Delete(fstream& f, if (!
f.read(c, fstream& in) { f.eof()) {
sizeof(char)); int a;
f.seekg(-1, int p = 0;
f.seekg(-1,
ios::cur); Element
ios::cur);
if (*c == arr[6];
}
0) { bool b =
else
cout false;
{
<< "Пустий блок видалено" int off =
<< endl; 0;
cout cout << *c = 0;
<< pos << endl; "Введiть номер запису:" }
<< endl; }
cin >> a; if (!b)
f.seekg(0,
off = cout << "Запис не
ios::beg);
FindOffset(in, a); знайдено" << endl;
for (int i
while (f.tellg() < = 0; i < p; i++) {
pos) { f.seekg(off,
*this
ios::beg);
= arr[i];
int pos;
f.read(buf,
char* c =
sizeof(char)); FileWrite(f, in,
new char;
f.read(c, off);
d.write(buf, sizeof(char)); }
sizeof(char)); f.seekg(-1,
} ios::cur); ClearBlock(f,
while (*c ! off);
f.seekg(pos + 500, = 0) { }
ios::beg); if void
(f.tellg() >= off + 500) Insert(fstream& f,
while { fstream& in) {
(f.tellg()<FileLength(f)) int a;
{ break; int p = 0;
} Element
pos arr[6];
f.read(c,
= f.tellg(); Element
sizeof(char));
ins;
bool b =
d.write(c, Get(f);
false;
sizeof(char)); if
int off =
} (num == a) {
0;
cout <<
d.close(); cout << "Запис "Введiть данi:" << endl;
видалено" << endl;
f.close(); ins.Enter();
b = true; a =
remove("D:\\ } ins.GetNum();
if off =
Mykola\\Elem_1.txt");
(num != a) { FindOffset(in, a);
rename("D:\\
arr[p] = *this; f.seekg(off,
Mykola\\Elem_2.txt",
"D:\\Mykola\\ ios::beg);
Elem_1.txt"); p++; int pos;
} } char* c =
else { new char;
ClearEntry(f, f.read(c,
d.close(); pos); sizeof(char));
f.seekg(-1, for (int i if
ios::cur); = 0; i < p - 1; i++) (f.tellg() >= off + 500)
while (*c ! for {
= 0) { (int j = 0; j < p - i -
if 1; j++) { break;
(f.tellg() >= off + 500) if }
{ (arr[j].GetNum() > arr[j pos =
+ 1].GetNum()) f.tellg();
break;
} swap(arr[j], arr[j Get(f);
pos + 1]); if
= f.tellg(); } (num == a) {
for (int i
Get(f); = 0; i < p; i++) {
cout << "Запис
if модифiковано" << endl;
(num == a) { *this = arr[i];
ClearEntry(f,
cout << "Запис вже FileWrite(f, in, pos);
iснує" << endl; off);
}
f.seekg(pos,
arr[p] = *this; }
ios::beg);
void SetNum(int a)
{
p++; ins.FileWrite(f,
num = a;
} in, off);
b = true; void Edit() {
} cin >> name b = true;
if >> shrt >> mass >> melt }
(num != a) { >> boil >> val >> config
>> group >> subgr; f.seekg(pos + 100,
arr[p] = *this; } ios::beg);
void
p++; Modify(fstream &f, f.read(c,
} fstream &in) {
sizeof(char));
int a; if (!
Element
ClearEntry(f, f.eof()) {
pos); ins;
bool b =
false; f.seekg(-1,
f.seekg(pos + 100, int off = ios::cur);
ios::beg); 0; }
cout << else
f.read(c, "Введiть номер запису:" {
sizeof(char)); << endl;
if cin >> a; *c = 0;
(!f.eof()) { }
ins.SetNum(a); }
f.seekg(-1, cout << if (!b)
ios::cur); "Введiть данi" << endl; cout << "Запис не
} ins.Edit(); знайдено" << endl;
else off = }
{ FindOffset(in, a); };

Index GetData(fstream &f)


*c = 0; f.seekg(off,
{
} ios::beg); Index tmp;
} int pos;
Element obj;
if (!b) char* c = if
cout << "Запис вставлено" new char;
(obj.FileLength(f)==0) {
<< endl; f.read(c, tmp.min =
if (!b) { sizeof(char));
tmp.pos = 0;
f.seekg(-1, return tmp;
arr[p] = ins; ios::cur);
}
p++; while (*c !
} = 0) {
f >> tmp.min >> arr[i] = switch (x)
tmp.pos; GetData(f); {
f.seekg(2, i++; case 1:
ios::cur); }
return tmp; for (int j = 0; j tmp.CreateFile();
} < i - 1; j++)
for (int k
void WriteData(Index tmp, = 0; k < i - 1 - j; k++)
RemakePointers(f1);
fstream &f) { {
f << tmp.min << " if
" << tmp.pos << endl; (arr[k].min > arr[k + break;
} 1].min) swap(arr[k], case 2:
arr[k + 1]);
void } f1.open("D:\\
RemakePointers(fstream& Mykola\\Elem_1.txt");
f) { for (int j = 0; j
ofstream in("D:\\ < i; j++) { f2.open("D:\\
Mykola\\Elem_Index.txt"); s << Mykola\\Elem_Index.txt");
f.open("D:\\ arr[j].min << " " <<
Mykola\\Elem_1.txt"); arr[j].pos << endl;
Element obj; }
cout.setf(ios::left);
Index tmp; f.close(); cout
int ck; s.close();
<< setw(15) << "Номер" <<
for (int i = 0; i remove("d:\\ setw(15) << "Назва" <<
< obj.FileLength(f); i += Mykola\\Elem_Index.txt");
setw(15) << "Позначення"
500) { rename("d:\\ << setw(15) << "Маса" <<
f.seekg(i, Mykola\\Elem_Sorted.txt",
setw(15) << "Плавлення"
ios::beg); "d:\\Mykola\\ << setw(15) << "Кипiння"
f >> ck; Elem_Index.txt");
<< setw(15) <<
tmp.min = } "Валентнiсть" << setw(15)
ck;
<< "Конфiгурацiя" <<
tmp.pos = int main() { setw(15) << "Група" <<
i; setlocale(LC_ALL,
setw(15) << "Пiдгрупа" <<
in << "ukrainian"); endl;
tmp.min << " " << tmp.pos int x;
<< endl; Element tmp;
} Index in; tmp.Print_All(f1,
f.close(); fstream f1; f2);
in.close(); fstream f2;
} fstream bas; f2.close();
while (true) {
void IndexSort() { cout << f1.close();
int off; "Виберiть завдання:" <<
int i = 0; endl; break;
fstream f("D:\\ cout << "1 case 3:
Mykola\\Elem_Index.txt", - Створення файлу бази int
ios::in); даних" << endl; a;
ofstream s("D:\\ cout << "2
Mykola\\ - Друк бази даних" <<
Elem_Sorted.txt"); endl; f1.open("D:\\
f.seekg(0, cout << "3 Mykola\\Elem_1.txt");
ios::end); - Пошук запису за
off = f.tellg(); вказаним ключем" << endl; f2.open("D:\\
f.seekg(0, cout << "4 Mykola\\Elem_Index.txt");
ios::beg); - Видалення запису за cout
cout << off << вказаним ключем" << endl; << "Виберiть поле
endl; cout << "5 пошуку:" << endl;
Index *arr = new - Вставлення запису" << cout
Index[30]; endl; << "1 - Номер" << endl;
arr[0] = cout << "6 cout
GetData(f); - Модифiкацiя запису" << << "2 - Назва" << endl;
i++; endl; cout
while (f.tellg() < cout << "7 << "3 - Позначення" <<
off) { - Вихiд" << endl; endl;
cin >> x;
cout case
<< "4 - Маса" << endl; 6: f1.close();
cout
<< "5 - Плавлення" << tmp.Search_6(f1,
endl; f2); RemakePointers(f2);
cout
<< "6 - Кипiння" << endl;
break; IndexSort();
cout
case
<< "7 - Валентнiсть" <<
7:
endl; break;
cout case 5:
<< "8 - Конфiгурацiя" << tmp.Search_7(f1,
endl; f2);
f1.open("D:\\
cout Mykola\\Elem_1.txt");
<< "9 - Група" << endl; break;
cout case
f2.open("D:\\
<< "10 - Пiдгрупа" << 8:
Mykola\\Elem_Index.txt");
endl;
cin tmp.Search_8(f1,
>> a; tmp.Insert(f1,
f2);
f2);
switch (a) { break;
case f2.close();
case
1: 9:
f1.close();
tmp.Search_1(f1, tmp.Search_9(f1,
f2); f2);
RemakePointers(f2);
break; break;
case case IndexSort();
2: 10:
break;
tmp.Search_2(f1, tmp.Search_10(f1, case 6:
f2); f2);
f1.open("D:\\
break; break; Mykola\\Elem_1.txt");
case }
3: f2.open("D:\\
f2.close(); Mykola\\Elem_Index.txt");
tmp.Search_3(f1,
f2); tmp.Modify(f1,
f1.close();
f2);
break; break;
case f2.close();
case 4:
4:
f1.open("D:\\ f1.close();
tmp.Search_4(f1,
Mykola\\Elem_1.txt");
f2); break;
f2.open("D:\\ case 7:
break;
Mykola\\Elem_Index.txt");
case _getch();
5:
tmp.Delete(f1,
f2); return 0;
tmp.Search_5(f1, }
f2); }
f2.close();
}
break;

Результат виконання:
6. ВИСНОВОК

В ході виконання цієї лабораторної роботи розглянув органiзацiю i


ведення файлiв iндексно-послiдовного доступу; набув практичнi навички у
програмуваннi алгоритмiв iндексно-послiдовного доступу до файлiв на
зовнiшнiх запам'ятовуючих пристроях. Проаналізував помилки, що були
пов’язані з організацією індексного файлу.

You might also like