mrAsacura
3 years ago
18 changed files with 945 additions and 0 deletions
@ -0,0 +1,3 @@
@@ -0,0 +1,3 @@
|
||||
{ |
||||
"java.configuration.updateBuildConfiguration": "automatic" |
||||
} |
@ -0,0 +1,115 @@
@@ -0,0 +1,115 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
||||
<modelVersion>4.0.0</modelVersion> |
||||
|
||||
<groupId>ru.egspt.moodle</groupId> |
||||
<artifactId>anyreport</artifactId> |
||||
<version>0.1</version> |
||||
|
||||
<name>anyreport</name> |
||||
<!-- FIXME change it to the project's website --> |
||||
<url>http://www.example.com</url> |
||||
|
||||
<properties> |
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> |
||||
<maven.compiler.source>1.8</maven.compiler.source> |
||||
<maven.compiler.target>1.8</maven.compiler.target> |
||||
</properties> |
||||
|
||||
<dependencies> |
||||
<dependency> |
||||
<groupId>org.apache.poi</groupId> |
||||
<artifactId>poi</artifactId> |
||||
<version>5.2.2</version> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>org.apache.poi</groupId> |
||||
<artifactId>poi-ooxml</artifactId> |
||||
<version>5.2.2</version> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>org.apache.poi</groupId> |
||||
<artifactId>poi-ooxml-schemas</artifactId> |
||||
<version>4.1.2</version> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>org.apache.poi</groupId> |
||||
<artifactId>poi-scratchpad</artifactId> |
||||
<version>5.2.2</version> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>org.apache.poi</groupId> |
||||
<artifactId>ooxml-schemas</artifactId> |
||||
<version>1.1</version> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>org.apache.logging.log4j</groupId> |
||||
<artifactId>log4j-to-slf4j</artifactId> |
||||
<version>2.8.2</version> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId> org.apache.cassandra</groupId> |
||||
<artifactId>cassandra-all</artifactId> |
||||
<version>4.0.3</version> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>junit</groupId> |
||||
<artifactId>junit</artifactId> |
||||
<version>4.11</version> |
||||
<scope>test</scope> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>mysql</groupId> |
||||
<artifactId>mysql-connector-java</artifactId> |
||||
<version>8.0.28</version> |
||||
</dependency> |
||||
</dependencies> |
||||
|
||||
<build> |
||||
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --> |
||||
<plugins> |
||||
<!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle --> |
||||
<plugin> |
||||
<artifactId>maven-clean-plugin</artifactId> |
||||
<version>3.1.0</version> |
||||
</plugin> |
||||
<!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging --> |
||||
<plugin> |
||||
<artifactId>maven-resources-plugin</artifactId> |
||||
<version>3.0.2</version> |
||||
</plugin> |
||||
<plugin> |
||||
<artifactId>maven-compiler-plugin</artifactId> |
||||
<version>3.8.0</version> |
||||
</plugin> |
||||
<plugin> |
||||
<artifactId>maven-surefire-plugin</artifactId> |
||||
<version>2.22.1</version> |
||||
</plugin> |
||||
<plugin> |
||||
<artifactId>maven-jar-plugin</artifactId> |
||||
<version>3.0.2</version> |
||||
</plugin> |
||||
<plugin> |
||||
<artifactId>maven-install-plugin</artifactId> |
||||
<version>2.5.2</version> |
||||
</plugin> |
||||
<plugin> |
||||
<artifactId>maven-deploy-plugin</artifactId> |
||||
<version>2.8.2</version> |
||||
</plugin> |
||||
<!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle --> |
||||
<plugin> |
||||
<artifactId>maven-site-plugin</artifactId> |
||||
<version>3.7.1</version> |
||||
</plugin> |
||||
<plugin> |
||||
<artifactId>maven-project-info-reports-plugin</artifactId> |
||||
<version>3.0.0</version> |
||||
</plugin> |
||||
</plugins> |
||||
</pluginManagement> |
||||
</build> |
||||
</project> |
Binary file not shown.
@ -0,0 +1,19 @@
@@ -0,0 +1,19 @@
|
||||
package ru.egspt.moodle; |
||||
|
||||
public class Access { |
||||
private static String userName = "esoe"; |
||||
private static String password = "psalm6912"; |
||||
private static String url = "jdbc:MySQL://45.128.206.87:3306/moodle"; |
||||
|
||||
//если значение userName отсутствует, запросить его у пользователя
|
||||
public static String getUserName(){ |
||||
return userName; |
||||
} |
||||
public static String getPassword(){ |
||||
return password; |
||||
} |
||||
public static String getURL(){ |
||||
return url; |
||||
} |
||||
|
||||
} |
@ -0,0 +1,14 @@
@@ -0,0 +1,14 @@
|
||||
package ru.egspt.moodle; |
||||
|
||||
/** |
||||
* графический интерфейс для |
||||
* moodle.anyreport |
||||
* |
||||
*/ |
||||
public class App |
||||
{ |
||||
public static void main( String[] args ) |
||||
{ |
||||
System.out.println( "Работает подготовщик отчетов по результатам тестирования пользователей ..." ); |
||||
} |
||||
} |
@ -0,0 +1,503 @@
@@ -0,0 +1,503 @@
|
||||
package ru.egspt.moodle; |
||||
|
||||
import java.io.File; |
||||
import java.io.FileOutputStream; |
||||
import java.io.IOException; |
||||
import java.nio.file.Files; |
||||
import java.nio.file.Path; |
||||
import java.nio.file.Paths; |
||||
|
||||
/** |
||||
* Класс предоставляет методы работы с базой данных |
||||
* передает данные классам-пользователям |
||||
* Включает: |
||||
* - подключение к серверу баз данных |
||||
* - подключение к базе данных |
||||
* - подключение к таблице базы данных |
||||
* - запрос данных из таблицы |
||||
* - |
||||
*/ |
||||
|
||||
import java.sql.Connection; |
||||
import java.sql.DriverManager; |
||||
import java.sql.ResultSet; |
||||
import java.sql.Statement; |
||||
import java.time.LocalTime; |
||||
|
||||
import org.apache.poi.ss.usermodel.Cell; |
||||
import org.apache.poi.ss.usermodel.Row; |
||||
import org.apache.poi.xssf.usermodel.XSSFSheet; |
||||
import org.apache.poi.xssf.usermodel.XSSFWorkbook; |
||||
import java.util.ArrayList; |
||||
|
||||
import javax.swing.JOptionPane; |
||||
|
||||
public class Base { |
||||
private ArrayList<User> users; |
||||
private ArrayList<Result> results; |
||||
private ArrayList<Quiz> quizes; |
||||
|
||||
/** |
||||
* @return the quizes |
||||
*/ |
||||
public ArrayList<Quiz> getQuizes() { |
||||
return quizes; |
||||
} |
||||
/** |
||||
* @param quizes the quizes to set |
||||
*/ |
||||
public void setQuizes(Connection conn, Base base) { |
||||
ArrayList<Quiz> quizList = new ArrayList<>(); |
||||
try{ |
||||
Statement stmt = conn.createStatement(); |
||||
//берем данные о результатах тестирования на сервере
|
||||
ResultSet rs = stmt.executeQuery("SELECT id, name, timelimit FROM mdl_quiz"); |
||||
while(rs.next()){ |
||||
int id = rs.getInt("id"); |
||||
String name = rs.getString("name"); |
||||
//перебираем результаты тестирований, пишем в класс.
|
||||
int i = 0;//
|
||||
while (i < base.getResults().size()){ |
||||
if (base.getResults().get(i).getQuizid() == id){ |
||||
Quiz q = new Quiz(); |
||||
q.setId(id); |
||||
q.setName(name); |
||||
int j = 0; |
||||
boolean b = false; |
||||
while (j < quizList.size()){ |
||||
if (q.getId() == quizList.get(j).getId()){ |
||||
b = true; |
||||
} |
||||
j++; |
||||
} |
||||
if (b != true){ |
||||
quizList.add(q); |
||||
} |
||||
} |
||||
i++; |
||||
} |
||||
} |
||||
} |
||||
catch (Exception ex){ |
||||
System.err.println ("Подключение к серверу баз данных не установлено ... "); |
||||
ex.printStackTrace(); |
||||
System.out.println (ex); |
||||
} |
||||
this.quizes = quizList; |
||||
} |
||||
/** |
||||
* @return the users |
||||
*/ |
||||
public ArrayList<User> getUsers() { |
||||
return users; |
||||
} |
||||
/** |
||||
* @param users the users to set |
||||
*/ |
||||
public void setUsers(ArrayList<User> users) { |
||||
this.users = users; |
||||
} |
||||
/** |
||||
* @return the results |
||||
*/ |
||||
public ArrayList<Result> getResults() { |
||||
return results; |
||||
} |
||||
/** |
||||
* @param results the results to set |
||||
* @throws IOException |
||||
*/ |
||||
|
||||
public void createExcellReport(Connection conn, Base base) throws IOException{ |
||||
System.out.println("Формирование report.xlsx ..."); |
||||
// создание самого excel файла в памяти
|
||||
XSSFWorkbook book = new XSSFWorkbook(); |
||||
// создание листа
|
||||
XSSFSheet sheet = book.createSheet("Report"); |
||||
|
||||
|
||||
//формируем заголовки
|
||||
System.out.println("Формируем заголовки таблицы ..."); |
||||
ArrayList<Object> header = new ArrayList<Object>(); |
||||
header.add("login"); |
||||
header.add("mail"); |
||||
//пишем названия тестов в заголовки xlsx
|
||||
System.out.println("Пишем названия тестов в заголовки xlsx ..."); |
||||
System.out.println("Количество пройденных тестов участниками выборки составило: " + base.getQuizes().size()); |
||||
int i = 0; |
||||
while (i < base.getQuizes().size()){ |
||||
header.add(base.getQuizes().get(i).getName()); |
||||
//System.out.println("Пишем заголовок: " + base.getQuizes().get(i).getName());
|
||||
header.add(""); |
||||
i++; |
||||
} |
||||
int row = 0;//строка
|
||||
int col = 0;//столбец
|
||||
Row r = sheet.createRow(row); |
||||
while (col < header.size()){ |
||||
r.createCell(col).setCellValue(header.get(col).toString()); |
||||
//System.out.println(header.get(col));
|
||||
col++; |
||||
} |
||||
System.out.println("Заголовки в report.xlsx сформированы."); |
||||
|
||||
//построчно формируем отчет
|
||||
System.out.println("Построчно формируем отчет .... "); |
||||
row++; |
||||
//строк в отчете будет столько же, сколько пользователей попало в выборку (плюс строка- заголовков)
|
||||
int userCurr = 0; |
||||
while (userCurr < base.getUsers().size()){ |
||||
col = 0; |
||||
r = sheet.createRow(row); |
||||
//заполняем данные пользователя (имя и почту)
|
||||
Cell cname = r.createCell(col); |
||||
cname.setCellValue(base.getUsers().get(userCurr).getName()); |
||||
col++; |
||||
Cell cmail = r.createCell(col); |
||||
cmail.setCellValue(base.getUsers().get(userCurr).getMail()); |
||||
col++; |
||||
//Заполняем результаты тестирвоания пользователя
|
||||
//Перебираем результаты, получаем результаты текущего пользователя
|
||||
int resultCurr = 0; |
||||
while (resultCurr < base.getResults().size()){ |
||||
if (base.getResults().get(resultCurr).getUserid() == base.getUsers().get(userCurr).getId()){ |
||||
//если текущий результат относится к текущему пользователю
|
||||
//взять индекс теста из результата и сопоставить с полями заголовков (определить номер ячейки для формирования записи)
|
||||
String quizname = ""; |
||||
int quizCurr = 0; |
||||
while (quizCurr < base.getQuizes().size()){ |
||||
if (base.getResults().get(resultCurr).getQuizid() == base.getQuizes().get(quizCurr).getId()){ |
||||
quizname = base.getQuizes().get(quizCurr).getName(); |
||||
} |
||||
quizCurr++; |
||||
} |
||||
//поиск индекса ячейки, куда писать результаты
|
||||
int ihead = 0; |
||||
int headerCurr = 0;//номер ячейки в которую писать результаты тестирования (+2)
|
||||
while (ihead < header.size()){ |
||||
if (quizname.equals(header.get(ihead))){ |
||||
headerCurr = ihead; |
||||
} |
||||
ihead++; |
||||
} |
||||
//формируем ячейку grade
|
||||
Cell cGrade = r.createCell(headerCurr); |
||||
cGrade.setCellValue(base.getResults().get(resultCurr).getGrade()); |
||||
//формируем ячейку time
|
||||
Cell cTime = r.createCell(headerCurr + 1); |
||||
//Time t = new Time(base.getResults().get(resultCurr).getTime());
|
||||
//cTime.setCellValue(t.toString());
|
||||
Long time = base.getResults().get(resultCurr).getTime(); |
||||
String t = LocalTime.MIN.plusSeconds(time).toString(); |
||||
cTime.setCellValue(t); |
||||
} |
||||
resultCurr++; |
||||
} |
||||
row++; |
||||
userCurr++; |
||||
} |
||||
//пишем книгу в файл
|
||||
String location = System.getProperty("user.dir") + "\\report.xlsx"; |
||||
Path path = Paths.get(location); |
||||
if (Files.exists(path)) { |
||||
try (FileOutputStream out = new FileOutputStream(location)) { |
||||
book.write(out); |
||||
book.close(); |
||||
out.close(); |
||||
System.out.println("Excel файл успешно перезаписан!"); |
||||
System.out.println(location); |
||||
} |
||||
catch (IOException e){ |
||||
e.printStackTrace(); |
||||
} |
||||
} |
||||
else { |
||||
try (FileOutputStream out = new FileOutputStream(new File(location))) { |
||||
book.write(out); |
||||
book.close(); |
||||
out.close(); |
||||
System.out.println("Excel файл успешно создан!"); |
||||
System.out.println(location); |
||||
} |
||||
catch (IOException e){ |
||||
e.printStackTrace(); |
||||
} |
||||
} |
||||
} |
||||
public void setResults(Connection conn, ArrayList<User> uFiltered) { |
||||
ArrayList<Result> rList = new ArrayList<>(); |
||||
try{ |
||||
Statement stmt = conn.createStatement(); |
||||
//берем данные о результатах тестирования на сервере
|
||||
System.out.println("Берем с сервера данные о результатах тестирования ...."); |
||||
ResultSet rs = stmt.executeQuery("SELECT id, quiz, userid, grade, timemodified FROM mdl_quiz_grades"); |
||||
while(rs.next()){ |
||||
int id = rs.getInt("id"); |
||||
int quizid = rs.getInt("quiz"); |
||||
/** |
||||
* если пользователь с таким ящиком уже существует в выборке, |
||||
* удаляем пользователя из выборки и пишем старый id пользователя в result |
||||
* либо переписать результаты |
||||
* надо в результате указать старый id пользователя. Остальные данные результата при этом сохранить. |
||||
* надо удалить пользователя в случае изменения данных результата |
||||
*/ |
||||
int userid = rs.getInt("userid");//проверить почтовый ящик
|
||||
double grade = rs.getDouble("grade"); |
||||
//преобразование данных о времени сдачи теста
|
||||
long time = 0; |
||||
//перебираем результаты тестирования, пишем в класс.
|
||||
int i = 0;//
|
||||
while (i < uFiltered.size()){ |
||||
if (uFiltered.get(i).getId() == userid){ |
||||
Result res = new Result(); |
||||
res.setId(id); |
||||
res.setQuizid(quizid); |
||||
res.setUserid(userid); |
||||
res.setGrade(grade); |
||||
res.setTime(time); |
||||
rList.add(res); |
||||
} |
||||
i++; |
||||
} |
||||
} |
||||
} |
||||
catch (Exception ex){ |
||||
System.err.println ("Подключение к серверу баз данных не установлено ... "); |
||||
ex.printStackTrace(); |
||||
System.out.println (ex); |
||||
} |
||||
|
||||
try { |
||||
//берем данные о попытках с сервера, пишем корректное время сдачи теста
|
||||
System.out.println("Берем данные о попытках с сервера, запоминаем результаты последней попытки ...."); |
||||
Statement stmt = conn.createStatement(); |
||||
ResultSet at = stmt.executeQuery("SELECT id, quiz, userid, attempt, timestart, timefinish, timemodified, sumgrades FROM mdl_quiz_attempts"); |
||||
while (at.next()){ |
||||
int quizidAt = at.getInt("quiz"); |
||||
int useridAt = at.getInt("userid"); |
||||
Long timestartAt = at.getLong("timestart"); |
||||
Long timefinishAt = at.getLong("timefinish"); |
||||
double sumgradesAt = at.getDouble("sumgrades"); |
||||
int rCurr = 0; |
||||
while (rCurr < rList.size()){ |
||||
if (rList.get(rCurr).getUserid() == useridAt){ |
||||
if (rList.get(rCurr).getQuizid() == quizidAt){ |
||||
rList.get(rCurr).setTime(timefinishAt - timestartAt); |
||||
rList.get(rCurr).setGrade(sumgradesAt); |
||||
} |
||||
} |
||||
rCurr++; |
||||
} |
||||
} |
||||
} |
||||
catch (Exception ex){ |
||||
System.err.println ("Подключение к серверу баз данных не установлено ... "); |
||||
ex.printStackTrace(); |
||||
System.out.println (ex); |
||||
} |
||||
this.results = rList; |
||||
} |
||||
|
||||
/** |
||||
* |
||||
* @param conn |
||||
* @param teg |
||||
*/ |
||||
public void setUsersByTeg(Connection conn){ |
||||
ArrayList<User> uList = new ArrayList<User>(); |
||||
String teg = ""; |
||||
int b = 0; |
||||
while (b != 2){ |
||||
try{ |
||||
teg = JOptionPane.showInputDialog("Укажите тег для поиска пользователей:"); |
||||
Statement stmt = conn.createStatement(); |
||||
//берем данные о базах данных на сервере
|
||||
ResultSet rs = stmt.executeQuery("SELECT id, username, email FROM mdl_user"); |
||||
while(rs.next()){ |
||||
//фильтруем выборку user
|
||||
int id = rs.getInt("id"); |
||||
String username = rs.getString("username"); |
||||
String email = rs.getString("email"); |
||||
//проверяем соответствие тега и записи в таблице
|
||||
if (username.contains(teg)){ |
||||
User u = new User(); |
||||
u.setId(id); |
||||
u.setMail(email); |
||||
u.setName(username); |
||||
uList.add(u); |
||||
} |
||||
} |
||||
} |
||||
catch (Exception ex){ |
||||
System.err.println ("Подключение к серверу баз данных не установлено ... "); |
||||
ex.printStackTrace(); |
||||
System.out.println (ex); |
||||
} |
||||
b = JOptionPane.showConfirmDialog(null, "Добавить еще тег?", "try", JOptionPane.OK_CANCEL_OPTION); |
||||
System.out.println("Сделан выбор: " + b); |
||||
} |
||||
this.users = uList; |
||||
} |
||||
|
||||
/** |
||||
* Фильтруем пользователей, находим дубли почтовых ящиков |
||||
* когда ящик совпал, перебираем результаты и заменяем ID пользователя в результате |
||||
* |
||||
* удаляем пользователей, для которых отсутствуют результаты. |
||||
* |
||||
* @param base |
||||
*/ |
||||
public void filterByMail (ArrayList<User> users, ArrayList<Result> results){ |
||||
ArrayList<User> fusers = new ArrayList<>();//отфильтрованные пользователи
|
||||
//ArrayList<Result> fresults = new ArrayList<>();//исправленные результаты
|
||||
//перебираем юзеров
|
||||
//Stream<ArrayList<User>> streamUsers = Stream.of(users);
|
||||
//streamUsers.filter(predicate)
|
||||
int currentUser = 0; |
||||
while (currentUser < users.size()){ |
||||
User user = users.get(currentUser); |
||||
ArrayList<User> userList= new ArrayList<>();//список аккаунтов пользователя с одинаковыми mail
|
||||
//формируем список аккаунтов пользователя
|
||||
int c = 0; |
||||
//сравниваем почтовый ящик текущего пользователя с пользователями по списку, запоминаем все повторения.
|
||||
while (c < users.size()){ |
||||
if (user.getMail().equals(users.get(c).getMail())){ |
||||
userList.add(users.get(c));//список аккаунтов текущего пользователя
|
||||
} |
||||
c++; |
||||
} |
||||
//если у пользователя больше одного аккаунта,
|
||||
if (userList.size() != 1){ |
||||
//System.out.println("Пользователь: " + userList.get(0).getMail() + "количество аккаунтов: " + userList.size());
|
||||
/** |
||||
* переписываем результаты тестирования текущего пользователя |
||||
* заменяем в старых результатах id пользователя |
||||
* перебираем список дублирующихся аккаунтов |
||||
* */ |
||||
//перебираем список дублирующихся аккаунтов
|
||||
int uacc = 0; |
||||
while (uacc < userList.size()){ |
||||
//если аккаунт не первый
|
||||
if (uacc != 0){ |
||||
//перебираем результаты
|
||||
int rCurr = 0; |
||||
while (rCurr < results.size()){ |
||||
if (userList.get(uacc).getId() == results.get(rCurr).getUserid()){ |
||||
results.get(rCurr).setUserid(userList.get(0).getId());//сменили id пользователя в строке результата
|
||||
} |
||||
rCurr++; |
||||
} |
||||
} |
||||
uacc++; |
||||
} |
||||
} |
||||
//формирование списка пользователей, без дублирований
|
||||
if (userList.size() != 1){//tесли есть дублирования
|
||||
if (user.getId() == userList.get(0).getId()){//и пользователь первый в списке дублей
|
||||
fusers.add(user); |
||||
} |
||||
} |
||||
else{ |
||||
fusers.add(user);//нет дублирований
|
||||
} |
||||
currentUser++;//переходим к следующему пользователю
|
||||
} |
||||
|
||||
//Вычисляем пользователей, которые не проходили тестирование (нет результатов)
|
||||
/** |
||||
* |
||||
*/ |
||||
//перебираем список не дублирующихся пользователей
|
||||
ArrayList<User> balbesers = new ArrayList<>(); |
||||
int uClear = 0; |
||||
while (uClear < fusers.size()){ |
||||
//список пользователей, не сдававших тесты
|
||||
//перебираем результаты
|
||||
int rClear = 0; |
||||
int num = 0; |
||||
while (rClear < results.size()){ |
||||
if (fusers.get(uClear).getId() == results.get(rClear).getUserid()){ |
||||
num++;//считаем количество тестов пройденных пользователем
|
||||
} |
||||
rClear++; |
||||
} |
||||
if (num == 0){ |
||||
balbesers.add(fusers.get(uClear)); |
||||
} |
||||
uClear++; |
||||
} |
||||
|
||||
/** |
||||
* формирование отчетов |
||||
* |
||||
*/ |
||||
System.out.println("Учетных записей: " + users.size()); |
||||
System.out.println("Пользователей (без дублирований): " + fusers.size()); |
||||
System.out.println("Пользователей (balbesers): " + balbesers.size()); |
||||
} |
||||
|
||||
/** |
||||
* Главный метод, для проверки кода |
||||
* @param args |
||||
*/ |
||||
public static void main (String[] args){ |
||||
System.out.println("Подключение к серверу баз данных ..."); |
||||
Connection conn = null; |
||||
try{ |
||||
//данные аккаунта
|
||||
String userName = Access.getUserName(); |
||||
String password = Access.getPassword(); |
||||
String url = Access.getURL(); |
||||
conn = DriverManager.getConnection (url, userName, password); |
||||
System.out.println ("Подключение к серверу баз данных установлено ... "); |
||||
|
||||
//Формирование перечня пользователей, по которым нужно подготовить отчет
|
||||
//использование метода setUsersByTeg
|
||||
Base b = new Base(); |
||||
b.setUsersByTeg(conn); |
||||
System.out.println("Перечень пользователей для формирования отчета установлен ... "); |
||||
|
||||
//Формирование результатов тестирования, для указанных пользователей
|
||||
b.setResults(conn, b.getUsers()); |
||||
System.out.println("Результаты тестирования пользователей получены из базы данных ... "); |
||||
|
||||
//расшифровка данных о пройденных пользователями тестах
|
||||
b.setQuizes(conn, b); |
||||
|
||||
//выгрузка отчета в xlsx (по результатам обучения группы, содержащий дублирования и прогульщиков)
|
||||
b.createExcellReport(conn, b); |
||||
|
||||
// выводим отчет в консоль
|
||||
//Выводим перечень тестов в консоль
|
||||
System.out.println("Всего тестов: " + b.getQuizes().size()); |
||||
System.out.println("Всего записано на тестирование человек: " + b.getUsers().size()); |
||||
System.out.println("Всего результатов (человеко-тестов): " + b.getResults().size()); |
||||
|
||||
/** |
||||
* Фильтрация результатов по уникальному почтовому ящику |
||||
* отчет общий по статистике обучения |
||||
*/ |
||||
b.filterByMail(b.getUsers(), b.getResults()); |
||||
|
||||
|
||||
} |
||||
catch (Exception ex){ |
||||
System.err.println ("Подключение к серверу баз данных не установлено ... "); |
||||
ex.printStackTrace(); |
||||
System.out.println (ex); |
||||
} |
||||
finally{ |
||||
if (conn != null){ |
||||
try{ |
||||
System.out.println("Попытка отключения от базы данных ... "); |
||||
conn.close (); |
||||
System.out.println ("Подключение к базе данных завершено. "); |
||||
} |
||||
catch (Exception ex){ |
||||
System.out.println ("Подключение к серверу баз данных уже отсутствует."); |
||||
System.out.println (ex); |
||||
} |
||||
} |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,37 @@
@@ -0,0 +1,37 @@
|
||||
package ru.egspt.moodle; |
||||
|
||||
/** |
||||
* Данные об опросе для подстановки в отчет наименований, вместо id опроса |
||||
* - наименование |
||||
* - id |
||||
* |
||||
*/ |
||||
public class Quiz { |
||||
private int id; |
||||
private String name; |
||||
|
||||
/** |
||||
* @param id the id to set |
||||
*/ |
||||
public void setId(int id) { |
||||
this.id = id; |
||||
} |
||||
/** |
||||
* @param name the name to set |
||||
*/ |
||||
public void setName(String name) { |
||||
this.name = name; |
||||
} |
||||
/** |
||||
* @return the id |
||||
*/ |
||||
public int getId() { |
||||
return id; |
||||
} |
||||
/** |
||||
* @return the name |
||||
*/ |
||||
public String getName() { |
||||
return name; |
||||
} |
||||
} |
@ -0,0 +1,75 @@
@@ -0,0 +1,75 @@
|
||||
package ru.egspt.moodle; |
||||
|
||||
/** |
||||
* Результат тестирования |
||||
* - набранные баллы |
||||
* - длительность сдачи теста |
||||
*/ |
||||
public class Result { |
||||
private int id; |
||||
private int quizid; |
||||
private int userid; |
||||
private double grade; |
||||
private Long time; |
||||
|
||||
/** |
||||
* @return the id |
||||
*/ |
||||
public int getId() { |
||||
return id; |
||||
} |
||||
/** |
||||
* @param id the id to set |
||||
*/ |
||||
public void setId(int id) { |
||||
this.id = id; |
||||
} |
||||
/** |
||||
* @return the quiz |
||||
*/ |
||||
public int getQuizid() { |
||||
return quizid; |
||||
} |
||||
/** |
||||
* @param quiz the quiz to set |
||||
*/ |
||||
public void setQuizid(int quizid) { |
||||
this.quizid = quizid; |
||||
} |
||||
/** |
||||
* @return the userid |
||||
*/ |
||||
public int getUserid() { |
||||
return userid; |
||||
} |
||||
/** |
||||
* @param userid the userid to set |
||||
*/ |
||||
public void setUserid(int userid) { |
||||
this.userid = userid; |
||||
} |
||||
/** |
||||
* @return the grade |
||||
*/ |
||||
public double getGrade() { |
||||
return grade; |
||||
} |
||||
/** |
||||
* @param grade the grade to set |
||||
*/ |
||||
public void setGrade(double grade) { |
||||
this.grade = grade; |
||||
} |
||||
/** |
||||
* @return the time |
||||
*/ |
||||
public Long getTime() { |
||||
return time; |
||||
} |
||||
/** |
||||
* @param time2 the time to set |
||||
*/ |
||||
public void setTime(Long time2) { |
||||
this.time = time2; |
||||
} |
||||
} |
@ -0,0 +1,52 @@
@@ -0,0 +1,52 @@
|
||||
package ru.egspt.moodle; |
||||
|
||||
/** |
||||
* Данные пользователей |
||||
* - уникальный номер |
||||
* - имя |
||||
* - почта |
||||
* - |
||||
* |
||||
*/ |
||||
public class User { |
||||
private int id; |
||||
private String name; |
||||
private String mail; |
||||
|
||||
/** |
||||
* @return the id |
||||
*/ |
||||
public int getId() { |
||||
return id; |
||||
} |
||||
/** |
||||
* @return the mail |
||||
*/ |
||||
public String getMail() { |
||||
return mail; |
||||
} |
||||
/** |
||||
* @return the name |
||||
*/ |
||||
public String getName() { |
||||
return name; |
||||
} |
||||
/** |
||||
* @param id the id to set |
||||
*/ |
||||
public void setId(int id) { |
||||
this.id = id; |
||||
} |
||||
/** |
||||
* @param mail the mail to set |
||||
*/ |
||||
public void setMail(String mail) { |
||||
this.mail = mail; |
||||
} |
||||
/** |
||||
* @param name the name to set |
||||
*/ |
||||
public void setName(String name) { |
||||
this.name = name; |
||||
} |
||||
} |
@ -0,0 +1,20 @@
@@ -0,0 +1,20 @@
|
||||
package ru.egspt.moodle; |
||||
|
||||
import static org.junit.Assert.assertTrue; |
||||
|
||||
import org.junit.Test; |
||||
|
||||
/** |
||||
* Unit test for simple App. |
||||
*/ |
||||
public class AppTest |
||||
{ |
||||
/** |
||||
* Rigorous Test :-) |
||||
*/ |
||||
@Test |
||||
public void shouldAnswerWithTrue() |
||||
{ |
||||
assertTrue( true ); |
||||
} |
||||
} |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,107 @@
@@ -0,0 +1,107 @@
|
||||
digraph "ru.egspt.moodle:anyreport:jar:0.1" { |
||||
"ru.egspt.moodle:anyreport:jar:0.1" -> "org.apache.poi:poi:jar:5.2.2:compile" ; |
||||
"ru.egspt.moodle:anyreport:jar:0.1" -> "org.apache.poi:poi-ooxml:jar:5.2.2:compile" ; |
||||
"ru.egspt.moodle:anyreport:jar:0.1" -> "org.apache.poi:poi-ooxml-schemas:jar:4.1.2:compile" ; |
||||
"ru.egspt.moodle:anyreport:jar:0.1" -> "org.apache.poi:poi-scratchpad:jar:5.2.2:compile" ; |
||||
"ru.egspt.moodle:anyreport:jar:0.1" -> "org.apache.poi:ooxml-schemas:jar:1.1:compile" ; |
||||
"ru.egspt.moodle:anyreport:jar:0.1" -> "org.apache.poi:openxml4j:jar:1.0-beta:compile" ; |
||||
"ru.egspt.moodle:anyreport:jar:0.1" -> "org.apache.logging.log4j:log4j-to-slf4j:jar:2.8.2:compile" ; |
||||
"ru.egspt.moodle:anyreport:jar:0.1" -> "org.apache.cassandra:cassandra-all:jar:0.8.1:compile" ; |
||||
"ru.egspt.moodle:anyreport:jar:0.1" -> "junit:junit:jar:4.11:test" ; |
||||
"ru.egspt.moodle:anyreport:jar:0.1" -> "mysql:mysql-connector-java:jar:8.0.28:compile" ; |
||||
"org.apache.poi:poi:jar:5.2.2:compile" -> "commons-codec:commons-codec:jar:1.15:compile" ; |
||||
"org.apache.poi:poi:jar:5.2.2:compile" -> "org.apache.commons:commons-collections4:jar:4.4:compile" ; |
||||
"org.apache.poi:poi:jar:5.2.2:compile" -> "org.apache.commons:commons-math3:jar:3.6.1:compile" ; |
||||
"org.apache.poi:poi:jar:5.2.2:compile" -> "commons-io:commons-io:jar:2.11.0:compile" ; |
||||
"org.apache.poi:poi:jar:5.2.2:compile" -> "com.zaxxer:SparseBitSet:jar:1.2:compile" ; |
||||
"org.apache.poi:poi:jar:5.2.2:compile" -> "org.apache.logging.log4j:log4j-api:jar:2.17.2:compile" ; |
||||
"org.apache.poi:poi-ooxml:jar:5.2.2:compile" -> "org.apache.poi:poi-ooxml-lite:jar:5.2.2:compile" ; |
||||
"org.apache.poi:poi-ooxml:jar:5.2.2:compile" -> "org.apache.xmlbeans:xmlbeans:jar:5.0.3:compile" ; |
||||
"org.apache.poi:poi-ooxml:jar:5.2.2:compile" -> "org.apache.commons:commons-compress:jar:1.21:compile" ; |
||||
"org.apache.poi:poi-ooxml:jar:5.2.2:compile" -> "com.github.virtuald:curvesapi:jar:1.07:compile" ; |
||||
"org.apache.poi:openxml4j:jar:1.0-beta:compile" -> "dom4j:dom4j:jar:1.6.1:compile" ; |
||||
"org.apache.poi:openxml4j:jar:1.0-beta:compile" -> "log4j:log4j:jar:1.2.8:compile" ; |
||||
"dom4j:dom4j:jar:1.6.1:compile" -> "xml-apis:xml-apis:jar:1.0.b2:compile" ; |
||||
"org.apache.logging.log4j:log4j-to-slf4j:jar:2.8.2:compile" -> "org.slf4j:slf4j-api:jar:1.7.24:compile" ; |
||||
"org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "com.google.guava:guava:jar:r08:compile" ; |
||||
"org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "commons-cli:commons-cli:jar:1.1:compile" ; |
||||
"org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "commons-collections:commons-collections:jar:3.2.1:compile" ; |
||||
"org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "commons-lang:commons-lang:jar:2.4:compile" ; |
||||
"org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "com.googlecode.concurrentlinkedhashmap:concurrentlinkedhashmap-lru:jar:1.1:compile" ; |
||||
"org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "org.antlr:antlr:jar:3.2:compile" ; |
||||
"org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "org.apache.cassandra.deps:avro:jar:1.4.0-cassandra-1:compile" ; |
||||
"org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "org.codehaus.jackson:jackson-core-asl:jar:1.4.0:compile" ; |
||||
"org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "org.codehaus.jackson:jackson-mapper-asl:jar:1.4.0:compile" ; |
||||
"org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "jline:jline:jar:0.9.94:compile" ; |
||||
"org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "com.googlecode.json-simple:json-simple:jar:1.1:compile" ; |
||||
"org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "com.github.stephenc.high-scale-lib:high-scale-lib:jar:1.1.2:compile" ; |
||||
"org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "org.yaml:snakeyaml:jar:1.6:compile" ; |
||||
"org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "org.apache.thrift:libthrift:jar:0.6.1:compile" ; |
||||
"org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "org.apache.cassandra:cassandra-thrift:jar:0.8.1:compile" ; |
||||
"org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "com.github.stephenc:jamm:jar:0.2.2:compile" ; |
||||
"org.antlr:antlr:jar:3.2:compile" -> "org.antlr:antlr-runtime:jar:3.2:compile" ; |
||||
"org.antlr:antlr-runtime:jar:3.2:compile" -> "org.antlr:stringtemplate:jar:3.2:compile" ; |
||||
"org.antlr:stringtemplate:jar:3.2:compile" -> "antlr:antlr:jar:2.7.7:compile" ; |
||||
"org.apache.cassandra.deps:avro:jar:1.4.0-cassandra-1:compile" -> "org.mortbay.jetty:jetty:jar:6.1.22:compile" ; |
||||
"org.mortbay.jetty:jetty:jar:6.1.22:compile" -> "org.mortbay.jetty:jetty-util:jar:6.1.22:compile" ; |
||||
"org.mortbay.jetty:jetty:jar:6.1.22:compile" -> "org.mortbay.jetty:servlet-api:jar:2.5-20081211:compile" ; |
||||
"org.apache.thrift:libthrift:jar:0.6.1:compile" -> "javax.servlet:servlet-api:jar:2.5:compile" ; |
||||
"org.apache.thrift:libthrift:jar:0.6.1:compile" -> "org.apache.httpcomponents:httpclient:jar:4.0.1:compile" ; |
||||
"org.apache.httpcomponents:httpclient:jar:4.0.1:compile" -> "org.apache.httpcomponents:httpcore:jar:4.0.1:compile" ; |
||||
"org.apache.httpcomponents:httpclient:jar:4.0.1:compile" -> "commons-logging:commons-logging:jar:1.1.1:compile" ; |
||||
"junit:junit:jar:4.11:test" -> "org.hamcrest:hamcrest-core:jar:1.3:test" ; |
||||
"mysql:mysql-connector-java:jar:8.0.28:compile" -> "com.google.protobuf:protobuf-java:jar:3.11.4:compile" ; |
||||
} digraph "ru.egspt.moodle:anyreport:jar:0.1" { |
||||
"ru.egspt.moodle:anyreport:jar:0.1" -> "org.apache.poi:poi:jar:5.2.2:compile" ; |
||||
"ru.egspt.moodle:anyreport:jar:0.1" -> "org.apache.poi:poi-ooxml:jar:5.2.2:compile" ; |
||||
"ru.egspt.moodle:anyreport:jar:0.1" -> "org.apache.poi:poi-ooxml-schemas:jar:4.1.2:compile" ; |
||||
"ru.egspt.moodle:anyreport:jar:0.1" -> "org.apache.poi:poi-scratchpad:jar:5.2.2:compile" ; |
||||
"ru.egspt.moodle:anyreport:jar:0.1" -> "org.apache.poi:ooxml-schemas:jar:1.1:compile" ; |
||||
"ru.egspt.moodle:anyreport:jar:0.1" -> "org.apache.poi:openxml4j:jar:1.0-beta:compile" ; |
||||
"ru.egspt.moodle:anyreport:jar:0.1" -> "org.apache.logging.log4j:log4j-to-slf4j:jar:2.8.2:compile" ; |
||||
"ru.egspt.moodle:anyreport:jar:0.1" -> "org.apache.cassandra:cassandra-all:jar:0.8.1:compile" ; |
||||
"ru.egspt.moodle:anyreport:jar:0.1" -> "junit:junit:jar:4.11:test" ; |
||||
"ru.egspt.moodle:anyreport:jar:0.1" -> "mysql:mysql-connector-java:jar:8.0.28:compile" ; |
||||
"org.apache.poi:poi:jar:5.2.2:compile" -> "commons-codec:commons-codec:jar:1.15:compile" ; |
||||
"org.apache.poi:poi:jar:5.2.2:compile" -> "org.apache.commons:commons-collections4:jar:4.4:compile" ; |
||||
"org.apache.poi:poi:jar:5.2.2:compile" -> "org.apache.commons:commons-math3:jar:3.6.1:compile" ; |
||||
"org.apache.poi:poi:jar:5.2.2:compile" -> "commons-io:commons-io:jar:2.11.0:compile" ; |
||||
"org.apache.poi:poi:jar:5.2.2:compile" -> "com.zaxxer:SparseBitSet:jar:1.2:compile" ; |
||||
"org.apache.poi:poi:jar:5.2.2:compile" -> "org.apache.logging.log4j:log4j-api:jar:2.17.2:compile" ; |
||||
"org.apache.poi:poi-ooxml:jar:5.2.2:compile" -> "org.apache.poi:poi-ooxml-lite:jar:5.2.2:compile" ; |
||||
"org.apache.poi:poi-ooxml:jar:5.2.2:compile" -> "org.apache.xmlbeans:xmlbeans:jar:5.0.3:compile" ; |
||||
"org.apache.poi:poi-ooxml:jar:5.2.2:compile" -> "org.apache.commons:commons-compress:jar:1.21:compile" ; |
||||
"org.apache.poi:poi-ooxml:jar:5.2.2:compile" -> "com.github.virtuald:curvesapi:jar:1.07:compile" ; |
||||
"org.apache.poi:openxml4j:jar:1.0-beta:compile" -> "dom4j:dom4j:jar:1.6.1:compile" ; |
||||
"org.apache.poi:openxml4j:jar:1.0-beta:compile" -> "log4j:log4j:jar:1.2.8:compile" ; |
||||
"dom4j:dom4j:jar:1.6.1:compile" -> "xml-apis:xml-apis:jar:1.0.b2:compile" ; |
||||
"org.apache.logging.log4j:log4j-to-slf4j:jar:2.8.2:compile" -> "org.slf4j:slf4j-api:jar:1.7.24:compile" ; |
||||
"org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "com.google.guava:guava:jar:r08:compile" ; |
||||
"org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "commons-cli:commons-cli:jar:1.1:compile" ; |
||||
"org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "commons-collections:commons-collections:jar:3.2.1:compile" ; |
||||
"org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "commons-lang:commons-lang:jar:2.4:compile" ; |
||||
"org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "com.googlecode.concurrentlinkedhashmap:concurrentlinkedhashmap-lru:jar:1.1:compile" ; |
||||
"org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "org.antlr:antlr:jar:3.2:compile" ; |
||||
"org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "org.apache.cassandra.deps:avro:jar:1.4.0-cassandra-1:compile" ; |
||||
"org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "org.codehaus.jackson:jackson-core-asl:jar:1.4.0:compile" ; |
||||
"org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "org.codehaus.jackson:jackson-mapper-asl:jar:1.4.0:compile" ; |
||||
"org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "jline:jline:jar:0.9.94:compile" ; |
||||
"org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "com.googlecode.json-simple:json-simple:jar:1.1:compile" ; |
||||
"org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "com.github.stephenc.high-scale-lib:high-scale-lib:jar:1.1.2:compile" ; |
||||
"org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "org.yaml:snakeyaml:jar:1.6:compile" ; |
||||
"org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "org.apache.thrift:libthrift:jar:0.6.1:compile" ; |
||||
"org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "org.apache.cassandra:cassandra-thrift:jar:0.8.1:compile" ; |
||||
"org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "com.github.stephenc:jamm:jar:0.2.2:compile" ; |
||||
"org.antlr:antlr:jar:3.2:compile" -> "org.antlr:antlr-runtime:jar:3.2:compile" ; |
||||
"org.antlr:antlr-runtime:jar:3.2:compile" -> "org.antlr:stringtemplate:jar:3.2:compile" ; |
||||
"org.antlr:stringtemplate:jar:3.2:compile" -> "antlr:antlr:jar:2.7.7:compile" ; |
||||
"org.apache.cassandra.deps:avro:jar:1.4.0-cassandra-1:compile" -> "org.mortbay.jetty:jetty:jar:6.1.22:compile" ; |
||||
"org.mortbay.jetty:jetty:jar:6.1.22:compile" -> "org.mortbay.jetty:jetty-util:jar:6.1.22:compile" ; |
||||
"org.mortbay.jetty:jetty:jar:6.1.22:compile" -> "org.mortbay.jetty:servlet-api:jar:2.5-20081211:compile" ; |
||||
"org.apache.thrift:libthrift:jar:0.6.1:compile" -> "javax.servlet:servlet-api:jar:2.5:compile" ; |
||||
"org.apache.thrift:libthrift:jar:0.6.1:compile" -> "org.apache.httpcomponents:httpclient:jar:4.0.1:compile" ; |
||||
"org.apache.httpcomponents:httpclient:jar:4.0.1:compile" -> "org.apache.httpcomponents:httpcore:jar:4.0.1:compile" ; |
||||
"org.apache.httpcomponents:httpclient:jar:4.0.1:compile" -> "commons-logging:commons-logging:jar:1.1.1:compile" ; |
||||
"junit:junit:jar:4.11:test" -> "org.hamcrest:hamcrest-core:jar:1.3:test" ; |
||||
"mysql:mysql-connector-java:jar:8.0.28:compile" -> "com.google.protobuf:protobuf-java:jar:3.11.4:compile" ; |
||||
} |
Binary file not shown.
Loading…
Reference in new issue