[java]代码库
//根据用户的时间,做出相应的反映
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<MAX_STUDENT),save result.
// else if course not available,show Message to student.
PreparedStatement ps;
String sql = "select (Max-selectedCount) as RemainedCount "
+ "from Coursexx where cno=?";
try {
ps = con.prepareStatement(sql);
// 取得学生ID或名字,将课程ID存入学生选课表choicesxx
ps.setString(1, userInput);
rs = ps.executeQuery();
ResultSetMetaData meta = rs.getMetaData();
int cols = meta.getColumnCount();
int RemainedCount = -1;
while (rs.next()) {
RemainedCount = rs.getInt(1);
System.out.println("RemainedCount:" + RemainedCount);
}
//如果该课程还有选择的名额,提示单项选课操作成功。
if (RemainedCount > 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();
}
}
}