МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ „ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Кафедра САПР
Звіт
до лабораторної роботи №1
з курсу: «Організація баз даних і знань»
на тему: Послідовний метод доступу до файлів на зовнішних
запам’ятовуючих пристроях
доступу; набути практичнi навички у програмуваннi алгоритмiв роботи з файлами послiдовного доступу.
Теоретичні відомості
Записи у простому послiдовному файлi доступнi лише послiдовно один за одним. Наприклад, можна звернутися до n-го запису тiльки пiсля звертання до 1, 2 , ... , n-1 запис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, який складається з N записiв, необхiдно переглянути у середньому N/2 записiв.
Ефективність використання пам'ятi близька до 100%. Зберiгання фiзичних записiв у логiчнiй послiдовностi можна використовувати для прискорення доступу, якщо перед звертанням до власне записiв бази даних перевiряти значення ключiв.
Завдання
Створити програму яка реалізує БД на тему “Кафедра САПР” для підтримки послідовного методу доступу до файлу бази даних, яка реалізовує наступні функції:
Створення файлу бази даних
Друк бази даних
Пошук запису за введеним ключем
Видалення запису за введеним ключем
Вставлення запису
Модифікація запису
Оптимізувати розроблену програму шляхом створення файлу групової обробки та реалізацією наступних додаткових функцій:
Створення файлу групової обробки
Внесення змін у файл бази даних
ТЕКСТ ПРОГРАМИ
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
class Record{
private:
char name[15], surname[15], futhername[15], tel[11], adress[15], viddil[15], color[15];
int id, age, stage;
public:
void whrite(char* im){
ofstream f(im);
int stop = 1;
while(stop == 1)
{
cout << "Введiть id, iм'я, прiзвище, по-батьковi, телефон, адресу, вiддiл, вiк, стаж, посаду:" << endl;
cin >> id >> name >> surname >> futhername >> tel >> adress >> viddil >> age >> stage >> color;
f << id << "\t" << name << "\t" << surname << "\t" << futhername << "\t" << tel << "\t" << adress << "\t" << viddil << "\t" << age << "\t" << stage << "\t" << color;
cout << "1 - ввести ще:";
cin >> stop;
if(stop == 1)
f << "\n";
}
f.close();
}
void read(char* im){
cout << "||||||||||||||||||||||||||||||||||||||" << endl;
int nam0, nam7, nam8;
char nam1[15], nam2[15], nam3[15], nam4[15], nam5[15], nam6[15], nam9[15];
ifstream f(im);
while(!f.eof())
{
f >> nam0 >> nam1 >> nam2 >> nam3 >> nam4 >> nam5 >> nam6 >> nam7 >> nam8 >> nam9;
cout << nam0 << "\t" << nam1 << "\t" << nam2 << "\t" << nam3 << "\t" << nam4 << "\t" << nam5 << "\t" << nam6 << "\t" << nam7 << "\t" << nam8 << "\t" << nam9 << endl;
}
f.close();
cout << "||||||||||||||||||||||||||||||||||||||" << endl;
}
void find(char* im){
int c=0;
cout << "Введiть ключ шуканого поля:" << endl;
int n; cin >> n;
int nam0, nam7, nam8;
char nam1[15], nam2[15], nam3[15], nam4[15], nam5[15], nam6[15], nam9[15];
ifstream f(im);
while(!f.eof())
{
f >> nam0 >> nam1 >> nam2 >> nam3 >> nam4 >> nam5 >> nam6 >> nam7 >> nam8 >> nam9;
if(nam0 == n)
{
cout << nam0 << "\t" << nam1 << "\t" << nam2 << "\t" << nam3 << "\t" << nam4 << "\t" << nam5 << "\t" << nam6 << "\t" << nam7 << "\t" << nam8 << "\t" << nam9 << endl;
c=10;
}
}
if(c == 0)
cout << " Файл не знайдено " << endl;
f.close();
}
void del(char* im, char *group_file){
cout << "Введiть ключ видаляючого поля:" << endl;
int n; cin >> n;
int nam0, nam7, nam8;
char nam1[15], nam2[15], nam3[15], nam4[15], nam5[15], nam6[15], nam9[15];
ifstream f(im);
ofstream f1(group_file);
while(!f.eof())
{
f >> nam0 >> nam1 >> nam2 >> nam3 >> nam4 >> nam5 >> nam6 >> nam7 >> nam8 >> nam9;
if(nam0 != n)
{
f1 << nam0 << "\t" << nam1 << "\t" << nam2 << "\t" << nam3 << "\t" << nam4 << "\t" << nam5 << "\t" << nam6 << "\t" << nam7 << "\t" << nam8 << "\t" << nam9;
if(!f.eof())
f1 << "\n";
}
}
f.close();
f1.close();
remove(im);
rename(group_file, im);
}
void change(char* im, char *group_file){
cout << "Введiть ключ змiнюючого поля:" << endl;
int n; cin >> n;
int nam0, nam7, nam8;
char nam1[15], nam2[15], nam3[15], nam4[15], nam5[15], nam6[15], nam9[15];
ifstream f(im);
ofstream f1(group_file);
while(!f.eof())
{
f >> nam0 >> nam1 >> nam2 >> nam3 >> nam4 >> nam5 >> nam6 >> nam7 >> nam8 >> nam9;
if(nam0 != n)
{
f1 << nam0 << "\t" << nam1 << "\t" << nam2 << "\t" << nam3 << "\t" << nam4 << "\t" << nam5 << "\t" << nam6 << "\t" << nam7 << "\t" << nam8 << "\t" << nam9;
if(!f.eof())
f1 << "\n";
}
else if(nam0 == n)
{
cin >> nam0 >> nam1 >> nam2 >> nam3 >> nam4 >> nam5 >> nam6 >> nam7 >> nam8 >> nam9;
int n=1;
while(n !=0)
f1 << nam0 << "\t" << nam1 << "\t" << nam2 << "\t" << nam3 << "\t" << nam4 << "\t" << nam5 << "\t" << nam6 << "\t" << nam7 << "\t" << nam8 << "\t" << nam9;
if(!f.eof())
f1 << "\n";
}
}
f.close();
f1.close();
rename(group_file, im);
}
void ins(char* im, char* new_im){
int c=0;
cout << "Введiть нове поле:" << endl;
int n0, n7, n8;
char n1[15], n2[15], n3[15], n4[15], n5[15], n6[15], n9[15];
cin >> n0 >> n1 >> n2 >> n3 >> n4 >> n5 >> n6 >> n7 >> n8 >> n9;
int nam0, nam7, nam8;
char nam1[15], nam2[15], nam3[15], nam4[15], nam5[15], nam6[15], nam9[15];
ifstream f(im);
ofstream f1(new_im);
while(!f.eof())
{
f >> nam0 >> nam1 >> nam2 >> nam3 >> nam4 >> nam5 >> nam6 >> nam7 >> nam8 >> nam9;
if(nam0 == n0)
cout << "Таке поле існує" << endl;
else if(nam0 > n0 && c==0)
{
f1 << n0 << "\t" << n1 << "\t" << n2 << "\t" << n3 << "\t" << n4 << "\t" << n5 << "\t" << n6 << "\t" << n7 << "\t" << n8 << "\t" << n9;
if(!f.eof())
f1 << "\n";
c++;
f1 << nam0 << "\t" << nam1 << "\t" << nam2 << "\t" << nam3 << "\t" << nam4 << "\t" << nam5 << "\t" << nam6 << "\t" << nam7 << "\t" << nam8 << "\t" << nam9;
if(!f.eof())
f1 << "\n";
}
else
{
f1 << nam0 << "\t" << nam1 << "\t" << nam2 << "\t" << nam3 << "\t" << nam4 << "\t" << nam5 << "\t" << nam6 << "\t" << nam7 << "\t" << nam8 << "\t" << nam9;
if(!f.eof())
f1 << "\n";
}
}
if(!f.eof())
f1 << "\n";
f.close();
f1.close();
remove(im);
rename(new_im, im);
}
};
int main()
{
setlocale(LC_ALL, "rus");
char seller[] = {"D:\\Seller.txt"};
char new_seller[] = {"D:\\Seller2.txt"};
Record DB;
int n = 1;
while(n!=0)
{
cout << "\nМЕНЮ:\n" << endl;
cout << " 1 - створити БД" << endl;
cout << " 2 - вивести БД" << endl;
cout << " 3 - знайти поле" << endl;
cout << " 4 - видалити поле" << endl;
cout << " 5 - змiнити поле" << endl;
cout << " 6 - ввести поле" << endl;
cout << " 0 - вихiд" << endl;
cout << "-----------------------------------" << endl;
cin >> n;
cout << "-----------------------------------" << endl;
switch(n){
case 1: DB.whrite(seller); break;
case 2: DB.read(seller); break;
case 3: DB.find(seller); break;
case 4: DB.del(seller, new_seller); break;
case 5: DB.change(seller, new_seller); break;
case 6: DB.ins(seller, new_seller); break;
case 0: break;
default: break;
}
}
return 0;
}Результат роботи
База даних
/
Функція пошуку по ID
/
Модифікація запису
/
Висновок: під час виконання даної лабораторної роботи я розглянув органiзацiю i ведення файлiв послiдовного доступу; набув практичних навички у програмуваннi алгоритмiв роботи з файлами послiдовного доступу, реалізував програму для ведення бази даних на відповідну тематику.