java学生选课系统.docx
- 文档编号:4482748
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:11
- 大小:19.25KB
java学生选课系统.docx
《java学生选课系统.docx》由会员分享,可在线阅读,更多相关《java学生选课系统.docx(11页珍藏版)》请在冰豆网上搜索。
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(k<10){
for(inti=1;i<7;i++){
jtSearch.setValueAt(null,k-1,i-1);
}
k++;
}
searchAvailableCourse();
}elseif("提交".equals(str)){
booleaneffect=processBeforeCommit();
if(effect==true){tryCommit();}
}
}
publicbooleanprocessBeforeCommit(){
intk=1;
while(k<10){
for(inti=1;i<7;i++){
jtSearch.setValueAt(null,k-1,i-1);
}
k++;
}
StringuserInput=jtfSelectedCourse.getText().toString().trim()
.toLowerCase();
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;
}
PreparedStatementps=null;
sql="selectsum(grade)"
+"from(selectx.sname,o,k.gradegrade"
+"fromcoursexxkjoinchoicesxxx"
+"ono=oandx.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;
}
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;}
returntrue;
}
publicvoidtryCommit(){
StringuserInput=jtfSelectedCourse.getText().toString().trim()
.toLowerCase();
PreparedStatementps;
Stringsql="select(Max-selectedCount)asRemainedCount"
+"fromCoursexxwherecno=?
";
try{
ps=con.prepareStatement(sql);
ps.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(RemainedCount>0){
sql="insertintochoicesxxvalues(?
?
)";
ps=con.prepareStatement(sql);
ps.setString(1,this.getUsrName());
ps.setString(2,userInput);
ps.executeUpdate();
JOptionPane.showMessageDialog(null,"选课成功:
"+this.getUsrName()
+"选了"+userInput+"."+""+"还有"+RemainedCount
+"人可以选该课程。
");
sql="updateCourseXXsetselectedCount=selectedCount+1wherecno=?
";
ps=con.prepareStatement(sql);
ps.setString(1,userInput);
ps.executeUpdate();
mit();
}
}catch(Exceptiones){
es.printStackTrace();
try{
con.rollback();
}catch(Exceptioney){
ey.printStackTrace();
}
}
}
publicvoidsearchAvailableCourse(){
if(JDBCUtil.getConnection()!
=null){
System.out.println(JDBCUtil.getConnection());
con=JDBCUtil.getConnection();
}else{
con=JdbcUtil.getConnection();
}
StringuserInput=jtfSearch.getText().toString().trim().toLowerCase();
StringselectedItem=jcbSearch.getSelectedItem().toString().trim();
System.out.println("Usersearch:
"+userInput);
System.out.println("selectedItem:
"+selectedItem);
Stringsql=null;
try{
if("课程名".equals(selectedItem)){
sql="selectcno,cname,hour,grade,term,isNeedfromCourseXXwherecname=?
";
ps=con.prepareStatement(sql);
ps.setString(1,userInput);
}elseif("课程ID".equals(selectedItem)){
sql="selectcno,cname,hour,grade,term,isNeedfromCourseXXwherecno=?
";
ps=con.prepareStatement(sql);
ps.setString(1,userInput);
}elseif("学时".equals(selectedItem)){
sql="selectcno,cname,hour,grade,term,isNeedfromCourseXXwherehour=?
";
ps=con.prepareStatement(sql);
ps.setInt(1,Integer.parseInt(userInput));
}elseif("学分".equals(selectedItem)){
sql="selectcno,cname,hour,grade,term,isNeedfromCourseXXwheregrade=?
";
ps=con.prepareStatement(sql);
ps.setInt(1,Integer.parseInt(userInput));
}elseif("学期".equals(selectedItem)){
sql="selectcno,cname,hour,grade,term,isNeedfromCourseXXwhereterm=?
";
ps=con.prepareStatement(sql);
ps.setString(1,userInput);
}
System.out.println(sql);
rs=ps.executeQuery();
mit();
ResultSetMetaDatameta=rs.getMetaData();
intcols=meta.getColumnCount();
Stringresult=null;
intk=1;
booleanflag=false;
while(rs.next()){
for(inti=1;i<=cols;i++){
result=rs.getString(i);
System.out.println(result);
jtSearch.setValueAt(result,k-1,i-1);
}
k++;
flag=true;
}
if(flag==false){
JOptionPane.showMessageDialog(null,"该课程不存在,请重新输入");
return;
}}catch(Exceptionex){
ex.printStackTrace();
try{
con.rollback();
}catch(Exceptioner){
er.printStackTrace();
}
}
publicvoidcreateSearchCourse(){
this.setLayout(newGridLayout(3,1));
JPaneljp1=newJPanel();
jp1.setLayout(newGridLayout(4,1));
JPaneljp2=newJPanel();
JPaneljp3=newJPanel();
JPaneljp10=newJPanel();
JPaneljp11=newJPanel();
JPaneljp12=newJPanel();
JPaneljp13=newJPanel();
JLabeljlSearch=newJLabel("学生选课系统");
jp11.add(jlSearch);
jcbSearch.addItem(newString("课程名"));
jcbSearch.addItem(newString("课程ID"));
jcbSearch.addItem(newString("学时"));
jcbSearch.addItem(newString("学分"));
jcbSearch.addItem(newString("学期"));
jp12.add(jtfSearch);
jp12.add(jcbSearch);
JButtonjbOK=newJButton("查询");
jbOK.addActionListener(this);
jbOK.setSize(90,20);
jp13.add(jbOK);
jp1.add(jp10);
jp1.add(jp11);
jp1.add(jp12);
jp1.add(jp13);
jp2.add(jspSearch);
JLabeljlSelectedCourse=newJLabel("请输入课程ID:
");
JButtonjbSelectedCourse=newJButton("提交");
jbSelectedCourse.addActionListener(this);
jp3.add(jlSelectedCourse);
jp3.add(jtfSelectedCourse);
jp3.add(jbSelectedCourse);
this.add(jp1);
this.add(jp2);
this.add(jp3);
this.setVisible(true);
this.setSize(485,600);
}
publicstaticvoidmain(String[]args){
//StringusrName="xuliang";
//Stringpasswrd="123";
newStudentChooseCourse(usrName,passwrd);
}
}
droptableregisterXu;
createtableregisterXu(idvarchar(20),userNamevarchar(20),passWordvarchar(20),identifyvarchar(20));
insertintoregisterXuvalues('s001','xuliang','123','学生');
insertintoregisterXuvalues('s002','xuliang2','1234','学生');
insertintoregisterXuvalues('j001','jack','12345','学生');
insertintoregisterXuvalues('001','user','user','学生');
insertintoregisterXuvalues('z001','zlm','corejava','老师');
Stringsql="select*fromregisterXu"
+"whereuserName=?
andpassWord=?
andidentify=?
";
//table2:
Coursexx课程表
droptableCoursexx;
createtableCoursexx(cnovarchar(20)primarykey,cnamevarchar(20),hourInt,
gradeInt,termvarchar(20),isNeedvarchar(20),selectedCountInt,MaxInt);
insertintoCoursexxvalues('c001','CoreJava',50,5,'201007','NoNecessary',0,50);
insertintoCoursexxvalues('c002','XML',20,2,'201008','NoNecessary',0,40);
insertintoCoursexxvalues('c003','HIBERNATE',20,4,'201008','NoNecessary',0,30);
insertintoCoursexxvalues('c004','SQL',20,4,'201006','NoNecessary',0,5);
insertintoCoursexxvalues('c005','JDBC',20,2,'201008','NoNecessary',0,3);
insertintoCoursexxvalues('c006','AJAX',20,2,'201010','NoNecessary',0,1);
insertintoCoursexxvalues('c007','JSP',100,8,'201009','NoNecessary',0,1
sql="selectcno,cname,hour,grade,term,isNeedfromCourseXXwherecname=?
";
//table3:
学生表--
droptablestudentxx;
createtablestudentxx(sidvarchar(20),snamevarchar(20)primarykey,sexvarchar(20),birthdayvarchar(20),
classNamevarchar(20),imagevarchar(20));
insertintostudentxxvalues('s001','xuliang
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 学生 选课 系统