Смекни!
smekni.com

Объектно-ориентированное программирование учебных систем (стр. 3 из 4)

Рис.3.4.1. Алгоритм тестирования

Исходный код класса:

package KursPackage;

import java.util.*;

import javax.swing.*;

import javax.swing.Timer;

import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

import java.util.logging.Level;

import java.util.logging.Logger;

import javax.swing.border.TitledBorder;

public class KTestWin extends JDialog/*JFrame*/{

KTestWin g;

int numall;//всего вопросов

int numtrue;//к-во правильных ответов на данной странице

int num;//к-во правильных ответов студента

int time;//время на выполнение теста

int numproi;

Date date;

JLabel lttend;//время до окончания теста

JLabel lrans;//к-во прав. ответов студента

JLabel question;

JButton bnext;

JButton bstop;

JCheckBox cb[] = new JCheckBox[4];

boolean ans[] = new boolean [4];//правильные ответы

JPanel panel;

long megotime;

TitledBorder tv; KTestWin (final String login, String password, KMainWin d) throws FileNotFoundException, IOException{

super(d, "Тест", true);

g = this;

setLayout(new FlowLayout ());

date = new Date();

//узнаем время данное на выполнение теста

BufferedReader tt = new BufferedReader(new

FileReader(Consts.curtesttime));

time = Integer.parseInt(tt.readLine());

tt.close();

//узнали

megotime = date.getTime() + time;

panel = new JPanel ();

panel.setLayout(new FlowLayout ());

//узнаем кво вопросов

BufferedReader test = new BufferedReader(new

FileReader(Consts.curtest));

if (test.ready())

{

while (test.ready()){

if (test.readLine().equals("<q>"))

numall++;

}

}

else {

JOptionPane.showMessageDialog(null, "Не найден файл &bsol;" " + Consts.curtest + " &bsol;"");

dispose();

}

test.close();

//узнали

//------------------------------init------------------------------------

numproi = 1;

num = 0;

tv = new TitledBorder ("Вопрос");

lrans = new JLabel ("Количество правильных ответов: 0");

lttend = new JLabel ("Время осталось: " + String.valueOf((megotime - date.getTime())/1000) + " sec");

question = new JLabel();

bnext = new JButton ("Далее");

bstop = new JButton ("Стоп");

final BufferedReader tst = new BufferedReader(new

FileReader(Consts.curtest));

add(lttend);

add(lrans);

panel.setLayout(new BoxLayout (panel, BoxLayout.Y_AXIS));

panel.setPreferredSize(new Dimension (580, 180));

tst.readLine();

question.setText(tst.readLine());

panel.add(question);

for (int i = 0; i<4 ; i++){

cb[i] = new JCheckBox (tst.readLine(), false);

ans[i] = Boolean.parseBoolean(tst.readLine());

panel.add(cb[i]);

}

if (numproi == numall)

{

bnext.hide();

}

if (((megotime - date.getTime())/1000)<0){

bnext.hide();

}

bnext.addActionListener(new ActionListener () {

public void actionPerformed(ActionEvent e) {

numtrue = 0;

for (int i = 0; i < 4; i++){

if (cb[i].isSelected() == ans[i]){

numtrue++;

}

}

if (numtrue == 4){

num++;

}

numproi++;

lrans.setText("Количество правильных ответов: " + num);

lttend.setText("Время осталось: " + String.valueOf((megotime - new Date().getTime())/1000) + " sec");

if (numproi == numall)

{

bnext.hide();

}

try {

tst.readLine();

question.setText(tst.readLine());

for (int i = 0; i<4 ; i++){

cb[i].setLabel(tst.readLine());

cb[i].setSelected(false);

ans[i] = Boolean.parseBoolean(tst.readLine());

}

} catch (IOException ex) {

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

}

if (((megotime - date.getTime())/1000)<0){

bnext.hide();

}

}

});

final ActionListener listener = new ActionListener (){

public void actionPerformed(ActionEvent e) {

numtrue = 0;

for (int i = 0; i < 4; i++){

if (cb[i].isSelected() == ans[i]){

numtrue++;

}

}

if (numtrue == 4){

num++;

}

bstop.hide();

JButton close = new JButton ("Close");

numproi++;

tv.setTitle("Статистика");

lrans.hide();

lttend.hide();

bnext.hide();

question.setText("Количество правильных ответов: " + num);

panel.add(new JLabel("Запись результатов в файл..."));

try{

String buf[] = new String [3];

BufferedWriter mrk = new BufferedWriter(new FileWriter(Consts.pprofiles + login + ".mrk"));

mrk.write(num + "/" + numall);

mrk.close();

BufferedWriter marks = new BufferedWriter(new FileWriter(Consts.marks));

BufferedReader prof = new BufferedReader (new FileReader (Consts.pprofiles + login));

buf[0] = prof.readLine();

buf[1] = prof.readLine();

prof.readLine();

prof.readLine();

buf[2] = prof.readLine();

marks.write(buf[0] + " " + buf[1] + " " + buf[2] + " has " + num + "/" + numall + "&bsol;n");

prof.close();

marks.close();

}catch(Exception ey){

System.out.print(ey);

}

panel.add(new JLabel("Запись успешно завершена"));

for (int i = 0; i<4 ; i++)

cb[i].hide();

try {

tst.close();

} catch (IOException ex) {

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

}

close.addActionListener(new ActionListener (){

public void actionPerformed(ActionEvent e) {

dispose();

}

});

g.setSize (600, 255);

add(close);

g.repaint();

}

};

Timer timer = new Timer(time, listener);

timer.setRepeats(false);

timer.start();

bstop.addActionListener(listener);

panel.setBorder(tv);

add(panel);

add(new JLabel ("Всего вопросов : " + numall));

add(bnext);

add(bstop);

setSize (600, 280);

setVisible(true);

}

}

Рис.3.4.2. Начало теста

Рис3.4.3. Окончание теста:

5. Класс подготовки пользователя

Задача класса – подготовка пользователя к тестированию.


Рис. 3.5.1. Алгоритм записи времени чтения

Исходный код класса:

package KursPackage;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.WindowEvent;

import java.awt.event.WindowListener;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

import java.util.Date;

import java.util.logging.Level;

import java.util.logging.Logger;

import javax.swing.*;

public class KLec extends JFrame {

JEditorPane je;

JScrollPane js;

long time;

long curtime;

KLec (String lec, String title, boolean iseditable, final String login) throws IOException{

super (title);

je = new JEditorPane ("text/html;Content-Type = windows-1251", "<html><i><center>Подготовка к тестам</center>");

js = new JScrollPane (je);

je.setEditable(iseditable);

if (title.equals("Подготовка к тестам")){

BufferedReader tt = new BufferedReader(new FileReader(Consts.pprofiles + login + ".tme"));

time = Long.parseLong(tt.readLine());

curtime = new Date().getTime();

tt.close();

}

BufferedReader rd = new BufferedReader(new FileReader(lec));

je.read(rd, "text/html;Content-Type = windows-1251");

rd.close();

setSize (700, 400);

add(js);

this.addWindowListener(new WindowListener (){

public void windowClosing(WindowEvent e) {

BufferedWriter tm = null;

try {

BufferedWriter ctt;

ctt = new BufferedWriter(new FileWriter(Consts.pprofiles + login + ".tme"));

curtime = new Date().getTime() - curtime;

time += curtime;

ctt.write(time + "");

ctt.close();

String[] buf = new String[3];

tm = new BufferedWriter(new FileWriter(Consts.time));

BufferedReader prof = new BufferedReader(new FileReader(Consts.pprofiles + login));

buf[0] = prof.readLine();

buf[1] = prof.readLine();

prof.readLine();

prof.readLine();

buf[2] = prof.readLine();

tm.write("общее время обучения " + buf[0] + " " + buf[1] + " " + buf[2] + " : " + time + "&bsol;n");

prof.close();

tm.close();

dispose();

} catch (IOException ex) {

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

} finally {

try {

tm.close();

} catch (IOException ex) {

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

}

}

}

public void windowClosed(WindowEvent e) {}

public void windowIconified(WindowEvent e) {}

public void windowDeiconified(WindowEvent e) {}

public void windowActivated(WindowEvent e) {}

public void windowDeactivated(WindowEvent e) {}

public void windowOpened(WindowEvent e) {}

});

setVisible (true);

}

}

Рис.3.5.2. Интерфейс окна чтения лекции

6. Интерфейс констант

Интерфейс содержит константы.

package KursPackage;

import java.awt.Dimension;

import java.awt.Image;

import java.awt.Toolkit;

public interface Consts {

public String pdatabase = new String ("d:&bsol;database.dat");//путь к базе данных

public String pprofiles = new String ("d:&bsol;profiles&bsol;");//путь к профайлам

public String prevlec = new String ("d:&bsol;lec&bsol;prev.dat");//путь к пред. лекции

public String curlec = new String ("d:&bsol;lec&bsol;cur.dat");//путь к текущей лекции

public String curtest = new String ("d:&bsol;tests&bsol;cur.dat");//путь к текущим тестам

public String prevtest = new String ("d:&bsol;tests&bsol;prev.dat");//путь к пред. тестам

public String curtesttime = new String ("d:&bsol;tests&bsol;cur.conf");//путь к файлу времени пров. тек. теста

public String prevtesttime = new String ("d:&bsol;tests&bsol;prev.conf");//путь к файлу времени пров. пред. теста

public String marks = new String ("d:&bsol;marks.dat");//путь к файлу оценок

public String log = new String ("d:&bsol;log.log");//путь к логу

public String time = new String ("d:&bsol;time.dat");//путь к логу времени

public Dimension size = new Dimension (100, 23);

public Dimension bigsize = new Dimension(size.width * 2 + 5, size.height);

public Image image = Toolkit.getDefaultToolkit().getImage("d:&bsol;icon.jpg");

}

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

После запуска программы появляется окно (рис. 4.1) где нужно ввести логин и пароль и нажать на кнопку «Войти».


Рис.4.1. Окно входа в систему

Если Вы еще не зарегистрированы в системе, то Вам нужно пройти регистрацию. Чтобы зарегистрироваться необходимо в окне входа в систему (рис.4.1) нажать на кнопку «Регистрация». После этого появится окно регистрации нового пользователя системы (рис. 4.2). В этом окне Вам будет предложено ввести регистрационные данные. После заполнения всех полей нажмите на кнопку «Регистрация».

Рис.4.2. Регистрация нового пользователя

Если регистрация в системе прошла успешно, то появится уведомление об успешном окончании регистрации (рис.4.3).


Рис.4.3. Успешное окончание регистрации

После регистрации Вы можете войти в систему(рис.4.4.).

Рис.4.4. Окно входа в систему под логином login и паролем password.

После нажатия на кнопку «Войти» Вы войдете в систему как login с правами пользователя. После входа в систему появится главное окно программы (рис. 4.5.).

Рис. 4.5. Главное окно системы пользователя

При нажатии на кнопку «Начать тестирование» появится окно тестирования (рис.4.6)где Вам будет дан вопрос и варианты ответа. На выполение теста будет дано определенное преподавателем.


Рис.4.6. Окно тестирования пользователя

После окончания теста Вам будет выдана оценка(рис.4.7.)

Рис.4.7. Статистика прохождения тестов.

Также в главном окне(рис.4.5) можно получить доступ к лекциям с помощью кнопки «Прочитать лекцию». После нажатия на эту кнопку появится окно (рис.4.8) с лекцией.

Рис.4.8. «Подготовка к тестам»


При авторизации в системе с правами администратора или с правами преподавателя появляется окно со следующим интерфейсом (рис.4.9.).