import java.awt. *;
import java.awt. event.*;
import javax.swing.*;
class QuestionSeries{
static String info ="IT QUIZ \n \nINSTRUCTIONS:\nThere are 25 questions in this test and 10 minutes to complete them all.\nThe finish button is highlighted in blue when you reach the end of the test. \nClicking the finish button will display the results with the correct answers marked in light red. \n \nThe timecounter begins when you click on the 'start' button \n \nBest of luck!\n\n";
static String []question ={"Question 1:\nWho invented Poking?\n",
"Question 2:\n This game was developed by a Finland based company for the iOS, Android and Symbian3 platforms. It even won the Crunchies'11 runners up award for the 'Best Time Sink Application'. A newer version of this game was recently launched, with no difference, but with monkeys. Identify the game.\n",
"Question 3: \n Lion is an OS by which company\n",
"Question 4:\n Ashish Kashyap is the CEO of which company?\n",
"Question 5:\n The world's first X invented by Tom Cranston, Fred Longstaff and Kenyon Taylor working on the Royal Canadian Navy's DATAR project in 1952. It used a standard Canadian five-pin bowling ball. Identify x\n",
"Question 6:\n This was invented by David Bradley and is known as the ‘three-finger-salute’. What am I talking about?\n",
"Question 7:\n[W]e came across the word 'X', and it was just perfect. The definition was 'a short burst of inconsequential information’ what am I talking about. ?\n",
"Question 8:\n What was the codename for ‘Kinect for Xbox360\n",
"Question 9:\n What is the simplest and the most used encryption technique. It uses substitution\n",
"Question 10:\n Which of the following cannot be connected using PS/2 port\n",
"Question 11:\nWhat is Google's URL shortener called ?\n",
"Question 12:\n Which company owns Alexa?\n",
"Question 13:\n What would you call a list of contacts that the user deems are acceptable to receive e-mails from and should not be sent to the trash folder?\n",
"Question 14:\n What does the ISO-9660 standard relate to\n",
"Question 15:\nExpand MMORPG\n",
"Question 16:\n Who coined the term 'bit' and 'software\n",
"Question 17:\nHTML was originally a subset of another document-formatting standard. Name it\n",
"Question 18:\nIn PHP, the function 'ECHO' is the same as which other function?\n",
"Question 19:\nwhat is the name given to Android 4.0\n",
"Question 20:\n Shadow , Speedy , Bashful , Pokey are characters from which famous game?\n",
"Question 21:\n This programming language was published by Niklaus Wirth named in honor of a French mathematician and philosopher.\n",
"Question 22:\n What is the name given to something that the computer will automatically use unless you tell it otherwise?\n",
"Question 23:\n PCI Stands for\n",
"Question 24:\n Linux kernel is written in? \n",
"Question 25:\n Which was the first computer virus?\n"
};
static String [][]answers ={{"Jerry Yang\n","Mark Zuckerberg\n","Sergey M. Brin\n","Eduardo saverin\n"},{"Winds of steel \n"," \n Angry Birds","Temple Run\n"," \n Replica Island\n"},{" \n Microsoft\n","Red hat \n","Apple \n","Oracle"},{" \n Ibibo \n","HCL \n"," \n TCS\n"," \n Yahoo\n"},{" \n Trackball\n"," \nMouse \n"," \n USB \n"," \n Joystick \n"},{" \n XYZ \n"," \nE-Mail\n"," \n Joystick \n","Ctrl+Alt+Del \n"},{" \nOrkut\n"," \nFacebook\n"," \nYoutube\n"," \nTwitter\n"},{" \nLady Bird\n"," \nPaxos\n"," \nProject Natal\n"," \n Paxos\n"},{" \nROT13\n"," \nWEP\n"," \n WPA \n"," \n Caesar Cipher \n"},{" \nMouse \n"," \nKeyboard\n"," \nJoystick\n"," \nTrackball\n"},{" \ndwarfURL.com\n"," \nTiny.cc\n"," \nBit.ly\n"," \nGoo.gl\n"},{" \nAmazon\n"," \nApple\n"," \nGoogle \n"," \nMicrosoft\n"},{" \nBlock list\n"," \n black lsit \n"," \nE-mail white list\n"," \nRealtor list\n"},{"Hard Disk \n"," \nData cable\n"," \nCD-Rom\n"," \n Mother Board\n"},{" \nMultimode online roller play games\n"," \nMy Mode of racing port game\n"," \nMassive,multiplayer or road play games\n"," \n Massively multiplayer online role playing games\n"},{" \nBarry Collin\n"," \nBill Gates\n"," \n2 Algore \n"," \n John Tukey\n"},{" \n Java\n"," \n SGML\n"," \nAJAX\n"," \nOASIS\n"},{" \nEdit\n"," \nRun\n"," \n Compile \n"," \n Print\n"},{" \nFroyo\n"," \nGingerbread\n"," \nIcecream Sandwich\n"," \n Honeycomb \n"},{" \n Contra \n"," \n Packman\n"," \nMario\n"," \nAladdin\n"},{" \nC\n"," \n Pascal\n"," \nJava\n"," \nCOBOL\n"},{" Specification\n"," \nWildcard\n"," \nDefault\n"," \n Rule\n"},{" Personal Computer Interface\n"," Peripheral Computer Interconnect\n","Peripheral Component Interconnect\n"," Peripherical Communication Interface\n"},{" \n C++\n"," \n C \n"," \n Java \n"," \n PHP \n"},{"Brain\n","Trojan\n","Melisa\n"," \n Bug \n"} };
static int []n = {2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
static String []choice= {"2","2","3","1","1","4","4","3","4","3","4","1","3","3","4","4","2","4","3","2","2","3","3","2","1"};
static int tally = choice.length;
static String testtitle="Online IT Quiz";
static int timeLimit =10;
static int passMark = 15;
}
/* OnlineTest class */
public class OnlineTest extends JFrame{
static String studentname ="";
static int TOTAL=0;
static {
try{
TOTAL = QuestionSeries.tally;
/* The input window */
studentname = JOptionPane.showInputDialog("Enter your name: ");
if(studentname.length() < 1) studentname = "Anonymous ";
else studentname = studentname.trim() + " ";
}catch(NullPointerException e){ System.exit(0); }
}
int seconds, minutes;
int quesnum, itemCheck, mark;
final String TESTTITLE = QuestionSeries.testtitle;
final int TIMELIMIT = QuestionSeries.timeLimit;
final int PASS = QuestionSeries.passMark;
String []answers = new String[TOTAL];
JButton []choice_button = new JButton[6];
JTextArea answerboxes[] = new JTextArea[4];
JCheckBox []boxes = new JCheckBox[4];
JTextPane pane = new JTextPane();
JLabel student, choose, message, timecounter, testresult;
boolean start_test, check_answer, allowRestart, finishtest;
Northwindow panelNorth = new Northwindow();
Southwindow panelSouth = new Southwindow();
Centerwindow panelCenter = new Centerwindow();
/* OnlineTest Constructor */
protected OnlineTest(){
for (int i=0; i<TOTAL; i++) answers[i] ="";
getContentPane().setLayout(new BorderLayout() );
getContentPane().add("North", panelNorth);
getContentPane().add("South", panelSouth);
getContentPane().add("Center", panelCenter);
int width = 0, height=0;
if(java.awt.Toolkit.getDefaultToolkit().getScreenSize().getWidth()<799){width= 640; height=460; }
else {width=720; height=540; }
setSize(width,height);
Dimension dim = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
setLocation((dim.width-width)/2, (dim.height-height)/2);
}
/**
** Northwindow class
**/
class Northwindow extends JPanel{
/**
** Northwindow constructor
**/
public Northwindow(){
setLayout(new GridLayout(2,2));
setBackground(new Color(230, 230, 255));
student = new JLabel("\t Welcome : "+studentname+" to the Online IT Quiz");
student.setFont(new Font("",Font.BOLD,16) );
message = new JLabel();
message.setForeground(Color.blue);
add(student);
add(message);
add(new JLabel(" ") );
add(new JLabel(" ") );
setBorder(BorderFactory.createEtchedBorder() );
}
}
/**
** Southwindow class
**/
class Southwindow extends JPanel{
public Southwindow(){
String []key = {"","start:","next:","finish:","check next:","check previous:"};
for(int i=0; i<choice_button.length; i++)
{
choice_button[i] = new JButton(key[i]);
choice_button[i].addActionListener(new ActionHandler() );
if(i !=0)add(choice_button[i]);
}
setBorder(BorderFactory.createEtchedBorder() );
}
}
/**
** Centerwindow class
**/
class Centerwindow extends JPanel{
public Centerwindow(){
setLayout(new GridLayout(1,2) );
JScrollPane west = new JScrollPane(pane);
pane.setForeground(Color.red);
pane.setFont(new Font ("monospaced",0,12) );
pane.setText(QuestionSeries.info);
pane.setEditable(false);
JPanel east = new JPanel();
east.setLayout(new BorderLayout() );
JPanel northEast = new JPanel();
northEast.setBackground(new Color(230, 230, 255) );
east.add("North", northEast);
JPanel westEast = new JPanel();
westEast.setLayout(new GridLayout(6,1) );
east.add("West", westEast);
JPanel centerEast = new JPanel();
centerEast.setLayout(new GridLayout(6,1) );
centerEast.setBackground(new Color(255,255,200));
east.add("Center", centerEast);
timecounter = new JLabel(" There are "+TOTAL+" questions in total");
timecounter.setFont(new Font ("Arial",Font.BOLD,16) );
timecounter.setForeground(new Color(0,90,20) );
northEast.add(timecounter);
westEast.add(new JLabel(" "));
String []boxs = {" A ", " B ", " C ", " D "};
for(int i=0; i<boxes.length; i++) {
boxes[i] = new JCheckBox(boxs[i]);
boxes[i].addItemListener(new ItemHandler() );
westEast.add(boxes[i]);
}
westEast.add(new JLabel() );
choose = new JLabel(" CHOOSE CORRECT ANSWERS");
choose.setBorder(BorderFactory.createEtchedBorder() );
centerEast.add(choose);
JScrollPane panes[] = new JScrollPane[4];
for(int i=0; i<answerboxes.length; i++){
answerboxes[i] = new JTextArea();
answerboxes[i].setBorder(BorderFactory.createEtchedBorder() );
answerboxes[i].setEditable(false);
answerboxes[i].setBackground(Color.white);
answerboxes[i].setFont(new Font("",0,12) );
answerboxes[i].setLineWrap(true);
answerboxes[i].setWrapStyleWord(true);
panes[i] = new JScrollPane(answerboxes[i]);
centerEast.add(panes[i]);
}
if(TIMELIMIT >0)testresult = new JLabel(studentname+", You have only : "+TIMELIMIT+" minutes to complete.");
else testresult = new JLabel(" There is no time limit for this test");
testresult.setBorder(BorderFactory.createEtchedBorder() );
centerEast.add(testresult);
add(west);
add(east);
}
}
/**
** ActionHandler class to handle all the action events from the buttons.
**/
class ActionHandler implements ActionListener{
/* actionPerformed method */
public void actionPerformed(ActionEvent evt){
String source = evt.getActionCommand();
if(source.equals("start:")){
choice_button[1].setVisible(false);
start_test=true;
allowRestart=true;
if(TIMELIMIT >0)new Timer(); // inner Timer class
panelSouth.remove(choice_button[1]); //start
displayquestion();
}
if(start_test){
if(source.equals("previous:")) {
recordanswer();
quesnum--;
if(quesnum == -1) quesnum=TOTAL-1;
checkteststatus();
displayquestion();
}
if(source.equals("next:")) {
recordanswer();
quesnum++;
if(quesnum == TOTAL-1) finishtest=true;
if(quesnum == TOTAL) quesnum=0;
checkteststatus();
displayquestion();
}
if(source.equals("finish:")) {
if (finishtest){
recordanswer();
quesnum = 0;
choice_button[4].setBackground(Color.lightGray);
timecounter.setForeground(Color.blue);
timecounter.setFont(new Font ("Arial",0,14) );
start_test=false;
check_answer=true;
panelSouth.add(choice_button[0]);
mark_ques();
displayquestion();
checkteststatus();
calculateResult();
}
else JOptionPane.showMessageDialog(null,"Cycle through all questions before pressing finish",
"User Message",JOptionPane.INFORMATION_MESSAGE);
}
}
if (check_answer){
if(source.equals("check next:")) {
quesnum++;
if(quesnum == TOTAL) quesnum=0;
mark_ques();
displayquestion();
checkteststatus();
}
if(source.equals("check previous:")) {
quesnum--;
if(quesnum == -1) quesnum=TOTAL-1;
mark_ques();
displayquestion();
checkteststatus();
}
}
validate();
}
/* Timer class */
class Timer extends Thread implements Runnable{
public Timer(){
new Thread(this).start();
}
public void run() {
while(start_test){
try {
Thread.sleep(1000);
seconds++;
if(seconds % 60 == 0 && seconds != 0){
seconds -= 60;
minutes++;
}
timecounter.setText(" Time Counter: "+minutes+" mins : "+seconds+" secs ");
if(minutes==TIMELIMIT){
start_test=false;
endTest();
}
}
catch(InterruptedException ex) { System.out.print(ex); }
}
}
}
/* checkteststatus method */
public void checkteststatus(){
if((quesnum == TOTAL-1)&&(start_test))choice_button[3].setBackground(Color.green);
else choice_button[4].setBackground(Color.lightGray);
if(answers[quesnum].length() >0){
for(int i=0; i<answers[quesnum].length(); i++)
boxes[Integer.parseInt(answers[quesnum].substring(i,i+1) )-1].setSelected (true);
}
else for(int i=0; i<boxes.length; i++)boxes[i].setSelected(false);
}
/* displayquestion method */
public void displayquestion(){
int j = quesnum+1;
pane.setText(QuestionSeries.question[quesnum]);
if(start_test)message.setText("Question "+j+" out of "+TOTAL);
for (int i=0; i<4; i++)answerboxes[i].setText(QuestionSeries.answers[quesnum][i]);
if(start_test){
String temp="";
if(QuestionSeries.n[quesnum]==1) temp="<html> Choose only <b>ONE</b> Option</html>";
else if(QuestionSeries.n[quesnum]==2) temp="<html> Choose <b>TWO </b> Options</html>";
else if(QuestionSeries.n[quesnum]==3) temp="<html> Choose <b>THREE</b> Options</html>";
else temp="<html> <b>ALL are true</b> true</html>";
choose.setText(temp);
}
else {
timecounter.setText(" Your choices are shown in the boxes");
choose.setText(" Correct answers are marked in light red.");
}
}
/* record answer method */
public void recordanswer(){
String tmp = "";
for(int i=0; i<boxes.length; i++) if(boxes[i].isSelected() ) tmp +=i+1;
answers[quesnum] = tmp;
}
/* endTest method */
public void endTest(){
message.setText("TIME OVER: please press 'finish'");
choice_button[2].setEnabled(false);
choice_button[3].setEnabled(false);
choice_button[4].setEnabled(true);
}
/* mark_ques() method to highlight correct answers */
public void mark_ques(){
for(int i=0; i<answerboxes.length; i++) answerboxes[i].setBackground(Color.white);
for(int i=0; i<QuestionSeries.choice[quesnum].length(); i++)
answerboxes[Integer.parseInt(QuestionSeries.choice[quesnum].substring(i,i+1))-1].setBackground(Color.red);
if(QuestionSeries.choice[quesnum].equals(answers[quesnum])) message.setText("Answer correct, well done!");
else message.setText("Sorry, you got this one wrong.");
}
public void calculateResult(){
mark=0;
double temp=0.0;
java.text.DecimalFormat df = new java.text.DecimalFormat("#0.#");
for(int i=0; i<TOTAL; i++)if(QuestionSeries.choice[i].equals(answers[i]))mark++;
temp=(double)mark;
if(temp/TOTAL*100 >=PASS) testresult.setText(" Well done "+studentname.substring(0,studentname.indexOf(' ') )+", you passed");
else testresult.setText(" Better luck next time "+studentname.substring(0,studentname.indexOf(' ') ) );
student.setText(" Final score for "+studentname+": "+mark+" out of "+TOTAL+": "+df.format(temp/TOTAL*100)+"%");
new Resultwindow().show();
}
}
/* Resultwindow class */
class Resultwindow extends JFrame{
Resultwindow() {
super( studentname+" results: " +(mark*100/TOTAL >=PASS?"PASS":"FAIL") );
Container cont = getContentPane();
cont.setLayout(new GridLayout(TOTAL/2+3,5,2,5) );
cont.setBackground(new Color(255,220,255) );
cont.add(new JLabel(" "+"Marks: "+mark+"/"+TOTAL+": "+"Percentage: "+(mark*100/TOTAL)+"%") );
for(int i=0; i<3; i++)cont.add(new JLabel() );
String temp[] = new String[TOTAL];
for(int i=0; i<TOTAL; i++){
if(QuestionSeries.choice[i].equals(answers[i])) temp[i]="correct";
else temp[i]="wrong";
}
for(int i=0; i<TOTAL; i++) cont.add(new JLabel(" Question "+(i+1)+": "+temp [i]) );
pack();
setLocation(200,200);
}
}
/* ItemHandler class */
class ItemHandler implements ItemListener{
public void itemStateChanged(ItemEvent evt){
if(start_test){
for(int i=0; i<boxes.length; i++) if(boxes[i].isSelected() ) itemCheck++;
if(itemCheck > QuestionSeries.n[quesnum]){
java.awt.Toolkit.getDefaultToolkit().beep();
if(QuestionSeries.n[quesnum]==1) JOptionPane.showMessageDialog(null,"<html><font size='4' color='00308a'><center>"+
"There is only "+QuestionSeries.n[quesnum]+" possible<br> answer to question "+(quesnum+1)+
"<html>","User Information Message",JOptionPane.INFORMATION_MESSAGE);
else JOptionPane.showMessageDialog(null,"<html><font size='4' color='00308a'><center>"+
"There are only "+QuestionSeries.n[quesnum]+" possible<br> answers to question "+(quesnum+1)+
"<html>","User Information Message",JOptionPane.INFORMATION_MESSAGE);
}
itemCheck=0;
}
}
}
/* main method */
public static void main(String [] args){
OnlineTest frame = new OnlineTest();
frame.setTitle(" "+QuestionSeries.testtitle);
frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
frame.setVisible(true);
}
}