Національний університет “Львівська політехніка”
Інститут комп'ютерних наук та інформаційних технологій
/
Звіт до лабораторної роботи №1:
«Послідовний метод доступу до файлів
на зовнішніх запам’ятовуючих пристроях»
з курсу “ Організація баз даних і знань ”
для базового напрямку “Комп’ютерні науки”
Розглянути органiзацiю i ведення файлiв послiдовного доступу; набути практичнi навички у програмуваннi алгоритмiв роботи з файлами послiдовного доступу.
Лабораторне завдання:
1.Написати програму, яка реалiзує такi функцiї:
1.1. Друк бази даних.
1.2. Пошук запису за введеним ключем.
1.3. Видалення запису за введеним ключем.
1.4. Вставлення запису.
1.5. Модифiкацiя запису.
2.Написати програму групового оброблення файла даних, яка реалiзує наступнi функцiї:
2.1. Створення файла повiдомлень.
2.2. Друк бази даних.
2.3. Пошук запису за введеним ключем.
2.4. Видалення запису за введеним ключем.
2.5. Вставлення запису.
2.6. Модиф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ями:
1. Ефективнiсть доступу - величина, обернена середнiй кiлькостi фiзичних звертань, необхiдних для логiчного доступу, тобто запиту конкретного запису бази даних. Фiзичнi звертання забезпечують задоволення запиту. Наприклад, якщо для пошуку потрiбного запису система звертається до двох записiв, то ефективнiсть доступу дорiвнює 0,5.
2. Ефективнiсть зберiгання - величина, обернена середнiй кiлькостi байтiв поля вторинної пам’ятi, яка необхiдна для зберiгання одного байта вхiдних даних.
Крiм вхiдних даних, пам’ять займають таблицi, керуюча iнформацiя, вiльна пам’ять, яка резервується для розширень, i дiлянка, яка не використовується через фрагментацiю.
Код програми:
//Структура бази даних описана в класі ListElement
class ListElement {
protected ListElement next;
protected String id;
protected String name;
protected String surname;
protected String patronymic;
protected String dob;
protected String mark;
protected String recordBookNumber;
protected String group;
protected String phoneNumber;
protected String address; }
//Робота структури даних «Однозв’язний список» описана в класі List
class List
{
private ListElement first;
private ListElement last;
protected void createFile(String path, String name);
protected void add(String id, String group, String name, String surname, String patronymic, String dob, String mark, String recordBookNumber, String phoneNumber, String address);
{
//Створюємо новий елемент
ListElement student = new ListElement(); //создаём новый элемент
//Ініціалізуємо данні
student.id = id;
student.group = group;
student.name = name;
student.surname = surname;
student.patronymic = patronymic;
student.dob = dob;
student.mark = mark;
student.recordBookNumber = recordBookNumber;
student.phoneNumber = phoneNumber;
student.address = address;
//Вказівник на наступний елемент, автоматично ініціалізуємо як null
//Якщо список порожній
if(first == null)
{
//То вказємо силки початку та кінця на новий елемент
first = student;
last = student;
//Отже список тепер складається з одного елементу
}
//Инакше, існуючий елемент вказує на новий
else
{
last.next = student;
last = student;
}
}
protected void printList()
protected void deleteElement(String id)
{
//Получаємо вказівник на перший елемент
ListElement student = first;
//Якщо список пустий, то виходимо
if(student == null)
{
System.out.println("List is empty!");
return;
}
Boolean elementFound = true;
//Якщо елемент не знайден, то виходимо
if(elementFound != true)
{
System.out.println("There is no such student in the List");
return;
}
//Якщо елемент знайден, то видаляємо його
else
{
//Якщо у списку тільки один елемент
if((student == first) && (student.next == null))
{
first = null;
last = null;
student = null;
}
//Якщо ж елемент перший, але не єдиний у списку
else if(student == first)
{
first = first.next;
student = null;
}
//Якщо елемент осатнній
else if(student == last)
{
ListElement tmpElement = first;
while (tmpElement.next != last)
{
tmpElement = tmpElement.next;
}
System.out.println(tmpElement.name);
last = tmpElement;
last.next = null;
student = null;
}
//Якщо елемент в середині списку
else
{
ListElement tmpElement = first;
while (tmpElement.next != student)
{
tmpElement = tmpElement.next;
}
tmpElement.next = student.next;
student = null;
}
}
System.out.println("Element has deleted");
}
protected ListElement searchRecord(String id)
protected void modifyRecord(String prevId, String id, String group, String name, String surname, String patronymic, String dob, String mark, String recordBookNumber, String phoneNumber, String address)
protected void saveData(String path, String name, Boolean append)
protected void getData(String path, String name)
protected void refreshData(String path, String name)
Результат виконання роботи:
Висновок:
На лабораторній роботі №3, я розглянув органiзацiю i ведення файлiв послiдовного доступу; набутув практичнi навички у програмуваннi алгоритмiв роботи з файлами послiдовного доступу.