📄 web158_com.java
字号:
//选择
//判断选项//自己定义类
protected void getSelect(String str)
{
if(str.equals("A"))
{
examPanel.A.setSelected(true);
examPanel.B.setSelected(false);
examPanel.C.setSelected(false);
examPanel.D.setSelected(false);
}
if(str.equals("B"))
{
examPanel.A.setSelected(false);
examPanel.B.setSelected(true);
examPanel.C.setSelected(false);
examPanel.D.setSelected(false);
}
if(str.equals("C"))
{
examPanel.A.setSelected(false);
examPanel.B.setSelected(false);
examPanel.C.setSelected(true);
examPanel.D.setSelected(false);
}
if(str.equals("D"))
{
examPanel.A.setSelected(false);
examPanel.B.setSelected(false);
examPanel.C.setSelected(false);
examPanel.D.setSelected(true);
}
}//end of getSelect()
void initQuestion(String question,String a,String b,String c,String d,String answer)
{
examPanel.txtinfo.setText(question);
examPanel.txt_a.setText(a);
examPanel.txt_b.setText(b);
examPanel.txt_c.setText(c);
examPanel.txt_d.setText(d);
//是否已经答过
if(!answer.equals("web158.com"))
{
getSelect(answer);
}
//第一次答题,把原来答案清空
else
{
examPanel.A.setSelected(false);
examPanel.B.setSelected(false);
examPanel.C.setSelected(false);
examPanel.D.setSelected(false);
}
}//end of initQuestion
void getQuestion(int id,String flag)
{
//是否存在小于1的ID
if(id<1)
{
JOptionPane.showMessageDialog(null, "请选择下一题,上一题不存在");
return;
}
//如果是操作题目,没有上一条
System.out.println(totalchoose);
if(flag.equals("operate")&&id<=totalchoose)
{
JOptionPane.showMessageDialog(null, "请选择下一题,上一题不存在");
return;
}
//开始数据库操作
String driver="sun.jdbc.odbc.JdbcOdbcDriver";
String dbUrl="jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=web158_exam/exam.dll";
Statement stmt=null;
Connection conn=null;
//加载驱动
//**************************
try
{
Class.forName(driver);
}
catch(java.lang.ClassNotFoundException nofound)
{
JOptionPane.showMessageDialog(null, "读取试卷时数据驱动错误");
System.err.println(nofound.getMessage());
return ;
}
//开始添加试题
//**********************************
try{
//取选择题目
if(flag.equals("choose"))
{
String sql="select * from exam where id="+id+"";
conn=DriverManager.getConnection(dbUrl,"web158.com","web158.com");
stmt=conn.createStatement();
ResultSet rs=stmt.executeQuery(sql);
//如果题库中存在题
if(rs.next())
{
String question=rs.getString("question");
String a=rs.getString("a");
String b=rs.getString("b");
String c=rs.getString("c");
String d=rs.getString("d");
int nowid=rs.getInt("id");
String stua=rs.getString("stuanswer");
//初始化试题
initQuestion(id+"、"+question,a,b,c,d,stua);
//写上当前题号
nowexamid=nowid;
}
else
{
System.out.println(nowexamid);
totalchoose=nowexamid;//写清选择题目总数
int n=JOptionPane.showConfirmDialog(this, "选择题已经答完,确定开始答操作题吗?","确认",JOptionPane.YES_NO_OPTION);
if(n==JOptionPane.YES_OPTION)
{
//开始操作题
initOperate();
//提交按钮有效
web158_com_submit.setEnabled(true);
return ;
}
return ;
}
//关闭连接
stmt.close();
conn.close();
}
if(flag.equals("operate"))
{
String sql="select * from operate where id="+id+"";
conn=DriverManager.getConnection(dbUrl,"web158.com","web158.com");
stmt=conn.createStatement();
ResultSet rs=stmt.executeQuery(sql);
//如果题库中存在题
if(rs.next())
{
int nowid=rs.getInt("id");
String question=rs.getString("question");
//初始化试题
initQuestion_operate(id+"、"+question);
//写上当前题号
nowexamid=nowid;
}
else
{
JOptionPane.showMessageDialog(null, "题目已经全部答完,如果需要更改请点击上一题,不需要更改请提交试卷");
return ;
}
//关闭连接
stmt.close();
conn.close();
}
}
catch(Exception ef)
{
JOptionPane.showMessageDialog(null, "你的试卷存在问题,请联系监考人员");
System.out.println(ef.getMessage());
return ;
}
finally
{
try
{
stmt.close();
conn.close();
}catch(Exception ef)
{}
}
}
//考试面板
void getExamPanel()
{
initAccess("update exam set stuanswer='web158.com'");
getQuestion(nowexamid,"choose");
//web158_info();
//timer.start();
//先添加按钮事件
examPanel.A.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
getSelect("A");
}
});
examPanel.B.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
getSelect("B");
}
});
examPanel.C.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
getSelect("C");
}
});
examPanel.D.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
getSelect("D");
}
});
//添加上一题下一题目按钮
examPanel.button_last.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
if(isSelect()==false)
{
JOptionPane.showMessageDialog(null, "请选择答案");
return;
}
String answer=getNowAnswer();
initAccess("update exam set stuanswer='"+answer+"' where id="+nowexamid+"");
//JOptionPane.showMessageDialog(null, answer);
getQuestion(nowexamid-1,"choose");
}
});
//下一题目
examPanel.button_next.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
//是不是没有选择
if(isSelect()==false)
{
JOptionPane.showMessageDialog(null, "请选择答案");
return;
}
else
{
String answer=getNowAnswer();
initAccess("update exam set stuanswer='"+answer+"' where id="+nowexamid+"");
//JOptionPane.showMessageDialog(null, answer);
getQuestion(nowexamid+1,"choose");
}
}
});
//添加
web158_com_Cpanel.removeAll();
web158_com_Cpanel.add(examPanel);
web158_com_Cpanel.repaint();
web158_com_Cpanel.validate();
}//end of getExamPanel()
/**************************************************************************************
*
*操作题目处理模块
*/
void initQuestion_operate(String question)
{
operatePanel.txtinfo.setText(question);
}
//添加操作题Panel
void initOperate()
{
//提示信息
txtinfo.setText("操作题答题要求:\n\n把所有操作题作完后,请在D盘myexam文件夹中新建文件夹exam,把所有试卷答案文件存到exam文件夹后打包成为exam.rar,然后提交试卷!");
getQuestion(nowexamid+1,"operate");
//添加上一题下一题目按钮
operatePanel.button_last.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
getQuestion(nowexamid-1,"operate");
}
});
//下一题目
operatePanel.button_next.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
getQuestion(nowexamid+1,"operate");
}
});
//添加
web158_com_Cpanel.removeAll();
web158_com_Cpanel.add(operatePanel);
web158_com_Cpanel.repaint();
web158_com_Cpanel.validate();
}
//更新答案
void initAccess(String sql)
{
String driver="sun.jdbc.odbc.JdbcOdbcDriver";
String dbUrl="jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=web158_exam/exam.dll";
Statement stmt=null;
Connection conn=null;
//加载驱动
//**************************
try
{
Class.forName(driver);
}
catch(java.lang.ClassNotFoundException nofound)
{
JOptionPane.showMessageDialog(null, "读取试卷时数据驱动错误");
System.err.println(nofound.getMessage());
return ;
}
//开始添加试题
//**********************************
try{
conn=DriverManager.getConnection(dbUrl,"web158.com","web158.com");
stmt=conn.createStatement();
stmt.executeUpdate(sql);
//关闭连接
stmt.close();
conn.close();
}
catch(Exception ef)
{
JOptionPane.showMessageDialog(null, "初始化选择题更新时失败");
System.out.println(ef.getMessage());
return ;
}
finally
{
try
{
stmt.close();
conn.close();
}catch(Exception ef)
{}
}
}
//提交试卷
public void sendAnswer()
{
//需要返回的字
//String str="";
File f=new File("D:/myexam/exam.rar");
if(!f.exists())
{
JOptionPane.showMessageDialog(null, "您的操作题答案文件不存在,请检查\n请查看"+f);
return;
}
if(createAnswer(getChoose()))
{
JOptionPane.showMessageDialog(null, "多人提交可能速度很慢,请耐心等待");
//开启发送试卷信息
try
{
System.out.println("正在与服务器建立连接...");
socket=new Socket(serverip,sendport);
System.out.println("连接已经建立");
out = new PrintWriter(socket.getOutputStream(),true);
out.println(stuid+"¤"+stuname+"¤"+score);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
System.out.println(in.readLine()); //按行输入
String order=in.readLine();
System.out.print(order);
//如果是成功刚开始发送答案
if(order.equals("oksend"))
{
try
{
//System.out.print("你发送的请求我收到,我现在给你发我的答案");
Thread.sleep(100);
nowSendAnswer("web158_exam/answer.dll");
Thread.sleep(100);
nowSendAnswer("D:/myexam/exam.rar");
//删除文件
delExt();
JOptionPane.showMessageDialog(null, "试卷提交成功,请关闭系统退出考场,系统将自动在3分钟后退出");
//初始退出面板
//顶上的空地
JLabel temp=new JLabel();
temp.setPreferredSize(new Dimension(510,120));
examed.add(temp);
examed_label.setText("考试完毕,请退出系统离开考场!");
examed_label.setFont(new Font("宋体",Font.BOLD,16));
examed.setPreferredSize(new Dimension(510,445));
examed.setOpaque(false);
examed.add(examed_label);
//更改面板
web158_com_Cpanel.removeAll();
web158_com_Cpanel.add(examed);
web158_com_Cpanel.repaint();
web158_com_Cpanel.validate();
//不许重提交
web158_com_submit.setEnabled(false);
//关闭开始
timer.stop();
exitTimer.start();
}catch(Exception ef)
{
System.out.println(ef.getMessage());
}
}
else
{
JOptionPane.showMessageDialog(null, "提交试卷出错,请联系监考人员手动提交");
}
out.close();
in.close();
socket.close();
//str="试题提取成功";
//return str;
}
catch(IOException e)
{
System.out.println("服务器没有开启"+e.getMessage()+serverip+":"+sendport);
JOptionPane.showMessageDialog(null, "提交试题失败,与服务器:"+serverip+":"+sendport+"建立连接失败...");
// return "提交试题失败,与服务器:"+serverip+":"+sendport+"建立连接失败...";
//return e.getMessage();
}
finally
{
try
{
socket.close();
out.close();
in.close();
}
catch(Exception ef)
{}
}
}
//return str;
}
//生成考试题文件
boolean createAnswer(String question)
{
try
{
//创建文件对象
File f=new File("web158_exam/answer.dll");
//如果没有答案文件新建
if(!f.exists())
{
f.createNewFile();
}
FileWriter writeto=new FileWriter(f);
BufferedWriter out=new BufferedWriter(writeto);
out.write(question,0,question.length());
out.flush();
out.close();
writeto.close();
return true;
}
catch(IOException e)
{
System.out.print(e.getMessage());
return false;
}
}
//向服务器发送答案
public void nowSendAnswer(String f)
{
Socket clientSocket;
DataInputStream in;
DataOutputStream out;
try {
clientSocket = new Socket(serverip, receiveport);
File file = new File(f);
byte[] buffer = new byte[1024];
int length = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -