Компьютерные науки : Курсовая работа: Программа "Система обучения"
Курсовая работа: Программа "Система обучения"
Содержание
Введение
1. Задание на курсовую работу
2. Описание работы системы
2.1 Общие положения.
2.2 Начало работы с системой
2.3 Работа со студентом
2.4 Работа с преподавателем
3. Описание и коды классов системы
3.1 Класс Enter
3.2 Класс Check
3.3 Класс ShowFile
3.4 Класс WorkWithQuestion
3.5 Класс TimeInSystem
3.6 Класс ShowResult
3.7 Класс Modification
3.8 Класс ShowResultForTeacher
4. Структура файлов
5. Инструкция пользователя
5.1 Инструкция для пользователя "студент"
5.2 Инструкция для пользователя "преподаватель"
6. Тестирование работы системы
6.1 Тестирование работы для пользователя "студент"
6.2 Тестирование работы для пользователя "преподаватель"
Заключение
Список литературы
Введение
Объектное
и объектно-ориентированное программирование (ООП) возникло в результате
развития идеологии процедурного программирования, где данные и подпрограммы
(процедуры, функции) их обработки формально не связаны. Кроме того, в
современном объектно-ориентированном программировании часто большое значение
имеют понятия события (так называемое событийно-ориентированное
программирование) и компонента (компонентное программирование).
Первым языком
программирования, в котором были предложены принципы объектной
ориентированности, была Симула. В момент своего появления (в 1967 году), этот
язык программирования предложил поистине революционные идеи: объекты, классы,
виртуальные методы и др., однако это всё не было воспринято современниками как
нечто грандиозное. Тем не менее, большинство концепций были развиты Аланом
Кэйем и Дэном Ингаллсом в языке Smalltalk. Именно он стал первым широко
распространённым объектно-ориентированным языком программирования.
В настоящее время
количество прикладных языков программирования (список языков), реализующих
объектно-ориентированную парадигму, является наибольшим по отношению к другим
парадигмам. В области системного программирования до сих пор применяется
парадигма процедурного программирования, и общепринятым языком программирования
является язык C. Хотя при взаимодействии системного и прикладного уровней
операционных систем заметное влияние стали оказывать языки объектно-ориентированного
программирования. Например, одной из наиболее распространенных библиотек
мультиплатформенного программирования является объектно-ориентированная
библиотека Qt, написанная на языке C++.
1. Задание на курсовую
работу
Метою курсово
роботи є поглиблення та закріплення знань, одержаних при вивченні дисципліни "Об’єктно-орієнтоване програмування",
та набуття практичних навичок у проектуванні та налагодженні програм, що
застосовують класи та об’єкти.
Студент ма
розробити навчаючу програму.
Навчаюча програма
повинна виконувати наступні функції:
-
реєстрацію
студента;
-
представлення
матеріалу до навчання;
-
забезпечення
контролю знань;
-
введення
та корегування навчального матеріалу;
-
отримання
нформації щодо успіхів студента.
- Навчальна
програма повинна складатися з наступних класів.
1.
Клас представлення навчального
матеріалу.
Клас обов’язково
реалізує наступні функції. Читання навчального матеріалу з файла. Надання
студенту порції навчального матеріалу. Перехід до наступної порц
матеріалу. Клас додатково може реалізувати наступні функції відповідно
до конкретного завдання до курсової роботи.
1.1. Жорстка, заздалегідь встановлена
схема подання матеріалу
2. Клас контролю знань студента.
Клас обов’язково реалізує наступні функції.
Читання завдання до контролю з файлу. Читання еталонних відповідей з файлу.
Надання студенту завдань до контролю знань. Оцінювання кожної відповіді. Клас
додатково може реалізувати наступні функції відповідно до конкретного завдання
до курсової роботи.
2.2. Завдання
типу "вставити необхідне".
3. Клас реєстрації студента та видач
підсумкового документу.
Клас обов’язково реалізує наступні функції.
Приймає дані щодо студента. Видає підсумковий документ. Клас додатково може
реалізувати наступні функції відповідно до конкретного завдання до курсово
роботи.
3.5.
Підсумковий документ містить усі оцінки по порціям.
Клас введення
учбового матеріалу, контрольних завдань, еталонів відповідей та іншо
нформації.
Клас обов’язково реалізує наступні функції.
Введення учбового матеріалу у форматі, що задано іншими пунктами завдання.
Введення контрольних завдань у форматі, що задано іншими пунктами завдання.
Введення еталонів
відповідей у форматі, що задано іншими пунктами завдання. Клас додатково може реалізувати
наступні функції відповідно до конкретного завдання до курсової роботи.
4.2. Клас може приймати дані з іншого
носія, що не входить до системи.
5. Клас контролю за ходом навчального
процесу викладачем.
Клас обов’язково реалізує наступні функції.
Перегляд результатів навчання для кожного студента. Клас додатково може
реалізувати наступні функції відповідно до конкретного завдання до курсово
роботи.
5.1. Отримання даних щодо загального часу
навчання конкретного студента.
Система обучения написана
на языке Java.
2. Описание работы системы
2.1 Общие положения
Система обучения
реализует разделение пользователей на студентов и преподавателей,
предоставление студенту учебного материала, контрольных вопросов, оценивание
ответов на вопросы, изменение преподавателем учебного материала, контрольных
вопросов и ответов на них, просмотр преподавателем результатов обучения для
каждого студента.
Ниже представлена
диаграмма вариантов использования для обучающей системы:

Рис. 1
Пользователь категории "преподаватель"
может смотреть результаты обучения студентов, править учебный материал, править
контрольные вопросы, править ответы на вопросы.
Пользователь категории "студент"
может получать(читать) учебный материал, проходить контроль полученных знаний,
смотреть итоги(результаты) своего обучения.
Система обучения
выполняет авторизацию, регистрацию, разделение пользователей на категории,
оценивание ответов на вопросы, выдачу результатов.
2.2 Начало работы с системой
Работа с системой
начинается прохождением авторизации либо регистрации. После запуска системы, на
экране появляется окно авторизации:

Рис.2
Если пользователь уже
зарегистрирован в системе, то он вводит свой логин и пароль, и если введен
верный логин и пароль, то по нажатию на кнопку "Вход", пользователь
продолжает работу в системе, в зависимости от своей категории(студент или
преподаватель).Если пользователь вводит несуществующий логин и пароль, либо
хочет зайти посторонний человек, который не зарегистрирован в системе, то
продолжение работы блокируется и выводится соответствующее сообщение об ошибке:

Рис.3
Если пользователь желает
зарегистрироваться в системе обучения, то по нажатию на кнопку "Регистрация",
попадает в окно регистрации:

Рис.4
Здесь пользователь
проходит регистрацию. Для начала необходимо выбрать категорию для регистрации,
по умолчанию выбран студент. Если пользователь регистрируется как студент то нижнее
поле "Ключ" для него не доступно.
Студент заполняет все
поля , и если они заполнены и в поле "Пароль" и "Еще раз"
введены одинаковые данные, то по нажатию на кнопку "Регистрация",
студент регистрируется в системе и продолжает работу с ней дальше.
Если какие то из полей не
заполнены, либо заполнены неверно(несовпадение паролей, использование служебных
символов) или повторная регистрация с уже существующим ФИО в системе, то
регистрация не происходит и выдается соответствующее сообщение:

Рис.5
Если пользователь хочет
зарегистрироваться как преподаватель, то он ставит переключатель в
соответствующую позицию:

Рис. 6
Становится активным поле "Ключ"
а поле "Группа" становится неактивным.
Преподаватель аналогично
заполняет все поля, а в поле ключ вводит специальный ключ известный только
преподавателям. Если все поля регистрации заполнены верно, то по нажатию на
кнопку "Регистрация" пользователь регистрируется как преподаватель.
2.3 Работа со студентом
Когда пользователь
заходит, как студент, то попадает в главное окно обучающей системы, в котором
он изучает учебный материал.
В моей обучающей системе
предусмотрено 10 порций учебного материала.
Так как мне необходимо
реализовать жесткую схему представления материала, то сначала студенту доступен
только первый урок.
Когда студент нажимает на
кнопку "Урок 1", то в текстовое поле записывается первая порция
материала и становится активной кнопка "Урок 2".По нажатиям на эти
кнопки, из файлов читается учебный материал и предоставляется студенту. После
прочтения первого урока и до начал работы со вторым уроком пользователя система
переводит в окно контроля и там он проходит контроль по прочитанному уроку.
Так же как только,
студент заходит в систему обучения, включается счетчик времени, по нажатию на
кнопку "Выход" программа закрывается и время пребывания студента в
системе сохраняется и записывается в файл.

Рис. 6
Если студент уже прошел
весь курс обучения, прошел контроль, и опять заходит в систему, то ему уже
доступны все уроки, и кнопка "Результаты" для него не отображается.

Рис 7
По нажатию на кнопки "Ответить",
появляется диалоговое окно, в которое студент вводи свой ответ, выполняется
проверка на правильность ответа и выдается соответствующее сообщение. Если
пользователь ввел пустую строку , то так же выдается соответствующее сообщение.
После ответа на вопрос, то кнопка ответа на этот вопрос становится неактивной.

Рис. 8
После того, как
пользователь ответил на все вопросы становится активной кнопка "Результат",
по нажатию на которую студент может просмотреть результаты своего обучения:

Рис. 9
В окне результаты
обучения, студент видит свой результат прохождения контрольного опроса. По
нажатию на кнопку "К лекциям" студент попадает в основное окно
системы, и там ему доступны все 15 уроков, и отсутствует кнопка "Контроль".
По нажатию на кнопку "Выход" программа закрывается.
2.4 Работа с преподавателем
Когда пользователь
заходит в систему как преподаватель, то ему открывается окно "Меню
преподавателя", в котором он может выбрать, что он хочет сделать.
Преподаватель может править лекции, править вопросы и ответы, просматривать результаты
обучения студентов.

Рис. 10
По нажатию на кнопку "Править
лекции" преподаватель попадает в окно в котором он может изменять учебный
материал. Преподаватель выбирает нужный урок, вносит изменения и нажимает на
кнопку "Сохранить" и изменения сохраняются.

Рис .11
По нажатию на кнопку "Править
вопросы" преподаватель попадает в окно в котором он может изменять вопросы
и ответы. Преподаватель изменяет вопросы или ответы и сохраняет изменения по
нажатию на соответствующую кнопку.

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

Рис. 13
3. Описание и коды
классов системы
3.1 Класс Enter
Класс 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]));
StringBuffer
data = new StringBuffer();
while
(in.hasNext()) {
data.append(in.nextLine()).append("\n");
String s =
data.toString();
int i =
s.indexOf("#");
int r =
s.indexOf("~");
int t =
s.indexOf("%");
int u =
s.indexOf("&");
int h =
s.indexOf("\n");
String L1 =
s.substring(0, i);
String L2 =
s.substring((i+1), r);
String L3 =
s.substring((r+1), t);
String L4 =
s.substring((t+1), u);
String L5 =
s.substring((u+1), h);
if((L3+L4).equals(toCompare)){
Main.this_path
="User_stud\\"+ArrOfFile[k];
Main.this_time
= L5;
Main.this_name
= L1;
Main.this_group
= L2;
return true;
}
}
}
catch
(FileNotFoundException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE,
null, ex);
return false;
}
}
return false;
}
}
3.2 Класс Check
Класс реализует 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)
{
for (int i =
0;i<s1.length();i++)
{
if(s1.charAt(i)=='~'
|| s1.charAt(i)=='#' || s1.charAt(i)=='%' ||s1.charAt(i)=='&')
{
return false;
}
}
for (int i =
0;i<s2.length();i++)
{
if(s2.charAt(i)=='~'
|| s2.charAt(i)=='#' || s2.charAt(i)=='%' ||s2.charAt(i)=='&')
{
return false;
}
}
for (int i =
0;i<s3.length();i++)
{
if(s3.charAt(i)=='~'
|| s3.charAt(i)=='#' || s3.charAt(i)=='%' ||s3.charAt(i)=='&')
{
return false;
}
}
return true;
}
public boolean
Check_on_Reg(String name, String path)
{
File F = new
File(path);
String
toCompare = name+".txt";
String
ArrOfFile[] = F.list();
for(int i =
0;i<ArrOfFile.length;i++)
{
if(toCompare.equals(ArrOfFile[i]))
{
return false;
}
}
return true;
}
public boolean
Check_on_Rez(String fullpath)
{
try {
Scanner in =
new Scanner(new File(fullpath));
StringBuffer
data = new StringBuffer();
while
(in.hasNext()) {
data.append(in.nextLine()).append("\n");
}
String s =
data.toString();
if(s.equals(""))
{
return false;
}
return true;
} catch
(FileNotFoundException ex) {
Logger.getLogger(Check.class.getName()).log(Level.SEVERE,
null, ex);
return false;
}
}
}
3.3 Класс ShowFile
Класс реализует следующие
методы: чтение лекционного материала из файла и запись его в текстовое поле,
чтение вопросов/ответов из файла и запись их в текстовое поле, и просто чтение
текста из файла.
Метод public
String SetLek(String s,JTextArea t) читает
лекционный материал из файла и записывает в текстовое поле.
Метод public
String ShowAQ(String s,JTextField t) читает вопросы или ответы(взависимости от
того, что требуется), и записывает в текстовое поле.
Метод public
String GetTextFromFile(String s) читает текст из файла.
public class
ShowFile
{
public
ShowFile(){}
public String
zap(String s,JTextArea t){
try {
Scanner in = new
Scanner(new File(s));
StringBuffer data
= new StringBuffer();
while
(in.hasNext())
data.append(in.nextLine()).append("\n");
t.setText(data.toString());
return
data.toString();
} catch (
Exception ex ) {
ex.printStackTrace();
return
"";
}
}
public String
ShowAQ(String s,JTextField t){
try {
Scanner in = new
Scanner(new File(s));
StringBuffer data
= new StringBuffer();
while
(in.hasNext())
data.append(in.nextLine()).append("\n");
t.setText(data.toString());
return
data.toString();
} catch ( Exception
ex ) {
ex.printStackTrace();
return
"";
}
}
public String
GetTextFromFile(String s)
{
try {
Scanner in = new
Scanner(new File(s));
StringBuffer data
= new StringBuffer();
while
(in.hasNext())
data.append(in.nextLine()).append("\n");
return
data.toString();
} catch (
Exception ex ) {
ex.printStackTrace();
return
"";
} }}
3.4 Класс WorkWithQuestion
Класс реализует
оценивание ответа на вопрос. Если в диалоговое окно предназначенное для ответа введена пустая строка
то выдается соответствующее предупреждение. Если ответ совпал с эталонном или
не совпал с эталонном ответа то соответственно увеличивается или не
увеличивается счетчик ответов верных, но в том и другом случае, кнопка
предназначенная для ответа на этот вопрос становится нерабочей, что бы
пользователь не мог ответить на него второй раз. Так же, если студент ответил
на 15 вопросов, делается рабочей кнопка "Результат".
public class
WorkWithQuestion
{
WorkWithQuestion(){}
public |