@startuml anyreport !theme cerulean-outline package moodle-report{ ' сборка приложения class App{ - accessPane : AccessPane - tagPane : TagPane - reportPane : ReportPane } 'панель подключения к базе данных class AccessPane{} AccessPane --> App 'панель управления тегами для формирования выборки пользователей class TagPane{} TagPane --> App 'панель отображения отчета по выборке class ReportPane{} ReportPane -->App /'методы обработки действий пользователя клики мыши, нажатия клавишь, итд. '/ class TagControls{ + enterPressed() : void + addTag() : void + removeTag() : void + clearTags() : void } TagControls --> TagPane class AccessControls{ + connect(Base base, JPanel pane) : void + disconnect(Base base, JPanel pane) : void } AccessControls --> AccessPane 'Пользователь попросил сохранить отчет в файл 'Указывает путь куда сохранить class ReportControls{ - path : String + getTableReport() : void + getXLSXReport() : void + getTextReport() : void } ReportControls --> ReportPane 'модель данных для текстового отчета class ReportTextModel{ 'количество пройденных тестов 'список пройденных тестов 'количество пользователей в выборке 'количество уникальных пользователей } ReportTextModel --> ReportControls 'модель данных для отчета xlsx class ReportXLSXModel{ - path : String + ReportXLSXModel(Data data) : void + setPath() : void + getPath() : String + CreateXLSXReport() : void } ReportXLSXModel --> ReportControls 'модель данных для отображения в gui class ReportTableModel{} ReportTableModel --> ReportControls /' получение данных из базы данных доступ к базе данных '/ class Base{ - connection : Connection - login : String - password : Array - url : String + setConnection(Connection connaction) : void + getConnaction() : Connaction + connect() : bolean + disconnect() : void } Base --> Data Base --> AccessControls ' хранение и представление данных class Data{ - userlist : UserListModel - results : ArrayList - quizes : ArrayList } Data --> ReportTextModel Data --> ReportXLSXModel Data --> ReportTableModel /'формирование перечня пользователей - на основании тегов - на основании исходных перечней (из файла) '/ class UserListModel{ - userlist : ArrayList + getUsers() : ArrayList + setUsersByTag(TagModel tags) : void + setUsersFromFile(File file) : void } UserListModel --> Data class User{ - id : int - login : String - mail : String } User --> UserListModel class Result{ - id : int - quizid : int - userid : int - grade : double - time : Long } Result --> Data class Quiz{ - id : int - name : String } Quiz --> Data class TagModel{ + addTag(String tag) : void + removeTag(String tag) : void } TagModel --> TagControls TagModel --> UserListModel class Tag{ - tag : String + getTag() : String + setTag(String tag) : void } Tag --> TagModel } @enduml