📄 question.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 + -