在选择完课程出现如下报错
package view;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Vector;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextArea;
import javax.swing.Timer;
import bean.Subject;
import mysql.OperateDB;
import mysql.StudentOperateDB;
public class StudentV extends JFrame implements ActionListener{
//基础面板
private CardLayout card1 = new CardLayout();
private JPanel p = new JPanel(card1);
private JPanel[] ps = new JPanel[3];
//全局变量
private static int n = 0;
private String sname= null;
private String cname = null;
private String studentID = null;
private String courseID = null;
private int score = 0;
/*
* 初始化
*/
public StudentV(String studentID,String sname) {
this.studentID = studentID;
this.sname = sname;
this.setTitle("在线考试系统--学生");
this.setSize(750,600);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
this.setResizable(false);
this.add(p);
//初始化基础面板
Pane0();
Pane1();
Pane2();
}
/*
* 出发!!!
*/
public static void main(String[] args) {
new StudentV("","柯芷茵").setVisible(true);
}
/*
* p0 科目选择分区
*/
private JComboBox<String> cb_course = new JComboBox<>();
private JButton btn0 = new JButton("选择");
public void Pane0() {
ps[0] = new JPanel();
ps[0].setLayout(null);
ps[0].setBackground(Color.white);
p.add("p0",ps[0]);
JLabel lb_welcome_tit = new JLabel("欢迎使用在线考试管理系统");
lb_welcome_tit.setBounds(280,40,220,30);
lb_welcome_tit.setFont(new Font("微软雅黑",1,16));
JTextArea tf_welcome = new JTextArea("各位同学们好:\n"
+ " 您现在使用的是由中山大学南方学院某名18级学生所开发的在线考试管理系统,通过该在线考试管理系统,您可以在线选择考试科目,在规定时间内,提交作答完毕的试卷,"
+ "系统即刻给出您的考试结果,您还可以查看答案解析,了解更多知识,祝你考试顺序。");
tf_welcome.setBounds(50,100,650,100);
tf_welcome.setLineWrap(true);
tf_welcome.setEditable(false);
tf_welcome.setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createLineBorder(Color.GRAY,2),BorderFactory.createEmptyBorder(10,13,10,13)));
JLabel lb = new JLabel("科目选择 :");
lb.setBounds(210,240,70,25);
cb_course.setBackground(Color.GRAY);
cb_course.setForeground(Color.WHITE);
cb_course.setBounds(280,240,180,25);
//加载试题类型--功能
Vector<String> v = OperateDB.loadCourse();
for(int i=0; i<v.size(); i++) {
cb_course.addItem(v.get(i));
}
btn0.setBackground(Color.GRAY);
btn0.setForeground(Color.white);
btn0.setBounds(480,240,80,25);
btn0.addActionListener(this);
ps[0].add(lb_welcome_tit);
ps[0].add(tf_welcome);
ps[0].add(lb);
ps[0].add(cb_course);
ps[0].add(btn0);
}
/*
* p1考试 分区
*/
private JPanel p1_up = new JPanel();
private JPanel[] p1_ups = new JPanel[3];
private JButton btn1 = new JButton("提交");
private JButton btn1_prev = new JButton("上一页");
private JButton btn1_next = new JButton("下一页");
private JButton btn1_choice = new JButton("题号选择");
private JLabel lb_sname = new JLabel();
private JLabel lb_cname = new JLabel();
private JLabel lb_time = new JLabel("时间使用:00:00");
private JButton[] btn1_NO = new JButton[10];
private CardLayout card2 = new CardLayout();
private JPanel p1_down = new JPanel(card2);
private JPanel[] p1_downs = new JPanel[5];
private ArrayList<Subject> list_subject = new ArrayList<>();
public void Pane1() {
//基础面板
ps[1] = new JPanel();
ps[1].setLayout(new BorderLayout());
ps[1].add(p1_up,BorderLayout.NORTH);
ps[1].add(p1_down,BorderLayout.CENTER);
p.add("p1",ps[1]);
for(n=0;n<p1_ups.length;n++) {
p1_ups[n] = new JPanel();
}
for(n=0;n<p1_downs.length;n++) {
p1_downs[n] = new JPanel();
}
p1_up.setPreferredSize(new Dimension(750,85));
JLabel lb21 = new JLabel("考试时间 :30 分钟");
lb21.setPreferredSize(new Dimension(140,30));
JLabel lb22 = new JLabel("总分 :100分");
lb22.setPreferredSize(new Dimension(120,30));
lb_sname.setPreferredSize(new Dimension(120,30));
lb_cname.setPreferredSize(new Dimension(140,30));
lb_time.setPreferredSize(new Dimension(120,30));
//????
p1_ups[0].add(lb21);
p1_ups[0].add(lb22);
p1_ups[0].add(lb_sname);
p1_ups[0].add(lb_cname);
p1_ups[0].add(lb_time);
btn1.setBackground(Color.gray);
btn1.setForeground(Color.WHITE);
btn1.setPreferredSize(new Dimension(100,25));
btn1.addActionListener(this);
btn1_prev.setBackground(Color.gray);
btn1_prev.setForeground(Color.WHITE);
btn1_prev.setPreferredSize(new Dimension(100,25));
btn1_prev.addActionListener(this);
btn1_next.setBackground(Color.gray);
btn1_next.setForeground(Color.WHITE);
btn1_next.setPreferredSize(new Dimension(100,25));
btn1_next.addActionListener(this);
btn1_choice.setBackground(Color.gray);
btn1_choice.setForeground(Color.WHITE);
btn1_choice.setPreferredSize(new Dimension(100,25));
btn1_choice.addActionListener(this);
p1_ups[1].setPreferredSize(new Dimension(745,35));
p1_ups[1].setBackground(Color.LIGHT_GRAY);
p1_ups[1].add(btn1_prev);
p1_ups[1].add(btn1_next);
p1_ups[1].add(btn1_choice);
p1_ups[1].add(btn1);
//面板归置
for(n=0;n<p1_ups.length;n++) {
p1_up.add(p1_ups[n]);
}
for(n=0;n<p1_downs.length;n++) {
p1_down.add("p1_down"+n,p1_downs[n]);
}
}
/*
* p2 考试结果分区
*/
private JButton btn2 = new JButton("退出系统");
private JPanel p2_up = new JPanel();
private JPanel[] p2_ups = new JPanel[2];
JLabel lb_result = new JLabel();
private JButton btn2_check = new JButton("查看答案");
private JButton btn2_prev = new JButton("上页");
private JButton btn2_next = new JButton("下页");
private CardLayout card3 = new CardLayout();
private JPanel p2_down = new JPanel(card3);
private JPanel[] p2_downs = new JPanel[6];
public void Pane2() {
ps[2] = new JPanel();
ps[2].setLayout(new BorderLayout());
ps[2].add(p2_up,BorderLayout.NORTH);
ps[2].add(p2_down,BorderLayout.CENTER);
p.add("p2",ps[2]);
p2_up.setPreferredSize(new Dimension(745,105));
for(n=0;n<p2_ups.length;n++) {
p2_ups[n] = new JPanel();
p2_up.add(p2_ups[n]);
}
lb_result.setFont(new Font("微软雅黑",1,16));
lb_result.setPreferredSize(new Dimension(300,50));
p2_ups[0].add(lb_result);
p2_ups[1].setBackground(Color.LIGHT_GRAY);
p2_ups[1].setPreferredSize(new Dimension(745,35));
btn2.setBackground(Color.gray);
btn2.setForeground(Color.WHITE);
btn2.setPreferredSize(new Dimension(100,25));
btn2.addActionListener(this);
btn2_check.setBackground(Color.gray);
btn2_check.setForeground(Color.WHITE);
btn2_check.setPreferredSize(new Dimension(100,25));
btn2_check.addActionListener(this);
btn2_prev.setBackground(Color.LIGHT_GRAY);
btn2_prev.setForeground(Color.WHITE);
btn2_prev.setPreferredSize(new Dimension(60,20));
btn2_prev.addActionListener(this);
btn2_next.setBackground(Color.LIGHT_GRAY);
btn2_next.setForeground(Color.WHITE);
btn2_next.setPreferredSize(new Dimension(60,20));
btn2_next.addActionListener(this);
p2_ups[1].add(btn2_check);
p2_ups[1].add(btn2);
for(n=0;n<p2_downs.length;n++) {
p2_downs[n] = new JPanel();
p2_downs[n].setBackground(Color.white);
p2_down.add("p2_down"+n,p2_downs[n]);
}
JLabel lb_over = new JLabel("恭喜,完成考试 \\(^@^)/");
lb_over.setPreferredSize(new Dimension(150,100));
p2_downs[0].add(lb_over);
}
/*
* 计时器
*/
private void setTimer(JLabel time) {
final JLabel varTime = time;
Timer timeAction = new Timer(1000, new ActionListener() {
long timemillis2 = (System.currentTimeMillis()-1000);
public void actionPerformed(ActionEvent e) {
long timemillis1 = System.currentTimeMillis();
long timemillis = timemillis1-timemillis2;
// 转换日期显示格式
SimpleDateFormat df = new SimpleDateFormat("mm:ss");
varTime.setText("时间使用:"+df.format(new Date(timemillis)));
}
});
timeAction.start();
}
/*
* 试题模板
*/
private Vector<String> v_answer = new Vector<>();
private Vector<JRadioButton> v_rb = new Vector<>();
public void subjectPane(JPanel panel,int NO1,Subject subject1,int NO2,Subject subject2) {
panel.setBackground(Color.WHITE);
JLabel lb_NO = new JLabel(" 第 "+NO1+" 题");
lb_NO.setPreferredSize(new Dimension(50,50));
JLabel lb_title = new JLabel(subject1.getTitle());
lb_title.setPreferredSize(new Dimension(670,50));
JLabel lb_A = new JLabel(subject1.getOptionA());
lb_A.setPreferredSize(new Dimension(670,25));
JLabel lb_B = new JLabel(subject1.getOptionB());
lb_B.setPreferredSize(new Dimension(670,25));
JLabel lb_C = new JLabel(subject1.getOptionC());
lb_C.setPreferredSize(new Dimension(670,25));
JLabel lb_D = new JLabel(subject1.getOptionD());
lb_D.setPreferredSize(new Dimension(670,25));
JLabel lb_choose = new JLabel("选择答案:");
lb_choose.setPreferredSize(new Dimension(75,40));
JRadioButton rb_A = new JRadioButton("A");
rb_A.setPreferredSize(new Dimension(50,25));
rb_A.setBackground(Color.white);
v_rb.add(rb_A);
JRadioButton rb_B = new JRadioButton("B");
rb_B.setPreferredSize(new Dimension(50,25));
rb_B.setBackground(Color.white);
v_rb.add(rb_B);
JRadioButton rb_C = new JRadioButton("C");
rb_C.setPreferredSize(new Dimension(50,25));
rb_C.setBackground(Color.white);
v_rb.add(rb_C);
JRadioButton rb_D = new JRadioButton("D");
rb_D.setPreferredSize(new Dimension(440,25));
rb_D.setBackground(Color.white);
v_rb.add(rb_D);
JLabel lb_NO1 = new JLabel(" 第 "+NO2+" 题");
lb_NO1.setPreferredSize(new Dimension(50,50));
JLabel lb_title1 = new JLabel(subject2.getTitle());
lb_title1.setPreferredSize(new Dimension(670,50));
JLabel lb_A1 = new JLabel(subject2.getOptionA());
lb_A1.setPreferredSize(new Dimension(670,25));
JLabel lb_B1 = new JLabel(subject2.getOptionB());
lb_B1.setPreferredSize(new Dimension(670,25));
JLabel lb_C1 = new JLabel(subject2.getOptionC());
lb_C1.setPreferredSize(new Dimension(670,25));
JLabel lb_D1 = new JLabel(subject2.getOptionD());
lb_D1.setPreferredSize(new Dimension(670,25));
JLabel lb_choose1 = new JLabel("选择答案:");
lb_choose1.setPreferredSize(new Dimension(75,40));
JRadioButton rb_A1 = new JRadioButton("A");
rb_A1.setPreferredSize(new Dimension(50,25));
rb_A1.setBackground(Color.white);
v_rb.add(rb_A1);
JRadioButton rb_B1 = new JRadioButton("B");
rb_B1.setPreferredSize(new Dimension(50,25));
rb_B1.setBackground(Color.white);
v_rb.add(rb_B1);
JRadioButton rb_C1 = new JRadioButton("C");
rb_C1.setPreferredSize(new Dimension(50,25));
rb_C1.setBackground(Color.white);
v_rb.add(rb_C1);
JRadioButton rb_D1 = new JRadioButton("D");
rb_D1.setPreferredSize(new Dimension(440,25));
rb_D1.setBackground(Color.white);
v_rb.add(rb_D1);
panel.add(lb_NO);
panel.add(lb_title);
panel.add(lb_A);
panel.add(lb_B);
panel.add(lb_C);
panel.add(lb_D);
panel.add(lb_choose);
panel.add(rb_A);
panel.add(rb_B);
panel.add(rb_C);
panel.add(rb_D);
panel.add(lb_NO1);
panel.add(lb_title1);
panel.add(lb_A1);
panel.add(lb_B1);
panel.add(lb_C1);
panel.add(lb_D1);
panel.add(lb_choose1);
panel.add(rb_A1);
panel.add(rb_B1);
panel.add(rb_C1);
panel.add(rb_D1);
}
/*
* 答案模板
*/
private void answerPane(JPanel panel,int NO1,Subject subject1,int NO2,Subject subject2) {
JLabel lb_NO = new JLabel(" 第 "+NO1+" 题");
lb_NO.setPreferredSize(new Dimension(50,50));
JLabel lb_title = new JLabel(subject1.getTitle());
lb_title.setPreferredSize(new Dimension(670,50));
JLabel lb_A = new JLabel(subject1.getOptionA());
lb_A.setPreferredSize(new Dimension(680,20));
JLabel lb_B = new JLabel(subject1.getOptionB());
lb_B.setPreferredSize(new Dimension(680,20));
JLabel lb_C = new JLabel(subject1.getOptionC());
lb_C.setPreferredSize(new Dimension(680,20));
JLabel lb_D = new JLabel(subject1.getOptionD());
lb_D.setPreferredSize(new Dimension(680,20));
JLabel lb_answer = new JLabel("正确答案:"+subject1.getAnswer());
lb_answer.setPreferredSize(new Dimension(200,20));
JLabel lb_choose = new JLabel("选择答案:"+v_answer.get(NO1-1));
lb_choose.setPreferredSize(new Dimension(478,20));
JLabel lb_analysis = new JLabel("参考解析:"+subject1.getParse());
lb_analysis.setPreferredSize(new Dimension(685,20));
JLabel lb_NO1 = new JLabel(" 第 "+NO2+" 题");
lb_NO1.setPreferredSize(new Dimension(50,50));
JLabel lb_title1 = new JLabel(subject2.getTitle());
lb_title1.setPreferredSize(new Dimension(670,50));
JLabel lb_A1 = new JLabel(subject2.getOptionA());
lb_A1.setPreferredSize(new Dimension(680,20));
JLabel lb_B1 = new JLabel(subject2.getOptionB());
lb_B1.setPreferredSize(new Dimension(680,20));
JLabel lb_C1 = new JLabel(subject2.getOptionC());
lb_C1.setPreferredSize(new Dimension(680,20));
JLabel lb_D1 = new JLabel(subject2.getOptionD());
lb_D1.setPreferredSize(new Dimension(680,20));
JLabel lb_answer1 = new JLabel("正确答案:"+subject2.getAnswer());
lb_answer1.setPreferredSize(new Dimension(200,20));
JLabel lb_choose1 = new JLabel("选择答案:"+v_answer.get(NO2-1));
lb_choose1.setPreferredSize(new Dimension(478,20));
JLabel lb_analysis1 = new JLabel("参考解析:"+subject2.getParse());
lb_analysis1.setPreferredSize(new Dimension(685,20));
panel.add(lb_NO);
panel.add(lb_title);
panel.add(lb_A);
panel.add(lb_B);
panel.add(lb_C);
panel.add(lb_D);
panel.add(lb_answer);
panel.add(lb_choose);
panel.add(lb_analysis);
panel.add(lb_NO1);
panel.add(lb_title1);
panel.add(lb_A1);
panel.add(lb_B1);
panel.add(lb_C1);
panel.add(lb_D1);
panel.add(lb_answer1);
panel.add(lb_choose1);
panel.add(lb_analysis1);
}
/*
* 事件监听
*/
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource()==btn0) {
if(cb_course.getSelectedItem().equals("-----------请选择---------------")) {
JOptionPane.showMessageDialog(ps[0], "请选择考试科目");
return;
}
cname = (String) cb_course.getSelectedItem();
this.courseID = StudentOperateDB.getCourseID(cname);
lb_cname.setText("科目:"+cname);
lb_sname.setText("考生:"+sname);
//加载试题--功能
list_subject = StudentOperateDB.getSubjects(cname);
n=0;
for(int i=0;i<10;i=i+2) {
subjectPane(p1_downs[n], i+1,list_subject.get(i), i+2,list_subject.get(i+1));
n++;
}
//考试计时
card1.show(p,"p1");
setTimer(lb_time);
}else if(e.getSource()==btn1) {
//计分--功能
/*System.out.println(v_rb.size()); 测试*/
for(n=0; n<v_rb.size(); n++) {
if(v_rb.get(n).isSelected()) {
v_answer.add(v_rb.get(n).getText());
}
}
/*System.out.println(v_answer.size()); 测试*/
for(n=0; n<10;n++) {
if(v_answer.get(n).equals(list_subject.get(n).getAnswer())) {
score+=10;
}
}
lb_result.setText("考试结果:"+sname+"在"+cname+"得分"+score+"分");
n=1;
for(int i=0;i<10;i=i+2) {
/*System.out.println(i+2);测试*/
answerPane(p2_downs[n], i+1,list_subject.get(i), i+2,list_subject.get(i+1));
n++;
}
//录入成绩--功能
if(StudentOperateDB.inputScore(studentID, courseID, score)) {
System.out.println("成绩录入成功");
}
card1.show(p,"p2");
}else if(e.getSource()==btn2) {
System.exit(0);
}
//考试分区
if(e.getSource()==btn1_prev) {
card2.previous(p1_down);
}else if(e.getSource()==btn1_next) {
card2.next(p1_down);
}else if(e.getSource()==btn1_choice) {
p1_ups[2].removeAll();
p1_ups[2].setLayout(new GridLayout(1,5));
for(int i=0;i<btn1_NO.length;i++) {
btn1_NO[i] = new JButton(i+1+"");
btn1_NO[i].setBackground(Color.LIGHT_GRAY);
btn1_NO[i].setForeground(Color.WHITE);
btn1_NO[i].setPreferredSize(new Dimension(50,25));
btn1_NO[i].addActionListener(this);
p1_ups[2].add(btn1_NO[i]);
}
p1_ups[2].repaint();
p1_up.setPreferredSize(new Dimension(750,120));
p1_up.repaint();
validate();
}
for(n=0;n<btn1_NO.length;n++) {
if(e.getSource()==btn1_NO[n]) {
if(n<2) {
card2.show(p1_down, "p1_down0");
}else if(n>=2 && n<4) {
card2.show(p1_down, "p1_down1");
}else if(n>=4 && n<6) {
card2.show(p1_down, "p1_down2");
}else if(n>=6 && n<8) {
card2.show(p1_down, "p1_down3");
}else if(n>=8 && n<10) {
card2.show(p1_down, "p1_down4");
}
}
}
//考试结束分区
if(e.getSource()==btn2_check) {
p2_ups[1].removeAll();
p2_ups[1].add(btn2_check);
p2_ups[1].add(btn2_prev);
p2_ups[1].add(btn2_next);
p2_ups[1].add(btn2);
p2_ups[1].repaint();
validate();
card3.show(p2_down,"p2_down1");
}else if(e.getSource()==btn2_prev){
card3.previous(p2_down);
}else if(e.getSource()==btn2_next){
card3.next(p2_down);
}
}
}
package mysql;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import bean.Subject;
public class StudentOperateDB {
/*
* 登录成功,获取学生姓名
*/
public static String getSname(String studentID) {
String sql ="select sname from student where studentID="+studentID;
PreparedStatement ps;
ResultSet rs;
try {
ps = ConnectDB.getConn().prepareStatement(sql);
rs = ps.executeQuery();
if(rs.next()) {
return rs.getString(1);
}
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
/*
* 获取课程ID
*/
public static String getCourseID(String cname) {
String sql = "select courseID from course where cname='"+cname+"'";
PreparedStatement ps;
ResultSet rs;
try {
ps = ConnectDB.getConn().prepareStatement(sql);
rs = ps.executeQuery();
while(rs.next()) {
return rs.getString(1);
}
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
/*
* 由试题类型,获取对应试题
*/
public static ArrayList<Subject> getSubjects(String cname){
ArrayList<Subject> list = new ArrayList<>();
Subject subject;
String sql = "select * from subject where cname='"+cname+"'";
PreparedStatement ps;
ResultSet rs;
try {
ps = ConnectDB.getConn().prepareStatement(sql);
rs = ps.executeQuery();
while(rs.next()) {
subject = new Subject(rs.getString(2),rs.getString(3),rs.getString(4),rs.getString(5),
rs.getString(6),rs.getString(7),rs.getString(8),rs.getString(9));
list.add(subject);
}
return list;
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
/*
* 录入成绩
*/
public static boolean inputScore(String studentID, String courseID,int score) {
String sql = "insert into score(studentID,courseID,result) values"
+ "('"+studentID+"','"+courseID+"','"+score+"')";
PreparedStatement ps;
try {
ps = ConnectDB.getConn().prepareStatement(sql);
ps.execute();
return true;
} catch (SQLException e) {
e.printStackTrace();
}
return false;
}
}