Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/25: Рейтинг темы: голосов - 25, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 06.11.2013
Сообщений: 2

Консольная программа-тест

07.11.2013, 00:02. Показов 4670. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доборого времени суток!
Есть задача создать программу тест.
Текст условия задачи
Напишите универсальную программу тестирования. Тест, последовательность вопросов и варианты ответов должны находиться в текстовом файле. Имя файла теста программа должна получать из командной строки запуска программы. Количество вопросов теста неограничено. Вместе с тем, предлагается ввести следующее ограничение: текст вопроса и альтернативных ответов не должен занимать более одной строки экрана. Программа должна выставлять оценку по следующему правилу: ОТЛИЧНО — за правильные ответы на все вопросы, ХОРОШО — если испытуемый правильно ответил не менее чем на 80% вопросов, УДОВЛЕТВОРИТЕЛЬНО — если правильных ответов более 60%, и ПЛОХО — если правильных ответов меньше 60%. Ниже приведена рекомендуемая структура файла вопросов теста (Ni — количество альтернативных ответов к i-ому вопросу, Ki, — номер правильного ответа), пример файла теста и вид экрана во время работы программы (номера ответов, введенные пользователем, выделены полужирным шрифтом).

Структура работы программы
Вопрос1
N1 M1
Ответ
...
Ответ
Вопрос2
N2 М2
Ответ
...
Ответ
......
Вопроc(k)
Nk Мk
Ответ
...
Ответ

Пример содержимого текстового файла из которго берется информация
Архитектор Исаакиевского собора
3 2
1.Доменико Трезини
2.Огюст Монферран
3.Карл Росси
Архитектор Зимнего дворца
2 2
1.Франческо Бартоломее
2.Огюст Монферран
Невский проспект получил свое название
3 2
1.По имени реки, на которой стоит Санкт-Петербург.
2.По имени близко расположенного монастыря, Александро-Невской лавры.
3.В память о знаменитом полководце — Александре Невском.

И пример работы программы(полужирным выделено данные введенные пользователем)

Сейчас Вам будет предложен тест.
К каждому вопросу дается несколько вариантов ответов.
Вы должны ввести номер правильного ответа и нажать клавишу <Enter>
Архитектор Исаакиевского собора:
1. Доменико Трезини
2. Огюст Монферран
3. Карл Росси
-> 2
Архитектор Зимнего дворца:
1. Франческо Бартоломее
2. Карл Росси
-> 2
Невский проспект получил свое название:
1. По имени реки, на которой стоит Санкт-Петербург.
2. По имени близко расположенного монастыря, Александро- Невской лавры.
З. В память о знаменитом полководце — Александре Невском.
->2
Ваша оценка ОТЛИЧНО!
Для завершения работы программы нажмите <Enter>

Далее следует код написанный мною.
Суть проблем:
1. По непонятным мне причинам выскакивает NullReferenceException(следовательно, как обработать тоже не понимаю)
2. Нужно еще обработать FormatExeption и FileNotFoundExeption

Сам код
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
Console.WriteLine("Введите путь к файлу теста:");
            string s = Console.ReadLine();
            StreamReader sr = new StreamReader(@s, Encoding.Default);
            int count = File.ReadAllLines(@s).Length / 2;
            Console.WriteLine("Сейчас Вам будет предложен тест.\nК каждому вопросу дается несколько вариантов ответов.\nВы должны ввести номер правильного ответа и нажать клавишу <Enter>");
            Console.WriteLine("Для продолжения нажмите любую клавишу");
            Console.ReadKey();
            Console.WriteLine();
            string line;
            int kst_varantiv = 0;
            int nPrav = 0;//номер правильного ответа
            int vybor = 0;
            double vidpov = 0;
            double kst_pitan = 0;
            double result = 0;
            for (int i = 1; i < count; )
            {
                line = sr.ReadLine();
                if (line.Length == 3)
                {
                    kst_pitan++;
                    kst_varantiv = int.Parse(line[0].ToString());   //обработка числовых указаний
                    nPrav = int.Parse(line[2].ToString());
                    for (int l = 1; l <= kst_varantiv; l++)//вывод вариантов ответов
                    {
                        Console.WriteLine(sr.ReadLine());
                        if (l == kst_varantiv)//перед завершением цикла считываем выбор пользователя
                        {
                            vybor = Convert.ToInt32(Console.ReadLine());
                           if (vybor > kst_varantiv && vybor < 1)
                            {
                                while (vybor > kst_varantiv && vybor < 1)
                                {
                                    Console.WriteLine("Ошибка ввода. Вводите только числа от 1 до {0}", kst_varantiv);
                                    vybor = Convert.ToInt32(Console.ReadLine());
                                }
                            }
                            if (vybor == nPrav)
                            {
                                vidpov++;
                                i++;
                            }
                        }
                    }
                    continue;//пропускает вывод на экран числовых указаний
                }
                else//выводит вопрос
                {
                    Console.WriteLine(line);
                    i++;
                }
            }
            result = vidpov / kst_pitan;
            Console.WriteLine("Ваша оценка:");
            if (result == 1)
                Console.WriteLine("Отлично");
            else if (result >= 0.8 && result != 1)
                Console.WriteLine("Хорошо");
            else if (result >= 0.6 && result != 1 && result < 0.8)
                Console.WriteLine("Удовлетворительно");
            else if (result < 0.6)
                Console.WriteLine("Плохо");
            Console.ReadKey();

Заранее спасибо за помощь!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.11.2013, 00:02
Ответы с готовыми решениями:

Консольная программа в форму
Делаю проект. Но не могу переделать на форму, не получается. Возможно ли вообще сделать классы в формах? Или например как вытащить данные...

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

Первая консольная программа
всем спасибо !!!!! скоро закину первые разработки вам на оценку Добавлено через 39 минут мой первый опыт в написание using...

1
320 / 280 / 109
Регистрация: 27.09.2010
Сообщений: 1,058
07.11.2013, 19:31
Я конечно пофиксил ошибку. Но извените, у вас это говнокод. Тут нужен хороший рефакторинг, прежде чем отлавливать разные exception.

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
try
            {
                string s = "test.txt";
                StreamReader sr = new StreamReader(@s, Encoding.Default);
                int count = File.ReadAllLines(@s).Length / 2;
                Console.WriteLine("Сейчас Вам будет предложен тест.\nК каждому вопросу дается несколько вариантов ответов.\nВы должны ввести номер правильного ответа и нажать клавишу <Enter>");
                Console.WriteLine("Для продолжения нажмите любую клавишу");
                Console.ReadKey();
                string line;
                int kst_varantiv = 0;
                int nPrav = 0;//номер правильного ответа
                int vybor = 0;
                double vidpov = 0;
                double kst_pitan = 0;
                double result = 0;
                for (int i = 1; i < count; )
                {
                    line = sr.ReadLine();
                    if (line!=null && line.Length == 3)
                    {
                        kst_pitan++;
                        kst_varantiv = int.Parse(line[0].ToString());   //обработка числовых указаний
                        nPrav = int.Parse(line[2].ToString());
                        for (int l = 1; l <= kst_varantiv; l++)//вывод вариантов ответов
                        {
                            Console.WriteLine(sr.ReadLine());
                            if (l == kst_varantiv)//перед завершением цикла считываем выбор пользователя
                            {
                                vybor = Convert.ToInt32(Console.ReadLine());
                                if (vybor > kst_varantiv && vybor < 1)
                                {
                                    while (vybor > kst_varantiv && vybor < 1)
                                    {
                                        Console.WriteLine("Ошибка ввода. Вводите только числа от 1 до {0}", kst_varantiv);
                                        vybor = Convert.ToInt32(Console.ReadLine());
                                    }
                                }
                                if (vybor == nPrav)
                                {
                                    vidpov++;
                                    i++;
                                }
                            }
                        }
                        continue;//пропускает вывод на экран числовых указаний
                    }
                    else//выводит вопрос
                    {
                        Console.Clear();
                        Console.WriteLine(line);
                        
                        i++;
                    }
                }
                result = vidpov / kst_pitan;
                Console.WriteLine("Ваша оценка:");
                if (result == 1)
                    Console.WriteLine("Отлично");
                else if (result >= 0.8 && result != 1)
                    Console.WriteLine("Хорошо");
                else if (result >= 0.6 && result != 1 && result < 0.8)
                    Console.WriteLine("Удовлетворительно");
                else if (result < 0.6)
                    Console.WriteLine("Плохо");
                Console.ReadKey();
            }
            catch (Exception)
            {
                Console.WriteLine("Произошла ошибка!");
            }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.11.2013, 19:31
Помогаю со студенческими работами здесь

Консольная программа в фоновом режиме
Народ, как реализовать такую задумку. Нужно сделать так, что при нажатии на кнопку, запускалась программа в фоновом режиме и выполнял то,...

Консольная программа (Сервер - Клиент)
Здравствуйте всем. Возникла одна проблема. Вот этот код работает (он скачивает файл с папки сервера server_files и копирует в папку клиента...

Консольная программа, увеличивающая число на 1
Привет) Цель - написать консольную программу, которая увеличивает число (заданное пользователем) на 1 до тех пор, пока пользователь пишет...

Консольная программа, задающая 3 примера по таблице умножения
Здравствуйте, дорогие форумчане. Необходимо написать программу, задающую 3 вопроса по таблице умножения. При компиляции в visual studio...

Консольная программа закрывается при вводе запрашиваемой информации
Я новичок и хочу сделать программу складывающую два числа) , но вместо ввода числа он закрывает консоль: ...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значения справочника
Maks 21.03.2026
Процедура ВодителиНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка) / / Отключаем стандартную обработку (стандартное открытие формы выбора без фильтров) . . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru