Page 55 - 4800
P. 55

випадків,  доцільніше  застосовувати  метод  двійкового  пошуку.  Ці  методи  значно
                  спрощують доступ до фактів БД.
                         Розглянемо БД, що описується відношенням:
                         Студент(Прізвище, Група, Оцінки_сесії),
                  і  яка  зберігається  на  диску  у  файлі  з  ім'ям  „stud.dba”.  Їй  відповідає  індексний  файл
                  „stud.ind”.
                         /* Програма 6_4 */
                  domains
                         name = symbol
                         grup, mark = integer
                         session = mark*
                         file= dbf; ind
                  database
                         stud(name, grup, session)
                  predicates
                         use(string, string)
                         dbassert(dbasedom)
                         dbass(dbasedom, string, string)
                         new_rec(dbasedom, real)
                         new_ind(real)
                         dbdelete(dbasedom)
                         dbdel(dbasedom, string, string)
                         dbdel1(dbasedom, real)
                         dbread(dbasedom)
                         dbrd(dbasedom, string, string)
                         dbaccess(dbasedom, real)
                  clauses
                         use(“stud.ind”, “stud.dba”).
                         /* предикати створення інтерфейсу СУБД */
                         dbassert(Term):- use(Ind, Db), dbass(Term, Ind, Db).
                         dbdelete(Term):- use(Ind, Db), dbdel(Term, Ind, Db).
                         dbread(Term):- use(Ind, Db), dbrd (Term, Ind, Db).
                         /* модуль вводу даних у файл бази даних */
                         dbass(Term, Ind, Db):- existfile(Ind), existfile(Db), openappend(dbf, Db),
                  new_rec(Term, Pos), openappend(ind, Ind), new_ind(Pos).
                         dbass(Term, Ind, Db):- openwrite(dbf, Db), new_rec(Term, Pos), openwrite(ind, Ind),
                  new_ind(Pos).
                         new_rec(Term, Pos):- writedevice(dbf), filepos(dbf, Pos, 0), write(Term),
                  closefile(dbf).
                         new_ind(Pos):- writedevice(ind), writef(“%7.0\n”, Pos), closefile(ind).
                         /* модуль виводу даних з файлу бази даних */
                         dbrd(Term, Ind, Db):- openread(dbf, Db), openread(ind, Ind), dbaccess(Term,  -1).
                         dbrd(_, _, _):- closefile(dbf), closefile(ind), fail.
                         dbaccess(Term, Pos):- Pos>=0, filepos(dbf, Pos, 0), readdevice(dbf),
                         readterm(dbasedom,Term).
                         dbaccess(Term, _):- readdevice(ind), readreal(Pos), dbaccess(Term, Pos).
                         /* модуль видалення даних з БД (запис -1 в індексний файл) */
                         dbdel(Term, Ind, Db):- openread(dbf, Db), openmodify(ind, Ind), dbdel1(Term, -1).
                         dbdel(_, _, _):- closefile(dbf), closefile(ind), fail.
                         dbdel1(Term, Pos):- Pos>=0, filepos(dbf, Pos, 0), readdevice(dbf),
                  readterm(dbasedom, Term), filepos(ind,9,1), flush(ind), writedevice(ind), writef("%7.0\n",-1),
                  flush(ind), writedevice(screen).
                         dbdel1(Term, _):- readdevice(ind), readreal(Pos), dbdel1(Term, Pos).
                         Предикат  use()  використовується  для  задання  імені  файлу  робочої  БД  і  імені,
                  відповідного йому індексного файлу.
                         Предикати  dbassert(),  dbdeletе()  і  dbrеad()  призначені  для  запису,  видалення  і
                  читання  даних  із  файлу  БД.  Ці  предикати  реалізовані,  з  використанням  індексного
                  файлу  для  запису  позицій  фактів,  у  файлі  даних.  Кожна  позиція  представляється







                                                              55
   50   51   52   53   54   55   56   57   58   59   60