Помощь в написании студенческих работ
Антистрессовый сервис

Проектирование приложения системы тестов

РефератПомощь в написанииУзнать стоимостьмоей работы

Intellij IDEA 14 — коммерческая интегрированная среда разработки программного обеспечения на многих языках программирования. В Intellij IDEA 14 разрабатывался дружественный интерфейс, для работы с системой тестирования. Также создание рабочей области типа панели управления «кнопок». В приложение использовались кнопки, метки, текстовые поля, переключатели, текстовые области, чекбоксы и формы… Читать ещё >

Проектирование приложения системы тестов (реферат, курсовая, диплом, контрольная)

Продумав как должна работать программа, в соответствии с особенностями Java, получим следующую схему работы приложения:

  • 1) Регистрация. Ввод пароля. Если будет указан пароль отличный от эталонного, то пользователь не сможет пользоваться редактором тестов, а только лишь проходить уже существующие тесты.
  • 2) Если зашел обычный пользователь, то должна появиться форма выбора теста. Т.к. количество тестов произвольного числа, то будем хранить их имена в отдельном файле, и считывать в List. Обычные массивы не подходят из-за своей статичности.
  • 3) После выбора теста должен появится первый вопрос на новой форме. В зависимости от вопроса будут добавлены компоненты или JCheckBox (несколько ответов) или JRadioButton (один ответ).
  • 4) После нажатия кнопки «Ответить» должна пройти проверка на выбор варианта ответа. Если пользователь не выбрал ни один ответ, то появляется предупреждение. Переход к следующему вопросу возможен только после выбора одного (несколько) варианта (ов) ответа и нажатия кнопки «Ответить».
  • 5) После того, как пользователь ответил на все вопросы, появляется сообщение об оценке и количестве правильных ответов. Система распознавания правильных ответов жесткая. После этого приложение завершает свою работу.
  • 6) Если же зашел администратор, то должна появиться форма выбора режима приложения: пройти тест или создать тест.
  • 7) Если выбрать «Пройти тест», то произойдет тоже самое, что и в пунктах 2−5.
  • 8) Если выбрать «Создать тест», то появится форма ввода имени теста и количества вопросов в нем.
  • 9) После ввода имени теста и количества вопросов они заисываются в файл и появляется форма создания вопроса. Каждый вопрос создается в новой форме, а информация о нем записывается в файл.
  • 10) Как только последний вопрос создан приложение заканчивает свою работу.

Для осуществления логики данного приложения понадобиться создать 6 классов (и ещё 1 с точкой входа в программу).

Класс StartProgram является главным классом, где находиться public static void main (String[] args).

Класс ThisTest будет хранить имя теста. С его помощью так же можно улучшить данное приложение.

Класс CreaterTests отвечает за ввод имени нового теста и количества вопросов в нем.

Класс CreaterQuestion отвечает за создание вопросов нового теста. Класс StartForm используется для выбора администратором режима приложения.

Класс FirstForm отвечает за выбор теста, который нужно пройти. Класс Question отвечает за создание формы, на которой выбирают вариант ответа на вопрос.

Программный код основного класса:

package by.gsu.alukyanov;

import javax.swing.*;

import java.io.*;

import java.util.ArrayList;

import java.util.List;

/**

  • * Created by Антон on 27.11.2014.
  • */

public class StartProgram {.

public static void main (String[] args){.

try{.

String name=JOptionPane.showInputDialog(" Введите имя" );

String password=JOptionPane.showInputDialog(" Введите пароль, если вы администратор" );

if(password.equals (" 123 456″ )) //если пароль совпадает с правильным

{.

final StartForm start = new StartForm (" Выбор режима" );

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

start.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);

//тест или проходить один из существующих (т.е. выбор режима)

start.setSize (305, 190);

//start.setResizable (false);

start.setLocationRelativeTo (null); //окно появлялось по центру

start.setVisible (true);

while (true) {.

//поток этой формы ждет пол секунды, а потом проверяет выбран ли режим

Thread.sleep(500);

if (start.isEnd ()) break;

}.

if (start.getMode ()) { //если режим==создание теста

List thisWrite = new ArrayList ();

//создаем списое данных, который после заполнения будем заносить в файл. дальше будем //называть лист

final CreaterTests creater = new CreaterTests ();

//создаем форму редактора теста

creater.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);

creater.setSize (220, 180);

//creater.setResizable (false);

creater.setLocationRelativeTo (null);

creater.setVisible (true);

while (true) { //поток формы создания теста ждет //пол секунды, а потом проверяет задано ли имя теста и кол-во вопросов

Thread.sleep(500);

if (creater.isEnd ()) break;

}.

String curDir = new File (««).getAbsolutePath ();

//в переменную curDir заносим текущую деректоию

thisWrite.add (creater.getTestName ());

//добавляем в лист имя (тему) теста

thisWrite.add (" «);

//перенос через 2 строки (тесты создаются по своему стандарту)

for (int j = 0; j < creater. getCountQuestions (); j++) {.

//цикл добавления вопросов в тест (их кол-во указывается при создании теста)

thisWrite.add (" Вопрос « + (j + 1) + «.»);

//добавляем в лист номер вопроса

CreaterQuestion addQuestion = new CreaterQuestion (" Добавление вопроса" , creater. getTestName (), thisWrite);

addQuestion.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); //создание формы редактора вопроса. передаем ему лист для дальнейшего заполнения

addQuestion.setSize (440, 620);

//addQuestion.setResizable (false);

addQuestion.setLocationRelativeTo (null);

addQuestion.setVisible (true);

while (true) {.

//ждем пока вопрос будет добавлен

Thread.sleep(500);

if (addQuestion.isEnd ()) break;

}.

thisWrite = addQuestion. getList ();

//возвращаем лист в главный поток

thisWrite.add (" «);

//запонение, требуемое стандартом тестов

if (j == creater. getCountQuestions () — 1) {.

thisWrite.add (" end." ); //указать что это конец теста

}.

}.

if (!thisWrite.get (thisWrite.size () — 1).equals (" end." )) //если тест не закончен, то не создаем файл

JOptionPane.showMessageDialog(null, " Не закончено создание теста. Тест удален." );

else {.

//записываем лист в файл

writeListToFileOff(curDir + " srcygsualukyanov" + creater. getTestName (), thisWrite);

//добавляем имя теста в файл, где храняться имена всех тестов

List list = readFile(curDir + " srcygsualukyanov" + " listOfTest" );

list.add (creater.getTestName ());

writeListToFileOn(curDir + " srcygsualukyanov" + " listOfTest" , list);

}.

} else { //если выбран режим прохождения тестов

final FirstForm mainForm = new FirstForm (" Начало" );

//создаем форму выбора теста

mainForm.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);

mainForm.setSize (425, 250);

//mainForm.setResizable (false);

mainForm.setLocationRelativeTo (null);

mainForm.setVisible (true);

while (true) { //ждем пока тест не будет выбран

Thread.sleep(500);

if (!mainForm.getTestName ().equals (««)) break;

}.

String curDir = new File (««).getAbsolutePath ();

//узнаем текущую деректорию

//создаем лист, который будет содержать всю информацию о тесте

List lines = readFile(curDir + " srcygsualukyanov" + mainForm. getTestName ());

ThisTest test = new ThisTest (lines.get (0)); //создаем объект теста

String thisLine = lines. get (0);

//создаем переменную количества вариантов ответа, что бы знать //какого размера форма нам понадобится

int count = 0;

boolean fl = false;

//создаем лист, который будет содержать информацию о текущем вопросе.

List question = new ArrayList ();

//начинаем с 3ей строки т.к. первая — это имя теста, а вторая — пустая строка

for (int i = 2; !thisLine.equals (" end." ); i++) {.

question.add (lines.get (i));

//добавляем в лист вопроса информацию о нем

if (fl) count++;

//увеличиваем количество вариантов ответа, если они уже начались

//если начинаются варианты ответов, то ставим fl=true

if (lines.get (i).equals (" Один" ) || lines. get (i).equals (" Много" )) fl = true;

thisLine = lines. get (i); //переопределяем текущую строку

//если текущая строка пустая, то вся информация о вопросе уже лежит в его листе

if (thisLine.equals (««)) {.

Question quest = new Question (question); //создаем форму вопроса что бы пользователь мог дать ответ

quest.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);

//если количество вариантов ответа меньше 5, то хватит и обычного размера формы

if (count < 6) quest. setSize (425, 270);

//иначе нужен размер побольше в зависимости сколько вариантов ответа в вопросе

else quest. setSize (425, 270 + (count — 6) * 15);

//quest.setResizable (false);

quest.setLocationRelativeTo (null);

quest.setVisible (true);

//пользователь ответил на вопрос. теперь информация о вопросе больше не нужна

//и мы создаем новый лист, хранящий информацию о следующем вопросе.

question = new ArrayList ();

while (true) { //ждем пока пользователь отвечает на вопрос

Thread.sleep(500);

if (quest.isEnd ()) break;

}.

fl = false; //будем использовать для проверки правильности ответа на вопрос

if (quest.getTrueAnswers ().size () == quest. getAnswer ().size ()) {.

for (int j = 0; j < quest. getTrueAnswers ().size (); j++) {.

//если ответ не сходится с правильным, то прерываем проверку

if (quest.getAnswer ().get (j) ≠ quest. getTrueAnswers ().get (j)) {.

fl = true;

break;

}.

}.

//если проверка не была прервана, то добавляем балл за правильный ответ

if (!fl) Question.countTrueAnswersAdd();

}.

count = 0;

fl = false; //сбрасываем значения для следующего вопроса

}.

}.

JOptionPane.showMessageDialog(null, " Вы завершили тест: « + test. getTema () + » Количество правильных ответов= « + Question.getCountTrueAnswer() + » « +.

" Ваша отценка: « + (10.0 * Question.getCountTrueAnswer() / (float) Question.getCountQuestions()));

}.

}.

else { //если обычный пользователь

final FirstForm mainForm = new FirstForm (" Начало" );//создаем форму выбора теста

mainForm.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);

mainForm.setSize (425, 250);

//mainForm.setResizable (false);

mainForm.setLocationRelativeTo (null);

mainForm.setVisible (true);

while (true) { //ждем пока тест не будет выбран

Thread.sleep(500);

if (!mainForm.getTestName ().equals (««)) break;

}.

String curDir = new File (««).getAbsolutePath (); //узнаем текущую деректорию

//создаем лист, который будет содержать всю информацию о тесте

List lines = readFile(curDir + " srcygsualukyanov" + mainForm. getTestName ());

ThisTest test = new ThisTest (lines.get (0)); //создаем объект теста

String thisLine = lines. get (0);

//создаем переменную количества вариантов ответа, что бы знать какого размера форма нам понадобится

int count = 0;

boolean fl = false;

//создаем лист, который будет содержать информацию о текущем вопросе.

List question = new ArrayList ();

//начинаем с 3ей строки т.к. первая — это имя теста, а вторая — пустая строка

for (int i = 2; !thisLine.equals (" end." ); i++) {.

question.add (lines.get (i)); //добавляем в лист вопроса информацию о нем

if (fl) count++; //увеличиваем количество вариантов ответа, если они уже начались

//если начинаются варианты ответов, то ставим fl=true

if (lines.get (i).equals (" Один" ) || lines. get (i).equals (" Много" )) fl = true;

thisLine = lines. get (i); //переопределяем текущую строку

//если текущая строка пустая, то вся информация о вопросе уже лежит в его листе

if (thisLine.equals (««)) {.

Question quest = new Question (question); //создаем форму вопроса что бы пользователь мог дать ответ

quest.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);

//если количество вариантов ответа меньше 5, то хватит и обычного размера формы

if (count < 6) quest. setSize (425, 270);

//иначе нужен размер побольше в зависимости сколько вариантов ответа в вопросе

else quest. setSize (425, 270 + (count — 6) * 15);

//quest.setResizable (false);

quest.setLocationRelativeTo (null);

quest.setVisible (true);

//пользователь ответил на вопрос. теперь информация о вопросе больше не нужна

//и мы создаем новый лист, хранящий информацию о следующем вопросе.

question = new ArrayList ();

while (true) { //ждем пока пользователь отвечает на вопрос

Thread.sleep(500);

if (quest.isEnd ()) break;

}.

fl = false; //будем использовать для проверки правильности ответа на вопрос

if (quest.getTrueAnswers ().size () == quest. getAnswer ().size ()) {.

for (int j = 0; j < quest. getTrueAnswers ().size (); j++) {.

//если ответ не сходится с правильным, то прерываем проверку

if (quest.getAnswer ().get (j) ≠ quest. getTrueAnswers ().get (j)) {.

fl = true;

break;

}.

}.

//если проверка не была прервана, то добавляем балл за правильный ответ

if (!fl) Question.countTrueAnswersAdd();

}.

count = 0;

fl = false; //сбрасываем значения для следующего вопроса

}.

}.

JOptionPane.showMessageDialog(null, " Вы завершили тест: « + test. getTema () + » Количество правильных ответов= « + Question.getCountTrueAnswer() + » « +.

" Ваша отценка: « + (10.0 * Question.getCountTrueAnswer() / (float) Question.getCountQuestions()));

}.

}.

//если во время выполнения программы возникла ошибка

catch(Exception e) {JOptionPane.showMessageDialog(null," Error: «+e);}.

}.

//метод считывает данные из файла и заносит их в лист

public static List readFile (String file) throws IOException {.

BufferedReader reader = new BufferedReader (new FileReader (file));

String line;

List lines = new ArrayList ();

while ((line = reader. readLine ()) ≠ null) {.

lines.add (line);

}.

if(lines.get (0)==null) return null;

return lines;

}.

//метод для записи листа в файл, содержащий имена тестов.

//нужен из-за особого расположения данных в файле

public static void writeListToFileOn (String fileName, List list)throws Exception{.

FileWriter fw = new FileWriter (fileName);

BufferedWriter bw = new BufferedWriter (fw);

for(int i=0;i.

if(i==list.size ()-1) bw. write (list.get (i));

else bw. write (list.get (i)+" «);

bw.close ();

}.

//метод для записи листа в файл

public static void writeListToFileOff (String fileName, List list)throws Exception{.

FileWriter fw = new FileWriter (fileName);

BufferedWriter bw = new BufferedWriter (fw);

for(String s: list).

bw.write (s);

bw.close ();

}.

}.

Программный код класса ThisTest:

package by.gsu.alukyanov;

import java.util.ArrayList;

import java.util.List;

/**

  • * Created by Антон on 27.11.2014.
  • */

public class ThisTest {.

private String tema=String.valueOf(««);

private List questions=new ArrayList ();

List trueAnswers=new ArrayList ();

private int countQuestions=0;

public String getTema (){.

return this.tema;

}.

public void setTema (String s){.

this.tema=String.valueOf(s);

}.

public void addQuestion (String question){.

questions.add (question);

countQuestions++;

}.

public void addTrueAnswer (int trueAnswer){.

trueAnswers.add (trueAnswer); }.

public ThisTest (String tema){.

setTema (tema);

}.

}.

Программный код класса CreaterQuestion:

package by.gsu.alukyanov;

import javax.swing.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileWriter;

import java.util.ArrayList;

import java.util.List;

public class CreaterQuestion extends JFrame{.

private JTextField question;

private JTextArea answers;

private JLabel label1,label2,label3,label4;

private JTextField trueAnswers;

private JButton buttonAdd;

private boolean end=false;

private String testName;

private List thisList;

public List getList (){return this.thisList;}.

public void setList (List thisList){ this.thisList=thisList;}.

public boolean isEnd (){return this.end;}.

public String getTestName (){return this.testName;}.

public CreaterQuestion (String title, String testName, List thisWrite){.

super(title);

this.testName=String.valueOf(testName);

setList (thisWrite);

label1=new JLabel ();

label2=new JLabel ();

label3=new JLabel ();

label4=new JLabel ();

label1.setText (" Введите сюда вопрос" );

label2.setText (" Введите сюда варианты ответов." );

label4.setText (" Вариант ответа заканчивается точкой." );

label3.setText (" Введите сюда номера правильных ответов" );

buttonAdd=new JButton (" Добавить вопрос" );

question=new JTextField ();

answers=new JTextArea ();

trueAnswers=new JTextField ();

label1.setBounds (15, 15, 300, 20);

question.setBounds (15,40,400,25);

label2.setBounds (15, 70, 300, 20);

label4.setBounds (15, 90, 300, 20);

answers.setBounds (15,115,400,400);

label3.setBounds (15, 520, 500, 20);

trueAnswers.setBounds (15,550,100,25);

buttonAdd.setBounds (230,540,185,35);

setLayout (null);

add (label1);add (question);

add (label2);add (label4);add (answers);

add (label3);add (trueAnswers);

add (buttonAdd);

eHandler handler=new eHandler ();

buttonAdd.addActionListener (handler);

}.

public boolean checkString (String string) {.

try {.

Integer.parseInt(string);

} catch (Exception e) {.

return false;

}.

return true;

}.

public boolean corectAnswers (){.

String text=String.valueOf(answers.getText ());

char[] arrayText=text.toCharArray ();

int countDot=0;

for(int i=0;ilength;i++).

if(arrayText[i]=='.') countDot++;

text=trueAnswers.getText ();

char[] array=text.toCharArray ();

int countTrueAnswers=0;

for(int i=0;ilength;i++).

if(checkString (String.valueOf(array[i]))) countTrueAnswers++;

if(countDot<=countTrueAnswers) return false;

return true;

}.

public boolean countQuestionOnTrueQuestion (){.

String text=String.valueOf(answers.getText ());

char[] arrayText=text.toCharArray ();

int countDot=0;

for(int i=0;ilength;i++).

if(arrayText[i]=='.') countDot++;

text=trueAnswers.getText ();

char[] array=text.toCharArray ();

for(int i=0;ilength;i++) {.

if(checkString (String.valueOf(array[i]))) {.

if (Integer.parseInt(String.valueOf(array[i])) > countDot) return false;

}else continue;

} компьютерный тестирование информационный знание.

return true;

}.

public void writeToFile (String fileName, String data){.

try{.

String curDir = new File (««).getAbsolutePath ();

FileWriter fw = new FileWriter (curDir + " srcygsualukyanov" +fileName);

BufferedWriter bw = new BufferedWriter (fw);

bw.write (data);

bw.close ();

}.

catch(Exception e) {.

JOptionPane.showMessageDialog(null," Error! «+ e);

}.

}.

class eHandler implements ActionListener {.

public void actionPerformed (ActionEvent EVENT){.

if(EVENT.getSource ()==buttonAdd){.

if(question.getText ().equals («„)) JOptionPane.showMessageDialog(null,“ Введите вопрос» );

else if(answers.getText ().equals («„)) JOptionPane.showMessageDialog(null,“ Введите варианты ответов» );

else if(trueAnswers.getText ().equals («„)) JOptionPane.showMessageDialog(null,“ Введите правильные ответы» );

else if(!corectAnswers ()) JOptionPane.showMessageDialog(null," Количество вариантов ответов должно быть больше количества правильных ответов" );

else if(!countQuestionOnTrueQuestion ()) JOptionPane.showMessageDialog(null," Среди вариантов ответов нет одного из указаных правильных ответов" );

else {.

thisList.add (" «+question.getText ());

//writeToFile (getTestName (), question. getText ());

if(checkString (trueAnswers.getText ())) thisList.add (" Один" );//writeToFile (getTestName (), «Один»);

else thisList.add (" Много" );//writeToFile (getTestName (), «Много»);

String text = String.valueOf(answers.getText ());

char[] arrayText = text. toCharArray ();

char[] temp = new char[500];

int k = 0, c=0;

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

int l = 0;

if (arrayText[i] == '.') {.

for (int j = k; j < i; j++) {.

if(arrayText[i]≠' ') {.

temp[l] = arrayText[j];

l++;

}.

}.

k=i+1;

c++;

String t="" ;

for(int p=0;plength;p++).

if(temp[p]≠' ').

t=t+String.valueOf(temp[p]);

thisList.add (" «+c+» «+t);//writeToFile (getTestName (),» «+c+» «+t);

for(int p=0;plength;p++).

temp[p]=' ';

}.

}.

thisList.add (" Правильно: «+trueAnswers.getText ()+» «);//writeToFile (getTestName (), «Правильно: «+trueAnswers.getText ());

end=true;

dispose ();

}.

}.

}.

}.

}.

Программный код класса CreaterTests:

package by.gsu.alukyanov;

import javax.swing.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.*;

import java.util.ArrayList;

import java.util.List;

public class CreaterTests extends JFrame{.

private boolean end=false;

private JLabel name,count;

private JTextField nameTest;

private JTextField countQuestions;

private JButton buttonCreating;

private int countQ=1;

public String getTestName (){return this.nameTest.getText ();}.

public int getCountQuestions (){return this.countQ;}.

public boolean isEnd (){.

return this.end;

}.

public void setEnd (){this.end=true;}.

public CreaterTests (){.

super(" Создание теста" );

name=new JLabel ();

count=new JLabel ();

name.setBounds (15, 20, 100, 20);

count.setBounds (15, 50, 150, 20);

name.setText (" Имя теста" );

count.setText (" Количество вопросов" );

buttonCreating=new JButton (" Начать создание теста" );

buttonCreating.setBounds (15,100,185,35);

nameTest=new JTextField ();

nameTest.setBounds (100,20,100,20);

countQuestions=new JTextField ();

countQuestions.setBounds (150,50,50,20);

setLayout (null);

add (name);add (nameTest);

add (count);add (countQuestions);

add (buttonCreating);

eHandler handler=new eHandler ();

buttonCreating.addActionListener (handler);

}.

public boolean checkString (String string) {.

try {.

Integer.parseInt(string);

} catch (Exception e) {.

return false;

}.

return true;

}.

public boolean notNullFile (String file){.

try {.

BufferedReader reader = new BufferedReader (new FileReader (file));

return true;

}catch (Exception e){ return false;}.

}.

public static List readFile (String file) throws IOException {.

BufferedReader reader = new BufferedReader (new FileReader (file));

String line;

List lines = new ArrayList ();

while ((line = reader. readLine ()) ≠ null) {.

lines.add (line);

}.

if(lines.get (0…

textArea = new JTextArea ();

textArea.setFont (new Font (" Times New Roman" , Font.PLAIN, 15));

textArea.setForeground (new Color (0, 0, 99));

textArea.setText (" Вас приветствует приложение тестирования. Что бы начать тестирование нажмите кнопку 'Тестирование' Что бы создать тест нажмите кнопку 'Cоздать тест'." );

textArea.setLineWrap (true);

textArea.setEditable (false);

textArea.setBounds (5, 5, 290, 100);

startButton1.setBounds (155, 120, 140, 30);

startButton2.setBounds (5, 120, 140,30);

setLayout (null);

add (textArea);

add (startButton1);

add (startButton2);

startButton1.addActionListener (handler);

startButton2.addActionListener (handler);

}.

class eHandler implements ActionListener {.

public void actionPerformed (ActionEvent EVENT){.

if(EVENT.getSource ()==startButton1){.

modeCreatingOff ();

end=true;

dispose ();

}.

if(EVENT.getSource ()==startButton2){.

modeCreatingOn ();

end=true;

dispose ();

}.

}.

}.

}.

Программный код класса Question:

package by.gsu.alukyanov;

import javax.swing.*;

import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.util.ArrayList;

import java.util.List;

/**

  • * Created by Антон on 27.11.2014.
  • */

public class Question extends JFrame{.

private static int countTrueAnswer=0;

private static int countQuestions=0;

private boolean oneAnswer=false;

public int countAnswers=0;

private List trueAnswers=new ArrayList ();

private List answer= new ArrayList ();

private JTextArea textArea;

private JButton button;

private List checkBoxList=new ArrayList ();

private List radioButtons=new ArrayList ();

private boolean end=false;

eHandler handler=new eHandler ();

public boolean isOneAnswer (){.

return this.oneAnswer;

}.

public List getTrueAnswers (){return this.trueAnswers;}.

public List getAnswer (){ return this.answer;}.

public boolean isEnd () { return this.end; }.

public void setEnd () { this.end=true; }.

public static int getCountQuestions (){.

return countQuestions;

}.

public static int getCountTrueAnswer (){.

return countTrueAnswer;

}.

public static void countTrueAnswersAdd (){.

countTrueAnswer++;

}.

public boolean checkString (String string) {.

try {.

Integer.parseInt(string);

} catch (Exception e) {.

return false;

}.

return true;

}.

public boolean isAnswerToQuestion (String line){.

char[] ln=line.toCharArray ();

String s=String.valueOf(" Правильно: «);

char[] answ=s.toCharArray (); // Правильно:

if(ln.length>=answ.length) {.

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

if (answ[i] ≠ ln[i]) return false;

}.

return true;

}.

return false;

}.

public Question (List question){.

super(question.get (0));

if(question.get (2).equals (" Один" )) this.oneAnswer=true;

else this.oneAnswer=false;

char[] trueAns=question.get (question.size ()-2).toCharArray ();

for(int i=0;ilength;i++){.

if(checkString (Character.toString(trueAns[i]))).

trueAnswers.add (Integer.parseInt(Character.toString(trueAns[i])));

}.

//————————————————————————————————————————

button=new JButton (" Ответить" );

textArea=new JTextArea ();

textArea.setFont (new Font (" Times New Roman" , Font.PLAIN, 15));

textArea.setForeground (new Color (0, 0, 99));

textArea.setText (question.get (1));

textArea.setLineWrap (true);

textArea.setEditable (false);

textArea.setBounds (5, 5, 400, 50);

textArea.setAlignmentY (400);

int y=60;

ButtonGroup bg = new ButtonGroup ();

if(isOneAnswer ()) {.

for (int i = 3; !isAnswerToQuestion (question.get (i)); i++) {.

radioButtons.add (new JRadioButton (question.get (i)));

radioButtons.get (radioButtons.size () — 1).setBounds (5, y, 400, 15);

bg.add (radioButtons.get (radioButtons.size () — 1));

add (radioButtons.get (radioButtons.size () — 1));

y += 30;

if(y>179) setSize (425, 250+i*30);

radioButtons.get (radioButtons.size () — 1).setVisible (true);

countAnswers++;

}.

}else {.

for (int i = 3; !isAnswerToQuestion (question.get (i)); i++) {.

checkBoxList.add (new JCheckBox (question.get (i)));

checkBoxList.get (checkBoxList.size () — 1).setBounds (5, y, 400, 15);

add (checkBoxList.get (checkBoxList.size () — 1));

y += 30;

if(y>179) setSize (425, 250 + i * 30);

checkBoxList.get (checkBoxList.size () — 1).setVisible (true);

countAnswers++;

}.

}.

int i=0;

setLayout (null);

add (textArea);

if(isOneAnswer ()){.

for(i=3;question.get (i).equals (««);i++) {.

add (radioButtons.get (i));

}.

}.

else {.

for (i = 2; question. get (i).equals (««); i++) {.

add (checkBoxList.get (i));

}.

}.

button.setBounds (5,190+(countAnswers-4)*15,100,30);

add (button);

button.addActionListener (handler);

}.

class eHandler implements ActionListener {.

public void actionPerformed (ActionEvent EVENT){.

if(EVENT.getSource ()==button){.

if(isNullAnswer ()){JOptionPane.showMessageDialog(null," Выберите ответ." );}.

else {.

if(!isOneAnswer ()) {.

for (int i = 0; i < countAnswers; i++) {.

if (checkBoxList.get (i).isSelected ()) {.

answer.add (i + 1);

}.

}.

}else {.

for (int i = 0; i < countAnswers; i++) {.

if (radioButtons.get (i).isSelected ()) {.

answer.add (i + 1);

}.

}.

}.

countQuestions++;

setEnd ();

dispose ();

}.

}.

}.

}.

public boolean isNullAnswer (){.

try {.

for (int i = 0; i < countAnswers; i++).

if (radioButtons.get (i).isSelected ()) return false;

return true;

}catch(Exception e){.

for (int i = 0; i < countAnswers; i++).

if (checkBoxList.get (i).isSelected ()) return false;

return true;

}.

}.

}.

Программный код класса FirstForm:

package by.gsu.alukyanov;

import javax.swing.*;

import java.awt.*;

import java.awt.List;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.BufferedReader;

import java.io.File;

import java.io.FileReader;

import java.io.IOException;

import java.util.*;

/**

  • * Created by Антон on 27.11.2014.
  • */

public class FirstForm extends JFrame {.

private JTextArea textArea;

private JButton startButton;

private JComboBox comboBox;

private java.util.List listTests=readFile (new File («„).getAbsolutePath ()+“ srcygsualukyanov» +" listOfTest" );

private java.util.List listTestsName=readFile (new File («„).getAbsolutePath ()+“ srcygsualukyanov» +" listOfTest" );

private String testName=String.valueOf(««);

eHandler handler=new eHandler ();

public java.util.List readFile (String file) {.

try {.

BufferedReader reader = new BufferedReader (new FileReader (file));

String line;

java.util.List lines = new ArrayList ();

while ((line = reader. readLine ()) ≠ null) {.

lines.add (line);

}.

if (lines.get (0) == null) return null;

return lines;

}catch (Exception e){ JOptionPane.showMessageDialog(null," Не удалось найти файл с названиями тестов «+e);}.

return null;

}.

public String getTestName (){.

return this.testName;

}.

public void setTestName (String testName){.

this.testName=String.valueOf(testName);

}.

public FirstForm (String titleForm){.

super(titleForm);

startButton=new JButton (" Начать тест" );

comboBox=new JComboBox ();

String[] list1=new String[listTests.size ()];

for(int i=0;i<listTests.size ();i++).

list1[i]=String.valueOf(listTests.get (i));

DefaultComboBoxModel modelComboBox=new DefaultComboBoxModel (list1);

comboBox.setModel (modelComboBox);

comboBox.setSelectedIndex (0);

textArea=new JTextArea ();

textArea.setFont (new Font (" Times New Roman" , Font.PLAIN, 15));

textArea.setForeground (new Color (0, 0, 99));

textArea.setText (" Вас приветствует приложение тестирования. Что бы начать тестирование, выбирите тест и нажмите кнопку 'Начать тест'." );

textArea.setLineWrap (true);

textArea.setEditable (false);

GroupLayout layout=new GroupLayout (getContentPane ());

getContentPane ().setLayout (layout);

layout.setAutoCreateGaps (true);

layout.setAutoCreateContainerGaps (true);

layout.setHorizontalGroup (.

layout.createSequentialGroup ().

.addComponent (textArea).

.addGroup (layout.createParallelGroup (GroupLayout.Alignment.LEADING).

.addComponent (comboBox).

.addComponent (startButton)).

);

layout.setVerticalGroup (.

layout.createSequentialGroup ().

.addGroup (layout.createParallelGroup (GroupLayout.Alignment.BASELINE).

.addComponent (textArea).

.addComponent (comboBox)).

.addComponent (startButton).

);

startButton.addActionListener (handler);

}.

class eHandler implements ActionListener {.

public void actionPerformed (ActionEvent EVENT){.

if(EVENT.getSource ()==startButton){.

setTestName (String.valueOf(listTestsName.get (comboBox.getSelectedIndex ())));

dispose ();

}.

}.

}.

}.

Описание программного средства

Программа написана на языке программирования Java 7, позволяющая проводить тестирование.

логическая структура системы.

Рисунок 2.4- логическая структура системы Тестирующая программа предназначена для проверки знаний учащихся, позволяющая преподавателю в короткое время опросить несколько десятков учеников.

Выводы по второй главе При разработке данного программного продукта использовались программные средства:

Intellij IDEA 14 — коммерческая интегрированная среда разработки программного обеспечения на многих языках программирования. В Intellij IDEA 14 разрабатывался дружественный интерфейс, для работы с системой тестирования. Также создание рабочей области типа панели управления «кнопок». В приложение использовались кнопки, метки, текстовые поля, переключатели, текстовые области, чекбоксы и формы.

Вопросы тестов и правильные ответы хранятся в файлах типа File, созданных с помощью этого же приложения.

Показать весь текст
Заполнить форму текущей работой