Sie sind auf Seite 1von 31

Programacin de un sistema

experto con Visual Prolog


7.5

Julio Luis Tenorio Cabrera.

Programacin de un sistema experto con Visual Prolog 7.5

INDICE
ndice general 1
ndice de figuras

Desarrollo de la aplicacin experta MEDICO

Ejecucin de la aplicacin experta MEDICO

18

Sitios Web

25

Tenorio Cabrera Julio Luis

Pgina 1

Programacin de un sistema experto con Visual Prolog 7.5

INDICE DE FIGURAS
Figura 01: Pantalla con mensaje explicativo al usuario de la finalidad de la aplicacin experta. 18
Figura 02: Pantalla general de la aplicacin experta

19

Figura 03: Pantalla con opcin y subopciones de la aplicacin experta

20

Figura 04: Pantalla donde se solicita nombre al usuario de la aplicacin experta 21


Figura 05: Pantalla de bienvenida al usuario de la aplicacin experta
Figura 06: Pantalla de consultas de la aplicacin experta 23
Figura 07: Pantalla de resultados de la aplicacin experta 24

Tenorio Cabrera Julio Luis

Pgina 2

22

Programacin de un sistema experto con Visual Prolog 7.5

PROGRAMACIN DE UN SISTEMA EXPERTO EN MEDICINA


Ingresar al Visual Prolog y seleccionar la opcin Project y luego la opcin New con lo cual
aparecer una interfaz en la que se escribir el nombre del proyecto, en este caso: SISTEMA
EXPERTO MEDICO EN NEUROLOGA, as mismo se deber ingresar la informacin
solicitada para la creacin del Sistema Experto, teniendo en cuenta que en el tipo de proyecto se
elegir Project Kind MDI.

Tenorio Cabrera Julio Luis

Pgina 3

Programacin de un sistema experto con Visual Prolog 7.5

Finalmente hacer click en Finish.


Luego Visual Prolog ejecutar automticamente el proceso de compilacin y linkeado con lo que
se genera la aplicacin por defecto. Luego para ejecutar la aplicacin se selecciona la opcin
Build y luego la opcin Execute lo que como resultado origina la interfaz de la aplicacin que se
muestra a continuacin.

Tenorio Cabrera Julio Luis

Pgina 4

Programacin de un sistema experto con Visual Prolog 7.5

En este punto es importante indicar que dentro de la carpeta TaskWindow se encuentran un


conjunto de archivos y una carpeta Toolbars, que luego se trabajar, (Toolbars se puede eliminar
seleccionando la opcin Project Toolbar dentro de la ventana Assigned Toolbars, para lo que
primero se debe hacer click con el botn derecho del mouse sobre el archivo TaskWindow.win,
que es uno de los archivos que se encuentra dentro de la carpeta TaskWindow,

y luego

seleccionando la opcin Attributes, luego la opcin Project Toolbars dentro de la ventana


Assigned Toolbars, como se indic ya anteriormente, y finalmente haciendo click en Delete. Es
posible, que luego Toolbars se pueda volver a agregar), por ahora es de inters slo el archivo
TaskWindow.win mediante el cual, con el botn derecho del mouse y la opcin Attributes,
podemos modificar los atributos de la ventana raz, es decir, TaskWindow, por ejemplo el nuevo
ttulo de la ventana ser SISTEMA EXPERTO MEDICO EN NEUMOLOGA y se activa la
opcin Maximized y luego seleccionar el botn Ok. Si se ejecuta nuevamente la aplicacin se
vern los cambios tal como se muestra a continuacin.

Tenorio Cabrera Julio Luis

Pgina 5

Programacin de un sistema experto con Visual Prolog 7.5

Es de inters ahora el archivo TaskMenu.mnu, mediante el cual se puede modificar las opciones
que por defecto implementa Visual Prolog. Entonces primero se hace doble click sobre el archivo
TaskMenu.mnu y luego se eliminar todas las opciones menos File y dentro de esta opcin se
eliminar todas las subopciones menos New y Exit. Luego el archivo TaskMenu.mnu debe
quedar as:

Tenorio Cabrera Julio Luis

Pgina 6

Programacin de un sistema experto con Visual Prolog 7.5

Las opciones no eliminadas se renombrarn de la siguiente manera: File = Consulta, New =


Nueva, Exit = Salir. La opcin Nueva deben de habilitarse ya que por defecto est deshabilitada
(quitar el check en la opcin Disabled), entonces el archivo TaskMenu.mnu debe quedar as:

Tenorio Cabrera Julio Luis

Pgina 7

Programacin de un sistema experto con Visual Prolog 7.5

En este punto se debe ejecutar nuevamente la aplicacin mediante la opcin Build y luego Build
con lo que se observa la advertencia que no es usado el predicado onHelpAbout. Esto significa
que hay un cdigo asociado a las opciones eliminadas que est dems en el archivo
TaskWindow.pro, de donde debemos eliminar

a dicho cdigo. Para ir al archivo

TaskWindow.pro, se hace doble click en el mensaje de advertencia.


El cdigo a eliminar es el siguiente:
class predicates
onHelpAbout : window::menuItemListener.
clauses
onHelpAbout(TaskWin, _MenuTag):_AboutDialog = aboutDialog::display(TaskWin).

Luego en el mismo archivo, se debe modificar en el siguiente cdigo, el valor true por false, para
as eliminar la opcin Window la que no se elimina en modo diseo. El cdigo a modificar es:
constants
mdiProperty : boolean = true.

Tenorio Cabrera Julio Luis

Pgina 8

Programacin de un sistema experto con Visual Prolog 7.5

el que debe quedar as:


constants
mdiProperty : boolean = false.

Tambin en el mismo archivo se recomienda modificar la aparicin de la ventana de mensajes


cuando se ejecuta la aplicacin experta. Para lograr esto se debe modificar el siguiente cdigo:
predicates
onShow : window::showListener.
clauses
onShow(_, _CreationData):_MessageForm = messageForm::display(This).

de la siguiente manera:
predicates
onShow : window::showListener.
clauses
onShow(_, _CreationData).
%_MessageForm = messageForm::display(This).

Luego de grabar y cerrar lo necesario, al ejecutarse la aplicacin debera mostrarse la siguiente


interfaz:

Tenorio Cabrera Julio Luis

Pgina 9

Programacin de un sistema experto con Visual Prolog 7.5

En este punto del desarrollo de la aplicacin, se trabajar formateando las opciones de la barra
(men) de herramientas (Toolbar), para lo cual se abre haciendo doble click, el archivo
ProjectToolbar.pro (se encuentra ubicado en la carpeta Toolbars del proyecto), y el cdigo que
deber quedar por el momento, se muestra a continuacin:

implement projectToolbar
open core, vpiDomains, vpiToolbar, resourceIdentifiers

Tenorio Cabrera Julio Luis

Pgina 10

Programacin de un sistema experto con Visual Prolog 7.5

clauses
create(Parent) :StatusBar = statusBar::newApplicationWindow(),
StatusCell = statusBarCell::new(StatusBar, 0),
StatusBar:cells := [StatusCell],
Toolbar = vpiToolbar::create(style, Parent, controlList),
setStatusHandler(Toolbar, {(Text) :- StatusCell:text := Text}).
% This code is maintained automatically, do not update it manually. 16:42:04-24.4.2013
constants
style : vpiToolbar::style = tb_top().
controlList : vpiToolbar::control_list =
[
tb_ctrl(id_file_new,pushb(),resId(idb_NewFileBitmap),"Nueva consulta;",1,1),
vpiToolbar::separator,
tb_ctrl(id_edit_cut,pushb(),resId(idb_CutBitmap),"Salir;",1,1)
].
% end of automatic code
end implement projectToolbar

La intencin del cdigo anterior es que el usuario pueda accesar a una nueva consulta y salir de la
aplicacin tambin de los botones mostrados en la barra de herramientas del proyecto, es decir,
ProjectToolbar, por lo que luego de grabar los cambios y cerrar las ventanas necesarias, al
ejecutar la aplicacin se debe observar la siguiente interfaz:

Tenorio Cabrera Julio Luis

Pgina 11

Programacin de un sistema experto con Visual Prolog 7.5

Ahora, para terminar con el formateo del proyecto en funcin del botn opcin Salir del
ProjectToolbar, se va a escribir el cdigo que permitir que cuando se seleccione el botn opcin
en mencin, se pueda salir de la aplicacin. Para esto nos hacemos doble click sobre el archivo
TaskWindow.win, luego abrimos la carpeta Menu, luego abrimos la carpeta ProjectToolbar y
finalmente hacemos doble click sobre id_edit_cut, con lo que aparecer un cdigo del cual solo
nos interesa el que se muestra a continuacin, ya que luego se modificar:
predicates
onEditCut : window::menuItemListener.
clauses
onEditCut(_Source, _MenuTag).

Finalmente el nuevo cdigo quedar as:


predicates
onEditCut : window::menuItemListener.
clauses
onEditCut(_Source, _MenuTag):close().

Tenorio Cabrera Julio Luis

Pgina 12

Programacin de un sistema experto con Visual Prolog 7.5

Al ejecutar la aplicacin, sea al seleccionar la opcin Salir tanto del men principal o el botn
opcin Salir del ProjectToolbar, se debe terminar la ejecucin de la aplicacin. Ahora para
finalizar, como ya se mencion anteriormente, el formateo del proyecto en funcin de las opciones
que presentar al usuario, debemos eliminar: la caja de cerrar, la caja de maximizar y la caja
de minimizar la interfaz, para lo cual, hacemos click con el botn derecho sobre el archivo
TaskWindow.win y luego seleccionamos la opcin Attributes con lo que en la interfaz que
aparece desactivamos las casillas: CloseBox, MaximizeBox y MinimizeBox respectivamente.
Al ejecutar la aplicacin, la interfaz mostrada ser la siguiente:

El paso siguiente es enviar al usuario un mensaje que explique la finalidad de la aplicacin, pero
este mensaje debe aparecer automticamente luego que se muestra la interfaz del punto anterior.
Para esto haciendo click con el botn derecho sobre la carpeta SISTEMA EXPERTO MDICO
EN NEUROLOGA, seleccione la opcin New in New Package y luego elija el objeto Dialog
para luego escribir como nombre del Dialog: dlgmensaje y luego hacer click en el botn Create.
El proceso grficamente se muestra a continuacin:
Tenorio Cabrera Julio Luis

Pgina 13

Programacin de un sistema experto con Visual Prolog 7.5

Tenorio Cabrera Julio Luis

Pgina 14

Programacin de un sistema experto con Visual Prolog 7.5

Debe eliminar todos los botones que aparecen menos Ok, el cual se renombrar con: Continuar y
luego elija el objeto Static Text y en la propiedad Text escriba un mensaje explicando al usuario
la finalidad del sistema experto. Finalmente cierra el dilogo creado y lo graba.

Como se dijo anteriormente el mensaje creado en el punto anterior debe aparecer


automticamente, por lo que para esto hacemos doble click en TaskWindow.win, con lo que en la
carpeta Window hacemos doble click en el evento OnShow y modificamos el siguiente cdigo:
predicates
onShow : window::showListener.
clauses
onShow(_, _CreationData).
%_MessageForm = messageForm::display(This).

escribiendo el siguiente cdigo:


predicates
onShow : window::showListener.
clauses

Tenorio Cabrera Julio Luis

Pgina 15

Programacin de un sistema experto con Visual Prolog 7.5

onShow(_, _CreationData):% _MessageForm = messageForm::display(This).


postAction({ :- _ = dlgmensaje::display(This) }).

Al ejecutar la aplicacin, de aparecer algn mensaje de agregar las libreras necesarias, se hace
click en el botn Add All para que finalmente aparezca automticamente el mensaje creado.
A continuacin se deber crear un dilogo dlgnombre (la propiedad Text de este objeto deber
contener Solicitud de nombre al usuario), con el mismo procedimiento para crear
dlgmensaje, el cual deber quedar sin ningn botn de ventana que trae por defecto el dilogo
dlgnombre. Luego se debe colocar un botn de comando denominado Continuar cuyo nombre
ser btncontinuar_ctl. -- El objetivo de dlgnombre es que el usuario ingrese su nombre en una caja de texto y mientras no
lo haga no se podr continuar. Entonces se debe considerar un objeto tipo Static Text para el
mensaje de: Ingrese su nombre por favor. Debe haber tambin un Edit Control para ingresar
el nombre del usuario, el Edit Control, se llamar ednombre_ctl.
Ahora se debe crear un dilogo llamado dlgbienvenida, mediante el mismo procedimiento que
para crear los dilogos anteriores (recordar haciendo click con el botn derecho sobre la carpeta
MEDICO, seleccione la opcin New in New Package). En este dilogo debe mostrarse un
mensaje de bienvenida al uso del sistema al usuario. Se debe tener en cuenta que en este dilogo
debe capturarse el nombre del usuario ingresado en el dilogo anterior dlgnombre.
Entonces ahora escribir el siguiente cdigo al programar el botn de comando: btncontinuar_ctl,
en el dlgnombre.pro:
predicates
onBtningresarClick : button::clickResponder.
clauses
onBtningresarClick(_Source) = button::defaultAction:Contenido=ednombre_ctl:getText(),
Contenido<>"",
close(),
_ = dlgbienvenida::display(getParent(), ednombre_ctl:getText()),
!.
onBtningresarClick(_Source) = button::defaultAction:vpiCommonDialogs::error("Mensaje del Sistema","Ingrese su nombre").

Tenorio Cabrera Julio Luis

Pgina 16

Programacin de un sistema experto con Visual Prolog 7.5

En este punto se deber mediante las opciones Consulta y luego Nueva, llamar al dilogo
dlgnombre y para esto, se hace doble click en el archivo TaskWindow.win de la carpeta
TaskWindow, para luego de la interfaz que aparece seleccionar la carpeta Menu, TaskMenu,
id_file y luego hacer doble click sobre id_file_new con lo que se deber completar el cdigo que
aparece por defecto, con el siguiente:
predicates
onFileNew : window::menuItemListener.
clauses
onFileNew(_Source, _MenuTag):_ = dlgnombre::display(This).

Luego al ejecutar la aplicacin, de aparecer algn mensaje de agregar las libreras necesarias, se
hace click en el botn Add All con lo que debera ejecutarse sin ningn problema hasta el punto
desarrollado.

Al ingresar el nombre de usuario, se debe displayar un dilogo llamado dlgbienvenida, en donde


aparezca un mensaje de bienvenida con el nombre de usuario ingresado. En el archivo
dlgbienvenida.cl, debe el cdigo quedar as:
/
**************************************************************************
***
Copyright (c) 2014 My Company
**************************************************************************
****/
class dlgbienvenida : dlgbienvenida
open core

predicates
display : (window Parent, string Name) -> dlgbienvenida Dlgbienvenida.
constructors
new : (window Parent, string Name).

Tenorio Cabrera Julio Luis

Pgina 17

Programacin de un sistema experto con Visual Prolog 7.5

end class dlgbienvenida

