Java完整的学生选课系统源码
   
需求分析:写一个较为严谨的学生选课系统,实现学生可以选择多门选课课程,并将有效选课结果保存到数据库。学生需要登录后,才能选课。让学生可以在选课系统通过多种方式查询到要选的课程信息。
//选课规则:1、每个学生可以选多门课程,多次选课的总学分不能超过6学分;2、不能重复选择一门课程;3、每一门课程的选课人数都有数量限制,当某门课程的选课名额满时,则应另选课程。4、凭用户名和密码登录,通过提交某一课程号来选课
//总体设计方案:建立三个类:登录类register,选课类studentChooseCourse,数据库工具类JDBCUtil;一个SQL脚本文件用于生成数据库表结构和初始记录,以搭建数据库环境。
登录类register类,负责对用户的身份进行验证;工具类JDBCUtil用于实现连接,你可调用JDBCUtil的getConnection()方法等到链接。
选课类studentChooseCourse用于,实现选课功能。其中包括几个主要方法:
1、actionPerformed(ActionEvent) 用于监听用户“查询”和“提交”操作,并负责调用各种方法对其进行处理
2、createSearchCourse()用于产生图形用户界面
3、processBeforeCommit()用于对用户的“提交”查进行验证,剔除无效的用户操作
4、tryCommit()负责对有效的“提交”操作,进一步处理,并将有效的操作结果时时保存到数据库,并更新数据库原有信息
//本程序用到的知识点:数据库连接JDBC;SQL建表、插入输入、动态查询;图形用户界面的产生以及处理查询结果集并较好显示;程序设计基础知识。
//代码如下:
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.*;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import school.schoolPicture.JdbcUtil;
public class StudentChooseCourse extends JFrame implements ActionListener {
JTextField jtfSearch = new JTextField(11);
String[] columnNames = new String[] { "课程ID", "课程名", "学时", "学分", "学期", "性质" };
DefaultTableModel dtmSearch = new DefaultTableModel(columnNames, 27);
JTable jtSearch = new JTable(dtmSearch);
JScrollPane jspSearch = new JScrollPane(jtSearch);
JComboBox jcbSearch = new JComboBox();
JTextField jtfSelectedCourse = new JTextField(10);
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
private static String usrName;
private static String passwrd;
//在构造方法中添加两个参数。以便在"提交"时,将学生的身份连同所选的课程,一同记录在学生选课表中。
public StudentChooseCourse(String usrName, String passwrd) {
createSearchCourse();
this.usrName = usrName;
this.passwrd = passwrd;
}
public String getUsrName() {
return usrName;
}
public void setUsrName(String usrName) {
this.usrName = usrName;
}
public String getPasswrd() {
return passwrd;
}
public void setPasswrd(String passwrd) {
this.passwrd = passwrd;
}
//根据用户的时间,做出相应的反映
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 = Text().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 , ade grade "
+ "from coursexx k join choicesxx x "
+ "on ko=xo 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);
php学生选课系统源码
ps.setString(1, UsrName());
ps.setString(2, userInput);
rs = ps.executeQuery();
flag = rs.next();
} catch (Exception eaa) {
eaa.printStackTrace();
}
if (flag) {
JOptionPane.showMessageDialog(null, "你已经选择了该课程。请另选课程");