6
.docxГУАП
КАФЕДРА № 41
ОТЧЕТ
ЗАЩИЩЕН С ОЦЕНКОЙ
ПРЕПОДАВАТЕЛЬ
старший преподаватель |
|
|
|
Е.П. Виноградова |
должность, уч. степень, звание |
|
подпись, дата |
|
инициалы, фамилия |
ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ №6 |
Проектирование баз данных с контекстным меню |
по курсу: Информатизация и анализ информационных ресурсов общества |
|
|
РАБОТУ ВЫПОЛНИЛА СТУДЕНТКА ГР. |
4716 |
|
|
|
С.А. Янышева |
|
|
|
подпись, дата |
|
инициалы, фамилия |
Санкт-Петербург
2021
Цель работы
Приобретение практических навыков составления и использования баз данных, а также создание контекстным меню.
Вариант 2
Сформировать с использованием структур статическую БД об авторах. Для каждого автора хранить следующую информацию: Фамилия, Имя, Отчество, год рождения, список произведений. Каждое произведение задается структурой: название, год, вид, жанр. Сформировать следующие запросы к базе данных:
Названия всех произведений заданного автора;
Все жанры, в которых проявил себя указанный автор;
Все авторы, отметившиеся в указанном жанре;
Какие виды произведений встречаются среди произведений указанного жанра.
ХОД ВЫПОЛНЕНИЯ РАБОТЫ
Рисунок 1 – Добавление нового автора
Рисунок 2 – Добавление информации о новом произведении
Рисунок 3 – Запрос 1
Рисунок 4 – Запрос 2
Рисунок 5 – Запрос 3
Рисунок 6 – Запрос 4
Рисунок 7 – Получившаяся база данных
Рисунок 8 – Контекстное меню
Рисунок 9 – Выбор одного из пунктов контекстного меню
Выводы
В ходе лабораторной работы изучили способы представления в языке Пролог сложных структур данных, представляющих составные объекты.
Листинг программы:
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).