En el dilogo dlgbienvenida, se coloca un StaticText_ctl, el que debe ser del tipo Fact Variable,
con lo que ahora se llamar: staticText_ctl, quedando la propiedad Text en blanco. Finalmente
debe quedar solo el botn ok_ctl, el cual se renombrar con la propiedad text, con el nombre
Continuar.
En el archivo dlgbienvenida.pro, parte del cdigo a modificar debe quedar as:
clauses
display(Parent,Name) = Dialog :Dialog = new(Parent,Name),
Dialog:show().
facts
name : string.
clauses
new(Parent,Name) :name := Name,
dialog::new(Parent),
generatedInitialize(),
staticText_ctl:setText(string::format("%, te doy la bienvenida,
con gusto te ayudar. Presiona en Continuar por favor.", name)).

Ahora se debe crear un dilogo en el que se realizar las consultas al experto artificial. Este
dilogo se llama dlgconsulta al cul en la propiedad Text se deber escribir: Consultando al
experto. Finalmente a este punto, en el dilogo creado, se cambiar la apariencia del botn Ok
por Salir. En este dilogo dlgconsulta, se debern poner los siguientes controles con sus
respectivas propiedades:
o Un Push Button, el que se denominar btndiagnosticar_ctl.
o Un StaticText_ctl, para que recepcione el nombre del usuario ingresado anteriormente, el
que debe ser del tipo Fact Variable, con lo que ahora se llamar: staticText_ctl, quedando
la propiedad Text en blanco.

Tenorio Cabrera Julio Luis

Pgina 18

Programacin de un sistema experto con Visual Prolog 7.5

o Un StaticText1_ctl, el que se denominar (en la propiedad Text) Sintomas a


seleccionar.
o Un StaticText2_ctl, el que se denominar (en la propiedad Text) Sintomas
seleccionados.
o Un List Box, el que se denominar lbdisponibles_ctl.
o Un List Box, el que se denominar lbseleccionados_ctl.
o Un StaticText3_ctl, el que se denominar (en la propiedad Text) Enfermedad
diagnosticada.
o Un Edit Control, denominado edenfermedad_ctl, poniendo en blanco la propiedad Text
por el momento.
o Un StaticText4_ctl, el que se denominar (en la propiedad Text) Tratamiento
recomendado.
o Un Edit Control, denominado edtratamiento_ctl, poniendo en blanco la propiedad Text
por el momento.
Lo que ahora se debe hacer es que cuando se llame a dlgconsulta, automticamente los sntomas
disponibles deben aparecer en lbdisponibles_ctl. Para esto en la pestaa Events de la caja de
propiedades de dlgconsulta, se debe hacer doble click sobre el evento ShowListener, con lo que
aparecer el siguiente cdigo:
predicates
onShow : window::showListener.
clauses
onShow(_Source, _Data).

El cdigo anterior se modificar quedando de la siguiente manera:


predicates
onShow : window::showListener.
clauses
onShow(_Source, _Data):lbdisponibles_ctl:add("Sntoma_01"),
lbdisponibles_ctl:add("Sntoma_02"),

Tenorio Cabrera Julio Luis

Pgina 19

Programacin de un sistema experto con Visual Prolog 7.5

lbdisponibles_ctl:add("Sntoma_03"),
lbdisponibles_ctl:add("Sntoma_04"),
lbdisponibles_ctl:add("Sntoma_05").

Ahora la idea es que cuando el usuario seleccione (con doble click), un sntoma de
lbdisponibles_ctl, este sea agregado a lbseleccionados_ctl, eliminndose automticamente del
primer List Box y viceversa, es decir si el usuario desea eliminar un sntoma seleccionado de
lbseleccionados_ctl, pues lo debe seleccionar con doble click y automticamente pasar
nuevamente a formar parte de lbdisponibles_ctl. Para esto en la pestaa Events de la caja de
propiedades de lbdisponibles_ctl, se hace doble click sobre el evento DoubleClickListener, con
lo que aparecer el siguiente cdigo:
predicates
onLbdisponiblesDoubleClick : listBox::doubleClickListener.
clauses
onLbdisponiblesDoubleClick(_Source).

El cdigo anterior se modificar de la siguiente manera:


predicates
onLbdisponiblesDoubleClick : listBox::doubleClickListener.
clauses
onLbdisponiblesDoubleClick(_Source):lbdisponibles_ctl:getAllSelected(E,I),
E=[EE|_],
I=[II|_],
lbseleccionados_ctl:add(EE),
lbdisponibles_ctl:delete(II),
!.
onLbdisponiblesDoubleClick(_Source).

Ahora en la pestaa Events de la caja de propiedades de lbseleccionados_ctl, se hace doble click


sobre el evento DoubleClickListener, con lo que aparecer el siguiente cdigo:
predicates
onLbseleccionadosDoubleClick : listBox::doubleClickListener.
clauses
onLbseleccionadosDoubleClick(_Source).

Tenorio Cabrera Julio Luis

Pgina 20

Programacin de un sistema experto con Visual Prolog 7.5

El cdigo anterior se modificar de la siguiente manera:


predicates
onLbseleccionadosDoubleClick : listBox::doubleClickListener.
clauses
onLbseleccionadosDoubleClick(_Source):lbseleccionados_ctl:getAllSelected(E,I),
E=[EE|_],
I=[II|_],
lbdisponibles_ctl:add(EE),
lbseleccionados_ctl:delete(II),
!.
onLbseleccionadosDoubleClick(_Source).

Se debe ahora llamar desde el dilogo dlgbienvenida al dilogo dlgconsulta. Para esto, en el
botn Continuar (es el botn ok_ctl) de dlgbienvenida, poner el siguiente cdigo:
predicates
onOkClick : button::clickResponder.
clauses
onOkClick(_Source) = button::defaultAction:close(),
_ = dlgconsulta::display(getParent(), name),
!.

Ahora en el archivo dlgconsulta.cl, se debe escribir el siguiente cdigo:


/
**************************************************************************
***
Copyright (c) 2014 My Company
**************************************************************************
****/
class dlgconsulta : dlgconsulta
open core

Tenorio Cabrera Julio Luis

Pgina 21

Programacin de un sistema experto con Visual Prolog 7.5

predicates
display : (window Parent, string Name) -> dlgconsulta Dlgconsulta.
constructors
new : (window Parent, string Name).
end class dlgconsulta

En el archivo dlgconsulta.pro, se debe escribir el siguiente cdigo:

clauses
display(Parent,Name) = Dialog :Dialog = new(Parent,Name),
Dialog:show().
facts
nam : string.
clauses
new(Parent,Name) :nam:=Name,
dialog::new(Parent),
generatedInitialize(),
staticText_ctl:setText(string::format("%, selecciona los requerimientos requeridos.", n
am)).

Finalmente se debe escribir el cdigo para el botn btndiagnosticar_ctl, para esto se hace doble
click en el botn mencionado con lo que aparecer el siguiente cdigo:
predicates
onBtndiagnosticarClick : button::clickResponder.
clauses
onBtndiagnosticarClick(_Source) = button::defaultAction.

el que se modificar de la siguiente manera:

Tenorio Cabrera Julio Luis

Pgina 22

Programacin de un sistema experto con Visual Prolog 7.5

domains
sintomas = string*.
facts
diagnostico:(sintomas,string,string).
clauses
diagnostico(["Sntoma_01","Sntoma_02","Sntoma_03"],"Enfermedad_01_02_03","Trata
miento_01_02_03").
diagnostico(["Sntoma_04","Sntoma_05"],"Enfermedad_04_05","Tratamiento_04_05").
predicates
onBtndiagnosticarClick : button::clickResponder.
clauses
onBtndiagnosticarClick(_Source) = button::defaultAction:edenfermedad_ctl:setText(""),
edtratamiento_ctl:setText(""),
S=lbseleccionados_ctl:getAll(),
diagnostico(S,E,T),
edenfermedad_ctl:setText(E),
edtratamiento_ctl:setText(T),
!.
onBtndiagnosticarClick(_Source) = button::defaultAction:edenfermedad_ctl:setText(""),
edtratamiento_ctl:setText(""),
vpiCommonDialogs::error("Mensaje del Sistema","No existen respuestas para los snto
mas seleccionados").

Tenorio Cabrera Julio Luis

Pgina 23

Programacin de un sistema experto con Visual Prolog 7.5

EJECUCIN DE LA APLICACIN EXPERTA EN MEDICINA


Figura 01: Pantalla con mensaje explicativo al usuario de la finalidad de la aplicacin experta.

Fuente: (Elaboracin propia, 2014)

Tenorio Cabrera Julio Luis

Pgina 24

Programacin de un sistema experto con Visual Prolog 7.5

Figura 02: Pantalla general de la aplicacin experta.

Fuente: (Elaboracin propia, 2014)

Tenorio Cabrera Julio Luis

Pgina 25

Programacin de un sistema experto con Visual Prolog 7.5

Figura 03: Pantalla con opcin y subopciones de la aplicacin experta.

Fuente: (Elaboracin propia, 2014)

Tenorio Cabrera Julio Luis

Pgina 26

Programacin de un sistema experto con Visual Prolog 7.5

Figura 04: Pantalla donde se solicita nombre al usuario de la aplicacin experta.

Fuente: (Elaboracin propia, 2014)

Figura 05: Pantalla de bienvenida al usuario de la aplicacin experta.


Tenorio Cabrera Julio Luis

Pgina 27

Programacin de un sistema experto con Visual Prolog 7.5

Fuente: (Elaboracin propia, 2014)

Figura 06: Pantalla de consultas de la aplicacin experta.

Tenorio Cabrera Julio Luis

Pgina 28

Programacin de un sistema experto con Visual Prolog 7.5

Fuente: (Elaboracin propia, 2014)

Figura 07: Pantalla de resultados de la aplicacin experta.

Tenorio Cabrera Julio Luis

Pgina 29

Programacin de un sistema experto con Visual Prolog 7.5

Fuente: (Elaboracin propia, 2014)

SITIOS WEB
Prolog

Development

Center

(PDC).

[Fecha

en: http://www.visual-prolog.com/

Tenorio Cabrera Julio Luis

Pgina 30

de

consulta:

15 enero

2013].

Disponible

Das könnte Ihnen auch gefallen