Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
8 / 5 / 3
Регистрация: 13.02.2013
Сообщений: 294
1

Программа тестирования

30.04.2017, 22:14. Показов 841. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток, необходимо написать программу тестирования. Лучше реализовать считывание из файла используя класс Question с полями или же работать со строками?
Если работать с классом. то реализация примерно такая?
C#
1
2
3
4
5
6
7
   public class Question
    {
        public string ques;
        public string answ1;
        public string answ2;
        public string answ3;
    }
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
public static List<Question> testRead()
        {
            List<Question> questions = new List<Question>();
            try
            {
                using (StreamReader sr = new StreamReader("test.txt", System.Text.Encoding.Default))
                {
                    string line = "";
                    while ((sr.ReadLine()) != null)
                    {
                        Console.Clear();
                        for (int i = 0; i <= 3; i++)
                        {
                            line = sr.ReadLine();
                            questions.Add();
                        }
                    }
                } 
            }
             catch
            {
                Console.WriteLine("\n\n\n\n\n\n\n\n\n\n\n\t\t\t\tФайл не найден. Проверьте наличие файла.");
                Console.ReadLine();
            }
            return questions;
        }
Подскажите пожалуйста
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.04.2017, 22:14
Ответы с готовыми решениями:

Программа тестирования
Здравствуйте! Я хочу написать программу для тестирования. Нужно: 1) Чтобы приложение мог...

программа тестирования
Не совсем уверен в правильности выбранного форума, если таки ошибся прошу администраторов...

Консольная программа тестирования
Доброго дня суток. Я уже который раз пытаюсь получить хоть какие-либо навыки по программированию,...

программа для тестирования
Доброго времени суток. Такая ситуация: Пишу небольшую программу для тестирования. Т.е. для...

11
102 / 106 / 62
Регистрация: 19.11.2015
Сообщений: 380
30.04.2017, 22:21 2
Используй сериализацию XML.Очень удобно с ней работать.
0
8 / 5 / 3
Регистрация: 13.02.2013
Сообщений: 294
30.04.2017, 22:42  [ТС] 3
1231231ghacking, а все таки при работе с файлами?
0
102 / 106 / 62
Регистрация: 19.11.2015
Сообщений: 380
30.04.2017, 23:02 4
Файлы будут лучше
0
8 / 5 / 3
Регистрация: 13.02.2013
Сообщений: 294
30.04.2017, 23:07  [ТС] 5
1231231ghacking, реализацию примерно верно указал?
0
Администратор
Эксперт .NET
17024 / 13376 / 5218
Регистрация: 17.03.2014
Сообщений: 27,354
Записей в блоге: 1
30.04.2017, 23:09 6
Цитата Сообщение от Kurtis Посмотреть сообщение
Лучше реализовать считывание из файла используя класс Question с полями или же работать со строками?
Класс лучше. Он позволит удобно работать с вопросом как с единым целым.

Цитата Сообщение от Kurtis Посмотреть сообщение
Если работать с классом. то реализация примерно такая?
Очень примерно. Код не откомпилируется, экземпляры 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
public class Question
{
    public string Text;
    public string Answer1;
    public string Answer2;
    public string Answer3;
}
// ...
public static List<Question> testRead()
{
    List<Question> questions = new List<Question>();
    try
    {
        using (StreamReader sr = new StreamReader("test.txt", System.Text.Encoding.Default))
        {
            string line;
            while ((line = sr.ReadLine()) != null)
            {
                var q = new Question { Text = line };
                q.Answer1 = sr.ReadLine();
                q.Answer2 = sr.ReadLine();
                q.Answer3 = sr.ReadLine();
                questions.Add(q);
            }
        }
    }
    catch
    {
        Console.WriteLine("\n\n\n\n\n\n\n\n\n\n\n\t\t\t\tФайл не найден. Проверьте наличие файла.");
        Console.ReadLine();
    }
    return questions;
}
0
8 / 5 / 3
Регистрация: 13.02.2013
Сообщений: 294
01.05.2017, 11:25  [ТС] 7
OwenGlendower, запись в файле планирую делать следующим образом:
Вопрос
Ответ 1
Ответ 2
Ответ 3
Правильный ответ всегда первый. Необходимо считывать 4 строчки(вопрос и 3 варианта ответа), исключая 5ую(правильный вариант), после предложить ввод ответа и сверить с каждой 5ой строчкой. Или есть вариант проще?)

Добавлено через 3 часа 5 минут
OwenGlendower, подскажите пожалуйста как правильно объявить q чтобы она потом была доступна в массиве...
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
 
namespace Start
{
    public class Questions
    {
        string Text;
        string answer1;
        string answer2;
        string answer3;
        string res;
        public string Res
        {
            get { return res; }
            set { res = value; }
        }
        public Questions(string _question, string a, string b, string c, string r)
        {
            this.Text = _question;
            this.answer1 = a;
            this.answer2 = b;
            this.answer3 = c;
            this.res = r;
        }
        public void Display()
        {
            Console.WriteLine(this.Text);
            Console.WriteLine(this.answer1);
            Console.WriteLine(this.answer2);
            Console.WriteLine(this.answer3);
        }
    }
    class Test
    {
        public static void Main_()
        {
            int sum = 0;
            string res;
            List<Questions> q = new List<Questions>();
            using (StreamReader sr = new StreamReader("test.txt", System.Text.Encoding.Default))
            {
                while(sr.ReadLine() != null)
                {
                    q = { new Questions (sr.ReadLine(), sr.ReadLine(), sr.ReadLine(), sr.ReadLine(), sr.ReadLine() )};
                }
            }
                for (int i = 0; i < 2; i++)
                {
                    q[i].Display();
                    res = Console.ReadLine();
                    if (res != null)
                    {
                        if (res == q[i].Res)
                        {
                            sum++;
                        }
                    }
                }
                Console.WriteLine("Правильных ответов:{0}", sum);
                Console.ReadLine();
        }
    }
}
0
309 / 317 / 119
Регистрация: 29.10.2011
Сообщений: 1,006
01.05.2017, 12:20 8
Kurtis, Вопрос стар как мир) Столько же есть примеров реализации подобного в интернете и в частности на этом форуме.

Вот, например, вроде то, что нужно вам. Без linq, yield и прочего, что вы еще не прошли
Кликните здесь для просмотра всего текста
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
class Question
{
    public string Text { get; set; } // вопрос
    public List<string> Answers { get; set; } // ответы
    public int CorrectAnswer { get; set; } // номер правильного ответа
}
 
class QuestionData // желательно с IQuestionData
{
    private const string FileName = "questions.txt";
    private const string MainSeparator = "|";
    private const string AnswersSeparator = ";";
 
    public static string FilePath { get; set; } = Path.Combine(Environment.CurrentDirectory, FileName);
 
    public static void Save(IEnumerable<Question> questions)
    {
        using (var stream = new StreamWriter(FileName))
        {
            foreach (var question in questions)
                stream.WriteLine($"{question.Text}{MainSeparator}{string.Join(AnswersSeparator, question.Answers)}{MainSeparator}{question.CorrectAnswer}");
        }
    }
 
    public static List<Question> Load()
    {
        var questions = new List<Question>();
 
        foreach (var line in File.ReadAllLines(FilePath))
        {
            var temp = line.Split(new[] { MainSeparator }, StringSplitOptions.RemoveEmptyEntries);
            var answers = temp[1].Split(new[] { AnswersSeparator }, StringSplitOptions.RemoveEmptyEntries).ToList();
 
            questions.Add(new Question { Text = temp[0], Answers = answers, CorrectAnswer = int.Parse(temp[2]) });
        }
 
        return questions;
    }
}
 
