📄 exam.java
字号:
package project;
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import java.util.*;
import javax.swing.*;
public class Exam extends JFrame implements ActionListener,ItemListener
{
String question[]=new String[100];
String answer[]=new String[100];
String userAnswer[]=new String[100];
int type[]=new int[100];
int amount;
int bh=0;
String ch[]={"A","B","C","D","E"};
Checkbox cb[]=new Checkbox[5];
Checkbox radio[]=new Checkbox[5];
TextArea content;
Button ok;
Button next;
Button previous;
Panel answercard;
Label hint;
CountTime remain;
final int examtime=5400;
public Exam()
{
super("考试系统");
readQuestion();
for(int i=0;i<amount;i++)
{
userAnswer[i]="";
}
setLayout(new BorderLayout());
Panel up=new Panel();
hint=new Label("共有?道试题,第?题");
ok=new Button("交卷");
up.add(hint);
up.add(ok);
remain=new CountTime(examtime,this);
up.add(remain);
new Thread(remain).start();
add("North",up);
Panel middle=new Panel();
content=new TextArea(10,50);
middle.add("Center",content);
content.setText(question[bh]);
Panel duoxuan=new Panel();
duoxuan.setLayout(new FlowLayout(FlowLayout.CENTER,10,10));
for(int i=0;i<5;i++)
{
cb[i]=new Checkbox(ch[i]);
duoxuan.add(cb[i]);
cb[i].addItemListener(this);
}
Panel danxuan=new Panel();
CheckboxGroup style=new CheckboxGroup();
danxuan.setLayout(new FlowLayout(FlowLayout.CENTER,10,10));
for(int i=0;i<5;i++)
{
radio[i]=new Checkbox(ch[i],false,style);
danxuan.add(radio[i]);
radio[i].addItemListener(this);
}
answercard=new Panel();
answercard.setLayout(new CardLayout());
answercard.add(danxuan,"singlechoice");
answercard.add(duoxuan,"multichoice");
middle.add("South",answercard);
add( "Center" , middle );
display_ans();
Panel bottom=new Panel();
previous=new Button("上一题");
bottom.add(previous);
next=new Button("下一题");
bottom.add(next);
add("South",bottom);
ok.addActionListener(this);
next.addActionListener(this);
previous.addActionListener(this);
setSize(400,350);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public void display_ans()
{
hint.setText("共有"+amount+"道试题,第"+(bh+1)+"题");
CardLayout lay=(CardLayout)answercard.getLayout();
if(type[bh]==1)
{
lay.show(answercard, "singlechoice");
for(int i=0;i<5;i++)
{
if(userAnswer[bh].equals(ch[i]))
{
radio[i].setState(true);
}
}
}
else
{
lay.show(answercard, "multichoice");
for(int i=0;i<5;i++)
{
cb[i].setState(false);
if( userAnswer[bh].length( ) > 0 )
{
if( userAnswer[bh].indexOf( ch[i] ) != -1 )
{
cb[i].setState(true);
}
}
}
}
}
public int givescore()
{
int score=0;
for(int i=0;i<amount;i++)
{
if(userAnswer[i].equals(answer[i]))
{
score=score+1;
}
}
return(int)(score*100/amount);
}
public void itemStateChanged(ItemEvent e)
{
String s="";
if(type[bh]==1)
{
s=((Checkbox)e.getItemSelectable()).getLabel();
}
else
{
for(int i=0;i<ch.length;i++)
if(cb[i].getState())
s=s+cb[i].getLabel();
}
userAnswer[bh]=s;
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==next)
{
if(bh<amount)
bh++;
content.setText(question[bh]);
display_ans();
}
else if(e.getSource()==previous)
{
if(bh>0)
bh--;
content.setText(question[bh]);
display_ans();
}
else
{
new myDialog(this,"分数="+this.givescore());
}
}
public static void main(String a[])
{
new Exam();
}
public void readQuestion()
{
int stbh=0;
String driver="com.mysql.jdbc.Driver";
String url="jdbc:mysql://localhost:3306/mydata";
String user="root";
String password="861023";
String sql="SELECT * FROM exampaper";
try
{
Class.forName(driver);
}
catch(java.lang.ClassNotFoundException e){}
try
{
Connection con=DriverManager.getConnection(url,user,password);
Statement stmt=con.createStatement();
ResultSet rs=stmt.executeQuery(sql);
while(rs.next())
{
question[stbh]=rs.getString("content");
answer[stbh]=rs.getString("answer");
type[stbh]=rs.getInt("type");
stbh++;
}
amount=stbh;
}
catch(SQLException ex)
{
System.out.println(ex.getMessage());
}
}
}
class CountTime extends JLabel implements Runnable
{
int totalTime;
int startTime;
Exam my;
public CountTime(int seconds,Exam testframe)
{
totalTime=seconds;
my=testframe;
java.util.Date timeer=new java.util.Date();
Calendar rightNow=Calendar.getInstance();
int h=rightNow.get(Calendar.HOUR_OF_DAY);
int m=rightNow.get(Calendar.MINUTE);
int s=rightNow.get(Calendar.SECOND);
startTime=h*3600+m*60+s;
}
public void run()
{
for(;;)
{
java.util.Date timeer=new java.util.Date();
Calendar rightNow=Calendar.getInstance();
int h=rightNow.get(Calendar.HOUR_OF_DAY);
int m=rightNow.get(Calendar.MINUTE);
int s=rightNow.get(Calendar.SECOND);
int remain=totalTime-(h*3600+m*60+s-startTime);
if(remain<0)
{
new myDialog(my,"分数"+my.givescore());
}
int remainh=(int)(remain/3600);
int remainm=(int)((remain-remainh*3600)/60);
int remains=remain-remainh*3600-remainm*60;
String msg="剩余时间:"+remainh+":"+remainm+":"+remains;
setText(msg);
try
{
Thread.currentThread().sleep(1000);
}
catch(InterruptedException e){}
}
}
}
class myDialog extends JDialog implements ActionListener
{
public myDialog(Frame parent,String title)
{
super(parent,title,true);
setLayout(new FlowLayout());
Button ok=new Button("确认");
add(ok);
ok.addActionListener(this);
this.setSize(80,80);
this.setLocation(300,300);
this.setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
this.dispose();
System.exit(0);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -