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

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

29.12.2016, 09:03. Просмотров 1238. Ответов 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...

62
1231231ghacking
98 / 102 / 62
Регистрация: 19.11.2015
Сообщений: 380
Завершенные тесты: 3
29.12.2016, 15:35 21
В label выводить такую,относительно, большую коллекция, не рационально.
Выводи хотя бы в Console таким образом:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
foreach (var quest in questions)
            {
                Console.WriteLine(new string('=', 10));
                Console.WriteLine("ID Вопроса: " + quest.Id);
                Console.WriteLine("Текст вопроса: " + quest.Text);
                Console.WriteLine(new string('=',10));
                foreach (var answer in quest.Answers)
                {
                    Console.WriteLine("ID Ответа: " + answer.Id);
                    Console.WriteLine("Текст ответа: " + answer.Text);
                    Console.WriteLine("Верный ответ: " + answer.IsCorrect);
                }
            }
Под textBox сам переделаешь,думаю, что хоть с этим справишься
0
connection123
1 / 1 / 0
Регистрация: 01.10.2016
Сообщений: 239
Завершенные тесты: 1
29.12.2016, 15:41  [ТС] 22
OwenGlendower, Так оно запускается без ошибок,ну тоесть нажимаю F5 открывается форма без ошибок. Проблема заключается в выводе содержимого в label из этого List

Добавлено через 5 минут
1231231ghacking, Спасибо,вывел все что нужно)
0
OwenGlendower
Супер-модератор
Эксперт .NET
10208 / 8816 / 3771
Регистрация: 17.03.2014
Сообщений: 17,718
Записей в блоге: 1
29.12.2016, 15:43 23
connection123, отладчик нужен не только для пошагового исполнения, но и просмотра значения переменных. Каждый раз писать код для вывода сложных переменных это только трата времени.
0
connection123
1 / 1 / 0
Регистрация: 01.10.2016
Сообщений: 239
Завершенные тесты: 1
29.12.2016, 16:02  [ТС] 24
1231231ghacking, Сразу же вопрос
Выводит только последнюю запись в таблице, есть вариант как указать на конкретный индекс?

Добавлено через 9 минут
OwenGlendower, Спасибо,очень пригодилось, смотрю теперь где сколько записей)

Добавлено через 6 минут
OwenGlendower, поставил красную точку в конец приложения
и там показано одно значение переменной,а при выводе в текстбокс оно другое, ну тоесть в question (Сам List там все верно,прям как нужно для вывода)
а в quest уже пишет одно значение,а при выводе она оказывается последней записью в БД
0
OwenGlendower
Супер-модератор
Эксперт .NET
10208 / 8816 / 3771
Регистрация: 17.03.2014
Сообщений: 17,718
Записей в блоге: 1
29.12.2016, 16:05 25
connection123, возможно для тебя это окажется сюрпризом, но мне отсюда не виден твой монитор.
0
connection123
1 / 1 / 0
Регистрация: 01.10.2016
Сообщений: 239
Завершенные тесты: 1
29.12.2016, 16:10  [ТС] 26
OwenGlendower, я уже плыву от всего этого, но хочу разобраться, весь день сижу в этой студии
Вообщем смотрите,переменная question содержит те значение которые мне нужны,ну тоесть по вопросно все разбито и правильно, а в quest стоит якобы первый вопрос,а при отладке выводится последний тоесть 3 вопрос.
0
Миниатюры
Массив: Реализация системы ответов и вопросов теста...  
OwenGlendower
Супер-модератор
Эксперт .NET
10208 / 8816 / 3771
Регистрация: 17.03.2014
Сообщений: 17,718
Записей в блоге: 1
29.12.2016, 16:13 27
connection123, значит так работает твой код. Если хочешь получить более полезный ответ, то показывай его целиком с объяснением гды ты ожидаешь увидеть первый вопрос, а видишь последний.
0
connection123
1 / 1 / 0
Регистрация: 01.10.2016
Сообщений: 239
Завершенные тесты: 1
29.12.2016, 16:16  [ТС] 28
OwenGlendower, Вообще бы в идеале, выводить переменную question так как в ней содержится та информация которая мне нужна,чтоб я ее по индексированно передавал лейблу и радиобутонам.
Но ее я вывести не могу
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
36
37
38
39
40
41
42
43
44
45
46
47
48
        private void Form1_Load(object sender, EventArgs e)
        {
            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 Вопросы LEFT JOIN Ответы ON Ответы.[ID вопроса] = Вопросы.[ID вопроса] ORDER BY Вопросы.[ID вопроса], Ответы.ID");
                cmd.Connection = connect;
                connect.Open();
                using (var reader = cmd.ExecuteReader())
                {
                    int prevQuestionId = -1;
                    Question currentQuestions = null;
                    while (reader.Read())
                    {
                        int questionId = (int)reader["ID вопроса"];
                        if (questionId != prevQuestionId)
                        {
                            currentQuestions = new Question()
                        {
                            ID = questionId,
                            Text = (string)reader["Текст вопроса"],
                            Answers = new List<Answer>()
                        };
                            questions.Add(currentQuestions);
                        }
 
                        currentQuestions.Answers.Add(new Answer
                    {
                        ID = (int)reader["ID ответа"],
                        Text = (string)reader["Текст ответа"],
                        IsCorrect = (bool)reader["Правильность ответа"]
                    });
                        prevQuestionId = questionId;
                    }
                }
            }
            foreach (var quest in questions)
            {
                label1.Text  = ("Вопрос №" + " " + quest.ID + " " + quest.Text);
                foreach (var answer in quest.Answers)
                {
                    textBox1.Text = answer.ID + answer.Text + answer.IsCorrect;
                }
            }
        }
    }
}
Полный код
0
OwenGlendower
Супер-модератор
Эксперт .NET
10208 / 8816 / 3771
Регистрация: 17.03.2014
Сообщений: 17,718
Записей в блоге: 1
29.12.2016, 16:18 29
Цитата Сообщение от connection123 Посмотреть сообщение
C#
1
2
3
4
5
6
7
8
            foreach (var quest in questions)
            {
                label1.Text  = ("Вопрос №" + " " + quest.ID + " " + quest.Text);
                foreach (var answer in quest.Answers)
                {
                    textBox1.Text = answer.ID + answer.Text + answer.IsCorrect;
                }
            }
Объясни словами что делает данный код.
0
connection123
1 / 1 / 0
Регистрация: 01.10.2016
Сообщений: 239
Завершенные тесты: 1
29.12.2016, 16:22  [ТС] 30
OwenGlendower, ну как я понял, что я создаю переменную quest внутри переменной questions в лэйбл вывожу переменные которые лежат в классе,ну а вообще это цикл,да? и вот это оно мне как бы и совсем не нужно?)
0
1231231ghacking
98 / 102 / 62
Регистрация: 19.11.2015
Сообщений: 380
Завершенные тесты: 3
29.12.2016, 16:42 31
Ты не правильно делаешь все в этом коде!
C#
1
2
3
4
5
6
7
8
 foreach (var quest in questions)
            {
                label1.Text  = ("Вопрос №" + " " + quest.ID + " " + quest.Text);
                foreach (var answer in quest.Answers)
                {
                    textBox1.Text = answer.ID + answer.Text + answer.IsCorrect;
                }
            }
0
connection123
1 / 1 / 0
Регистрация: 01.10.2016
Сообщений: 239
Завершенные тесты: 1
29.12.2016, 16:43  [ТС] 32
OwenGlendower, Такую чушь смолол, с помощью этого foreach я могу записать в quest каждую этерацию, из question,тоесть каждый вопрос, и 3 ответа на него,так?
0
1231231ghacking
98 / 102 / 62
Регистрация: 19.11.2015
Сообщений: 380
Завершенные тесты: 3
29.12.2016, 16:43 33
Конечно из-за этого кода у тебя и будет показываться только 3ий вопрос, потому что ты все время переприсваиваешь значения для label1 и textbox1
0
connection123
1 / 1 / 0
Регистрация: 01.10.2016
Сообщений: 239
Завершенные тесты: 1
29.12.2016, 16:44  [ТС] 34
1231231ghacking, Ну теперь я понял,что этот foreach для другого предназначен
0
1231231ghacking
98 / 102 / 62
Регистрация: 19.11.2015
Сообщений: 380
Завершенные тесты: 3
29.12.2016, 16:50 35
нет, как раз таки для этого. ничего ты не понял)

Добавлено через 5 минут
C#
1
2
3
4
5
6
7
8
            foreach (var quest in questions)
            {
                label1.Text = label1.Text + ("Вопрос №" + " " + quest.ID + " " + quest.Text) + Environment.NewLine;
                foreach (var answer in quest.Answers)
                {
                    textBox1.Text = textBox1.Text + answer.ID + " " + answer.Text + " " + answer.IsCorrect + " ";
                }
            }
Попробуй вот этот код для отображения всех вопросов
0
connection123
1 / 1 / 0
Регистрация: 01.10.2016
Сообщений: 239
Завершенные тесты: 1
29.12.2016, 16:52  [ТС] 36
1231231ghacking, тогда по подробнее, получается у меня есть коллекция questions в которой лежат все вопросы и ответы из БД. потом я создаю переменную quest которому должно присваиваться сразу значение первого вопроса с 3-мя ответами,так как это первая итерация,предположим у меня уже обработана кнопка ответа,по нажатию он должен переходить ко второй итерации.правильно рассуждаю?

Добавлено через 2 минуты
1231231ghacking, При твоем коде, выводится в лейбл все 3 вопроса, а в текстбокс все 9 ответов.
0
1231231ghacking
98 / 102 / 62
Регистрация: 19.11.2015
Сообщений: 380
Завершенные тесты: 3
29.12.2016, 16:54 37
Я знаю, что делаем мой код.
Ты обьясни, что ты хочешь получить от кода, а я подскажу как это сделать
0
connection123
1 / 1 / 0
Регистрация: 01.10.2016
Сообщений: 239
Завершенные тесты: 1
29.12.2016, 16:59  [ТС] 38
1231231ghacking, Ну вообще мне нужно чтоб при загрузке формы,был первый вопрос,при даче любого ответа,открывался второй вопрос и менялись варианты ответа в радиобутонах. ну и потом я создам переменную score и при правильном ответе score++ при не правильном incorrect++ после завершения теста (предположим на 20 вопросов) выводился результат, вот что мне нужно, но и чтоб готовый код мне прилетел так тоже я не хочу.

Добавлено через 1 минуту
1231231ghacking, Вообще надо понять принцип работы этого оператора а точнее переход от вопроса к вопросу.
0
OwenGlendower
Супер-модератор
Эксперт .NET
10208 / 8816 / 3771
Регистрация: 17.03.2014
Сообщений: 17,718
Записей в блоге: 1
29.12.2016, 17:06 39
connection123, сделай переменную questions полем класса, объяви дополнительное поле с номером вопроса и используй его для обращения к конкретному вопросу. Примерно как в этом ответе.

Добавлено через 1 минуту
Цитата Сообщение от connection123 Посмотреть сообщение
Вообще надо понять принцип работы этого оператора
Что тебе надо так это прочитать учебник по основам C#.
0
1231231ghacking
98 / 102 / 62
Регистрация: 19.11.2015
Сообщений: 380
Завершенные тесты: 3
29.12.2016, 17:10 40
Сейчас я объясню тебе работу этого оператора
Допустим, что у нас есть переменная типа string:
C#
1
string Name = "Alexandr"
Эта переменная представляет собой массив символов ( char ), т.е. для того, чтобы пройтись по всем букам в этой переменной нужно сделать так:
C#
1
2
3
4
foreach(char bukva in Name)
             {
              Console.WriteLine(bukva);
             }
В итоге этот код выведет каждую букву из переменной Name

Добавлено через 3 минуты
foreach представляет собой такую модель:
C#
1
2
3
4
foreach (тип_данных название_переменной in контейнер)
{
    // действия
}
где контейнер должен реализовывать интерфейс IEnumerable
0
29.12.2016, 17:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.12.2016, 17:10

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

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

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


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

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

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