class Program
{
    static void Main(string[] args)
    {
        // создаем вопросы
        var questionsTemp = new List<Question>
        {
            new Question
            {
                Text = "2x2 = ?",
                Answers = new List<string> { "4", "5", "2"},
                CorrectAnswer = 1
            },
            new Question
            {
                Text = "10/2 = ?",
                Answers = new List<string> { "4", "5", "2", "1", "10", "0"},
                CorrectAnswer = 2
            }
        };
 
        // сохраняем
        QuestionData.Save(questionsTemp);
 
        // загружаем
        var questions = QuestionData.Load();
 
        int correctAnswers = 0;
 
        foreach (var question in questions)
        {
            Console.WriteLine($"Вопрос: {question.Text}");
            Console.WriteLine("Варианты ответа: ");
 
            for (int i = 0; i < question.Answers.Count; i++)
                Console.WriteLine($"{i + 1}) {question.Answers[i]};");
 
            Console.Write("Введите номер ответа: ");
 
            var answer = int.Parse(Console.ReadLine());
 
            if (question.CorrectAnswer == answer)
                correctAnswers++;
 
            Console.WriteLine();
        }
 
        Console.WriteLine($"Тест завершен. Правильных ответов {correctAnswers} из {questions.Count}");
 
        Console.ReadKey();
    }
}
0
8 / 5 / 3
Регистрация: 13.02.2013
Сообщений: 294
01.05.2017, 13:07  [ТС] 9
sldp, все бы хорошо, но у меня работа с файлами и не получается передать значение q в цикл
0
309 / 317 / 119
Регистрация: 29.10.2011
Сообщений: 1,006
01.05.2017, 13:38 10
Kurtis, Ну так там как раз и сохраняются вопросы в файл
0
Администратор
Эксперт .NET
17024 / 13376 / 5218
Регистрация: 17.03.2014
Сообщений: 27,354
Записей в блоге: 1
01.05.2017, 14:11 11
Цитата Сообщение от Kurtis Посмотреть сообщение
подскажите пожалуйста как правильно объявить q чтобы она потом была доступна в массиве...
Я уже показал как - внимание на строки №19-23.
0
8 / 5 / 3
Регистрация: 13.02.2013
Сообщений: 294
01.05.2017, 15:46  [ТС] 12
OwenGlendower, как Вы сделать уже не смогу, т.к. задействовал конструктор, который принимает значения пяти строк.
C#
1
2
3
4
5
6
7
8
9
10
using (StreamReader sr = new StreamReader("test.txt", System.Text.Encoding.Default))
            {
                string line;
               while ((line = sr.ReadLine()) != null)
                {
                    var q = new Questions { Text = line, answer1 = sr.ReadLine(), answer2 = sr.ReadLine(), answer3 = sr.ReadLine(), res = sr.ReadLine()};
                    questions.Add(q);
 
                }
            }
Не получается, так как вы написали из-за того, что есть конструктор, в который должно сразу передаваться все 5 полей, но почему-то при объявлении этих полей в классе как Privat, в объекте q они не видятся( хотя по идее должны), как только поля в классе Questions объявляю как public, в q поля добавляются, но появляется ошибка такого рода:
There is no argument given that corresponds to the required formal parameter of
Добавлено через 54 минуты
Решил эту проблему.
0
01.05.2017, 15:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.05.2017, 15:46
Помогаю со студенческими работами здесь

Программа тестирования с возможностью менять тесты
Здравствуйте, столкнулся с проблемой &quot;дипломная работа на тему: тестирование знаний студентов&quot;,...

Программа тестирования: раздавать вопросы ученикам рандомно
здравствуйте. Мог бы кто-нибудь сказать как сделать random на следующее: у меня символьный массив с...

Программа для тестирования знаний, как лучше осуществить
Здравствуйте! Пишу программу для тестирования знаний. Подскажите как лучше осуществить, в качестве...

Необходимо, чтобы программа тестирования учащихся работала через локальную сеть
Доброго времени суток! Есть небольшая программка, написанная на C#, для тестирования учащихся...

Как организовать экспертную систему по выбору веб сайта (программа тестирования)
Доброго времени суток, на предмете розроботка программного обеспечания, задали сделать лабораторную...

Программа тестирования: как продумать ее логику и где и в каком виде хранить файлы вопросов
есть такая дилемма: хочу написать приложение. в нем будет набор вопросов и варианты ответов на них....


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru