Файл: Международные и отечественные стандарты языков программирования, сходство и отличия стандартов.pdf
Добавлен: 04.04.2023
Просмотров: 302
Скачиваний: 2
Листинг 3. Обработка кнопок перехода к соседней теме
private void changeThemeButton(object sender, EventArgs e)
{
// Если номер темы >= 1, то
// кнопка перехода к предыдущей теме должна быть неактивной:
if (themeNumber >= 1)
leftButton.Enabled = true;
// Если номер темы <= 6, то
// кнопка перехода к следующей теме должна быть неактивной:
if (themeNumber <= 6)
rightButton.Enabled = true;
// Поиск направления сдвига по тегу соответствующей кнопки:
int shiftSign = int.Parse((sender as Button).Tag.ToString());
// Если направление - влево и номер темы = 1, то
if (shiftSign == -1 && themeNumber == 1)
return; // выполнить выход из обработчика
// Если направление - вправо и номер темы = 6, то
if (shiftSign == 1 && themeNumber == 6)
return; // выполнить выход из обработчика
// выполнить соответствующий сдвиг
// для перехода к соседней теме путем изменения номера темы:
themeNumber += shiftSign;
// ввод пути к соответствующему теме pdf-файлу:
path = Application.StartupPath + @"\theory\" + themeNumber + ".pdf";
// Если файл по заданному пути существует, то
if (File.Exists(path))
{
axAcroPDF1.src = path; // загрузить файл в pdf-ридер
// ввести в заголовок формы номер выбранной темы:
this.Text = "Тема " + themeNumber;
}
else // иначе
// вывести на экран сообщение о том, что файл не найден:
MessageBox.Show("Файл " + themeNumber + ".pdf не найден!");
}
Дополнительный учебный материал представлен каталогом электронных книг по основам объектно-ориентированного программирования. Книги в формате pdf расположены в директории по пути \bin\Debug\books. Как показано в листинге 4, обработчик кнопки для открытия каталога запускает ресурс системного процесса и связывает его с новым компонентом Process.
Листинг 4. Обработка кнопки «Дополнительные материалы»
private void addStuffButton_Click(object sender, EventArgs e)
{
Process.Start(Application.StartupPath + @"\books");
}
Структура приложения позволяет перейти к тестовому модулю из любого другого модуля программы. Вопросы и ответы для итогового теста загружаются из текстовых файлов «questions.txt» и «answers.txt», расположенных в директории по пути \bin\Debug. В листинге 5 приводятся все глобальные переменные этого модуля, необходимые для организации тестирования.
Листинг 5. Глобальные переменные класса TestForm
// путь к файлу с вопросами для теста:
string path = Application.StartupPath + @"/questions.txt",
// путь к файлу с номерами правильных ответов:
path2 = Application.StartupPath + @"/answers.txt",
// текст, считываемый из файла:
text = "";
// список строковых массивов, каждый из которых
// содержит вопрос, варианты ответа и правильный ответ:
List<string[]> test = new List<string[]>();
// список строк - выбранных ответов:
List<string> checkedAnswers = new List<string>();
int j = 0, // номер текущего вопроса
checkedAnswer = 1, // номер выбранного ответа
score = 0; // количество правильных ответов
Конструктор формы тестового модуля создает объект формы с компонентами, получает данные для теста из файла и загружает их на форму. Для этих целей предназначены функции FillTestInformation() (листинг 6) и FillTestForm() (листинг 7).
Листинг 6. Заполнение тестовой информации
private void FillTestInformation()
{
// считывание текста вопросов из файла:
text = File.ReadAllText(path);
// разбиение текста в массив строк, исключая пустые строки:
string[] ls = text.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
// считывание правильных ответов и разбиение в массив строк:
string[] rightAnswers = File.ReadAllText(path2).Split(new char[] { '[', ']', ',' }, StringSplitOptions.RemoveEmptyEntries);
// номер ячейки в массиве rightAnswers,
// содержащей правильный ответ на соответствующий вопрос:
int k = 1;
// Цикл по количеству считанных строк.
// Каждая пятая строка соответствует новому вопросу.
for (int i = 0; i < ls.Length; i += 5)
{
// получение строки вопроса:
string q = ls[i].Split(')')[1];
// получение строки с первым вариантом ответа:
string var1 = ls[i + 1].Split(')')[1];
// получение строки cо вторым вариантом ответа:
string var2 = ls[i + 2].Split(')')[1];
// получение строки с третьим вариантом ответа:
string var3 = ls[i + 3].Split(')')[1];
// получение строки с четвертым вариантом ответа:
string var4 = ls[i + 4].Split(')')[1];
// добавление массива строк в список:
test.Add(new string[6] { q, var1, var2, var3, var4, rightAnswers[k] });
k++; // переход к следующему правильному ответу
}
}
Листинг 7. Заполнение компонентов теста на форме
private void FillTestForm()
{
questionTextBox.Text = test.ElementAt(j)[0];
radioButton1.Text = test.ElementAt(j)[1];
radioButton2.Text = test.ElementAt(j)[2];
radioButton3.Text = test.ElementAt(j)[3];
radioButton4.Text = test.ElementAt(j)[4];
}
Обработка подтверждения ответа в тесте представлена в листинге 8.
Листинг 8. Обработка кнопки «Подтвердить»
private void acceptButton_Click_1(object sender, EventArgs e)
{
// получение правильного ответа для текущего вопроса:
int rightAnswer = int.Parse(test.ElementAt(j)[5]);
// добавление текста выбранного ответа в список:
checkedAnswers.Add(test.ElementAt(j)[checkedAnswer]);
// Если правильный ответ = выбранному, то
if (rightAnswer == checkedAnswer)
score++; // увеличить количество правильных ответов
// Если текущий вопрос не последний, то
if (j < test.Count - 1)
{
j++; // перейти к следующему вопросу
// и поменять заголовок формы
this.Text = "Вопрос " + (j + 1);
FillTestForm(); // ввести данные на форму
}
else // иначе
{
// строка с результатом:
string result = "Результат: " + score.ToString() + " правильных ответов из " + test.Count.ToString();
// процент правильных ответов:
double percentage = (double) score / test.Count * 100;
// если процент правильных ответов не превышает 40, // то оценка за тест = 2. Кнопка вывода результатов // по-прежнему неактивна.
if (percentage <= 40)
MessageBox.Show(result + "\n Ваша оценка: 2 (неудовлетворительно)");
else // иначе
// вывести оценку в зависимости от набранных баллов
// и сделать активной кнопку вывода результатов
{
if (percentage > 85)
MessageBox.Show(result + "\n Ваша оценка: 5 (отлично)");
if (percentage > 60 && percentage <= 85)
MessageBox.Show(result + "\n Ваша оценка: 4 (хорошо)");
if (percentage > 40 && percentage <= 60)
MessageBox.Show(result + "\n Ваша оценка: 3 (удовлетворительно)");
resultsButton.Enabled = true;
}
// сделать активной кнопку печати теста:
printTest.Enabled = true;
}
}
После прохождения теста его вопросы можно распечатать. В случае успешной сдачи теста (при получении любой оценки, кроме неудовлетворительной) также могут быть распечатаны результаты. Обработка печати приводится листинге 9.
Листинг 9. Обработка создания документа для печати теста или его результатов
private void printDocument2_PrintPage(object sender, PrintPageEventArgs e)
{
int charactersOnPage = 0; // число символов на странице
int linesPerPage = 0; // число строк на странице
//Установить значение числа символов charactersOnPage и //числа строк linesPerPage, которое будет соответствовать //границам страницы:
e.Graphics.MeasureString(text,this.Font, e.MarginBounds.Size, StringFormat.GenericTypographic, out charactersOnPage, out linesPerPage);
// Нарисовать строку в пределах границы страницы:
e.Graphics.DrawString(text,this.Font,Brushes.Black, e.MarginBounds, StringFormat.GenericTypographic);
// Удалить часть строки, которая была напечатана:
text = text.Substring(charactersOnPage);
// Проверить, нужно ли еще печатать страницы:
e.HasMorePages = (text.Length > 0);
}
Обучающая программа содержит четыре формы. На главной (титульной) форме приложения расположены кнопки для перехода к лекциям и семинарам, дополнительным материалам курса и итоговому тесту, а также заставка в виде gif-анимации. Вид формы приводится на рисунке 2.
Рисунок 2 – Вид главной формы приложения
Теоретическая форма приложения позволяет просматривать pdf-файлы соответствующих учебных тем (лекций и семинаров), которые загружаются на форму автоматически из директории по пути \bin\Debug\theory. Здесь находятся кнопки для просмотра соседних тем из каталога, кнопки перехода к дополнительным материалам и итоговому тесту, а также кнопка возврата к главной форме программы. Вид формы после перехода к просмотру лекции 1 приведен на рисунке 3.
Рисунок 3 – Вид формы для просмотра учебных материалов
Вопросы и ответы итогового теста загружаются на тестовую форму из текстовых файлов «questions.txt» и «answers.txt», расположенных в директории по пути \bin\Debug. Вопросы теста имеют одиночный тип выбора ответов – варианты представлены радиокнопками, а непосредственный выбор осуществляется по нажатию на кнопку «Подтвердить». Кроме того, теоретическая форма содержит кнопку возврата к главной форме программы, а также кнопки для печати вопросов и просмотра результатов, которые неактивны во время прохождения теста. Вид формы после ответа на последний тестовый вопрос приведен на рисунке 4.
Рисунок 4 – Вид тестовой формы после ответа на последний вопрос теста
По окончании прохождения теста его вопросы можно распечатать. В случае оценки 3 и выше доступен переход к форме с результатами (рисунок 5).
Рисунок 5 – Вид тестовой формы после успешного прохождения теста
Форма для просмотра результатов теста содержит кнопки возврата к главной форме приложения и к тестовой форме, а также кнопку для печати результатов тестирования. Вид формы приведен на рисунке 6.
Рисунок 6 – Вид формы для просмотра результатов тестирования
ЗАКЛЮЧЕНИЕ
В рамках курсовой работы на языке программирования высокого уровня C# было разработано приложение для обучения основам объектно-ориентированного программирования. Созданная программа имеет понятный графический интерфейс, выводит все необходимые пояснения и подсказки, является законченной и удобной для использования.
В ходе работы были выполнены все поставленные задачи:
- получено представление о классификации основных языков программирования;
- рассмотрены основные этапы развития языков программирования и выделены их ключевые стандарты;
- выполнена реализация приложения с использованием одного из современных стандартизированных языков;
Таким образом, цель курсовой работы достигнута в полном объеме.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
-
-
-
- Ключарев А.А., Матьяш В.А., Щекин С.В. Структуры и алгоритмы обработки данных: Учебное пособие / СПбГУАП. СПб., 2004.
- Колдаев В.Д. Основы алгоритмизации и программирования: Учебное пособие / Колдаев В.Д; Под ред. проф.Л.Г. Гагариной - М.: ИД ФОРУМ, НИЦ ИНФРА-М, 2016. - 416 с.
- Страуструп, Б. Язык программирования C++ [Текст] = The C++ Programming Language : специальное издание / Б. Страуструп ; пер.: С. Анисимов, М. Кононов ; ред.: Ф. Андреев, А. Ушаков. - [Б. м.] : Бином-Пресс, 2008. - 1098 с.
- Кнут, Д. Искусство программирования [Текст] = The art of computer programming: [в 3 т.]. Т. 1. Основные алгоритмы / Д. Кнут ; ред. Ю. В. Козаченко. - 3-е изд. - М. : Вильямс, 2014. - 720 с.
- Демидович, Е.М. Основы алгоритмизации и программирования. Язык СИ [Текст] : учебное пособие / Е. М. Демидович. - 2-е изд., испр. и доп. - СПб. : БХВ - Петербург, 2008. - 440 с.
- Вирт, Н Алгоритмы и структуры данных. Новая версия для Оберона + CD [Текст] / Н. Вирт ; пер. Д. Б. Подшивалов. - 2-е изд., испр. - М. : ДМК Пресс, 2012. - 272 с.
- Prosise, J. – Programming Microsoft .NET [Текст] = Microsoft Press. 2002, p. 816.
-
-
Приложение 1. Исходный код модуля MainForm.cs
using System;
using System.Diagnostics;
using System.Windows.Forms;
namespace TeachingApp
{
// Главная форма (меню выбора)
public partial class MainForm : Form
{
/*
* Конструктор формы - создает объект формы с находящимися на нем компонентами
*/
public MainForm()
{
InitializeComponent();
}
/*
* Обработчик кнопок выбора лекции или семинара
*/
private void buttons_Click(object sender, EventArgs e)
{
int theme = int.Parse((sender as Button).Tag.ToString()); // получаем номер лекции / семинара по тегу нажатой кнопки
TheoryForm tf = new TheoryForm(theme); // создаем новую форму для просмотра лекции / семинара
tf.Show(); // показываем ее
this.Dispose(false); // уничтожаем текущую форму
}
/*
* Обработчик закрытия формы - выполняет выход из приложения
*/
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
Application.Exit();
}
/*
* Обработчик кнопки "Дополнительные материалы" - открывает папку books при помощи системного процесса
*/
private void addStuffButton_Click(object sender, EventArgs e)
{
Process.Start(Application.StartupPath + @"\books");
}
/*
* Обработчик кнопки "Итоговый тест"
*/
private void testButton_Click(object sender, EventArgs e)
{
TestForm test = new TestForm(); // создаем новую форму для прохождения теста
test.Show(); // показываем ее
this.Dispose(false); // уничтожаем текущую форму
}
}
}
Приложение 2. Исходный код модуля TheoryForm.cs