Программа "Система обучения"

Содержание



Введение

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 void Answer(String s,JButton B )

{

String answ = JOptionPane.showInputDialog("Введите ваш ответ");

String answ1=answ+"\n";

char ch2[] = answ1.toCharArray();

try {

Scanner in = new Scanner(new File(s));

StringBuffer data = new StringBuffer();

while (in.hasNext())

{ data.append(in.nextLine()).append("\n");}

char ch[] =data.toString().toCharArray();

boolean b = Arrays.equals(ch, ch2);

if(answ.equals(""))

{

JOptionPane.showMessageDialog(Main.F4,"Вы не ответили на етот вопрос");

return;

}

if(b)

{

Main.i++;

if(Main.i==10)

{

Main.F4.R.setEnabled(true);

}

JOptionPane.showMessageDialog(Main.F4,"Верно");

Main.t++;

B.setEnabled(false);

System.out.println(Main.i);

}

else

{

Main.i++;

if(Main.i==10)

{

Main.F4.R.setEnabled(true);

}

JOptionPane.showMessageDialog(Main.F4,"Неверно");

B.setEnabled(false);

}

}

catch ( Exception ex ) {

ex.printStackTrace();

} } }




3.5 Класс TimeInSystem



Класс, реализует подсчет времени, в течение которого студент находился в системе обучения. Метод этого класса создает счетчик времени и увеличивает его на единицу после каждой минуты пребывания в системе, и останавливает таймер и записывает в файл время студента которое он провел в системе. В случае повторного захода студента в систему берется значение времени из файла этого студента и к нему уже прибавляется новое время пребывания.



public class TimeInSystem

{

public static Integer c;

public static Integer i =0;

public static java.util.Timer timer = new java.util.Timer();

public TimeInSystem(){}

public void time( String T1,int flag,String path)

{

if(flag==1)

{

Main.T.c = Main.T.c.parseInt(T1);

TimerTask task = new TimerTask() {

public void run()

{ Main.T.i++; }

};

timer.schedule( task,30000, 60000 );

}

if(flag==2)

{

Main.T.timer.cancel();

Main.T.timer.purge();

try {

Scanner in = new Scanner(new File(path));

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);

Integer y = Main.T.i+Main.T.c;

String Rez = y.toString();

String F = L1 + "#" + L2 + "~" + L3 + "%" + L4 + "&" +Rez ;

File f1;

f1 = new File(path);

PrintWriter writer = null;

writer = new PrintWriter(new OutputStreamWriter(new FileOutputStream(path)));

writer.write(F);

writer.close();

} catch (FileNotFoundException ex) {

Logger.getLogger(TimeInSystem.class.getName()).log(Level.SEVERE, null, ex);

} } }}



3.6 Класс ShowResult



Релизует демонстрацию студенту его конечного результата обучения, тесть его оценок. Методы класса записывают в текстовые поля окна, в котором будут отображться результаты обучения, ФИО студента, группу, количесвто верных ответов, баллы, и текстовый эквивалент.



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]));

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("&");

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);

if((L3+L4).equals(toCompare))

{

System.out.println(L3+L4);

FIO.setText(L1);

Group.setText(L2);

}}

}

catch (FileNotFoundException ex) {

Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);

}} }

public String Result_Q()

{

String Rez="";

if(Main.t==0)

{Rez =Main.t + " вопросов";}

if(Main.t==1)

{ Rez = Main.t + " вопрос";}

if(Main.t>1 && Main.t<5)

{Rez=Main.t + " вопроса";}

if(Main.t>4 && Main.t<10)

{Rez = Main.t + " вопросов"; }

Main.F5.T3.setText(Rez);

return Rez;

}

public String Result_B()

{

int ball=0;

String s = "";

switch(Main.t)

{

case 10: ball=100;break;

case 9: ball=90;break;

case 8: ball=80;break;

case 7: ball=70;break;

case 6: ball=60;break;

case 5: ball=50;break;

case 4: ball=40;break;

case 3: ball=30;break;

case 2: ball=20;break;

case 1: ball=10;break;

case 0: ball=0;break;

}

s=ball +" баллов";

Main.F5.T4.setText(s);

return s;

}

public String Result_T()

{

String T="";

if(Main.t>8 && Main.t<11)

{ T="Отлично";}

if(Main.t>6 && Main.i<9)

{ T="Хорошо";}

if(Main.t>5 && Main.t<7 )

{T="Удовлетворительно"; }

if(Main.t>2 && Main.t<6)

{ T="Плохо";}

if(Main.t<3 )

{T="Очень плохо"; }

Main.F5.T5.setText(T);

return T;

}

public void ShowTime(String path , JTextField T)

{

String s = Main.this_name+".txt";

System.out.println(s);

File F = new File(path);

String ArrOfFile[] = F.list();

for(int i =0;i<ArrOfFile.length;i++)

System.out.println(ArrOfFile[i]);

for( int k =0;k<ArrOfFile.length;k++)

{

if(s.equals(ArrOfFile[k]))

{

try {

Scanner in = new Scanner(new File(path+"\\"+ArrOfFile[k]));

System.out.println("11111");

StringBuffer data = new StringBuffer();

while (in.hasNext()) {

data.append(in.nextLine()).append("\n");

String s1 = data.toString();

int i = s1.indexOf("#");

int r = s1.indexOf("~");

int t = s1.indexOf("%");

int u = s1.indexOf("&");

int h = s1.indexOf("\n");

String L1 = s1.substring(0, i);

String L2 = s1.substring((i+1), r);

String L3 = s1.substring((r+1), t);

String L4 = s1.substring((t+1), u);

String L5 = s1.substring(u+1,h );

System.out.println(L5+" минут");

T.setText(L5+" минут");

}}

catch (FileNotFoundException ex) {

Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);

}

}

}}

}



3.7 Класс Modification



Методы этого класса реализуют возможности изменения лекционного материала, вопросов и ответов преподавателем.



public class Modification

{

public Modification(){}

public void ModificationLek(String s,JTextArea t)

{

String u1 = t.getText();

PrintWriter writer = null;

try {

writer = new PrintWriter(

new OutputStreamWriter(

new FileOutputStream(s)));

writer.write(u1);

writer.close();

} catch (Exception ex) {}

}

public void ModificationAQ(String s,JTextField t)

{

String u2 = t.getText();

PrintWriter writer = null;

try {

writer = new PrintWriter(

new OutputStreamWriter(

new FileOutputStream(s)));

writer.write(u2);

writer.close();

} catch (Exception ex) {}

}

}



3.8 Класс ShowResultForTeacher



Класс реализует демонстрацию результатов обучения студентов преподавателю.

Метод 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]));

StringBuffer data = new StringBuffer();

while (in.hasNext()) {

data.append(in.nextLine()).append("\n");

}

String s1 = data.toString();

if(!s1.equals("")){

int i = ArrOfFile[k].indexOf(".");

String L1 = ArrOfFile[k].substring(0, i);

j.addItem(L1);}

} catch (FileNotFoundException ex) {

Logger.getLogger(ShowResultForTeacher.class.getName()).log(Level.SEVERE, null, ex);

}

}

}

public void SetResultInFile(String path, String info)

{

try {

File f1;

f1 = new File(path);

PrintWriter writer = null;

writer = new PrintWriter(new OutputStreamWriter(new FileOutputStream(path)));

writer.write(info);

writer.close();

} catch (FileNotFoundException ex) {

Logger.getLogger(ShowResultForTeacher.class.getName()).log(Level.SEVERE, null, ex);

}

}

public void ShowResultForEach(String path,JTextField t1,JTextField t2,JTextField t3,JTextField t4,JTextField t5,JTextField t6,JComboBox j)

{

String s = (String) j.getSelectedItem()+".txt";

File F = new File(path);

String ArrOfFile[] = F.list();

System.out.println(ArrOfFile.length);

boolean b;

for( int k =0;k<ArrOfFile.length;k++)

{

if(s.equals(ArrOfFile[k]))

{

try {

b=false;

Scanner in = new Scanner(new File(path+"\\"+ArrOfFile[k]));

StringBuffer data = new StringBuffer();

while (in.hasNext()) {

data.append(in.nextLine()).append("\n");

String s1 = data.toString();

System.out.println(b);

int i = s1.indexOf("#");

int r = s1.indexOf("~");

int t = s1.indexOf("%");

int u = s1.indexOf("&");

int h = s1.indexOf("\n");

String L1 = s1.substring(0, i);

String L2 = s1.substring((i+1), r);

String L3 = s1.substring((r+1), t);

String L4 = s1.substring((t+1), u);

String L5 = s1.substring(u+1,h );

t1.setText(L1);

t2.setText(L2);

t3.setText(L3);

t4.setText(L4);

t5.setText(L5);

}

}

catch (FileNotFoundException ex) {

Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);

} } }}

public void ShowTime(String path , JTextField T, JComboBox j)

{

String s = (String) j.getSelectedItem()+".txt";

File F = new File(path);

String ArrOfFile[] = F.list();

for( int k =0;k<ArrOfFile.length;k++)

{

if(s.equals(ArrOfFile[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 s1 = data.toString();

int i = s1.indexOf("#");

int r = s1.indexOf("~");

int t = s1.indexOf("%");

int u = s1.indexOf("&");

int h = s1.indexOf("\n");

String L1 = s1.substring(0, i);

String L2 = s1.substring((i+1), r);

String L3 = s1.substring((r+1), t);

String L4 = s1.substring((t+1), u);

String L5 = s1.substring(u+1,h );

T.setText(L5+" минут");

}}

catch (FileNotFoundException ex) {

Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);

}

}

}}

}




4. Структура файлов



В системе предусмотрено 6 каталогов для хранения файлов. Папка Lection содержит 10 текстовых файлов, в которых хранится 10 порций учебного материала. Папка Question содержит 10 текстовых файлов, в которых хранятся контрольные вопросы. Папка Answer содержит 10 текстовых файлов, в которых хранятся ответы на контрольные вопросы.

Папка User_Stud содержит текстовые файлы, в которых хранится информация про зарегистрированных студентах. Когда студент регистрируется в системе, то в этой папке создается файл, в котором хранится информация про этого пользователя.





Рис. 15



Сначала идет ФИО, затем группа, логин, пароль, и время пребывания студента в системе. Данные отделены служебными символами. Папка User_Prep содержит текстовые файлы, в которых хранится информация про зарегистрированных преподавателях. Когда преподаватель регистрируется в системе, то в этой папке создается файл, в котором хранится информация про этого пользователя. Папка Rez содержит текстовые файлы, в которых хранятся результаты обучения студентов. Когда студент регистрируется, то создается в этой папке файл пустой, когда студент проходит контроль, то в него записываются результаты обучения.





Рис. 16


5. Инструкция пользователя



5.1 Инструкция для пользователя "студент"



Если студент уже зарегистрирован в системе, то он вводит свой логин и пароль, и если он верный то попадает в окно, где ему предоставляется учебный материал. Если студент не зарегистрирован в системе, то он нажимает на кнопку "Регистрация" и попадает в окно регистрации пользователя. Там студент ставит переключатель в позицию "Студент", заполняет поля регистрации, если поля заполнены верно(т.е заполнены все поля, пароль указан одинаково два раза, и не использованы служебные символы(~,#,%,&)), то по нажатию на кнопку "Регистрация" студент регистрируется и входит в систему. В следующем окне студенту доступны для изучения 10 занятий. Контроль проводится после каждого пройденного урока. Щелкая на кнопку "Ответ", возле соответствующего вопроса, студент в появившимся окне вводит свой ответ. После того как студент ответил на все вопросы, становится доступной кнопка "Результат", по нажатию на которую студент предоставляются результаты его обучения. Ознакомившись с результатами, студент может перейти обратно к лекциям, однако кнопки "Контроль" уже нет. Так же студент может выйти из системы обучения, нажав на кнопку "Выход".



5.2 Инструкция для пользователя "преподаватель"

Если преподаватель уже зарегистрирован в системе, то он вводит свой логин и пароль, и если он верный то попадает в окно, где ему предоставляется меню преподавателя. Если преподаватель не зарегистрирован в системе, то он нажимает на кнопку "Регистрация" и попадает в окно регистрации пользователя. Там студент ставит переключатель в позицию "Преподаватель", заполняет поля регистрации, если поля заполнены верно(т.е заполнены все поля, пароль указан одинаково два раза, верно указан ключ, который известен только преподавателям и не использованы служебные символы(~,#,%,&)), то по нажатию на кнопку "Регистрация" преподаватель регистрируется и входит в систему. Далее преподаватель попадает в "Меню преподавателя". В этом окне преподаватель может выбрать то, что он желает сделать: править лекции, править вопросы и ответы, просмотреть результаты обучения. По нажатию на кнопку "Править лекции" преподаватель попадает в окно в котором он может добавить или изменить материал в лекциях. Для этого необходимо выбрать урок, который необходимо исправить, ввести информацию и нажать на кнопку "Сохранить". По нажатию на кнопку "Править вопросы", преподаватель попадает в окно, в котором можно править вопросы и ответы. Для этого в необходимом вопросе или ответе нужно изменить текст и нажать на кнопку "Сохранить". По нажатию на кнопку "Смотреть рез-ты обучения" преподаватель попадает в окно, в котором он может просмотреть результаты обучения студентов .Для этого необходимо выбрать из списка интересующего студента, и нажать на кнопку "Показать", после чего в текстовые поля запишется информация про этого студента




6. Тестирование работы системы



6.1 Тестирование работы для пользователя "студент"



Для того, что бы проверить правильность работы системы с пользователем "студент", я зарегистрирую двух студентов и для каждого пройду все стадии обучения, и сравню полученные результаты с ожидаемыми. Для начала я зарегистрирую в системе двух студентов, после чего в папке User_Stud должны появиться файлы с данными регистрации для каждого из зарегистрированного студента и в папке Rez должны появиться два пустых файла для записи в них результатов обучения конкретного студента.Пройдя все этапы работы с системой я убедился что система с пользователем "студент" работает правильно.



6.2 Тестирование работы для пользователя "преподаватель"



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





Рис. 21



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





Рис. 21



Далее проверим возможность преподавателя править вопросы и ответы. Для этого в первом вопросе и ответе добавим, какую либо надпись, сохраним, и проверим, изменилась ли лекция. Для этого, после изменений лекции я зайду в папку с вопросами и в папку с ответами, и просмотрю изменённые файлы.





Рис. 22



Наконец проверим возможность преподавателя смотреть результаты обучения всех студентов:




Рис. 23




Заключение



В ходе выполнения курсовой работы по дисциплине "Объектно-ориентированное программирование", я разработал и протестировал систему обучения, отвечающую требованиям моего варианта, тем самым углубил и закрепил свои знания, полученные мною в результате курса обучения по дисциплине "Объектно-ориентированное программирование" и получил практические навыки с разработке программ с графическим интерфейсом пользователя. Так же я убедился, что объектно-ориентированная методология создания программных продуктов представляет собой очень мощное и гибкое средство для разработки программного обеспечения.




Список литературы



1. ГСТУ 3008-95. Документация. Отчёты в сфере науки и техники. Структура и правила оформления. - Киев: Изд-во стандартов, 1995. – 38 с.

2. МУ к курс. работе по курсу "Языки объектно-ориентированного программирования" /: ОГПУ, 2007г.

3. Давыдов В.И. Кунгурцев А.Б. Объектно-ориентированное программирование. Одесса :Автограф, 2003.	

4. Кунгурцев О.Б. Основи програмування на мові Java.Середовище Net Beans. Одеса. :ВМВ, 2006. -182с.