Controller::Controller() : QObject() { try { this->leftPanel = std::make_unique<LeftPanel>(); this->database = std::make_unique<Database>(); this->exercise = std::make_unique<Exercise>(this); this->settings = std::make_unique<Settings>(); this->settings.get()->init(); if(!settings->init()) { throw QString("Error open settings!"); } database.get()->getSettings(settings.get()->getVersion(), settings.get()->getCountDigiMax(), settings.get()->getUseMinus(), settings.get()->getFirstName(), settings.get()->getLastName(), settings.get()->getLastAllTime(), settings.get()->getLastExerciseCorect(), settings.get()->getLastExerciseWrong(), settings.get()->getLastExercisePassed()); this->statistict = std::make_unique<Statistic>(); this->statistict->setLastStatistic( settings->getLastAllTime(), settings->getLastExerciseCorect(), settings->getLastExerciseWrong(), settings->getLastExercisePassed()); connect(statistict.get(), SIGNAL(is_changed()), this, SLOT(statisticsChanged())); connect(settings.get(), SIGNAL(is_changed()), this, SLOT(settingsChanged())); this->timer = std::make_unique<TimerClass>(); connect(timer.get(), SIGNAL(update(QString)), this, SLOT(updateTime(QString))); } catch(char *pErr) { throw pErr; } }
Exercise::Exercise(QObject *parent) : QObject(parent) { this->random = std::make_unique<Random>(); exercise.result = 0; } Exercise::sExercise Exercise::getNewExercise( eExerciseType operation, int count_max, bool use_minus) { long a = 0, b = 0; if(count_max!=0) { exercise.lastType = operation; a = random->getRandom(count_max); b = random->getRandom(count_max); if(!use_minus) { while((a < 0) || (a==0)) { a = random->getRandom(count_max); } while((b < 0) || (b==0)) { b = random->getRandom(count_max); } } else { while((a == 0) || (b==0)) { a = random->getRandom(count_max); b = random->getRandom(count_max); } } switch(operation) { case exerc_substraction: exercise.result = (a - b); exercise.exercText = QString("%1%2%3%4").arg(a).arg(" - ").arg(b).arg("="); break; case exerc_addtion: exercise.result = (a + b); exercise.exercText = QString("%1%2%3%4").arg(a).arg(" + ").arg(b).arg("="); break; case exerc_division: while(b <= 0) { b = random->getRandom(count_max); } while(a <= b) { a = random->getRandom(count_max); } exercise.result = (a / b); exercise.exercText = QString("%1%2%3%4").arg(a).arg(" / ").arg(b).arg("="); break; case exerc_multiplication: exercise.result = (a * b); exercise.exercText = QString("%1%2%3%4").arg(a).arg(" * ").arg(b).arg("="); break; case exerc_exponentiation: while(b<0 || b==0 || b>15) { b = random->getRandom(count_max); } exercise.result = static_cast<long>(powl(a, b)); exercise.exercText = QString("<html><head/><body><p>%1<span style=\" vertical-align:super;\">%2</span> =</p></body></html>") .arg(a).arg(b); break; case exerc_root: exercise.result = static_cast<long>(sqrt(a)); exercise.exercText = QString("%1%2%3").arg(a).arg(" √ ").arg("="); break; case exerc_nothing: exercise.exercText = "[Nothing]"; break; } } return exercise; } <li>Settings.cpp - db <spoiler title="Settings.cpp"> <source lang="cpp"> void Settings::setCountDigiMax(int count_digits) { count_digit_max = count_digits; emit is_changed(); } void Settings::setUseMinus(int use) { use_minus = static_cast<bool>(use); emit is_changed(); } void Settings::setFirstName(QString name) { first_name = name; emit is_changed(); } void Settings::setLastName(QString name) { last_name = name; emit is_changed(); } void Settings::setLastAllTime(QTime *ptime) { exercise_all_time = ptime->toString("HH:mm:ss"); } void Settings::setLastExerciseCorect(int exercise) { exercise_correct = exercise; } void Settings::setLastExerciseWrong(int exercise) { exercise_wrong = exercise; } void Settings::setLastExercisePassed(int exercise) { exercise_passed = exercise; } int& Settings::getCountDigiMax() { return count_digit_max; } bool& Settings::getUseMinus() { return use_minus; } QString& Settings::getFirstName(){ return first_name; } QString& Settings::getLastName() { return last_name; } QString& Settings::getLastAllTime() { return exercise_all_time; } QString& Settings::getVersion() { return version; } int& Settings::getLastExerciseCorect() { return exercise_correct; } int& Settings::getLastExerciseWrong() { return exercise_wrong; } int& Settings::getLastExercisePassed() { return exercise_passed; }
TimerClass::TimerClass(QObject *parent) : QObject(parent) { this->time = new QTime(0, 0, 0, 0); this->timer_one_sec = new QTimer(); connect(timer_one_sec, SIGNAL(timeout()), this, SLOT(nextTimeOneSecond())); timer_one_sec->start(1000); } QTime* TimerClass::getTime() { return time; } void TimerClass::nextTimeOneSecond() { *time = time->addSecs(1); time->fromString((time->toString("HH:mm:ss"))); emit update(time->toString("HH:mm:ss")); }
Database::Database(QObject *parent) : QObject(parent) { this->db = std::make_unique<QSqlDatabase>(QSqlDatabase::addDatabase("QSQLITE")); this->db.get()->setDatabaseName("./database/database"); if(!this->db.get()->open()) { throw QString("Error open database!!"); } } Database::~Database() { } QString query_get_settings("SELECT sets_id, sets_count_digits, sets_used_minus FROM settings"); QString query_set_settings("UPDATE settings SET sets_count_digits=%1, sets_used_minus = %2"); QString query_update_statistics("UPDATE statistics SET " " stats_exercise_all_time='%1', stats_excercise_correct=%2," " stats_excercise_wrong=%3, stats_excercise_all='%4'"); QString query_get_statistics("SELECT " " user_first_name, user_last_name, stats_exercise_all_time," " statistics.stats_excercise_all, statistics.stats_excercise_correct," " statistics.stats_excercise_wrong " " FROM statistics" " JOIN user ON user.user_id = statistics.stats_user_id"); QString query_get_version("SELECT * FROM version"); bool Database::getSettings(QString &version, int &count_digit_max, bool &use_minus, QString &first_name, QString &last_name, QString &exercise_all_time, int &exercise_correct, int &exercise_wrong, int &exercise_passed) { bool res = false; try { QSqlQuery query; // settings query.exec(query_get_settings); qDebug() << "Query=" << query.lastQuery(); while(query.next()) { count_digit_max = query.value(1).toInt(); use_minus = query.value(2).toBool(); } // user and statistics query.exec(query_get_statistics); qDebug() << "Query=" << query.lastQuery(); while(query.next()) { first_name = query.value(0).toString(); last_name = query.value(1).toString(); exercise_all_time = query.value(2).toString(); exercise_passed = query.value(3).toInt(); exercise_correct = query.value(4).toInt(); exercise_wrong = query.value(5).toInt(); } // version query.exec(query_get_version); qDebug() << "Query=" << query.lastQuery(); while(query.next()) { version = query.value(2).toString(); } } catch (...) { throw QString("db: error request get settings!"); } return res; } bool Database::setSettings(int count_digit_max, bool use_minus, QString first_name, QString last_name) { bool res = false; try { QSqlQuery query; // settings query.exec(QString(query_set_settings) .arg(count_digit_max) .arg(use_minus)); qDebug() << "Query=" << query.lastQuery(); res = query.result(); } catch (...) { throw QString("db: error request set settings!"); } return res; } bool Database::getStatistics(QString &exercise_all_time, int &exercise_correct, int &exercise_wrong, int &exercise_passed) { bool res = false; try { QSqlQuery query; query.exec(query_get_statistics); qDebug() << "Query=" << query.lastQuery(); while(query.next()) { exercise_all_time = query.value(2).toString(); exercise_passed = query.value(3).toInt(); exercise_correct = query.value(4).toInt(); exercise_wrong = query.value(5).toInt(); } } catch (...) { throw QString("db: error request get statistics!"); } return res; } bool Database::updateStatistics(QString exercise_all_time, int exercise_correct, int exercise_wrong, int exercise_passed) { bool res = false; try { QSqlQuery query; // settings query.exec(QString(query_update_statistics).arg(exercise_all_time) .arg(exercise_correct) .arg(exercise_wrong) .arg(exercise_passed)); qDebug() << "Query=" << query.lastQuery(); res = query.result(); } catch (...) { throw QString("db: error request update statistics"); } return res; }
Source: https://habr.com/ru/post/417843/
All Articles