//根据用户的时间,做出相应的反映 public void actionPerformed(ActionEvent e) { String str = e.getActionCommand(); //清空结果显示区中的内容,如果有的话。 if ("查询".trim().equals(str)) { int k = 1; while (k < 10) { for (int i = 1; i < 7; i++) { jtSearch.setValueAt(null, k - 1, i - 1); } k++; } //调用下面的这个方法,在数据库中进行查找,并将结果显示在表格中。 searchAvailableCourse(); } else if ("提交".equals(str)) { //processBeforeCommit()对用户选课操作进行有效性检验; //剔除无效操作:如输入无效的课程号,或已经选择了某一课程,已经选满的6学分等各种情况 boolean effect=processBeforeCommit(); //如果课程存在,且该学生具有选择该课程的资格,即effect为true,进入正式提交程序(tryCommit()) if(effect==true) {tryCommit();} } } //对用户选课操作进行有效性检验; public boolean processBeforeCommit(){ //清空原结果显示区中的内容,如果有的话。 int k = 1; while (k < 10) { for (int i = 1; i < 7; i++) { jtSearch.setValueAt(null, k - 1, i - 1); } k++; } //取得用户输入的课程号 String userInput = jtfSelectedCourse.getText().toString().trim() .toLowerCase(); //无效操作1:在数据库中的coursexx表中查询该课程号。如果不存在该课程,给出提示。 String sql = "select cno from coursexx where cno=? "; boolean flagCourseExist = false; try { ps = con.prepareStatement(sql); ps.setString(1, userInput); rs = ps.executeQuery(); flagCourseExist = rs.next(); } catch (Exception eC) { eC.printStackTrace(); } if (!flagCourseExist) { JOptionPane.showMessageDialog(null, "该课程不存在,请重新输入"); return false; } //判断该学生选修课已选课程的总学分是否小于6; //无效操作2:如果已有选课记录,并且总学分大于6学分,该学生不能在选了。 PreparedStatement ps = null; sql = "select sum(grade) " + "from (select x.sname , x.cno,k.grade grade " + "from coursexx k join choicesxx x " + "on k.cno=x.cno and x.sname=?) result"; String grade =null; try { ps = con.prepareStatement(sql); ps.setString(1, usrName); rs = ps.executeQuery(); while (rs.next()) { grade = rs.getString(1); if(grade==null){grade="0";} } } catch (Exception rrr) { rrr.printStackTrace(); } System.out.println("总学分:" + grade); if (Integer.parseInt(grade) > 6) { JOptionPane.showMessageDialog(null, "你已经选满6学分,系统将退出"); this.setVisible(false); return false; } //无效操作3:课程该学生已经选择了某课程,则不能再选该课程了。 sql = "select * from choicesxx where sname=? and cno=?"; boolean flag = false; try { ps = con.prepareStatement(sql); ps.setString(1, this.getUsrName()); ps.setString(2, userInput); rs = ps.executeQuery(); flag = rs.next(); } catch (Exception eaa) { eaa.printStackTrace(); } if (flag) { JOptionPane.showMessageDialog(null, "你已经选择了该课程。请另选课程"); return false;} //如果以上无效操作都不存在,则返回true,意为这是一个准有效操作 return true; } //对有效的提交操作的进行处理 public void tryCommit() { // userInput为用户输入的课程ID. String userInput = jtfSelectedCourse.getText().toString().trim() .toLowerCase(); // if course still available(count 0) { // save studentId and courseId to student-course table. // this.getUsrName();userInput sql = "insert into choicesxx values(?,?)"; ps = con.prepareStatement(sql); ps.setString(1, this.getUsrName()); ps.setString(2, userInput); ps.executeUpdate(); JOptionPane.showMessageDialog(null, "选课成功: " + this.getUsrName() + " 选了" + userInput + "." + "" + " 还有 " + RemainedCount + " 人可以选该课程。"); // 更新课程中已选该课程的人数:即将可选该课程的人数减去1个人。 sql = "update CourseXX set selectedCount=selectedCount+1 where cno=?"; ps = con.prepareStatement(sql); ps.setString(1, userInput); ps.executeUpdate(); con.commit(); //如果该课程已经没有选择名额,提示重新选课 } } catch (Exception es) { es.printStackTrace(); try { con.rollback(); } catch (Exception ey) { ey.printStackTrace(); } } }