Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 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; просмотров: 220; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.196 (0.008 с.) |