Скачиваний:
13
Добавлен:
01.06.2021
Размер:
206.73 Кб
Скачать

ГУАП

КАФЕДРА № 41

ОТЧЕТ

ЗАЩИЩЕН С ОЦЕНКОЙ

ПРЕПОДАВАТЕЛЬ

старший преподаватель

Е.П. Виноградова

должность, уч. степень, звание

подпись, дата

инициалы, фамилия

ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ №6

Проектирование баз данных с контекстным меню

по курсу: Информатизация и анализ информационных ресурсов общества

РАБОТУ ВЫПОЛНИЛА

СТУДЕНТКА ГР.

4716

С.А. Янышева

подпись, дата

инициалы, фамилия

Санкт-Петербург

2021

  1. Цель работы

Приобретение практических навыков составления и использования баз данных, а также создание контекстным меню.

  1. Вариант 2

Сформировать с использованием структур статическую БД об авторах. Для каждого автора хранить следующую информацию: Фамилия, Имя, Отчество, год рождения, список произведений. Каждое произведение задается структурой: название, год, вид, жанр. Сформировать следующие запросы к базе данных:

Названия всех произведений заданного автора;

Все жанры, в которых проявил себя указанный автор;

Все авторы, отметившиеся в указанном жанре;

Какие виды произведений встречаются среди произведений указанного жанра.

  1. ХОД ВЫПОЛНЕНИЯ РАБОТЫ

Рисунок 1 – Добавление нового автора

Рисунок 2 – Добавление информации о новом произведении

Рисунок 3 – Запрос 1

Рисунок 4 – Запрос 2

Рисунок 5 – Запрос 3

Рисунок 6 – Запрос 4

Рисунок 7 – Получившаяся база данных

Рисунок 8 – Контекстное меню

Рисунок 9 – Выбор одного из пунктов контекстного меню

  1. Выводы

В ходе лабораторной работы изучили способы представления в языке Пролог сложных структур данных, представляющих составные объекты.

Листинг программы:

run:- retractall(writer/3),retractall(works/4),load_db, menu.

menu:-

repeat, nl,

write('_____________________'), nl,

write('База данных об авторах.'), nl,nl,

write('1 - Вывести инф. о авторах.'), nl,

write('2 - Вывести инф. о работах.'), nl,

write('3 - Добавить автора.'), nl,

write('4 - Добавить работу.'), nl,

write('5 - Сохранить изменения в БД.'), nl,

write('6 - Вывести названия произведений конкретного автора.'), nl,

write('7 - Вывести все жанры, в которых проявил себя автор.'), nl,

write('8 - Вывести всех авторах, отметившихся в указанном жанре.'), nl,

write('9 - Вывести виды произведений, встречающихся среди указанного жанра.'), nl,

write('0 - Выйти.'), nl,

write('_____________________'), nl,

write('Выберите пункт:'),

read(X),

process(X),

!.

process(1):- view_writers.

process(2):- view_works.

process(3):- add_writer.

process(4):- add_works_info.

process(5):- save_db.

process(6):- run_query1, menu.

process(7):- run_query2, menu.

process(8):- run_query3, menu.

process(9):- run_query4, menu.

process(0):- retractall(writer/3),retractall(works/4).

view_writers:-

write('Инф. о авторах:'),nl,

writer(A,Y,WL),nl,

write('Имя: '), write(A),nl,

write('Год рождения: '), write(Y),nl,

write('Список произведений: '), write(WL),nl,fail.

view_works:-

write('Инф. о работах:'),nl,

works(W,Y,T,S),nl,

write('Название: '), write(W),nl,

write('Год написания: '), write(Y),nl,

write('Вид: '), write(T),nl,

write('Жанр: '), write(S),nl, fail.

add_writer:-

write('Введите данные писателя:'),

nl,

repeat,

write('Имя Фамилия:'),

read(FullName),

write('Год рождения:'),

read(BirthYear),

write('Список работ ["1-е произведение","2-е произведение",...]'),

read(WorksList),

assertz(writer(FullName, BirthYear, WorksList)),

quest1,

!.

quest1:-

write('Добавить ещё одного автора? (y/n)'),

read(ANS),

answer1(ANS).

answer1(_):-fail.

answer1(y):-fail.

answer1(n):-menu.

add_works_info:-

write('Введите данные произведения:'),

nl,

repeat,

write('Название:'),

read(WorkName),

write('Год написания:'),

read(ReleaseYear),

write('Тип:'),

read(Type),

write('Жанр:'),

read(Style),

assertz(works(WorkName, ReleaseYear, Type, Style)),

quest2,

!.

quest2:-

write('Добавить инф. о ещё одном произведении? (y/n)'),

read(ANS),

answer2(ANS).

answer2(_):-fail.

answer2(y):-fail.

answer2(n):-menu.

save_db:-

tell('db.txt'),

listing(writer),

listing(works),

told,

write('Информация сохранена.'),

menu.

load_db:- consult('db.txt'), write('Информация загружена.').

run_query1:-

write('Введите Имя_Фамилию автора:'),

read(X),

nl,

writer(X,_,WL),

write('Названия всех произведений автора:'),

write(WL).

run_query2:-

write('Введите Имя_Фамилию автора:'),

read(X),

writer(X,_,WL),

qwe(WL,LST),

unique(LST,ANS),

nl,

write('Все жанры, в которых проявил себя заданный автор:'),

write(ANS).

run_query3:-

write('Введите название жанра:'),

read(X),

findall(Name,writer(Name,_,_),NL),

zxc(NL,X,LST),

write('Все авторы отметившиеся в указанном жанре:'),

write(LST).

run_query4:-

write('Введите название жанра:'),

read(X),

findall(Name,writer(Name,_,_),NL),

asd(NL,X,LST),

unique(LST,ANS),

write('Какие виды произведений встречаются среди произведений указанного жанра:'),

write(ANS).

unique([H|T],[H|TU]) :- delete(T,H,TN), unique(TN,TU).

unique([],[]).

qwe([],_).

qwe([W|WL],L):- works(W,_,_,S), qwe(WL,L1), append(L1,[S],L).

qwe1([],_,_).

qwe1([W|WL],X,L):- findall(Type, works(W,_,Type,X), S), qwe1(WL,X,L1), append(L1,S,L).

style_check([],_,_).

style_check([W|WL],X, L):- works(W,_,_,S), style_check(WL,X,L), X\=S, L = false; L = true, !.

zxc([],_,_).

zxc([A|NL],X,L):- writer(A,_,WL), zxc(NL,X,L1),style_check(WL,X,C),C==true,append(L1,[A],L).

asd([],_,_).

asd([A|NL],X,LST):- writer(A,_,WL), asd(NL,X,L1), qwe1(WL,X,L), append(L1,L,LST).

Соседние файлы в предмете Информатизация и анализ информационных ресурсов общества