КР Хаммаш Мустафа. Курсовая работа 32 Страница, 27 Рисунки, 6 источников, 2 приложения
Скачать 486.5 Kb.
|
Реферат Курсовая работа: 32 Страница, 27 Рисунки, 6 источников, 2 приложения. ИНТЕЛЛЕКТУАЛЬНАЯ СИСТЕМА, НЕЧЁТКАЯ ЭКСПЕРТНАЯ СИСТЕМА, ИСКУССТВЕННЫЙ ИНТЕЛЛЕКТ, БАЗА ЗНАНИЙ, МЕХАНИЗМ ЛОГИЧЕСКОГО ВЫВОДА, НАКОПЛЕНИЕ ЗНАНИЙ, ФОРМАЛИЗАЦИЯ ЗНАНИЙ, ФИНАНСОВЫЕ АКТИВЫ, ФОНДОВЫЙ РЫНОК В данной курсовой работе решена задача создания нечёткой экспертной системы для предметной области управления финансовыми активами на фондовом рынке. Накоплена база нечётких знаний, отражающая опыт специалистов по достижению наилучших результатов в управлении финансовыми активами. Реализован механизм нечёткого логического вывода, способный находить решение прикладных задач по созданной базе знаний. Созданная нечёткая экспертная система готова к применению в производстве и бизнесе. СодержаниеВведение 5 1 Нормативные ссылки 7 2 Декларативные языки программирования 8 2.1 Императивные и декларативные языки программирования 8 2.2 Язык Prolog 10 3 Проектирование базы знаний «Салон красоты» 13 3.1 Постановка задачи 13 3.2 Описание базы данных фактов 14 4 Реализация базы знаний на языке Prolog 15 4.1 Описание интерфейса пользователя 15 4.2 Тестирование и анализ результатов работы 19 Заключение 24 Список литературы 25 Приложение А 26 Приложение Б 27 Введение В данной курсовой работе представлена разработка базы знаний «Салон красоты». Программа выполнена на языке Prolog и содержит базу данных, содержащую следующую информацию: название услуги; длительность процедуры; цена услуги; фамилию, имя, отчество клиента; номер телефона клиента; дата посещения; время посещения. База данных – это хранилище для некоторого набора занесенных в компьютер файлов данных (под термином «файл» подразумевается абстрактный набор данных, который на практике может не совпадать с физическим дисковым файлом). База знаний – это совокупность знаний, описанных с использованием выбранной формы из представления. Она является основой любой интеллектуальной системы, а также содержит описание абстрактных сущностей: объектов, отношений, процессов. В данном проекте необходимо реализовать удобный интерфейс пользователя (с разветвленной системой меню и возвратом после окончания выбранной операции в меню). Программа должна осуществлять следующие операции при работе с базой данных: просмотр базы данных фактов: добавление новых записей в базу данных; удаление записи из базы данных; редактирование записи базы данных; поиск информации в базе данных. 1 Нормативные ссылки В настоящих методических указаниях использованы ссылки на следующие нормативные документы: – ГОСТ Р 7.0.5-2008 СИБИД. Библиографическая ссылка. Общие требования и правила составления; – ГОСТ 2.105-95 ЕСКД. Общие требования к текстовым документам; – ГОСТ 7.9-95 СИБИД. Реферат и аннотация. Общие требования; – ГОСТ 7.82-2001 СИБИД. Библиографическая запись. Библиографическое описание электронных ресурсов. Общие требования и правила составления. 2 Декларативные языки программирования 2.1 Императивные и декларативные языки программирования Язык программирования – формальная знаковая система, предназначенная для записи компьютерных программ. Язык программирования определяет набор лексических, синтаксических и семантических правил, задающих внешний вид программы и действия, которые выполнит исполнитель (компьютер) под ее управлением. Первые языки программирования возникли относительно недавно. Различные исследователи указывают в качестве времени их создания 20-е, 30-е и даже 40-е годы XX столетия. Первые языки программирования, как и первые ЭВМ, были довольно примитивны и ориентированы на численные расчеты. Программы, представляли собой линейные последовательности элементарных операций с регистрами, в которых хранились данные. [4] Ранние языки программирования были оптимизированы под аппаратную архитектуру конкретного компьютера, для которого предназначались. Таким образом, ранние языки программирования существенно зависели от того, что принято называть средой вычислений и приблизительно соответствовали современным машинным кодам или языкам ассемблера. Затем появились языки программирования «высокого уровня». Основное различие состоит в повышении эффективности труда разработчиков за счет абстрагирования от конкретных деталей аппаратного обеспечения. Программа стала представлять собой набор директив, обращенных к компьютеру, такой подход к программированию получил название императивного. В 60-х годах возникает новый подход к программированию, который до сих пор конкурирует с императивным, а именно, декларативный подход. Суть подхода состоит в том, что программа представляет собой не набор команд, а описание действий, которые необходимо осуществить. Этот подход существенно проще и прозрачнее формализуется математическими средствами. Следовательно, программы проще проверять на наличие ошибок (тестировать), а также на соответствие заданной технической спецификации (верифицировать). [5] Итак, все языки программирования делятся на две группы: декларативные и императивные. (рис.1) Программа на императивном языке программирования, с математической точки зрения представляет собой общее решение поставленной задачи, иными словами, ответ на вопрос «как делать?». Это последовательность команд, которые должен выполнить исполнитель. Программа на декларативном языке программирования является сочетанием формализованной в рамках языка программирования задачей и всех необходимых для ее решения теорем, проще говоря, ответ на вопрос «что делать?». Конкретную последовательность выполняемых действий выполняет компилятор, или чаще интерпретатор - программа, в реальном времени выполняющая код программы без его преобразования в машинный код. [6] Рисунок.1-Примеры императивных языков: PL/1, Pascal, Bacis, C++. 2.2 Язык Prolog Язык логического программирования Prolog был создан в 1973 году французским математиком Аланом Колмероэ. Программа предназначалась для доказательства теорем и использовалась при построении систем обработки текстов на естественном языке. Программа доказательства теорем получила название Prolog (от Programmation en Logique). Ходят легенды, что автором этой программы была жена Алана Колмероэ. Программа была написана на Фортране и работала довольно медленно. При программировании на Prolog необходимо описывать логическую модель фрагмента предметной области решаемой задачи в терминах объектов предметной области, их свойств и отношений между собой. Prolog представляет собой язык описания данных и логики их обработки. Программа на Prolog не является таковой в классическом понимании, поскольку не содержит явных управляющих конструкций типа условных операторов, операторов цикла и т.д. Она представляется собой модель фрагмента предметной области, о котором идет речь в задаче. Решение задачи записывается не в терминах компьютера, а в терминах предметной области решаемой задачи. Программу на языке Prolog легче написать, понять и отладить. Это приводит к тому, что время разработки приложения на языке Prolog во многих случаях быстрее, чем на императивных языках. Prolog присущ ряд механизмов, которыми не обладают традиционные языки программирования: сопоставление с образцом; вывод с поиском и возвратом; для хранения данных используются списки, а не массивы; отсутствуют операторы присваивания и безусловного перехода; единственным методом программирования является рекурсия. Основные области применения Prolog: быстрая разработка прототипов прикладных программ; автоматический перевод с одного языка на другой; создание естественно-языковых интерфейсов для существующих систем; символьные вычисления для решения уравнений, дифференцирования и интегрирования; проектирование динамических реляционных баз данных; экспертные системы и оболочки экспертных систем; автоматизированное управление производственными процессами; автоматическое доказательство теорем; полуавтоматическое составление расписаний; системы автоматизированного проектирования; базирующееся на знаниях программное обеспечение; организация сервера данных или, точнее, сервера знаний, к которому может обращаться клиентское приложение, написанное на каком-либо языке программирования. Области, для которых Prolog не предназначен: большой объем арифметических вычислений (обработка аудио, видео и т.д.); написание драйверов. [4] Введем основные понятия языка Prolog: Программа на языке Prolog состоит из утверждений, составляющих базу фактов и базу правил, к которым допустимо обращение с запросами. Запросы называются также целевыми утверждениями или просто целями. Утверждения – это конструкция из термов. Терм – это либо константа, либо переменная, либо структура. Константа – это либо атом, либо число. Константы представляют собой само определённые термы, т.е. их «значениями» являются их графическое представление (последовательность символов или число). Константы используются для обозначения конкретных объектов предметной области и конкретных отношений между ними. Атомы бывают 3-х типов: 1. последовательность латинских букв, цифр и символа «_», обязательно начинаются со строчной буквы; 2. последовательность специальных символов: «:-», «?-», «=<», «>=», «\=», «==», «/*», «*/» и другие; 3. любая символьная константа, заключенная в одинарные кавычки (апострофы). Примеры атомов: zadacha, z_1, ‘Задача’. Любая реализация языка Prolog обеспечивает работу с целыми числами и большинство – с действительными числами. В качестве разделителя целой и дробной части в вещественных константах используется точка «.». 3 Проектирование базы знаний «Салон красоты» 3.1 Постановка задачи Необходимо разработать базу знаний «Салон Красоты» на языке Prolog. В программе должен быть реализован удобный интерфейс пользователя с разветвленной системой меню, а также возвратом после окончания выбранной операции в меню. База данных программы должна содержать следующую информацию об услугах и клиентах салона красоты: название услуги; длительность процедуры; цена услуги; фамилию, имя, отчество клиента; номер телефона клиента; дата посещения; время посещения. Программа должна осуществлять пять основных операций при работе с базой данных: просмотр базы данных фактов; добавление новых записей в базу данных; удаление записи из базы данных; редактирование записи базы данных; поиск информации в базе данных. Поиск информации в базе данных должен осуществляться как «по образцу» (т.е. на совпадение критерия поиска с одним из полей записи в базе данных), так и по частичному совпадению с ключом поиска (т.е. осуществлять поиск подстроки в строке). Реализовать поиск ответов на следующие запросы: список услуг, длительность и цена не превышает заданных пользователем значений; список клиентов, записавшихся на вторую половину указанного пользователем дня; список клиентов, заказавших в период с … по … услуги, стоимость который выше, чем заданное пользователем значение; средняя стоимость процедуры в салоне. В начале работы программы факты, хранящиеся в файле на диске, должны загружаться во внутреннюю базы данных системы. Если указанный пользователем файл отсутствует, программа должна выдавать соответствующее сообщение. При окончании работы программы база данных фактов должна сохраняться в файл на диске, а оперативная память – очищаться. 3.2 Описание базы данных фактов База данных называется salon.txt. Данные представлены следующим образом: salon (Yslyga, Dlit_min, Price_pyb, FIO, Tel, Date, Time). Yslyga – предоставляемая услуга; Dlit_min – длительность услуги в минутах; Price_pyb – цена в рублях; FIO – фамилия, имя, отчество клиента; Tel – номер телефона клиента; Date – дата оказания услуги; Time – время оказания услуги. 4 Реализация базы знаний на языке Prolog 4.1 Описание интерфейса пользователя Для начала работы с программой необходимо запустить Arity Prolog, нажав prolog_start в данной папке. Затем необходимо выполнить следующую последовательность действий: F10FileOpen File… EnterTabsalon.ariEnter Появится текст данной программы. Запустим командное окно (клавиша F8), наберем имя предиката run, далее нажмем клавишу Enter. После ввода имени файла появится окно с просьбой ввести имя файла базы данных: Введем имя файла salon.txt После ввода имени файла появится главное меню программы: Пункты меню выбираются следующим образом: При нажатии на цифру выбирается тот пункт меню, с которым вы хотите работать. При выборе «1» - вы увидите все данные, находящиеся в оперативной памяти. Данные выводятся в виде таблицы: При выборе «2» - программа разрешит вам добавить новые данные о клиенте: При выборе «3» - программа удалит необходимую вам запись: При выборе «4» - программа позволяет редактировать данные: При выборе «5» - реализуется поиск по различным критериям: При выборе «6» - реализуется сохранение файла базы данных: При выборе «7» - осуществляется выход из базы: 4.2 Тестирование и анализ результатов работы Тестирование необходимо для проверки правильности поиска информации в реализованной базе данных. Программа должна соответствовать следующим критериям: Просмотр базы данных фактов: Добавление новых записей в базу данных: Удаление записи из базы данных: Редактирование записи базы данных: Работа с запросами: список услуг, длительность и цена которых не превышает заданных пользователем значений; список клиентов, записавшихся на вторую половину указанного пользователем дня; список клиентов, заказавших в период с … по … услуги, стоимость которых выше, чем заданное пользователем значение; средняя стоимость процедуры в данном салоне. список услуг, длительность и цена которых не превышает заданных пользователем значений: длительность: 45 минут; цена: 1000 рублей Ожидаемый результат: список услуг: массаж и макияж список клиентов, записавшихся на вторую половину указанного пользователем дня: Дата - 14.12.2013; Ожидаемый результат: Иванова Ю.М. список клиентов, заказавших в период с … по … услуги, стоимость которых выше, чем заданное пользователем значение: Цена: 1000 рублей С – 18/01/2012 По – 02/02/2012 Ожидаемый результат: Зуев С.А., Воробьева О.С. средняя стоимость процедуры в данном салоне: Ожидаемый результат: 1260 рублей Сохранение базы данных: Заключение Prolog – это язык программирования, сосредоточенных вокруг небольшого набора основных механизмов, включая сопоставление с образцом, древовидное представление структур данных и автоматический перебор с возвратами. Этот ограниченный набор средств образует удивительно мощную и гибкую среду программирования. Prolog особенно хорошо подходит для решения задач, в которых рассматриваются объекты (в частности, структурированные объекты) и отношения между ними. Например, на языке Prolog совсем не сложно выразить пространственные связи между объектами, допустим, указать, что синий шар находится за зеленым. Система Prolog получает возможность формировать рассуждения о пространственных связях и их совместимости с общим правилом. Благодаря таким особенностям Prolog становится мощным языком для искусственного интеллекта и нечислового программирования в целом. Можно указать известные примеры символических вычислений, реализация которых на других стандартных языках вызывает необходимость создавать десятки страниц кода, чрезвычайно сложного в изучении. А после реализации тех же алгоритмов на языке Prolog результатом становится кристально ясная программа, которая легко помещается на одной странице.[1] Prolog идеально подходит для создания баз данных и баз знаний, а так же экспертных систем, основанных на базах знаний. Разработанная база знаний «Салон красоты» полностью отвечает требованиям, оговоренным в постановке задачи. Пользователю представлен удобный интерфейс с системой меню и возвратом после окончания выполненной операции в меню. Возможен просмотр базы данных фактов; добавление новых записей в базу данных; удаление записи из базы данных; поиск информации в базе данных. Список литературы Братко И. Алгоритмы искусственного интеллекта на языке PROLOG. М.: «Вильямс», 2004. Шрайнер П.А. Основы программирования на язык Пролог: курс лекций: учеб. Пособие для студентов вузов, обучающихся по специальностям в области информ. технологий. – М.: Интернет – Ун-т Информ. Технологий, 2005. – 176с. URL: [http://www.apmath.spbu.ru/ru/education/final/question42newpdf], 21.12.2011 URL: [http://www.maksakov-sa.ru/ProgrProd/IcstorProgr/index.html], 15.12.2011 URL: [http://wiki.auditory.ru/Вводная_часть#.D0.98.D0.BC.D0.BF.D0.B5.D1.80.D0.B0.D1.82.D0.B8.D0.B2.D0.BD.D1.8B.D0.B9_.D0.B8_.D0.B4.D0.B5.D0.BA.D0.BB.D0.B0.D1.80.D0.B0.D1.82.D0.B8.D0.B2.D0.BD.D1.8B.D0.B9_.D0.BF.D0.BE.D0.B4.D1.85.D0.BE.D0.B4], 04.01.2012 URL: [http://www.intuit.ru/department/pl/plprolog/class/free/1/plprolog_1.html], 05.01.2012 Приложение А Приложение А - 1 Скриншот с сайта «Антиплагиат» (antiplagiat.ru). Приложение Б Листинг программы /*Салон кpасоты*/ /*******************************************************************/ run:-cls, nl, recolor_window(14, 14), write('Имя файла базы данных '), read_line(0,T),reconsult(T), menu. /*******************************************************************/ run:-nl,write('Пpовеpьте наличие файла и записей в нем!'). /*Главное меню*/ /*******************************************************************/ menu:-cls,nl, tmove(3,35), write('Mеню'),nl,nl, tmove(5,25), write('1. Список клиентов'),nl, tmove(6,25), write('2. Новая запись'),nl, tmove(7,25), write('3. Удалить запись'),nl, tmove(8,25), write('4. Редактиpование записи'),nl, tmove(9,25), write('5. Поиск'),nl, tmove(10,25), write('6. Сохpанение файла БД'),nl, tmove(11,25), write('7. Выход из базы'),nl,nl, read_line(0,X),vybor(X). /*Вывод списка клиентов*/ /*************************************************************************/ vybor($1$):- cls,table(1), nl,salon(A1,A2,A3,A4,A5,A6,A7,A8), tget(X,Y), tmove(X,0),write(A1), tmove(X,3),write($|$),write(A2), tmove(X,12),write($|$),write(A3), tmove(X,23),write($|$),write(A4), tmove(X,29),write($|$),write(A5), tmove(X,46),write($|$),write(A6), tmove(X,58),write($|$),write(A7), tmove(X,71),write($|$),write(A8), nl,fail. table(St):- tmove(St,0),write('N'), tmove(St,3),write($|$),write('Услуга'), tmove(St,12),write($|$),write('Длительн.'), tmove(St,23),write($|$),write('Цена'), tmove(St,29),write($|$),write('Ф И О'), tmove(St,46),write($|$),write('Телефон'), tmove(St,58),write($|$),write('Дата'),nl, tmove(St,71),write($|$),write('Вpемя'),nl, write('-----------------------------------------------------------------------------'). vybor($1$):-nl,write('Возвpат в меню - любая клавиша '),get0_noecho(_),cls,menu. /*Подсчет количества записей в базе*/ /***************************************************************************/ nn(N):-cls,salon(A1,_,_,_,_,_,_,_), write(A1),nl,fail. nn(N):-tget(N1,Y),N is N1+1,cls. /*Добавление новой записи*/ /***************************************************************************/ vybor($2$):-cls,nn(Z),int_text(Z,Zz), write('Всего записей в базе: '),O is Z-1,write(O),nl, write('Добавление записи под номеpом '),read_line(0,A1), write('Услуга - '),read_line(0,A2), vvod1(A3), vvod2(A4), write('Ф И О- '),read_line(0,A5), write('Телефон- '),read_line(0,A6), vvod7(A7), vvod8(A8), cls, write('Ваши данные:'),nl, tmove(2,0),write(A1), tmove(2,3),write($|$),write(A2), tmove(2,10),write($|$),write(A3), tmove(2,20),write($|$),write(A4), tmove(2,30),write($|$),write(A5), tmove(2,43),write($|$),write(A6), tmove(2,53),write($|$),write(A7), tmove(2,67),write($|$),write(A8), assert(salon(A1,A2,A3,A4,A5,A6,A7,A8)), get0_noecho(_),menu. vvod1(Dl):-write('Длительность (мин) - '),read_line(0,Dl), int_text(P,Dl),P>0. vvod1(Dl):-write('Введены некоppектные данные! '),nl,vvod1(Dl). vvod2(C):-write('Цена - '),read_line(0,C), int_text(P,C),P>0. vvod2(C):-write('Введены некоppетные данные! '),nl,vvod2(C). vvod7(D):-write('Дата (dd/mm/gggg) - '),read_line(0,D), data(D). vvod7(D):-write('Некоppектно задана дата!'),nl,vvod7(D). data(R):-substring(R,0,2,H1), substring(R,2,1,T1), substring(R,3,2,H2), substring(R,5,1,T2), substring(R,6,4,H3), T1==$/$,T2==$/$, int_text(C1,H1),C1>=1,C1=<31, int_text(C2,H2),C2>=1,C2=<12, int_text(C3,H3),C3>=2012,C3=<2015. vvod8(V):-write('Вpемя (hh:mm) - '),read_line(0,V), vremiy(V). vvod8(V):-write('Введены некоppектные данные! '),nl,vvod8(V). vremiy(R):-substring(R,0,2,H1), substring(R,2,1,T1), substring(R,3,2,H2), T1==$:$, int_text(C1,H1),C1>=0,C1=<23, int_text(C2,H2),C2>=0,C2=<59. /*Удаление записи*/ /************************************************************************/ vybor($3$):-cls,udal(Nn),ud(0,Nn). udal(A1):- write('Введите название удаляемой услуги - '), read_line(0,A2), salon(A1,A2,A3,A4,A5,A6,A7,A8),nl, write('Удаление записи под номеpом '), write(A1), tmove(4,3),write($|$),write(A2), tmove(4,10),write($|$),write(A3), tmove(4,20),write($|$),write(A4), tmove(4,30),write($|$),write(A5), tmove(4,43),write($|$),write(A6), tmove(4,53),write($|$),write(A7), tmove(4,67),write($|$),write(A8), get0_noecho(_), retract(salon(_,A2,_,_,_,_,_,_)),nl,nl, write('Запись удалена'), get0_noecho(_). ud(0,_):-menu. ud(1,N):-vybor($2$). vybor($3$):-nl,write('Запись не найдена!'),get0_noecho(_), menu. /*Редактирование записи*/ /********************************************************************/ vybor($4$):-cls,nl,write(' Редактиpование базы'),nl, write(' Введите услугу для pедактиpования: '), read_line(0,A2), salon(A1,A2,A3,A4,A5,A6,A7,A8), zapros(A2). vybor($4$):-nl, nl, write(' Такой услуги нет в базе!'), get0_noecho(_), menu. zapros(A2):- cls, nl, write(' Что будем pедактиpовать?'), nl,nl, write(' 1. Номеp'),nl, write(' 2. Услуга'),nl, write(' 3. Длительность (мин)'),nl, write(' 4. Стоимость (pуб)'),nl, write(' 5. Ф И О'),nl, write(' 6. Телефон'),nl, write(' 7. Дата'),nl, write(' 8. Вpемя'),nl,nl, read_line(0,C),nl,nl, redakt(A2,C). redakt(A2,$1$):- cls, nl,nl, write('Номеp - '), read_line(0,NA1), salon(A1,A2,A3,A4,A5,A6,A7,A8), retract(salon(A1,A2,A3,A4,A5,A6,A7,A8)), assert(salon(NA1,A2,A3,A4,A5,A6,A7,A8)), cls, nl,nl, write(' Pедактиpование завеpшено'), get0(_), menu. redakt(A2,$2$):- cls, nl,nl, write('Услуга - '), read_line(0,NA2), salon(A1,A2,A3,A4,A5,A6,A7,A8), retract(salon(A1,A2,A3,A4,A5,A6,A7,A8)), assert(salon(A1,NA2,A3,A4,A5,A6,A7,A8)), cls, nl,nl, write(' Pедактиpование завеpшено'), get0(_), menu. redakt(A2,$3$):- cls, nl, vvod1(NA3), salon(A1,A2,A3,A4,A5,A6,A7,A8), retract(salon(A1,A2,A3,A4,A5,A6,A7,A8)), assert(salon(A1,A2,NA3,A4,A5,A6,A7,A8)), cls, nl,nl, write(' Pедактиpование завеpшено'), get0(_), menu. redakt(A2,$4$):- cls, nl, vvod2(NA4), salon(A1,A2,A3,A4,A5,A6,A7,A8), retract(salon(A1,A2,A3,A4,A5,A6,A7,A8)), assert(salon(A1,A2,A3,NA4,A5,A6,A7,A8)), cls, nl,nl, write(' Pедактиpование завеpшено'), get0(_), menu. redakt(A2,$5$):- cls, nl,nl, write('Ф И О - '), read_line(0,NA5), salon(A1,A2,A3,A4,A5,A6,A7,A8), retract(salon(A1,A2,A3,A4,A5,A6,A7,A8)), assert(salon(A1,A2,A3,A4,NA5,A6,A7,A8)), cls, nl,nl, write(' Pедактиpование завеpшено'), get0(_), menu. redakt(A2,$6$):- cls, nl,nl, write('Телефон - '), read_line(0,NA6), salon(A1,A2,A3,A4,A5,A6,A7,A8), retract(salon(A1,A2,A3,A4,A5,A6,A7,A8)), assert(salon(A1,A2,A3,A4,A5,NA6,A7,A8)), cls, nl,nl, write(' Pедактиpование завеpшено'), get0(_), menu. redakt(A2,$7$):- cls, nl, vvod7(NA7), salon(A1,A2,A3,A4,A5,A6,A7,A8), retract(salon(A1,A2,A3,A4,A5,A6,A7,A8)), assert(salon(A1,A2,A3,A4,A5,A6,NA7,A8)), cls, nl,nl, write(' Pедактиpование завеpшено'), get0(_), menu. redakt(A2,$8$):- cls, nl, vvod8(NA8), salon(A1,A2,A3,A4,A5,A6,A7,A8), retract(salon(A1,A2,A3,A4,A5,A6,A7,A8)), assert(salon(A1,A2,A3,A4,A5,A6,A7,NA8)), cls, nl,nl, write(' Pедактиpование завеpшено'), get0(_), menu. redakt(A2,_):- write(' Введите от 1 до 8!'), get0(_), zapros(A2). /*Поиск*/ /*************************************************************************/ vybor($5$):-cls,write('Необходимо выбpать пункт поиска:'),nl,nl, write('1. Услуги, длительность и цена котоpых не пpевышает'),nl, write(' заданных пользователем значений'),nl, write('2. Клиенты, записавшиеся на втоpую половину указанного дня'),nl, write('3. Клиенты, заказавшие услуги в опpеделенный пеpиод, '),nl, write(' стоимость котоpых не пpевышает заданное число'),nl, write('4. Сpедняя стоимость пpоцедуpы'),nl, write('5. Выход в главное меню'),nl, nl, read_line(0,P), findrec(P). /*Сохpанение базы в файл*/ /*************************************************************************/ vybor($6$):-tmove(13,15),write('Введите имя файла базы данных - '),read_line(0,F), stdout(F,listing(salon)),tmove(15,29),write('База записана'), get0_noecho(_),menu. /*Очистка ОП и выход*/ /**************************************************************************/ vybor($7$):-retract_all, tmove(14,26),write('Pабота с базой завеpшена!'),get0_noecho(_),cls. retract_all:-retract(salon(_,_,_,_,_,_,_,_)),fail. retract_all. /*Рекуpсия на меню*/ /************************************************************************/ vybor(_):-write('Введите цифpу от 1 do 7.'),get0_noecho(_),menu. findrec_in(In):-salon(A1,_,_,_,_,_,_,_), write($*$), int_text(S1,A1), In is S1, fail. findrec_in(In):-write(In). /*Пеpвый поиск (Список услуг, длительность и цена на которых не превышает заданных пользователем значений)*/ /************************************************************************/ findrec($1$):-cls, write('1) Услуги, длительность и цена котоpых не пpевышает'),nl, write(' заданных пользователем значений'),nl, vvod1(D),vvod2(C), int_text(Dlit,D),int_text(Cena,C), write('Список запpoшенных услуг:'), poisk1(Dlit,Cena),nl,get0_noecho(_),vybor($5$). poisk1(Z1,Z2):-salon(A1,A2,A3,A4,_,_,_,_), int_text(Q1,A3),int_text(Q2,A4), Q1= int_text(S1,A1), nl,write(A2), fail. poisk1(_,_):-tget(X,Y),X=:=4,write(' пуст!'). poisk1(_,_). findrec($1$):-nl,get0_noecho(_),vybor($5$). /*Втоpой поиск (Список клиентов, записавшихся на вторую половину указанного пользователем дня)*/ /*********************************************************************/ findrec($2$):-cls,write('2) Клиенты, записавшиеся на втоpую половину указанного дня'),nl, vvod7(Date), write('Список запpошенных клиентов:'), poisk2(Date), nl,get0_noecho(_),vybor($5$). poisk2(Z1):-salon(A1,A2,_,_,A5,_,A7,A8), A7==Z1,substring(A8,0,2,St1), int_text(C,St1),C>=15, int_text(S1,A1), nl,write(A5), fail. poisk2(_):-tget(X,Y),X=:=2,write(' пуст!'). poisk2(_). findrec($2$):-nl,nl,write('Запись не найдена!'),get0_noecho(_),vybor($5$). /*Тpетий поиск (Список клиентов, заказавших в период с … по … услуги, стоимость которых выше, чем заданное пользователем значение)*/ /*********************************************************************/ findrec($3$):-cls,write('3) Клиенты, заказавшие услуги в опpеделенный пеpиод, '),nl, write(' стоимость котоpых не пpевышает заданное число'),nl, vvod2(C), period(N,K), write('Список клиентов'), poisk3(C,N,K), nl,get0_noecho(_),vybor($5$). poisk3(Z1,Z2,Z3):-salon(A1,A2,_,A4,A5,_,A7,_), int_text(Cena,Z1),int_text(Cen,A4),Cen>Cena, proverka3(A7,Z2,Z3), int_text(S1,A1), nl,write(A5), fail. proverka3(D,S,Po):-substring(D,0,2,D1), substring(D,3,2,D2), substring(D,6,4,D3), substring(S,0,2,S1), substring(S,3,2,S2), substring(S,6,4,S3), substring(Po,0,2,Po1), substring(Po,3,2,Po2), substring(Po,6,4,Po3), int_text(C1,D1), int_text(C4,D2), int_text(C7,D3), int_text(C2,S1), int_text(C5,S2), int_text(C8,S3), int_text(C3,Po1), int_text(C6,Po2), int_text(C9,Po3), sravn_data(C1,C2,C3,C4,C5,C6,C7,C8,C9). sravn_data(A1,A2,A3,A4,A5,A6,A7,A8,A9):- A7>A8,A7 sravn_data(A1,A2,A3,A4,A5,A6,A8,A8,A8):- A4>=A5,A4= sravn_data(A1,A2,A3,A5,A5,A5,A8,A8,A8):- A1>=A2,A1= poisk3(_,_,_):-tget(X,Y),X=:=6,write(' пуст!'). poisk3(_,_,_). period(S,Po):-write('Пеpиод:'),nl, write('c - '),read_line(0,S),data(S), write('по - '),read_line(0,Po),data(Po). period(_,_):- write('Некоppектно указан пеpиод!'),nl,period. /*Четвеpтый поиск (Средняя стоимость процедуры в данном салоне)*/ /*********************************************************************/ findrec($4$):-findall(A4,salon(A1,A2,A3,A4,A5,A6,A7,A8),L), sr(L,0),get0_noecho(_),vybor($5$). sr([H|T],S):-int_text(C,H),S1 is S+C,sr(T,S1). sr([],S):-nn(K),Kol_zap is K-1, Ss is S/Kol_zap, write('Сpедняя стоимость пpоцедуpы в салоне составляет '), write(Ss), write(' pублей'). findrec($5$):-menu. findrec(_):-nl,write('Введите цифpу от 1 до 5!'), get0_noecho(_),vybor($5$). retractall(X):-retract(X),fail. retractall(_). |