Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Предикаты для работы с БД в целом
Для записи динамической БД в файл на диск и для загрузки содержимого файла в динамическую БД применяются стандартные предикаты save и consult. Предикат save сохраняет находящуюся в оперативной памяти базу данных в текстовом файле. Синтаксис этого предиката save(имя_файла[,имя_БД]), где имя_файла есть произвольное допустимое в MS DOS или PC DOS имя файла. Пример: для того, чтобы сохранить содержимое БД tabel в файле с именем exam_03.dba, требуется предикат save("exam_03.dba", tabel). В результате все утверждения находящейся в оперативной памяти динамической БД tabel будут записаны в файл exam_03.dba. Cодержимое БД со стандартным именем dbasedom сохранить в файле c:\dir1\f1.db можно при помощи предиката save("c:\\dir1\\f1.db"). Заметим, что если файл с таким именем уже существовал на диске, то этот старый файл будет затерт. Поэтому следует использовать предикат save с известной долей осторожности. Произвольный текстовый файл, содержащий факты, совпадающие по синтаксису с предикатами описанной в программе БД, может быть считан в память (загружен) при помощи предиката consult, синтаксис которого таков: consult(<имя_файла>[,<имя_БД>]). Для загрузки файла exam_02.dba в БД tabel требуется выражение consult("exam_02.dba ", tabel). А для того, чтобы загрузить содержимое файла d:\dir2\f2.dbf в БД со стандартным именем dbasedom необходимо использовать предикат consult("d:\\dir2\\f2.dbf"). Предикат consult неуспешен, если файл с указанным именем отсутствует на диске, или если этот файл содержит ошибки, как, например, в случае несоответствия синтаксиса предиката из файла описаниям из раздела программы database, или если содержимое файла невозможно разместить в памяти ввиду отсутствия места. Пример работы с базой данных, располагающейся в оперативной памяти Любая система системы управления базой данных (СУБД), ориентированная на диалог с пользователем должна содержать как минимум такие возможности, как занесение в базу новых данных; удаление данных из базы; выборка и вывод содержащихся в базе данных. Хотелось бы реализовать достаточно логичным удобным для пользователя способом. Такие требования предполагают наличие в системе меню. Приведем пример простейшей программы, позволяющей выполнять основные действия над динамической БД. database
dstudent (symbol,symbol,symbol) /*Таблица с информацией о студентах */ dexam(symbol,symbol,integer) /* Таблица с информацией о сдаче экзаменов*/ predicates(char)(char)(char)(char)(char)(integer)(symbol)(symbol)(symbol,symbol,integer)(symbol,integer)(1, 10, 3, "БД ‘сессия’ ", 3, 10, 19, 60, 1, -1, "\218\191\192\217\196\179"), menu. clauses /*Вывод меню на экран*/ menu:- clearwindow,("1 - создать"),nl,("2 - загрузить"),nl, write("3 - добавить запись"),nl, write("4 - найти запись"),nl, write("5 - удалить запись"),nl, write("6 - сохранить"),nl,("7 - выход"), nl, readchar(N), reaction(N). /*Реакция программы на выбор пункта меню*/ reaction('1'):-deldb, menu.('2'):-clearwindow, write("Введите имя файла"), readln(Fname),(Fname), menu.('3'):-typerec(N), addquation3(N), dely, menu.('4'):-clearwindow, typerec(N), findquation4(N), menu.('5'):-clearwindow, typerec(N), retquation4(N), dely, menu.('6'):-write("Enter filename"), readln(Fname), save(Fname), menu.('7').(_):-write("Введите число 1-6"), dely, menu. /*Удаление всей информации из базы*/ deldb:-retract(dstudent (_,_,_)), fail.:-retract(dexam(_,_,_)), fail.. /*Выбор типа записи (таблицы БД)*/ typerec(N):-clearwindow, write("1 - информация о студентах"), nl, write("2 - результаты сдачи экзаменов"), nl, readchar(N). /*Ввод и добавление новой записи*/ addquation3('1'):-clearwindow,write("Введите шифр студента"), nl, readln(Code),("Введите ФИО студента"),nl, readln(Name),("Введите факультет"),nl, readln(D),(dstudent(Code,Name,D)), write("Запись добавлена"),nl.('2'):-clearwindow, write("Введите шифр студента "),nl, readln(Code),("Enter course"), nl, readln(Course),("Enter mark"), nl, readint(Mark),(dexam(Code,Course,Mark)), write("Запись добавлена ").3(_):- write("Ошибка!"). /*Уточнение задания на поиск информации*/ findquation4('1'):-clearwindow, write("1 - искать запись по шифру"),nl,("2 - искать запись по имени"),nl, readint(N), find(N),dely. findquation4('2'):-clearwindow, write("1 - искать запись по шифру "),nl,("2 - искать запись по наименованию дисциплины "),nl, readint(N), N2=N+2, find(N2), dely. /*Уточнение задания на поиск информации */ find(1):-clearwindow, write("Введите шифр "), readln(Code),(Code,Name,D), write("Студент "), write(Name), nl,("обучается на факультете "), write(D). find(1):-write("Такой записи в базе нет"). find(2):-clearwindow, write("Введите имя студента "), readln(Name),(Name), findnameyes(Name).(2):-write("Такой записи в базе нет ").(3):-clearwindow, write("Введите шифр студента "), readln(Code),(Code,Name,D), write("Студент "), write(Name), nl,(" факультета"), write(D),nl, findexam(Code,_,_).(3):-write("Такой записи в базе нет ").
find(4):-clearwindow, write("Введите наименование дисциплины"), readln(Course),("Введите оценку. Для поиска по всем оценкам введите 0 "), readint(Mark), find4(Course,Mark). /*Поиск информации о сдаче экзаменов */ find4(Course,0):-findexam(_,Course,_).(Course,Mark):-findexam(_,Course, Mark). /*Поиск записей по имени студента*/ 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(_). /* Конец программы */ РАБОТА С БД НА ДИСКЕ
|
||||||
Последнее изменение этой страницы: 2020-03-14; просмотров: 134; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.217.116.183 (0.009 с.) |