Первым языком
программирования, в котором были предложены принципы объектной
ориентированности, была Симула. В момент своего появления (в 1967 году), этот
язык программирования предложил поистине революционные идеи: объекты, классы,
виртуальные методы и др., однако это всё не было воспринято современниками как
нечто грандиозное. Тем не менее, большинство концепций были развиты Аланом
Кэйем и Дэном Ингаллсом в языке Smalltalk. Именно он стал первым широко
распространённым объектно-ориентированным языком программирования.
В настоящее время
количество прикладных языков программирования (список языков), реализующих
объектно-ориентированную парадигму, является наибольшим по отношению к другим
парадигмам. В области системного программирования до сих пор применяется
парадигма процедурного программирования, и общепринятым языком программирования
является язык C. Хотя при взаимодействии системного и прикладного уровней
операционных систем заметное влияние стали оказывать языки объектно-ориентированного
программирования. Например, одной из наиболее распространенных библиотек
мультиплатформенного программирования является объектно-ориентированная
библиотека Qt, написанная на языке C++.
1. Задание на курсовую
работу
Метою курсово
роботи є поглиблення та закріплення знань, одержаних при вивченні дисципліни "Об’єктно-орієнтоване програмування",
та набуття практичних навичок у проектуванні та налагодженні програм, що
застосовують класи та об’єкти.
Студент ма
розробити навчаючу програму.
Навчаюча програма
повинна виконувати наступні функції:
-
реєстрацію
студента;
-
представлення
матеріалу до навчання;
-
забезпечення
контролю знань;
-
введення
та корегування навчального матеріалу;
-
отримання
нформації щодо успіхів студента.
- Навчальна
програма повинна складатися з наступних класів.
1.Клас представлення навчального
матеріалу.
Клас обов’язково
реалізує наступні функції.Читання навчального матеріалу з файла.Надання
студенту порції навчального матеріалу.Перехід до наступної порц
матеріалу.Клас додатково може реалізувати наступні функції відповідно
до конкретного завдання до курсової роботи.
1.1.Жорстка, заздалегідь встановлена
схема подання матеріалу
2.Клас контролю знань студента.
Клас обов’язково реалізує наступні функції.
Читання завдання до контролю з файлу. Читання еталонних відповідей з файлу.
Надання студенту завдань до контролю знань. Оцінювання кожної відповіді. Клас
додатково може реалізувати наступні функції відповідно до конкретного завдання
до курсової роботи.
2.2. Завдання
типу "вставити необхідне".
3.Клас реєстрації студента та видач
підсумкового документу.
Клас обов’язково реалізує наступні функції.
Приймає дані щодо студента. Видає підсумковий документ. Клас додатково може
реалізувати наступні функції відповідно до конкретного завдання до курсово
роботи.
3.5.
Підсумковий документ містить усі оцінки по порціям.
Клас введення
учбового матеріалу, контрольних завдань, еталонів відповідей та іншо
нформації.
Клас обов’язково реалізує наступні функції.
Введення учбового матеріалу у форматі, що задано іншими пунктами завдання.
Введення контрольних завдань у форматі, що задано іншими пунктами завдання.
Введення еталонів
відповідей у форматі, що задано іншими пунктами завдання. Клас додатково може реалізувати
наступні функції відповідно до конкретного завдання до курсової роботи.
4.2.Клас може приймати дані з іншого
носія, що не входить до системи.
5.Клас контролю за ходом навчального
процесу викладачем.
Клас обов’язково реалізує наступні функції.
Перегляд результатів навчання для кожного студента. Клас додатково може
реалізувати наступні функції відповідно до конкретного завдання до курсово
роботи.
5.1.Отримання даних щодо загального часу
навчання конкретного студента.
Система обучения
реализует разделение пользователей на студентов и преподавателей,
предоставление студенту учебного материала, контрольных вопросов, оценивание
ответов на вопросы, изменение преподавателем учебного материала, контрольных
вопросов и ответов на них, просмотр преподавателем результатов обучения для
каждого студента.
Ниже представлена
диаграмма вариантов использования для обучающей системы:
Рис. 1
Пользователь категории "преподаватель"
может смотреть результаты обучения студентов, править учебный материал, править
контрольные вопросы, править ответы на вопросы.
Пользователь категории "студент"
может получать(читать) учебный материал, проходить контроль полученных знаний,
смотреть итоги(результаты) своего обучения.
Система обучения
выполняет авторизацию, регистрацию, разделение пользователей на категории,
оценивание ответов на вопросы, выдачу результатов.
Работа с системой
начинается прохождением авторизации либо регистрации. После запуска системы, на
экране появляется окно авторизации:
Рис.2
Если пользователь уже
зарегистрирован в системе, то он вводит свой логин и пароль, и если введен
верный логин и пароль, то по нажатию на кнопку "Вход", пользователь
продолжает работу в системе, в зависимости от своей категории(студент или
преподаватель).Если пользователь вводит несуществующий логин и пароль, либо
хочет зайти посторонний человек, который не зарегистрирован в системе, то
продолжение работы блокируется и выводится соответствующее сообщение об ошибке:
Рис.3
Если пользователь желает
зарегистрироваться в системе обучения, то по нажатию на кнопку "Регистрация",
попадает в окно регистрации:
Рис.4
Здесь пользователь
проходит регистрацию. Для начала необходимо выбрать категорию для регистрации,
по умолчанию выбран студент. Если пользователь регистрируется как студент то нижнее
поле "Ключ" для него не доступно.
Студент заполняет все
поля , и если они заполнены и в поле "Пароль" и "Еще раз"
введены одинаковые данные, то по нажатию на кнопку "Регистрация",
студент регистрируется в системе и продолжает работу с ней дальше.
Если какие то из полей не
заполнены, либо заполнены неверно(несовпадение паролей, использование служебных
символов) или повторная регистрация с уже существующим ФИО в системе, то
регистрация не происходит и выдается соответствующее сообщение:
Рис.5
Если пользователь хочет
зарегистрироваться как преподаватель, то он ставит переключатель в
соответствующую позицию:
Рис. 6
Становится активным поле "Ключ"
а поле "Группа" становится неактивным.
Преподаватель аналогично
заполняет все поля, а в поле ключ вводит специальный ключ известный только
преподавателям. Если все поля регистрации заполнены верно, то по нажатию на
кнопку "Регистрация" пользователь регистрируется как преподаватель.
Когда пользователь
заходит, как студент, то попадает в главное окно обучающей системы, в котором
он изучает учебный материал.
В моей обучающей системе
предусмотрено 10 порций учебного материала.
Так как мне необходимо
реализовать жесткую схему представления материала, то сначала студенту доступен
только первый урок.
Когда студент нажимает на
кнопку "Урок 1", то в текстовое поле записывается первая порция
материала и становится активной кнопка "Урок 2".По нажатиям на эти
кнопки, из файлов читается учебный материал и предоставляется студенту. После
прочтения первого урока и до начал работы со вторым уроком пользователя система
переводит в окно контроля и там он проходит контроль по прочитанному уроку.
Так же как только,
студент заходит в систему обучения, включается счетчик времени, по нажатию на
кнопку "Выход" программа закрывается и время пребывания студента в
системе сохраняется и записывается в файл.
Рис. 6
Если студент уже прошел
весь курс обучения, прошел контроль, и опять заходит в систему, то ему уже
доступны все уроки, и кнопка "Результаты" для него не отображается.
Рис 7
По нажатию на кнопки "Ответить",
появляется диалоговое окно, в которое студент вводи свой ответ, выполняется
проверка на правильность ответа и выдается соответствующее сообщение. Если
пользователь ввел пустую строку , то так же выдается соответствующее сообщение.
После ответа на вопрос, то кнопка ответа на этот вопрос становится неактивной.
Рис. 8
После того, как
пользователь ответил на все вопросы становится активной кнопка "Результат",
по нажатию на которую студент может просмотреть результаты своего обучения:
Рис. 9
В окне результаты
обучения, студент видит свой результат прохождения контрольного опроса. По
нажатию на кнопку "К лекциям" студент попадает в основное окно
системы, и там ему доступны все 15 уроков, и отсутствует кнопка "Контроль".
По нажатию на кнопку "Выход" программа закрывается.
Когда пользователь
заходит в систему как преподаватель, то ему открывается окно "Меню
преподавателя", в котором он может выбрать, что он хочет сделать.
Преподаватель может править лекции, править вопросы и ответы, просматривать результаты
обучения студентов.
Рис. 10
По нажатию на кнопку "Править
лекции" преподаватель попадает в окно в котором он может изменять учебный
материал. Преподаватель выбирает нужный урок, вносит изменения и нажимает на
кнопку "Сохранить" и изменения сохраняются.
Рис .11
По нажатию на кнопку "Править
вопросы" преподаватель попадает в окно в котором он может изменять вопросы
и ответы. Преподаватель изменяет вопросы или ответы и сохраняет изменения по
нажатию на соответствующую кнопку.
Рис. 13
По нажатию на кнопку "Рез-ты
обучения" преподаватель попадает в окно в котом он может смотреть
результату обучения для всех студентов, которые прошли контроль. Каждый студент
прошедший контроль, попадает в список доступных для просмотра преподавателем
студентов, преподаватель выбирает студента, результаты которого он хочет
просмотреть и нажимает на кнопку "Показать"
Класс Enter реализует авторизацию и регистрацию
пользователя в системе. Метод public boolean
Registration(String info,String name) создает файл
с регистрационными данными пользователя. Если регистрируется преподаватель то в
папку для преподавателей если студент – то для студента.
Метод public boolean Authorisation(String path , String toCompare)
реализует авторизацию пользователя( то есть проверяют есть ли такой пользователь
и правильный ли он ввёл пароль).
public class
Enter
{
public
Enter(){}
public boolean
Registration(String info,String name){
File f1;
f1=new
File(name);
if(!f1.exists()){
try {
f1.createNewFile();
PrintWriter
writer = null;
writer = new
PrintWriter(
new
OutputStreamWriter(
new
FileOutputStream(name)));
writer.write(info);
writer.close();
return true;
}
catch
(Exception ex) { return true;}
}
else {
return false;}
}
public boolean
Authorisation(String path,String toCompare){
File F = new
File(path);
String
ArrOfFile[] = F.list();
boolean b;
for ( int k=
0;k<ArrOfFile.length;k++){
try {
Scanner in =
new Scanner(new File(path+"\\"+ArrOfFile[k]));
Класс реализует 3
проверки: проверку на использование в полях для регистрации и авторизации "служебных
символов"(тех символов которые я использую в качестве разделителей в
файлах), проверку на то что такой пользователь уже существует и проверку на то
что пользователь прошел контроль и получил результаты. Метод public boolean Chek_on_Symbol(String s1, String s2, String s3) выполняет проверку на использование в полях для
регистрации и авторизации служебных символов.
Метод public boolean Check_on_Reg(String name, String path) реализует
проверку на то, что в папке, где хранятся зарегистрированные пользователи уже
существует такой пользователь.
Метод public boolean Check_on_Rez(String fullpath) реализует проверку на то, что
пользователь прошел контроль и его итоговый результат записан в файл, в
следствии чего он становится видимым для преподавателя когда преподаватель
хочет просмотреть результаты обучения
public class
Check
{
public
Check(){}
public boolean
Chek_on_Symbol(String s1, String s2, String s3)
Класс реализует следующие
методы: чтение лекционного материала из файла и запись его в текстовое поле,
чтение вопросов/ответов из файла и запись их в текстовое поле, и просто чтение
текста из файла.
Метод public
String SetLek(String s,JTextArea t) читает
лекционный материал из файла и записывает в текстовое поле.
Метод public
String ShowAQ(String s,JTextField t) читает вопросы или ответы(взависимости от
того, что требуется), и записывает в текстовое поле.
Метод public
String GetTextFromFile(String s) читает текст из файла.
Класс реализует
оценивание ответа на вопрос. Если в диалоговое окно предназначенное для ответа введена пустая строка
то выдается соответствующее предупреждение. Если ответ совпал с эталонном или
не совпал с эталонном ответа то соответственно увеличивается или не
увеличивается счетчик ответов верных, но в том и другом случае, кнопка
предназначенная для ответа на этот вопрос становится нерабочей, что бы
пользователь не мог ответить на него второй раз. Так же, если студент ответил
на 15 вопросов, делается рабочей кнопка "Результат".
Класс, реализует подсчет
времени, в течение которого студент находился в системе обучения. Метод этого
класса создает счетчик времени и увеличивает его на единицу после каждой минуты
пребывания в системе, и останавливает таймер и записывает в файл время студента
которое он провел в системе. В случае повторного захода студента в систему
берется значение времени из файла этого студента и к нему уже прибавляется
новое время пребывания.
public class
TimeInSystem
{
public static
Integer c;
public static Integer
i =0;
public static
java.util.Timer timer = new java.util.Timer();
Релизует демонстрацию
студенту его конечного результата обучения, тесть его оценок. Методы класса
записывают в текстовые поля окна, в котором будут отображться результаты
обучения, ФИО студента, группу, количесвто верных ответов, баллы, и текстовый
эквивалент.
public class
ShowResult
{
public
ShowResult(){}
public void
SetFIO_and_Group(String path,String toCompare ,JTextField FIO, JTextField
Group)
{
File F = new
File(path);
String
ArrOfFile[] = F.list();
boolean b;
for ( int k=
0;k<ArrOfFile.length;k++)
{
try {
Scanner in = new
Scanner(new File(path+"\\"+ArrOfFile[k]));
Класс реализует
демонстрацию результатов обучения студентов преподавателю.
Метод public void
CreateResultFile(String path) создает файл с результатами обчунеия при
регистрации студента.
Метод public void
SetResultInFile(String path, String info) записывает результаты обучения в файл
для результатов этого студента.
Метод public void SetInList(String
path, JComboBox j)записывает ФИО студента в список доступних для просмотра
преподавателем студентов(если он прошел контроль и получил конечный документ).
Метод public void
ShowResultForEach(String path,JTextField t1,JTextField t2,JTextField t3,JTextField
t4,JTextField t5,JTextField t6,JComboBox j) записывает в текстовые поля
информацию про студента котрого выбрал преподаваетль из списка.
Метод public void
ShowTime(String path , JTextField T, JComboBox j) записывает в текстовое поле
информацию про время обучения выбранного из списка студента.
public class
ShowResultForTeacher
{
public
ShowResultForTeacher(){}
public void
CreateResultFile(String path)
{
File f1;
f1=new
File(path);
if(!f1.exists())
{
try
{
f1.createNewFile();
}
catch (Exception
ex) { }
}
else {
}
}
public void
SetInList(String path, JComboBox j)
{
File F = new
File(path);
String
ArrOfFile[] = F.list();
for ( int k=
0;k<ArrOfFile.length;k++)
{
try {
Scanner in = new
Scanner(new File(path + "\\" + ArrOfFile[k]));
В системе предусмотрено 6
каталогов для хранения файлов. Папка Lection содержит 10 текстовых файлов, в которых хранится 10 порций
учебного материала. Папка Question содержит 10 текстовых файлов, в которых
хранятся контрольные вопросы. Папка Answer содержит 10 текстовых файлов, в которых хранятся ответы на контрольные
вопросы.
Папка User_Stud содержит
текстовые файлы, в которых хранится информация про зарегистрированных
студентах. Когда студент регистрируется в системе, то в этой папке создается
файл, в котором хранится информация про этого пользователя.
Рис. 15
Сначала идет ФИО, затем
группа, логин, пароль, и время пребывания студента в системе. Данные отделены
служебными символами. Папка User_Prep содержит текстовые файлы, в которых
хранится информация про зарегистрированных преподавателях. Когда преподаватель
регистрируется в системе, то в этой папке создается файл, в котором хранится
информация про этого пользователя. Папка Rez содержит текстовые файлы, в которых хранятся
результаты обучения студентов. Когда студент регистрируется, то создается в
этой папке файл пустой, когда студент проходит контроль, то в него записываются
результаты обучения.
Если студент уже
зарегистрирован в системе, то он вводит свой логин и пароль, и если он верный
то попадает в окно, где ему предоставляется учебный материал. Если студент не
зарегистрирован в системе, то он нажимает на кнопку "Регистрация" и
попадает в окно регистрации пользователя. Там студент ставит переключатель в
позицию "Студент", заполняет поля регистрации, если поля заполнены
верно(т.е заполнены все поля, пароль указан одинаково два раза, и не
использованы служебные символы(~,#,%,&)), то по нажатию на кнопку "Регистрация"
студент регистрируется и входит в систему. В следующем окне студенту доступны
для изучения 10 занятий. Контроль проводится после каждого пройденного урока.
Щелкая на кнопку "Ответ", возле соответствующего вопроса, студент в
появившимся окне вводит свой ответ. После того как студент ответил на все
вопросы, становится доступной кнопка "Результат", по нажатию на
которую студент предоставляются результаты его обучения. Ознакомившись с
результатами, студент может перейти обратно к лекциям, однако кнопки "Контроль"
уже нет. Так же студент может выйти из системы обучения, нажав на кнопку "Выход".
5.2 Инструкция для
пользователя "преподаватель"
Если преподаватель уже
зарегистрирован в системе, то он вводит свой логин и пароль, и если он верный
то попадает в окно, где ему предоставляется меню преподавателя. Если
преподаватель не зарегистрирован в системе, то он нажимает на кнопку "Регистрация"
и попадает в окно регистрации пользователя. Там студент ставит переключатель в
позицию "Преподаватель", заполняет поля регистрации, если поля
заполнены верно(т.е заполнены все поля, пароль указан одинаково два раза, верно
указан ключ, который известен только преподавателям и не использованы служебные
символы(~,#,%,&)), то по нажатию на кнопку "Регистрация"
преподаватель регистрируется и входит в систему. Далее преподаватель попадает в
"Меню преподавателя". В этом окне преподаватель может выбрать то, что
он желает сделать: править лекции, править вопросы и ответы, просмотреть
результаты обучения. По нажатию на кнопку "Править лекции"
преподаватель попадает в окно в котором он может добавить или изменить материал
в лекциях. Для этого необходимо выбрать урок, который необходимо исправить,
ввести информацию и нажать на кнопку "Сохранить". По нажатию на
кнопку "Править вопросы", преподаватель попадает в окно, в котором
можно править вопросы и ответы. Для этого в необходимом вопросе или ответе нужно
изменить текст и нажать на кнопку "Сохранить". По нажатию на кнопку "Смотреть
рез-ты обучения" преподаватель попадает в окно, в котором он может
просмотреть результаты обучения студентов .Для этого необходимо выбрать из
списка интересующего студента, и нажать на кнопку "Показать", после
чего в текстовые поля запишется информация про этого студента
Для того, что бы
проверить правильность работы системы с пользователем "студент", я
зарегистрирую двух студентов и для каждого пройду все стадии обучения, и сравню
полученные результаты с ожидаемыми. Для начала я зарегистрирую в системе двух
студентов, после чего в папке User_Stud должны появиться файлы с данными
регистрации для каждого из зарегистрированного студента и в папке Rez должны появиться два пустых файла
для записи в них результатов обучения конкретного студента.Пройдя все этапы
работы с системой я убедился что система с пользователем "студент"
работает правильно.
Для того, что бы
проверить правильность работы системы с пользователем "преподаватель",
я зарегистрирую одного преподавателя и проверю правильность работы системы. При
регистрации преподавателя, в папке User_Prep должен появиться файл с его данными
регистрации:
Рис. 21
Далее проверим
возможность преподавателя править лекции. Для этого в первой лекции добавим,
какую либо надпись, сохраним, и проверим, изменилась ли лекция. Для этого,
после изменений лекции я зайду как студент и прочитаю изменённую лекцию.
Рис. 21
Далее проверим
возможность преподавателя править вопросы и ответы. Для этого в первом вопросе
и ответе добавим, какую либо надпись, сохраним, и проверим, изменилась ли
лекция. Для этого, после изменений лекции я зайду в папку с вопросами и в папку
с ответами, и просмотрю изменённые файлы.
Рис. 22
Наконец проверим
возможность преподавателя смотреть результаты обучения всех студентов:
Рис. 23
Заключение
В ходе выполнения
курсовой работы по дисциплине "Объектно-ориентированное программирование",
я разработал и протестировал систему обучения, отвечающую требованиям моего
варианта, тем самым углубил и закрепил свои знания, полученные мною в
результате курса обучения по дисциплине "Объектно-ориентированное
программирование" и получил практические навыки с разработке программ с
графическим интерфейсом пользователя. Так же я убедился, что
объектно-ориентированная методология создания программных продуктов
представляет собой очень мощное и гибкое средство для разработки программного
обеспечения.