Смекни!
smekni.com

Программа "Система обучения" (стр. 2 из 4)

Рис. 6

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

Рис 7


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

Рис. 8

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

Рис. 9

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

2.4 Работа с преподавателем

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

Рис. 10

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


Рис .11

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

Рис. 13


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

Рис. 13

3. Описание и коды классов системы

3.1 Класс Enter

Класс Enter реализует авторизацию и регистрацию пользователя в системе. Метод publicbooleanRegistration(Stringinfo,Stringname) создает файл с регистрационными данными пользователя. Если регистрируется преподаватель то в папку для преподавателей если студент – то для студента.

Метод publicbooleanAuthorisation(Stringpath , StringtoCompare) реализует авторизацию пользователя( то есть проверяют есть ли такой пользователь и правильный ли он ввёл пароль).

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+"&bsol;"+ArrOfFile[k]));

StringBuffer data = new StringBuffer();

while (in.hasNext()) {

data.append(in.nextLine()).append("&bsol;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("&bsol;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&bsol;"+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 проверки: проверку на использование в полях для регистрации и авторизации "служебных символов"(тех символов которые я использую в качестве разделителей в файлах), проверку на то что такой пользователь уже существует и проверку на то что пользователь прошел контроль и получил результаты. Метод publicbooleanChek_on_Symbol(Strings1, Strings2, Strings3) выполняет проверку на использование в полях для регистрации и авторизации служебных символов.

Метод publicbooleanCheck_on_Reg(Stringname, Stringpath) реализует проверку на то, что в папке, где хранятся зарегистрированные пользователи уже существует такой пользователь.

Метод publicbooleanCheck_on_Rez(Stringfullpath) реализует проверку на то, что пользователь прошел контроль и его итоговый результат записан в файл, в следствии чего он становится видимым для преподавателя когда преподаватель хочет просмотреть результаты обучения


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

}

String s = data.toString();