Запись теста в БД с проверками
This commit is contained in:
parent
978f6c1cc1
commit
74b33f455c
BIN
data/database.db
BIN
data/database.db
Binary file not shown.
|
@ -1,11 +1,11 @@
|
|||
# Двоичная система. Двоичная арифметика
|
||||
? Двоичная системой счисления является
|
||||
- Унарная система счисления
|
||||
- Непозиционная система счисления
|
||||
+ Непозиционная система счисления
|
||||
- Позиционная система счисления
|
||||
? Для записи в двоичной системе счисления используют только две цифры. Какие?
|
||||
- 2 и 3
|
||||
- 2 и 10
|
||||
+ 2 и 10
|
||||
- 0 и 1
|
||||
? Переведите число 1010100 из двоичной системы в десятичную
|
||||
- 84
|
||||
|
@ -19,8 +19,6 @@
|
|||
- 110101
|
||||
? Вычислите 11001 - 1111 =
|
||||
- 1010
|
||||
- 1110
|
||||
+ 1110
|
||||
- 1011
|
||||
- 0110
|
||||
? Вычислите 11001 - 1111 =
|
||||
- 1010
|
||||
|
|
97
source/app.d
97
source/app.d
|
@ -4,6 +4,7 @@ import core.stdc.stdlib : exit, EXIT_SUCCESS, EXIT_FAILURE;
|
|||
import std.stdio, std.conv, std.path, std.file, std.format, std.regex, std.array, std.algorithm;
|
||||
|
||||
import source.database;
|
||||
import source.sql;
|
||||
|
||||
enum {
|
||||
GROUP_THEME = 2,
|
||||
|
@ -51,29 +52,45 @@ int main(string[] args)
|
|||
auto regular = regex(pattern, "m");
|
||||
|
||||
struct Answer {
|
||||
int number;
|
||||
string text;
|
||||
bool right;
|
||||
bool truth;
|
||||
|
||||
// ToDo
|
||||
bool addToDB() {
|
||||
bool addToDB(int question_id) {
|
||||
int id = sqlAddNewAnswer(question_id, this.number, this.text, this.truth);
|
||||
|
||||
if (!id)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
struct Question {
|
||||
int number;
|
||||
string text;
|
||||
Answer[int] answers;
|
||||
|
||||
ulong getCount() {
|
||||
ulong count() {
|
||||
return answers.length;
|
||||
}
|
||||
|
||||
bool isValid() {
|
||||
return answers.length > 1;
|
||||
}
|
||||
// ToDo
|
||||
bool addToDB() {
|
||||
|
||||
bool addToDB(int topic_id) {
|
||||
int id = sqlAddNewQuestion(topic_id, this.number, this.text);
|
||||
|
||||
if (!id)
|
||||
return false;
|
||||
|
||||
foreach (answer; answers.byKeyValue.array.sort!((a, b) => a.key < b.key)) {
|
||||
if (!answer.value.addToDB(id))
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -81,7 +98,7 @@ int main(string[] args)
|
|||
string text;
|
||||
Question[int] questions;
|
||||
|
||||
ulong getCount() {
|
||||
ulong count() {
|
||||
return questions.length;
|
||||
}
|
||||
|
||||
|
@ -89,25 +106,69 @@ int main(string[] args)
|
|||
return questions.length > 1;
|
||||
}
|
||||
|
||||
// ToDo
|
||||
bool addToDB() {
|
||||
if (!check())
|
||||
return false;
|
||||
|
||||
int id = sqlAddNewTheme(this.text);
|
||||
|
||||
if (!id)
|
||||
return false;
|
||||
|
||||
foreach (question; this.questions.byKeyValue.array.sort!((a, b) => a.key < b.key)) {
|
||||
if (!question.value.addToDB(id))
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void print() {
|
||||
writeln("Количество вопросов: %s".format(this.getCount()));
|
||||
writeln("Количество вопросов: %s".format(this.count()));
|
||||
|
||||
foreach (question; this.questions.byKeyValue.array.sort!((a, b) => a.key < b.key)) {
|
||||
writeln("\tВопрос №%d: %s".format(question.key, question.value.text));
|
||||
writeln("\tКоличество ответов: %d".format(question.value.getCount()));
|
||||
if (question.value.isValid())
|
||||
writeln("\tКоличество ответов: %d".format(question.value.count()));
|
||||
foreach (answer; question.value.answers.byKeyValue.array.sort!((a, b) => a.key < b.key)) {
|
||||
writeln("\t\tОтвет №%d: %s".format(answer.key, answer.value.text));
|
||||
}
|
||||
else
|
||||
writeln("\t\tНедостаточно количества ответов");
|
||||
}
|
||||
}
|
||||
|
||||
bool check() {
|
||||
bool error = false;
|
||||
|
||||
if (!this.isValid()) {
|
||||
writeln("Недостаточное количество вопросов: %d".format(this.count()));
|
||||
error = true;
|
||||
}
|
||||
|
||||
if (!error) {
|
||||
foreach (question; this.questions.byKeyValue.array.sort!((a, b) => a.key < b.key)) {
|
||||
if (!question.value.isValid()) {
|
||||
writeln("Вопрос №%d \"%s\" содержит недостаточное количество ответов: %d".format(
|
||||
question.key, question.value.text, question.value.count()
|
||||
));
|
||||
error = true;
|
||||
}
|
||||
|
||||
int truth;
|
||||
|
||||
foreach (answer; question.value.answers) {
|
||||
if (answer.truth)
|
||||
++truth;
|
||||
}
|
||||
|
||||
if (truth > 1) {
|
||||
writeln("Вопрос №%d \"%s\" содержит более одного правильного ответа".format(
|
||||
question.key, question.value.text
|
||||
));
|
||||
error = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return !error;
|
||||
}
|
||||
}
|
||||
|
||||
Theme theme;
|
||||
|
@ -132,24 +193,26 @@ int main(string[] args)
|
|||
if (match[GROUP_QUESTION].length)
|
||||
{
|
||||
numAnswer = 0;
|
||||
theme.questions[++numQuestion] = Question(match[GROUP_QUESTION_TEXT]);
|
||||
theme.questions[++numQuestion] = Question(numQuestion, match[GROUP_QUESTION_TEXT]);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (match[GROUP_ANSWER].length)
|
||||
{
|
||||
theme.questions[numQuestion].answers[++numAnswer] = Answer(match[GROUP_ANSWER_TEXT], false);
|
||||
theme.questions[numQuestion].answers[++numAnswer] = Answer(numAnswer, match[GROUP_ANSWER_TEXT], false);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (match[GROUP_ANSWER_RIGHT].length)
|
||||
{
|
||||
theme.questions[numQuestion].answers[++numAnswer] = Answer(match[GROUP_ANSWER_RIGHT_TEXT], true);
|
||||
theme.questions[numQuestion].answers[++numAnswer] = Answer(numAnswer, match[GROUP_ANSWER_RIGHT_TEXT], true);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
theme.print();
|
||||
// theme.print();
|
||||
// theme.check();
|
||||
theme.addToDB();
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,51 @@
|
|||
module source.sql;
|
||||
|
||||
import singlog;
|
||||
import std.conv;
|
||||
|
||||
import source.dblite;
|
||||
|
||||
int sqlAddNewTheme(string topic) {
|
||||
try {
|
||||
auto queryResult = dblite.sql(
|
||||
"insert into topics (name) values (?) returning id",
|
||||
topic
|
||||
);
|
||||
if (!queryResult.empty())
|
||||
return queryResult.front()["id"].to!int;
|
||||
} catch (Exception e) {
|
||||
log.e("Не удалось выполнить запрос к БД. " ~ e.msg);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int sqlAddNewQuestion(int topic_id, int question_number, string question_text) {
|
||||
try {
|
||||
auto queryResult = dblite.sql(
|
||||
"insert into questions (topic_id, number, text) values (?, ?, ?) returning id",
|
||||
topic_id, question_number, question_text
|
||||
);
|
||||
if (!queryResult.empty())
|
||||
return queryResult.front()["id"].to!int;
|
||||
} catch (Exception e) {
|
||||
log.e("Не удалось выполнить запрос к БД. " ~ e.msg);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int sqlAddNewAnswer(int question_id, int answer_number, string answer_text, int answer_truth) {
|
||||
try {
|
||||
auto queryResult = dblite.sql(
|
||||
"insert into answers (question_id, number, text, truth) values (?, ?, ?, ?) returning id",
|
||||
question_id, answer_number, answer_text, answer_truth
|
||||
);
|
||||
if (!queryResult.empty())
|
||||
return queryResult.front()["id"].to!int;
|
||||
} catch (Exception e) {
|
||||
log.e("Не удалось выполнить запрос к БД. " ~ e.msg);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue