您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 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建表、插入输入、动态查询;图形用户界面的产生以及处理查询结果集并较好显示;程序设计基础知识。//代码如下:importjava.awt.GridLayout;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.sql.*;importjavax.swing.*;importjavax.swing.table.DefaultTableModel;importschool.schoolPicture.JdbcUtil;publicclassStudentChooseCourseextendsJFrameimplementsActionListener{JTextFieldjtfSearch=newJTextField(11);String[]columnNames=newString[]{课程ID,课程名,学时,学分,学期,性质};DefaultTableModeldtmSearch=newDefaultTableModel(columnNames,27);JTablejtSearch=newJTable(dtmSearch);JScrollPanejspSearch=newJScrollPane(jtSearch);JComboBoxjcbSearch=newJComboBox();JTextFieldjtfSelectedCourse=newJTextField(10);Connectioncon=null;PreparedStatementps=null;ResultSetrs=null;privatestaticStringusrName;privatestaticStringpasswrd;//在构造方法中添加两个参数。以便在提交时,将学生的身份连同所选的课程,一同记录在学生选课表中。publicStudentChooseCourse(StringusrName,Stringpasswrd){createSearchCourse();this.usrName=usrName;this.passwrd=passwrd;}publicStringgetUsrName(){returnusrName;}publicvoidsetUsrName(StringusrName){this.usrName=usrName;}publicStringgetPasswrd(){returnpasswrd;}publicvoidsetPasswrd(Stringpasswrd){this.passwrd=passwrd;}//根据用户的时间,做出相应的反映publicvoidactionPerformed(ActionEvente){Stringstr=e.getActionCommand();//清空结果显示区中的内容,如果有的话。if(查询.trim().equals(str)){intk=1;while(k10){for(inti=1;i7;i++){jtSearch.setValueAt(null,k-1,i-1);}k++;}//调用下面的这个方法,在数据库中进行查找,并将结果显示在表格中。searchAvailableCourse();}elseif(提交.equals(str)){//processBeforeCommit()对用户选课操作进行有效性检验;//剔除无效操作:如输入无效的课程号,或已经选择了某一课程,已经选满的6学分等各种情况booleaneffect=processBeforeCommit();//如果课程存在,且该学生具有选择该课程的资格,即effect为true,进入正式提交程序(tryCommit())if(effect==true){tryCommit();}}}//对用户选课操作进行有效性检验;publicbooleanprocessBeforeCommit(){//清空原结果显示区中的内容,如果有的话。intk=1;while(k10){for(inti=1;i7;i++){jtSearch.setValueAt(null,k-1,i-1);}k++;}//取得用户输入的课程号StringuserInput=jtfSelectedCourse.getText().toString().trim().toLowerCase();//无效操作1:在数据库中的coursexx表中查询该课程号。如果不存在该课程,给出提示。Stringsql=selectcnofromcoursexxwherecno=?;booleanflagCourseExist=false;try{ps=con.prepareStatement(sql);ps.setString(1,userInput);rs=ps.executeQuery();flagCourseExist=rs.next();}catch(ExceptioneC){eC.printStackTrace();}if(!flagCourseExist){JOptionPane.showMessageDialog(null,该课程不存在,请重新输入);returnfalse;}//判断该学生选修课已选课程的总学分是否小于6;//无效操作2:如果已有选课记录,并且总学分大于6学分,该学生不能在选了。PreparedStatementps=null;sql=selectsum(grade)+from(selectx.sname,x.cno,k.gradegrade+fromcoursexxkjoinchoicesxxx+onk.cno=x.cnoandx.sname=?)result;Stringgrade=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(Exceptionrrr){rrr.printStackTrace();}System.out.println(总学分:+grade);if(Integer.parseInt(grade)6){JOptionPane.showMessageDialog(null,你已经选满6学分,系统将退出);this.setVisible(false);returnfalse;}//无效操作3:课程该学生已经选择了某课程,则不能再选该课程了。sql=select*fromchoicesxxwheresname=?andcno=?;booleanflag=false;try{ps=con.prepareStatement(sql);ps.setString(1,this.getUsrName());ps.setString(2,userInput);rs=ps.executeQuery();flag=rs.next();}catch(Exceptioneaa){eaa.printStackTrace();}if(flag){JOptionPane.showMessageDialog(null,你已经选择了该课程。请另选课程);returnfalse;}//如果以上无效操作都不存在,则返回true,意为这是一个准有效操作returntrue;}//对有效的提交操作的进行处理publicvoidtryCommit(){//userInput为用户输入的课程ID.StringuserInput=jtfSelectedCourse.getText().toString().trim().toLowerCase();//ifcoursestillavailable(countMAX_STUDENT),saveresult.//elseifcoursenotavailable,showMessagetostudent.PreparedStatementps;Stringsql=select(Max-selectedCount)asRemainedCount+fromCoursexxwherecno=?;try{ps=con.prepareStatement(sql);//取得学生ID或名字,将课程ID存入学生选课表choicesxxps.setString(1,userInput);rs=ps.executeQuery();ResultSetMetaDatameta=rs.getMetaData();intcols=meta.getColumnCount();intRemainedCount=-1;while(rs.next()){RemainedCount=rs.getInt(1);System.out.println(RemainedCount:+RemainedCount);}//如果该课程还有选择的名额,提示单项选课操作成功。if(RemainedCount0){//savestudentIdandcourseIdtostudent-coursetable.//this.getUsrName();userInputsql=insertintochoicesxxvalues(?,?);ps=con.prepareStatement(sql);ps.setString(1,this.getUsrName());ps.setString(2,userInput);ps.executeUpdate();JOptionPane.showMessageDialog(null,选课成功:+this.getUsrName()+选了+userInput+.++还有+RemainedCount+人可以选该课程。);//更新课程中已选该课程的人数:即将可选该课程的人数减去1个人。sql=updateCourseXXsetselectedCount=selectedCount+1wherecno=?;ps=con.prepareStatement(sql);ps.setString(1,userInput);ps.executeUpdate();con.commit();//如果该课程已
本文标题:Java完整的学生选课系统源码
链接地址:https://www.777doc.com/doc-5469335 .html