⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 question.java

📁 java做的一个模拟考试的平台` 有多选题和单选题~可以自测打分 每次能够自己从题库中选折10个测试题来~
💻 JAVA
字号:
 /**
 * @(#)Question.java
 *
 *
 * @author 
 * @version 1.00 2008/6/6
 */

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.lang.*;
//import java.awt.Color;

public class Question extends JFrame{
	    
    private CardLayout clt = new CardLayout();
    
    private QuestionPanel Qpanel[]; 
    private SignInPanel mySignpanel;
    private ShowResult showRes;
    JMenuBar mb;
    JMenu mFile;
	JMenu mTest;
	JMenuItem iExit,iStartExam,iHandIn;
	
	boolean isSignin=false;
	boolean isResult=false;
	
	private int qSort[]=new int[20];
	
	private int n=0;
	
	

    /////////////////////////////////////////////////  
	private int rightNum=0;	//做对几个题目

//	private int score=0;	//成绩
	
	private String testName;  //测试人姓名
 	private String testClass;   //班级
    private String testNumber;   //学号 
	////////////////////////////////////////////////////////////////////////////////////////////////////
    private int  QuestionStyle[]={1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2};
    private String  QuestionChoice1[]={"sizeof","1991","Java","Reader","FileWriter",
                                       "无法编译","book#","extend","object","java.awt",
                                       "c=a+b;","Basic","public void example( int m){...}","String [] a","IDoLikeTheLongNameClass",
                                       " 在java中只允许单一继承","如果修饰变量,则一旦赋了值,就等同一个常量","public IOException methodName()","public void start()","BorderLayout"};
    private String  QuestionChoice2[]={"abstract","1992","Hello","FileReader","PushbackReader",
                                       "a Default","$dollar","extends","Object","java.lang",
                                       "a+b=c;","C++","public int example(){...}","String a[]","$byte ",
                                       "在java中一个类只能实现一个接口","如果修饰类,则该类只能被一个子类继承","public void methodName() throws Exception","public void init()","CardLayout"};
    private String  QuestionChoice3[]={"NULL","2001","class","BufferedInputStream","FilterReader",
                                       "a","long","implement","lang","java.util",
                                       "c=a; c=c+b;","Java"," public void example2(){...}","char a[][]","3_case",
                                       "在java中一个类不能同时继承一个类和实现一个接口","如果修饰方法,则该方法不能在子类中被覆盖","public void methodName() throw IOException","public void stop()","GridLayout"};
    private String  QuestionChoice4[]={"Native","1996","Class","StringReader","FileInputStream",
                                       "default","user-name","implements","Component","java.io",
                                       "a=c; c=c+b;","Pascal","public int example ( int m, float f){...}","String a[10]","_ok",
                                       "java的单一继承使代码更可靠","如果修饰方法,则该方法所在的类不能被继承","public void methodName() throws IOException","public void panit(Graphics g)","FlowLayout"};
    private String QuestionTitle[]={"下面哪些是java里的关键字?",
                                     "第一个java编译器是在哪一年推出的?",                                    
                                     "以下是java保留字的是?",   
                                     "以下哪个类不属于字符流类?",
                                     "以下哪个类属于字节流类?",
                                     "编译执行下面的代码: \n char c='a';\nswitch (c)\n { case 'a':  System.out.println('a'); \n   default: System.out.println('default');}\n输出结果是?",                         
                                     "下面的标识符,哪个是合法的?",
                                     "实现接口的关键字是哪个?",
                                     "下面哪个类是所有类的父类或祖先?",
                                     "Vector向量类位于哪个包中?",                                    
                                     "有a、b和c三个整数变量,以下哪些选项表示c是a与b的和?",                                    
                                     "以下哪些属于计算机高级编程语言?",                                     
                                     "下面哪几个函数是public void example(){...}的重载函数?",                                     
                                     "下面选项正确声明一个一维数组的有(        )?",                                     
                                     "下面选项中属于有效的标示符的有(         )?",                                     
                                     "下面关于继承的叙述正确的有 (      )?",                                     
                                     " 在Java中,下列关于final关键字的说法正确的有(      )?",                                     
                                     "Give incompleted method:\n                \n{  if(unsafe()){//do something}\n  else if(safe()){//do the other} }\nThe method unsafe() well throe an IOException,\n which completes the method of declaration when added at line one? ",                                     
                                     "下面属于java Applet程序构架中的对象方法的有(          )?",                                     
                                     "在java中,下面属于与版面配置有关的类有(             )?"};
    private String  QuestionAnswer[]={"1B34","123D","12C4","A234","123D","1B34","1B34","123D","1B34","12C4",
                                      "A2C4","ABCD","A23D","AB34","AB3D","A23D","A2C4","1B3D","ABCD","ABCD"};
     
    
     
     
    public Question( ){
    	super("北京语言大学2008年JAVA期末选择题");
    	

    	getContentPane().setLayout(clt);
    	
    	
    	for(int i=0;i<20;i++)   qSort[i]=i;
    	
    	//创建菜单并添加菜单到窗体
    	mb=new JMenuBar();
    	mFile=new JMenu("File");
		mTest=new JMenu("测试");	
		iStartExam=new JMenuItem("开始测试");
		iHandIn=new JMenuItem("交卷");
		iExit=new JMenuItem("退出");
		
		mb.add(mFile);
		mb.add(mTest);
		mTest.add(iStartExam);
		mTest.add(iHandIn);
		mFile.add(iExit);		
		setJMenuBar(mb);
		
		
		iExit.addActionListener
        (
            new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    System.exit(0);
                }
            }
        ); 
        
        iStartExam.addActionListener
        (
            new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                   	clearFrame();
                    addSignin();
    		  	    
                }
            }
        ); 
	
	
	    iHandIn.addActionListener
	    (
	    	
	        new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                	if(isSignin) 
                	{
                		JOptionPane.showMessageDialog(null,"您还没有开始答题,请点击开始测试!","提示!",JOptionPane.ERROR_MESSAGE);
                	}
                   	else{
                   		
                   		//JOptionPane.showMessageDialog(null,"xxxxx");
                   		clearFrame();
                   		addResult();
                   	}
    		  	    
                }
            }	
	    	   	
	    );
	    Qpanel=new QuestionPanel[10];
	    
	    addSignin();
        
    	
        setSize(550,720);
    	setVisible(true);
        setLocation(300,50);    
        setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    }
    //构造函数
    
     public void addQuestion(){
     	
     	 int rnd = (int) Math.abs(Math.random()*19);//在洗完牌后随机抽牌 
     	 int k=0;//
     	 
       	 for(int i=0;i<10;i++)	
    	{
            
            k=(rnd+i)%20; //随机抽题
         	Qpanel[i]=new QuestionPanel(QuestionStyle[ qSort[k] ],i+1,QuestionChoice1[ qSort[k] ],QuestionChoice2[ qSort[k] ] ,QuestionChoice3[ qSort[k] ],QuestionChoice4[ qSort[k] ],QuestionTitle[ qSort[k] ],QuestionAnswer[ qSort[k] ]);
    		add(Integer.toString(i+1),Qpanel[i]);
    		Qpanel[i].bPreQ.addActionListener(new KoListener(clt,this.getContentPane()) );
    		Qpanel[i].bNextQ.addActionListener(new KoListener(clt,this.getContentPane()) );
    			
        }
            Qpanel[0].bPreQ.setEnabled(false);
            Qpanel[9].bNextQ.setEnabled(false);
            Qpanel[9].bSubmit.setVisible(true);
            Qpanel[9].bSubmit.addActionListener(new ActionListener(){
        	    public void actionPerformed(ActionEvent e){
        	 	
        	 	addResult();
          }	
        });
   
    }
    
    
    
    public void addSignin(){
    	
    	mySignpanel=new SignInPanel();
    	add("0",mySignpanel);
    	mySignpanel.bStart.addActionListener(new KoListener(clt,this.getContentPane()) );
    	mySignpanel.setVisible(true);
    	clt.next(getContentPane());
    	isSignin=true;
    	shuffleQ();     //随机20题中选10题.......................

    }
    
    
    
    public void addResult(){
    	
    	showRes=new ShowResult(testName,testClass,testNumber);
        add("10",showRes);
        isResult=true;
        clt.next(getContentPane());
       	testAnswers();
    	setResult();
    	showRes.bStart.addActionListener(new ActionListener(){
    		public void actionPerformed(ActionEvent e){
    						
    			  clearFrame();
                  addSignin();	
    		}	
    	});
    	
    }
    
    
    
    public void clearFrame(){
    	
    	if(  isSignin  ) remove(mySignpanel);
    	
    	if(  isResult  ) remove(showRes);
    	
    	for(int i=0;i<10;i++)
    	{
    		if( Qpanel[i]!=null )
    		{
    			this.remove(Qpanel[i]);
    			
    		}
    	}	
    	
    	isSignin=false;
	    isResult=false;
        rightNum=0;	
    	
    }
    
     public void testAnswers(){
    	
    	for(int i=0;i<10;i++)
    	{
    		if( Qpanel[i].TorF() )
    		{
    		    rightNum++;	
    		}
		
    	}
	
   	}
   	
   	
   	 public void setResult(){
    	
    	showRes.bResult.setText("          您一共回答了10题,答对:"+ rightNum+"题!  准确率为"+ rightNum*10+"% !             ");
    	
   	}
   	
   	
 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////  	
   	
   	 public void shuffleQ(){
   	 		
   	  int rnd = 0; 
      int numOfShuffle =2;   //洗牌次数
      for (int i=0; i<numOfShuffle; i++) 
      { 
        rnd = (int) Math.abs(Math.random()*19);    //产生随机数 
        shuffleBase(qSort,0,20,rnd); 
      } 
      
      mySignpanel.bStart.setEnabled(true);
	
   	 }
   	 
   	 
   	 
   	public  void shuffleBase(int []a,int startIndex,int size, int splitIndex)  //洗牌子程序
    {
   	   if (splitIndex * 2 > size) 
      { 
        swap(a,startIndex,splitIndex,size-splitIndex); 
        shuffleBase(a,size-splitIndex,splitIndex,size-splitIndex); 
      } 
       else if (splitIndex * 2 < size) 
      { 
        swap(a,startIndex,size-splitIndex,splitIndex); 
        shuffleBase(a,startIndex,size-splitIndex,splitIndex); 
      } 
       else 
      { 
        swap(a,startIndex,splitIndex,splitIndex); 
      } 

    } 
   	 
    public  void swap(int []a,int srcIndex,int dstIndex, int size) //交换2张牌
    { 
      int mid;  
      for (int i=0; i<size;i++) 
      {  
         mid=a[srcIndex+i];
         a[srcIndex+i]=a[dstIndex+i];
         a[dstIndex+i]=mid;
      }
    }
   	 
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////  	 
     public class KoListener implements ActionListener{
     	 public CardLayout clt;
     	 public Container p;
     	
     	public KoListener(CardLayout clayout,Container pnl)
     	{
     		clt=clayout;
     		p=pnl;
     	}
     	public void actionPerformed(ActionEvent e)
     	{
     		
    		if( e.getActionCommand()=="开始答题")
    		{
    			
    			//JOptionPane.showMessageDialog(null,"asdasdas");
    			addQuestion();
    		  	clt.next(p);

    		    testName=mySignpanel.tName.getText();
 	            testClass=mySignpanel.names[mySignpanel.comboClass.getSelectedIndex()];
                testNumber=mySignpanel.tNumber.getText();
    			
    			remove(mySignpanel);
    			isSignin=false;
    			n=1;
    		}
     		if(e.getActionCommand()=="  <--  上一题        ")
     		{
     			clt.previous(p);
     			n--;	
     									
     		}
     		else if(e.getActionCommand()=="       下一题  -->   ") {
     			
     			if( Qpanel[n-1].TorF() ){
     				
     				System.out.println("#");
     			    System.out.println("您刚回答了第"+n+"题,恭喜您回答正确!");	
     			    
     				
     			}
     			else{
     				
     				String RAnswer=" : ";
     				
     				for(int i=0;i<4;i++)
     				{
     					switch(i){		
     						case 0:
     							if(Qpanel[n-1].QuestionAnswer.charAt(i) =='A') RAnswer+="A";
     							break;
     						
     						case 1:
     							if(Qpanel[n-1].QuestionAnswer.charAt(i) =='B') RAnswer+="B";
     							break;	
     						
     						case 2:
     							if(Qpanel[n-1].QuestionAnswer.charAt(i) =='C') RAnswer+="C";
     							break;
     						
     						case 3:
     							if(Qpanel[n-1].QuestionAnswer.charAt(i) =='D') RAnswer+="D";
     							break;
     						
     					}
     				}
     	
     				System.out.println("#");
     				System.out.println("您刚回答了第"+n+"题,抱歉回答错误!");
     				System.out.println("正确答案为"+RAnswer+" ! 请返回修改!");
     				
     			}
     			
     			clt.next(p);
     			n++;
     		  			
     		}//else
     		
     	}//actionPer
     	
     }//class
     
     
      public static void main(String args[]){
      	
     	Question application=new Question();
     	application.setVisible(true);
     }

}//class

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -