Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
connection123
1 / 1 / 0
Регистрация: 01.10.2016
Сообщений: 239
Завершенные тесты: 1
1

Массив: Реализация системы ответов и вопросов теста...

29.12.2016, 09:03. Просмотров 1314. Ответов 62
Метки нет (Все метки)

Всем привет,нужна помощь запутался в том как лучше реализовать работу с массивами, вообщем.
Есть база данных в ней 2 таблицы Вопросы/Ответы. В таблице вопросы столбцы ID | Текст. В таблице ответы столбцы ID | ID вопроса | текст | правильность ответа (bool).
Нужно сделать массив вопросов,ответов. В массиве ответов должен учитываться номер вопроса (50 вопрос 1,2,3 вариант ответа)
и следовательно нужен массив правильных ответов типа bool, а так же массив ответов те что дал пользователь?
Может я чего то не так думаю, и количество массивов можно уменьшить,и будут ли все массивы двумерными?
Если не сложно распишите текстом план действий.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.12.2016, 09:03
Ответы с готовыми решениями:

Где в этом коде задается текст теста для вопросов и ответов
Ребят, можете кто-нибудь объяснить мне глупенькой, где в этом коде задается текст для теста для...

Загрузка ответов теста из текстового файла
Здравствуйте форумчане нужна помощь.Делаю тестирование и подгружаю вопросы и 4 варианта...

Создание теста со счетчиком и 6-ю вариантами ответов
Нужно создать тест на delphi с 6 вариантами ответов ,тест должен состоять из 36 вопросов, и...

Процент правильных ответов по окончанию теста
Здравствуйте! Помогите пожалуйста с программой, все в принципе готово, но препод требует,...

Расшифровка базы ответов теста формата *.farm
Здравствуйте! Имеется база данных ответов к тестам формата farm, без программы его чтения, нужно...

62
OwenGlendower
Супер-модератор
Эксперт .NET
10431 / 8981 / 3838
Регистрация: 17.03.2014
Сообщений: 18,037
Записей в блоге: 1
29.12.2016, 09:29 2
connection123, лучше сразу начать с объектной модели вместо массивов
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
class Question
{
    public int Id { get; set; }
    public string Text { get; set; }
    public List<Answer> Answers { get; set; }
}
 
class Answer
{
    public int Id { get; set; }
    public string Text { get; set; }
    public bool IsCorrect { get; set; }
}
В приложении будем хранить список вопросов
C#
1
List<Question> questions;
0
connection123
1 / 1 / 0
Регистрация: 01.10.2016
Сообщений: 239
Завершенные тесты: 1
29.12.2016, 09:31  [ТС] 3
OwenGlendower, А ну, я же могу в переменную занести результат Sql запроса,правильно?
0
OwenGlendower
Супер-модератор
Эксперт .NET
10431 / 8981 / 3838
Регистрация: 17.03.2014
Сообщений: 18,037
Записей в блоге: 1
29.12.2016, 09:32 4
connection123, разумеется можешь.
0
connection123
1 / 1 / 0
Регистрация: 01.10.2016
Сообщений: 239
Завершенные тесты: 1
29.12.2016, 10:23  [ТС] 5
OwenGlendower,
C#
1
2
3
4
5
6
class Question
{
    public int Id { get; set; }
    public string Text { get; set; }
    public List<Answer> Answers { get; set; }
}
на List<Answer> Answers { get ; set; } ругается, как я понял надо тип данных указать, string. Или я ошибаюсь?

Добавлено через 43 секунды
OwenGlendower, Ааа,так это же надо сперва класс создать,извини

Добавлено через 19 минут
OwenGlendower,
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
            const string ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:/Показать шпаковой/Вопросы.mdb";
            OleDbConnection connect = new OleDbConnection(ConnectionString);
            connect.Open();
            OleDbCommand numQ = new OleDbCommand("SELECT [ID] FROM Вопросы");
            numQ.CommandType = CommandType.Text;
            numQ.Connection = connect;
            Questions.ID = numQ.ExecuteNonQuery();
            OleDbCommand Qtext = new OleDbCommand("SELECT [Текст] FROM Вопросы");
            Qtext.CommandType = CommandType.Text;
            Qtext.Connection = connect;
            Questions.Text = Qtext.ExecuteNonQuery().ToString();
            OleDbCommand numA = new OleDbCommand("SELECT [ID] FROM Ответы");
            numA.CommandType = CommandType.Text;
            numA.Connection = connect;
            Answer.ID = numA.ExecuteNonQuery();
            OleDbCommand Atext = new OleDbCommand("SELECT [Текст] FROM Ответы");
            Atext.CommandType = CommandType.Text;
            Atext.Connection = connect;
            Answer.Text = Atext.ExecuteNonQuery().ToString();
            OleDbCommand correct = new OleDbCommand("SELECT [Правильность ответа] FROM Ответы");
            correct.CommandType = CommandType.Text;
            correct.Connection = connect;
            Answer.IsCorrect =
Правильно ли я движусь, и как записать в переменную Answer.IsCorrect = ExecuteNonQuery(); (Неявное преобразование int v bool).
Переменные из класса при простом public не видит, добавил ко всем переменным static.
0
OwenGlendower
Супер-модератор
Эксперт .NET
10431 / 8981 / 3838
Регистрация: 17.03.2014
Сообщений: 18,037
Записей в блоге: 1
29.12.2016, 10:28 6
connection123, нет неправильно. Нужно делать всё одним запросом и не забывать что у тебя много вопросов и ответов. Сейчас выложу правильный вариант.
0
connection123
1 / 1 / 0
Регистрация: 01.10.2016
Сообщений: 239
Завершенные тесты: 1
29.12.2016, 10:35  [ТС] 7
OwenGlendower, Спасибо,жду
0
OwenGlendower
Супер-модератор
Эксперт .NET
10431 / 8981 / 3838
Регистрация: 17.03.2014
Сообщений: 18,037
Записей в блоге: 1
29.12.2016, 10:46 8
connection123, вот так правильно будет
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
var questions = new List<Question>();
 
const string ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:/Показать шпаковой/Вопросы.mdb";
using (var connect = new OleDbConnection(ConnectionString))
{
      var cmd = new OleDbCommand("SELECT [ID вопроса], Ответы.ID AS [ID ответа], Вопросы.[Текст] AS [Текст вопроса], Ответы.[Текст] AS [Текст ответа], [Правильность ответа] FROM Вопросы JOIN Ответы ON Ответы.[ID вопроса] = Вопросы.ID ORDER BY Вопросы.ID, Ответы.ID");
      cmd.Connection = connect;
      connect.Open();
      using (var reader = cmd.ExecuteReader())
      {
            int prevQuestionId = -1;
            Question currentQuestion;
            while (reader.Read())
            {
                  int questionId = (int)reader["ID вопроса"];
                  if (questionId != prevQuestionId)
                  {
                        currentQuestion = new Question() { 
                              Id = questionId,
                              Text = (string)reader["Текст вопроса"],
                              Answers = new List<Answer>()
                        };
                        questions.Add(currentQuestion);
                  }
 
                  currentQuestion.Answers.Add(new Answer {
                        Id = (int)reader["ID ответа"],
                        Text = (string)reader["Текст ответа"],
                        IsCorrect = (bool)reader["Правильность ответа"]
                  });
 
                  prevQuestionId = questionId;
            }
      }
}
Добавлено через 57 секунд
Цитата Сообщение от connection123 Посмотреть сообщение
добавил ко всем переменным static.
Убери!!!
0
connection123
1 / 1 / 0
Регистрация: 01.10.2016
Сообщений: 239
Завершенные тесты: 1
29.12.2016, 11:44  [ТС] 9
OwenGlendower, Все эти переменные те что новые, типо currentQuestion questionId это новые переменные класса questions?
0
OwenGlendower
Супер-модератор
Эксперт .NET
10431 / 8981 / 3838
Регистрация: 17.03.2014
Сообщений: 18,037
Записей в блоге: 1
29.12.2016, 11:45 10
connection123, нет.
0
connection123
1 / 1 / 0
Регистрация: 01.10.2016
Сообщений: 239
Завершенные тесты: 1
29.12.2016, 11:46  [ТС] 11
OwenGlendower, questions.Add (Где мне этот Add взять?))
Опять затупил,нашел где)
0
OwenGlendower
Супер-модератор
Эксперт .NET
10431 / 8981 / 3838
Регистрация: 17.03.2014
Сообщений: 18,037
Записей в блоге: 1
29.12.2016, 11:48 12
connection123, это метод класса List<T>. Тебе его не надо нигде брать. Сколько времени ты пишешь на C#?
0
connection123
1 / 1 / 0
Регистрация: 01.10.2016
Сообщений: 239
Завершенные тесты: 1
29.12.2016, 11:53  [ТС] 13
OwenGlendower, Порядка 2-ух месяцев,не обо всех методах знаю. Подскажи пожалуйста currentQuestion откуда появился?
0
OwenGlendower
Супер-модератор
Эксперт .NET
10431 / 8981 / 3838
Регистрация: 17.03.2014
Сообщений: 18,037
Записей в блоге: 1
29.12.2016, 11:55 14
Цитата Сообщение от connection123 Посмотреть сообщение
Подскажи пожалуйста currentQuestion откуда появился?
Из строки №12 где эта переменная объявляется.
0
connection123
1 / 1 / 0
Регистрация: 01.10.2016
Сообщений: 239
Завершенные тесты: 1
29.12.2016, 12:11  [ТС] 15
OwenGlendower, var questions = new List<Question>(); объявили новый List<Тут класс с вопросами?>

Добавлено через 12 минут
OwenGlendower, Ну вроде привел код к своему виду.
Использование локальной переменной "currentQuestions", которой не присвоено значение
C#
1
currentQuestions.Answers.Add(new Answer
в этой строке
0
OwenGlendower
Супер-модератор
Эксперт .NET
10431 / 8981 / 3838
Регистрация: 17.03.2014
Сообщений: 18,037
Записей в блоге: 1
29.12.2016, 12:17 16
Цитата Сообщение от connection123 Посмотреть сообщение
Тут класс с вопросами?
Нет. Тут класс который описывает один вопрос. Вопросы мы храним в коллекции questions.

Цитата Сообщение от connection123 Посмотреть сообщение
Использование локальной переменной "currentQuestions", которой не присвоено значение
Набирал код не компилируя его и проглядел это. Инициализируй ее при объявлении.
C#
1
Question currentQuestion = null;
0
connection123
1 / 1 / 0
Регистрация: 01.10.2016
Сообщений: 239
Завершенные тесты: 1
29.12.2016, 12:22  [ТС] 17
OwenGlendower, Ну теперь на запрос ругается синтаксис FROM. Буду разбирать запрос (проверять все ли с БД сходится) Спасибо.
После того как все будет корректно работать,мне нужно будет вынести 3 радиобуттона лэйбл и буттон, лэйбл будет брать вопросы в List,так же как и радиобуттоны?
0
OwenGlendower
Супер-модератор
Эксперт .NET
10431 / 8981 / 3838
Регистрация: 17.03.2014
Сообщений: 18,037
Записей в блоге: 1
29.12.2016, 12:28 18
Цитата Сообщение от connection123 Посмотреть сообщение
лэйбл будет брать вопросы в List,так же как и радиобуттоны?
Да. Из экземпляра класса Question.
0
connection123
1 / 1 / 0
Регистрация: 01.10.2016
Сообщений: 239
Завершенные тесты: 1
29.12.2016, 15:22  [ТС] 19
OwenGlendower, От недостатка знаний по этим коллекциям, не могу продвинуться далее. программа отлаживается, хочу проверить содержимое коллекции questions в допустим в label. я понял что обычным label1.text = questions я не отделаюсь
0
OwenGlendower
Супер-модератор
Эксперт .NET
10431 / 8981 / 3838
Регистрация: 17.03.2014
Сообщений: 18,037
Записей в блоге: 1
29.12.2016, 15:32 20
connection123, используй отладчик.
0
29.12.2016, 15:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.12.2016, 15:32

Расшифровка базы ответов теста формата *.farm
Нужно взломать программу(прилагаю внизу) для считывания формата *.farm (прилагаю внизу). Помогите!

Создание теста. Реализовать подсчет правильных ответов
Добрый день, подскажите как закончить программу с написанием теста в С++, начало я сделала, в концу...

Модернизация теста с возможностью нескольких правильных ответов
Добрый день! Прошу Вашей помощи! В скриптах я впервые, но в принципе поверхностный смысл уловил,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru