Написать программу телефонный справочник - Prolog

Узнай цену своей работы

Формулировка задачи:

Работа с БД.

1. Получение информации о телефонном номере по фамилии человека. 2. Получение информации о фамилии абонента по телефонному номеру. 3. Добавление новой записи в телефонную базу. 4. Изменение существующего в телефонной базе записи. 5. Удаление записи из телефонной базы. Это примерно нужно так сделать:
У меня получилось так, но здесь ошибки можете исправить пожалуйста:

Решение задачи: «Написать программу телефонный справочник»

textual
Листинг программы
DOMAINS /* раздел описания доменов */
 
name, number = String /* фамилию абонента и телефонный
 
                         номер будем хранить в виде
 
                         строк */
 
file=f /* файловый домен будем использовать для
 
          считывания с диска и записи на диск нашей
 
          телефонной базы */
 
DATABASE /* раздел описания предикатов внутренней
 
            базы данных */
 
phone(name, number)
 
PREDICATES /* раздел описания предикатов */
 
name_phone(name, number) /* этот предикат находит номер
 
                            телефона по фамилии абонента */
 
phone_name(name, number) /* этот предикат находит фамилию
 
                            абонента по номеру телефона */
 
m(char) /* этот предикат реализует выполнение
 
           соответствующего пункта меню */
 
menu /* этот предикат реализует вывод меню и
 
        обработку выбора пользователя */
 
start /* этот предикат проверяет наличие файла
 
         с телефонной базой на диске и либо загружает
 
         факты из нее во внутреннюю базу данных,
 
         если такой файл существует, либо создает
 
         этот файл, если его не было */
 
CLAUSES /* раздел описания предложений */
 
name_phone(Name,Phone):–
 
                   phone(Name,Phone),!.
 
name_phone(_,"Нет информации о телефонном номере").
 
                /* если        соответствующего факта
 
                   во внутренней базе данных не нашлось,
 
                   вместо телефонного номера возвращаем
 
                   соответствующее сообщение */
 
phone_name(Name,Phone):–
 
                      phone(Name,Phone).
 
phone_name("Нет информации о владельце телефона",_).
 
                /* если соответствующего факта
 
                   во внутренней базе данных не нашлось,
 
                   вместо фамилии абонента возвращаем
 
                   соответствующее сообщение */
 
menu:–
 
     clearwindow, /* очистка текущего окна */
 
     write("1– Получение телефонного номера
 
     по фамилии "),nl,
 
     write("2 — Получение фамилии абонента по номеру
 
     телефона "),nl,
 
     write("3 — Добавление новой записи в телефонную
 
     базу."),nl,
 
     write("4 — Изменение номера абонента"),nl,
 
     write("5 — Удаление записи из телефонной базы"),nl,
 
     write("0 — Выйти"),nl,
 
     readchar(C), /* читаем символ с клавиатуры */
 
m(C). /* вызываем выполнение соответствующего пункта
 
         меню */
 
m('1'):–
 
       clearwindow,
 
       write("Введите фамлию"), nl,
 
       readln(Name),
 
       name_phone(Name, Phone),
 
       write("Номер телефона: ",Phone),
 
       readchar(_),
 
menu.
 
m('2'):–
 
       clearwindow,
 
       write("Введите номер телефона"),nl,
 
       readln(Phone),
 
       phone_name(Name, Phone),
 
       write("Фамилия абонента: ",Name),
 
       readchar(_),
 
       menu.
 
m('3'):–
 
       clearwindow,
 
       write("Введите фамилию"),nl,
 
       readln(Name),
 
       write("Введите номер телефона"),nl,
 
       readln(Phone),
 
       assert(phone(Name,Phone)),
 
                         /* добавляем факт во внутреннюю
 
                            базу данных */
 
       menu.
 
m('4'):–
 
       clearwindow,
 
       write("Введите фамилию"),nl,
 
       readln(Name),
 
       write("Введите новый номер телефона"),nl,
 
       readln(Phone),
 
       retract(phone(Name,_)),
 
                          /* удаляем устаревшую информацию
 
                             из внутренней базы данных */
 
       assert(phone(Name,Phone)),
 
                          /* добавляем новую информацию
 
                             в телефонную базу */
 
       menu.
 
m('5'):–
 
       clearwindow,
 
       write("Укажите номер телефона, запись о котором
 
       нужно удалить из телефонной базы"), nl,
 
       readln(Phone),
 
       retract(phone(_,Phone)), /* удаляем соответствующий
 
                                   факт из внутренней базы
 
                                   данных */
 
       menu.
 
m('0'):–
 
save("phones.ddb "), /* сохраняем телефонную базу
 
                        в файл */
 
retractall(_)./* удаляем все факты из внутренней
 
                 базы данных */
 
m(_):–
 
       menu. /* если пользователь по ошибке нажал клавишу,
 
                отличную от тех, реакция на которые
 
                предусмотрена, ничего плохого
 
                не произойдет, будет отображено меню
 
                еще раз */
 
start:–
 
       existfile("phones.ddb"),!, /* если файл с телефонной
 
                                     базой существует */
 
       consult("phones.ddb "), /* загружаем факты во
 
                                  внутреннюю базу данных */
 
       menu. /* вызываем меню */
 
start:–
 
       openwrite(f,"phones.ddb"),
 
                          /* если файла с телефонной
 
                             базой не существует, создаем
 
                             его */
 
       closefile(f),
 
       menu. /* вызываем меню */
 
GOAL /* раздел внутренней цели*/
 
Start

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.083 из 5
Похожие ответы