ні студента */
findname (Name):-dstudent (Code, Name, D), write ("Шифр студента"), (Code), nl, (В«Факультет"), write (D ), dely, fail. (_).
/* Результат пошуку записів по імені */
findnameyes (Name):-dstudent (_, Name, _).
/* Пошук інформації про здачу іспитів */
findexam (Code, Course, Mark):-dexam (Code, Course, Mark), ("Шифр"), write (Code), write (""), (Course) , write (""), write (Mark), nl, fail. (_, _, _).
/* Ухвала та видалення рядки з БД */
retquation4 ('1 '):-write ("Введіть шифр студента"), nl, readln (Code),
write ("Введіть ім'я"), nl, readln (Name), ("Введіть назву факультету"), nl, readln (D),
retract (dstudent (Code, Name, D)), write ("Запис видалено"), nl. ('2 '):-write ("Введіть шифр студента"), nl , readln (Code), ("Введіть назву дисципліни"), nl, readln (Course), (dexam (Code, Course, _)), ("Запис видалено"), nl.4 (_):-write ("Такий запису в базі немає"), nl.
/* Призупинення роботи програми до натискання будь-якої клавіші */
dely:-nl, nl, nl, write ("Натисніть будь-яку клавішу"), nl, readchar (_).
/* Кінець програми */
РОБОТА З БД НА ДИСКУ
Загальні правила роботи з файлами на зовнішніх носіях
В системі Турбо-Пролог є предикати для роботи з файлами в цілому:
deletefile (<ім'я файлу>) - знищує файл <ім'я файлу>; (<ім'я файлу>) - зберігає на диску затвердження динамічної бази Невідомо;
existfile (<ім'я файлу>) - тест на наявність файлу з такою назвою. Предикат успішний у випадку, якщо файл з ім'ям, заданим аргументом <ім'я файлу>, присутній у директорії; (<файловая_переменная>) - предикат скидає вміст внутрішнього буфера, відведеного для цього пристрою запису. p align="justify"> disk (<шлях>) - вибір дисковода і шляхи доступу: якщо параметр <шлях> є константою або змінною, якій присвоєно коректний шлях доступу, то заданий з його допомогою каталог стає поточним. Якщо ж змінна <шлях> не відзначений, то даний предикат присвоює їй шлях доступу до поточної директорії. p align="justify"> dir (<шлях>, <шаблон>, <ім'я файлу>) - видача списку файлів каталогу. Змінної <шлях> повинен бути присвоєний коректний шлях доступу, текстова змінна <шаблон> задає шаблон групи файлів, що представляє інтерес. Даний предикат видає каталог імен файлів відповідних під заданий шаблон; ви можете вибрати серед них потрібний і натиснути Enter. Файл буде присвоєно змінної <ім'я файлу>. p align="justify"> Так, у наведеному вище прикладі програми роботи з БД в оперативній пам'яті правило reaction (6) збереження БД у файлі на диску можна замінити (додавши відповідні описи) наступною групою правил.
reaction ('6 '):-savedb, nl, menu.
.......................................... .......: - write ("Введіть ім'я файлу"), readln (Fname), rwrite (Fname). (""): - disk (Dir), dir (Dir, "*. dba ", Fname1), save (Fname1). (Fname): - existfile (Fname), write (В« Файл з такою назвою вже існує. Перезаписати (y/n)? "), nl, readchar (Yes), rwr (Yes, Fname). (Fname): - not (existfile (Fname)), save (Fname). ('y', Fname):-save (Fname). ('n', _): - write ( "Enter new filename"), readln (Fname1), (Fname1). ('Y', Fname):-rwr ('y', Fname). ('N', Fname):-rwr ('n', Fname).
Тут правило rwrite призначене для визначення імені файлу, і збереження в ньому даних з бази. При цьому якщо введено ім'я вже існуючого файлу, буде виданий запит про перезапис із знищенням колишньої інформації (предикат rwr), а якщо ім'я файлу введено не було, програма надасть можливість вибору імені зі списку (предикат dir). p align="justify"> Крім того, перед створенням нової БД було б непогано вивести запит про збереження вже наявних результатів. Для чого reaction (1) замінюємо наступній правил. p align="justify"> reaction ('1 '): - write ("Зберегти зміни (y/n)?"),
readchar (Yes), nl, savequation1 (Yes), nl, deldb,. ('n'). ('N'). ('y'):-savequation1 ('Y') . ('Y'):-savedb. (_):-write ("Натисніть, будь ласка, y або n"), (Yes), nl, savequation1 (Yes).
Тут предикат savequation1 задає реакцію на відповідь користувача на запит про збереження наявних даних. Очевидно, що такий запит можна включити і в правило reaction (2) перед завантаженням нової БД і в правило reaction (7) перед закінченням роботи програми. p align="justify"> reaction ('2 '): - disk (Dir), dir (Dir, "*. dba", Fname),, write ("Зберегти зміни (y/n)?" ),...