还剩38页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
数据库课程设计报告学生选课管理系统班级10软件本2成员常东亚100913010彭红明100913028章鑫100913050组员任务常东亚负责系统界面的设计与__彭红明负责数据库的设计与建立章鑫负责文档的编写目录TOC\o1-3\h\z\u
一、课程设计任务和目的2
二、需求描述2
三、系统总体设计
31.系统架构设计
32.功能模块设计
33.数据库设计(概要设计)5
(1)E-R图5
(2)关系模式5
(3)数据库管理系统6
(4)数据库命名6
(5)数据库表6
四、系统界面设计
111、用户登录账号和__
112、窗体功能描述
123、页面/窗体关系结构图16
五、系统实现技术小结16
六、课程设计体会19
七、系统主要源程序清单20
一、课程设计任务和目的完成学生选课管理系统的__并掌握SQL数据库的建立和使用
二、需求描述本系统是一个单机版的小型的学生选课管理系统,在本系统中,__了一个面向___、学生和教师这三个对象的教务平台,对学生提供的服务有登录、选课、、修改登录__、和查询成绩这几个服务,所选课程总数不能超过3门;对教师提供的服务有登录、修改登录__和登录成绩;对___提供的服务有登录开设学生和教师帐号、删除学生和教师帐号的服务
三、系统总体设计
1.系统架构设计
(1)架构单机
(2)运行软件环境windowsXP、jdk
1.6
(3)__环境硬件平台CPU P
41.8GHz内存256MB以上软件平台windowsXPSP
3、jdk
1.6操作系统WindowsXP数据库SQLServer
2000、SQLServerSP4补丁__工具Eclipse
3.3分辨率1024*
7682.功能模块设计各模块功能登录界面登录界面是有帐号,__两个JTextField,___帐号一字母A开头,教师帐号一字母T开头,学生帐号以字母S开头,登录帐号或__输入错误会弹出相应的提示对话框学生信息管理模块___用于添加和删除学生信息的模块教师信息管理模块___用于添加和删除教师信息的模块教师__修改模块和学生__修改模块___添加的用户帐号的初始__与用户的帐号相同,用户通过__修改模块可以自己需改__教师录入成绩模块教师可以浏览选修自己课程的学生的信息并且录入该学生的成绩学生选择选修课模块该模块通过表格的形式将所有课程列出来,学生可以根据个人兴趣选择不同的课程,每个学生选择的课程数目不能超过3门,而且不能重复选课,否则会弹出对话框,提示用户查看已经选择了的课程学生查询成绩模块通过表格的形式将该学生选择了的课程列出来,如果教师有录入成绩,则可以看到自己的课程成绩
3.数据库设计(概要设计)
(1)E-R图
(2)关系模式学生(学生学号,学生姓名,教师性别,教师生日,所在班级)教师(教师编号,教师姓名,教师性别,教师生日,教师职称,所在院系)课程(课程号,课程名,学分,选课人数)选课(课程号,学生学号,成绩)授课(课程号,教师编号,上课地点)
(3)数据库管理系统MicrosoftSQLServer2000
(4)数据库命名Student__nager
(5)数据库表
1、Logon登录帐号__)主要用来保存用户登录信息字段名数据类型长度是否为空是否主键UserIDchar10不为空主键Passwordrcharr
102、StudentTable1学生信息表主要用来保存学生信息字段名数据类型长度主键否是否为空描述StudentIDChar10主键不为空学生学号StudentNameChar10不为空学生姓名Student___Char2不为空学生性别StudentBirthdayDatetime8学生生日Classchar16所在班级
3、TeacherTable1教师信息表用来储存教师的基本信息字段名数据类型长度主键否是否为空描述TeacherIDChar10主键不为空教师编号TeacherNameChar10不为空教师姓名Teacher___Char2不为空教师性别TeacherBirthdayDatetime8教师生日Postchar10教师职称Departmentchar20所在院系
4、CourseTable课程信息表用于存储课程信息字段名数据类型长度主键否是否为空描述CourseIDChar16主键不为空课程编号CourseNameChar16不为空课程名PointChar8不为空学分StuNumberDatetime4不为空选课人数
5、ScoreTable(学生成绩表)用于存储学生成绩字段名数据类型长度是否为空是否主键CourseIDchar16不为空主键StudentIDchar10不为空主键Scoreint
46、TeachTablej教师授课表用于存储教师信息字段名数据类型长度是否为空是否主键CourseIDchar16不为空主键TeacherIDchar10不为空主键Locationint10
(8)数据库账户及权限(截图)
1、学生账户表
2、教师账户表
3、用户登录表
(9)数据库存储过程
1、AllCourse createprocAllCourseasbeginselectx.CourseIDx.CourseNamex.Pointy.TeacherNamey.Postz.Locationx.StuNumberfromCoursexTeacherTable1yTeachTablezwherex.CourseID=z.CourseIDandy.TeacherID=z.TeacherIDend
2、DeleteLogon createprocDeleteLogon@idchar10asbegindeletefromLogonwhereUserID=@idend
3、DeleteStudent createprocDeleteStudent@idchar10asbegindeletefromStudentTable1whereStudentID=@idend
4、DeleteTeacher:createprocDeleteTeacher@idchar10asbegindeletefromTeacherTable1whereTeacherID=@idend
5、InsertLogon:createprocInsertLogon@idchar10asbegininsertintoLogonvalues@id@idend
6、InsertStudent:createprocInsertStudent@useridchar10@usernamechar10@___char2@birthdatetime@classchar10asbegininsertintoStudentTable1values@userid@username@___@birth@classendreturn
7、InsertTeacher:createprocInsertTeacher@useridchar10@usernamechar10@___char2@birthdatetime@postchar10@departmentchar10asbegininsertintoTeacherTable1values@userid@username@___@birth@post@departmentendreturn
8、I___istsStu:createprocI___istsStu@idchar10asbeginselect*fromStudentTable1whereStudentID=@idend
9、I___istsTea:createprocI___istsTea@idchar10asbeginselect*fromTeachertable1whereTeacherID=@idend
10、ProcAllStu:createprocProcAllStuasbeginselect*fromStudentTable1end
11、ProcAllTeacreateprocProcAllTeaasbeginselect*fromTeacherTable1end
12、ProcLogon:createprocProcLogon@useridchar16@passwordchar10asbeginselect*fromLogonwhereUserID=@useridandPassword=@passwordendreturn
13、ProcModify:createprocProcModify@idchar10@passwordchar16asbeginupdateLogonsetPassword=@passwordwhereUserID=@idend
14、ProcStudent:createprocProcStudent@idchar10asbeginselect*fromStudentTable1whereStudentID=@idend
15、SelectCourse:createprocSelectCourse@idchar10@courseidchar16asbegininsertintoScoreTablevalues@courseid@idnullend
16、SelectedCourse:createprocSelectedCourse@idchar10asbeginselect*fromScoreTablewhere@id=StudentIDend
17、SelectedCourseNum:createprocSelectedCourseNum@idchar10asbeginselectCOUNT*fromScoretablewhereStudentID=@idend
18、SelectedDetail:createprocSelectedDetail@idchar10asbeginselectx.CourseIDx.CourseNamex.Pointy.TeacherNamey.Postz.Locations.ScorefromCoursexTeacherTable1yTeachTablezScoreTableswhere@id=s.StudentIDandx.CourseID=z.CourseIDandz.TeacherID=y.TeacherIDandx.CourseID=s.CourseIDend
四、系统界面设计
1、用户登录账号和__UserPasswordAdmin123S1123S100913010S100913010S001001S001001S001002S001002S002004S002004T01001T01001T01002T01002T01003T01003T01004T01004S002001S002001S002002S002002S002003S
0020032、窗体功能描述登录界面Logon.j__a___以帐号Admin__123登录成功进入___的信息管理界面,通过__“学生信息管理”和“教师信息管理”进入不同的管理界面,学生信息管理界面如下教师信息管理界面如下以学生帐号(如帐号S001001__S001001)登陆成功后进入如下界面,首先显示的是学生的基本信息__“课程列表”按钮进入如下界面根据自己的跟人兴趣选择课程,选择的课程数目不能超过3门否则弹出对话框如下__“确定”跳转到已选课程列表在主界面__“已选课程”按钮也可以进入下面的界面查看已经选择的课程以教师帐号(如帐号T01001__T01001)登陆成功后进入如下界面,首先显示的是教师的基本信息,__“录入成绩”可以通过表格来录入学生的成绩界面如下图所示
3、页面/窗体关系结构图
五、系统实现技术小结为了方便管理,将数据库的封装分成两部分,数据库资源配置文件和封装数据库操作的类Sql__nager.j__a:数据库资源配置文件sysConfig.properties:#Sepecifythesystemtype:windoworunixsystem-type=windows#specifythedatabasestypedatabase-type=sqlserver#specifysomeparametersDBhost=localhostDBport=1433DBname=Student__nagerDBuser=saDBpassword=封装数据库操作的类:Sql__nager.j__aimportj__a.sql.*;importj__a.util.*;importj__ax.swing.JOptionPane;publicclassSql__nager{privatestaticSql__nagerp=null;privatePropertyResour__Bundlebundle;privatestaticStringjdbcDriver=null;privatestaticStringsplit=null;privateStringDBType=null;privateStringDBhost=localhost;privateStringDBname=;privateStringDBport=;privateStringDBuser=;privateStringDBpassword=;privateConnectionSqlconn=null;privateStatementSqlstmt=null;privateStringstrCon=null;privateSql__nager{try{bundle=newPropertyResour__BundleSql__nager.class.getResour__AsStream/sysConfig.properties;this.DBhost=getStringDBhost;this.DBname=getStringDBname;this.DBport=getStringDBport;this.DBuser=getStringDBuser;this.DBpassword=getStringDBpassword;Stringsystem_type=getStringsystem-type;ifsystem_type!=null{ifsystem_type!=null{ifsystem_type.toLowerCase.equalswidowssplit=;;elseifsystem_type.toLowerCase.equalsunixsplit=:;}Stringdatabase_type=getStringdatabase-type;this.DBType=database_type;ifdatabase_type!=null{ifdatabase_type.toLowerCase.equalsmysql{jdbcDriver=com.mysql.jdbc.Driver;strCon=jdbc:mysql://+DBhost+:+DBport+/+DBname;}elseifdatabase_type.toLowerCase.equalsoracle{jdbcDriver=oracle.jdbc.driver.OracleDriver;strCon=jdbc:oracle:thin:@+DBhost+:+DBport+:+DBname;}elseifdatabase_type.toLowerCase.equalssqlserver{jdbcDriver=com.microsoft.jdbc.sqlserver.SQLServerDriver;strCon=jdbc:microsoft:sqlserver://+DBhost+:+DBport+;DatabaseName=+DBname;}}}}catchEx__ptione{e.printStackTra__;}}publicstaticSql__nagercreateInstan__{ifp==null{p=newSql__nager;p.initDB;}returnp;}privateStringgetStringStrings{returnthis.bundle.getStrings;}publicvoidinitDB{System.out.printlnstrCon;System.out.printlnjdbcDriver;try{Class.forNamejdbcDriver;}catchEx__ptionex{System.err.printlnCantFindDatabaseDriver.;}}publicvoidconnectDB{try{System.out.printlnSql__nager:Connectingtodatabase...;Sqlconn=Driver__nager.getConnectionstrConDBuserDBpassword;Sqlstmt=Sqlconn.createStatement;}catchSQLEx__ptionex{System.err.printlnconnectDB+ex.getMessage;}System.out.printlnSql__nager:Connecttodatabasesuc__ssful.;}publicvoidcloseDB{try{System.out.printlnSql__nager:Closeconnectiontodatabase...;Sqlstmt.close;Sqlconn.close;}catchSQLEx__ptionex{System.err.printlncloseDB:+ex.getMessage;}System.out.printlnSql__nager:Closeconnectionsuc__ssful.;}publicintexecuteUpdateStringsql{intret=0;try{ret=Sqlstmt.executeUpdatesql;}catchSQLEx__ptionex{System.out.printlnexecuteUpdate:+ex.getMessage;}returnret;}publicResultSetexecuteQueryStringsql{ResultSetrs=null;try{rs=Sqlstmt.executeQuerysql;}catchSQLEx__ptionex{System.err.printlnexecuteQuery:+ex.getMessage;}returnrs;}publicstaticvoid__inStringargs[]{Sql__nager.createInstan__.connectDB;Sql__nager.createInstan__.closeDB;}}
六、课程设计体会该系统主要实现了学生选课的功能,这个系统是我们小组__完成,从需求分析,界面的搭建,到数据库的连接,表格,存储过程和存储过程等的建立,在这段时间的摸索中,我们确实学到了很多东西,特别是对以前不太了解的J__aSwing组件有了更深刻的了解比如JTable对于它的用法我在网上找了很多资料,JTable的建立有各种不同的方法,可以使用DefaultTableModel类来实现,如DefaultTableModeldtm=newDefaultTableModelnewO__ect[]{课程编号课程名称学分任课教师教师职称上课地点以选人数}0;然后再table.setModeldtm;或者继承AbstractTableModel类,还有对于如何在JTable中添加Swing组件,原本我们是直接新建一个JcheckBox对象直接添加到表格的单元格里,结果发现只能显示出一串字符串,上网查找后才知道,要用Default__llEditor来添加Swing组件,再设置set__llRenderernewMyTableRenderer这是一个实现了Table__llRenderer接口的JCheckBoxTable__llRenderer可以看做是Swing组件的呈现器,这样Table就会把内容显示绘制交给JCheckBox了对于数据库,我们尽量将对数据库的操作放在存储过程中,这样的抽象和封装使得源程序代码更加容易理解,而且在web应用系统中也可以避免发生不安全的状况,我们想这是一个号的程序员应当要养成的习惯,在这次的课程设计中,层次化,模块化,抽象化也是我们学到的一个重要的经验,参考一些资料后发现模块化能使程序设计更加简单,设计代码时目标更加明确,效率更高,以前虽然也知道这些道理,但自己真正实施起来却感到无从下手,比如前面的数据库操作和数据库资源配置文件,就是我们从书中看来的,这样做的好处是,在程序中操作数据库的时候避免了使用很多try和catch语句,是代码更加简洁,更容易理解,此外需要连接不同的数据库时只要修改数据库的资源配置文件sysConfig.properties就可以了原本我们是想用jsp做一个web应用程序的,因为对于学生选课系统做成单版的确实没什么实用性,但是我对jsp还不太熟悉,所以这次先做个单机版的,以后我会尝试用jsp来做这个系统
七、系统主要源程序清单AdmPanel.j__a:publicclassAdmPanelextendsJPanelimplementsActionListenerItemListenerMouseListener{JButtonb1b2b3b4b5b6;JPanelp1p2p__nter;CardLayoutcard=null;JTextFieldt1=newJTextField10t2=newJTextField10t3=newJTextField10tt1=newJTextField10tt2=newJTextField10tt3=newJTextField10;ButtonGroup___1=newButtonGroup___2=newButtonGroup;JRadioButtonradio1=newJRadioButton男trueradio2=newJRadioButton女;JRadioButtonr1=newJRadioButton男truer2=newJRadioButton女;JComboBoxyearmonthdateyymmddpost;JTabletable1table2;VectorvectorColName1=newVectorvectorColName2=newVector;Vectorvector1=newVectorvector2=newVector;DefaultTableModelmodel1=newDefaultTableModelvectorColName10{publicbooleanis__llEditableintrowintcolumn{returnfalse;}};DefaultTableModelmodel2=newDefaultTableModelvectorColName20{publicbooleanis__llEditableintrowintcolumn{returnfalse;}};AdmPanel{setLayoutnewBorderLayout;t1=newJTextField10;t2=newJTextField10;t3=newJTextField10;tt1=newJTextField10;tt2=newJTextField10;tt3=newJTextField10;___
1.addradio1;___
1.addradio2;___
2.addr1;___
2.addr2;year=newJComboBox;month=newJComboBox;date=newJComboBox;yy=newJComboBox;mm=newJComboBox;dd=newJComboBox;post=newJComboBox;post.addItem助教;post.addItem讲师;post.addItem副教授;post.addItem教授;forinti=1980;i1995;i++year.addItemi;forinti=1;i=12;i++month.addItemi;forinti=1;i=31;i++date.addItemi;forinti=1950;i1995;i++yy.addItemi;forinti=1;i=12;i++mm.addItemi;forinti=1;i=31;i++dd.addItemi;year.addItemListenerthis;month.addItemListenerthis;yy.addItemListenerthis;mm.addItemListenerthis;post.addItemListenerthis;b1=newJButton学生信息管理;b2=newJButton教师信息管理;b3=newJButton输入;b4=newJButton删除;b5=newJButton输入;b6=newJButton删除;b
1.addActionListenerthis;b
2.addActionListenerthis;b
3.addActionListenerthis;b
4.addActionListenerthis;b
5.addActionListenerthis;b
6.addActionListenerthis;JPanelp0=newJPanel;p
0.addb1;p
0.addb2;p__nter=newJPanel;card=newCardLayout;p__nter.setLayoutcard;p1=createStuPanel;p2=createTeaPanel;p__nter.add学生信息管理p1;p__nter.add教师信息管理p2;addp0BorderLayout.NORTH;addp__nterBorderLayout.__NTER;}privateJPanelcreateStuPanel{JPanelp=newJPanel;JScrollPanep1;JPanelp2=newJPanel;p.setLayoutnewGridLayout21;Sql__nagerDBm=Sql__nager.createInstan__;//单态模式获取实例DBm.connectDB;Stringsql=execProcAllStu;ResultSetrs=DBm.executeQuerysql;vectorColName
1.addElement学号;vectorColName
1.addElement姓名;vectorColName
1.addElement性别;vectorColName
1.addElement生日;vectorColName
1.addElement班级;model
1.setDat__ectorvector1vectorColName1;table1=newJTablemodel1;table
1.addMouseListenerthis;p1=newJScrollPanetable1;p.addp1;try{whilers.next{Vectorrec_vector=newVector;//从结果集中取数据放入向量rec_vector中rec_vector.addElementrs.getString1;rec_vector.addElementrs.getString2;rec_vector.addElementrs.getString3;rec_vector.addElementrs.getString4;rec_vector.addElementrs.getString5;vector
1.addElementrec_vector;//向量rec_vector加入向量vect中}rs.close;}catchSQLEx__ptione{e.printStackTra__;}DBm.closeDB;//构造p2Boxbase=Box.createHorizontalBoxboxleft=Box.createVerticalBoxboxright=Box.createVerticalBox;JPanelpp1=newJPanelpp2=newJPanelpp3=newJPanelpp4=newJPanelpp5=newJPanelpp6=newJPanelp___=newJPanelpbirth=newJPanel;p___.addradio1;p___.addradio2;pbirth.addyear;pbirth.addmonth;pbirth.adddate;pp
1.addnewJLabel学生编号;pp
1.addt1;pp
2.addnewJLabel学生姓名;pp
2.addt2;pp
3.addnewJLabel学生性别;pp
3.addp___;pp
4.addnewJLabel学生生日;pp
4.addpbirth;pp
5.addnewJLabel所在班级;pp
5.addt3;pp
6.addb3;pp
6.addb4;boxleft.addBox.createVerticalStrut30;boxleft.addpp1;boxleft.addBox.createVerticalStrut20;boxleft.addpp2;boxleft.addBox.createVerticalStrut20;boxleft.addpp3;boxright.addBox.createVerticalStrut20;boxright.addpp4;boxright.addBox.createVerticalStrut20;boxright.addpp5;boxright.addBox.createVerticalStrut20;boxright.addpp6;base.addboxleft;base.addBox.createHorizontalStrut80;base.addboxright;p
2.addbase;p.addp2;returnp;}privateJPanelcreateTeaPanel{JPanelp=newJPanel;JScrollPanep1;JPanelp2=newJPanel;p.setLayoutnewGridLayout21;Sql__nagerDBm=Sql__nager.createInstan__;//单态模式获取实例DBm.connectDB;Stringsql=execProcAllTea;ResultSetrs=DBm.executeQuerysql;vectorColName
2.addElement教师编号;vectorColName
2.addElement教师姓名;vectorColName
2.addElement教师性别;vectorColName
2.addElement生日;vectorColName
2.addElement职称;vectorColName
2.addElement所在院系;model
2.setDat__ectorvector2vectorColName2;table2=newJTablemodel2;table
2.addMouseListenerthis;p1=newJScrollPanetable2;p.addp1;try{whilers.next{Vectorrec_vector=newVector;//从结果集中取数据放入向量rec_vector中rec_vector.addElementrs.getString1;rec_vector.addElementrs.getString2;rec_vector.addElementrs.getString3;rec_vector.addElementrs.getString4;rec_vector.addElementrs.getString5;rec_vector.addElementrs.getString6;vector
2.addElementrec_vector;//向量rec_vector加入向量vect中}//tm.fireTableStructureChanged;//更新表格,显示向量vect的内容rs.close;}catchSQLEx__ptione{e.printStackTra__;}DBm.closeDB;//构造p2Boxbase=Box.createHorizontalBoxboxleft=Box.createVerticalBoxboxright=Box.createVerticalBox;JPanelpp1=newJPanelpp2=newJPanelpp3=newJPanelpp4=newJPanelpp5=newJPanelpp6=newJPanelpp7=newJPanelp___=newJPanelpbirth=newJPanel;p___.addr1;p___.addr2;pbirth.addyy;pbirth.addmm;pbirth.adddd;pp
1.addnewJLabel教职工号;pp
1.addtt1;pp
2.addnewJLabel教师姓名;pp
2.addtt2;pp
3.addnewJLabel教师性别;pp
3.addp___;pp
4.addnewJLabel教师生日;pp
4.addpbirth;pp
5.addnewJLabel教师职称;pp
5.addpost;pp
6.addnewJLabel所在院系;pp
6.addtt3;pp
7.addb5;pp
7.addb6;boxleft.addBox.createVerticalStrut40;boxleft.addpp1;boxleft.addBox.createVerticalStrut20;boxleft.addpp2;boxleft.addBox.createVerticalStrut20;boxleft.addpp3;boxright.addBox.createVerticalStrut30;boxright.addpp4;boxright.addBox.createVerticalStrut10;boxright.addpp5;boxright.addBox.createVerticalStrut10;boxright.addpp6;boxright.addpp7;base.addboxleft;base.addBox.createHorizontalStrut80;base.addboxright;p
2.addbase;p.addp2;returnp;}publicvoidactionPerformedActionEvente{ife.getSour__==b1{card.showp__nter学生信息管理;}elseife.getSour__==b2{card.showp__nter教师信息管理;}ife.getSour__==b3{Stringuserid=t
1.getTextusername=t
2.getTextclasss=t
3.getText;String___=男;ifradio
2.isSelected{___=女;}Stringbirth=String.valueOfIntegeryear.getSelectedItem+-+String.valueOfIntegermonth.getSelectedItem+-+String.valueOfIntegerdate.getSelectedItem;Stringsql=execInsertStudent+userid++username++___++birth++classs+;Strings=execI___istsStu+userid+;Stringinserlog=execInsertLogon+userid+;System.out.printlnsql;Sql__nagerDBm=Sql__nager.createInstan__;//单态模式获取实例DBm.connectDB;ResultSetrset=DBm.executeQuerys;System.out.printlns;try{ifrset.next{JOptionPane.showMessageDialogthis学生信息插入失败,该学生ID号已存在警告JOptionPane.WARNING_MESSAGE;rset.close;}else{ResultSetrs=DBm.executeQuerysql;ifrs.next{JOptionPane.showMessageDialogthis学生信息插入成功成功JOptionPane.WARNING_MESSAGE;DBm.connectDB;DBm.executeUpdateinserlog;t
1.setTextS;t
2.setTextnull;t
3.setTextnull;radio
1.setSelectedtrue;//this.post.setSelectedIndex0;year.setSelectedIndex0;month.setSelectedIndex0;date.setSelectedIndex0;//sql=select*fromInserted;//ResultSetrs=DBm.executeQuerysql;Vectorrec_vector=newVector;//从结果集中取数据放入向量rec_vector中rec_vector.addElementrs.getString1;rec_vector.addElementrs.getString2;rec_vector.addElementrs.getString3;rec_vector.addElementrs.getString4;rec_vector.addElementrs.getString5;vector
1.addElementrec_vector;//向量rec_vector加入向量vect中model
1.fireTableStructureChanged;//更新表格,显示向量vect的内容rs.close;}else{JOptionPane.showMessageDialogthis学生信息插入失败警告JOptionPane.WARNING_MESSAGE;rs.close;}}}catchSQLEx__ptionex{ex.printStackTra__;}DBm.closeDB;}ife.getSour__==b4{//同步删除数据库中的数据intselectrow=0;selectrow=table
1.getSelectedRow;Stringid=table
1.getValueAtselectrow
0.toString;Stringsql=execDeleteStudent+id+;Stringdeletelog=execDeleteLogon+id+;Sql__nagerDBm=Sql__nager.createInstan__;//单态模式获取实例DBm.connectDB;ifDBm.executeUpdatesql==1{JOptionPane.showMessageDialogthis学生信息已删除删除成功JOptionPane.INFOR__TION_MESSAGE;DBm.connectDB;DBm.executeUpdatedeletelog;model
1.removeRowselectrow;t
1.setTextS;t
2.setTextnull;t
3.setTextnull;radio
1.setSelectedtrue;year.setSelectedIndex0;month.setSelectedIndex0;date.setSelectedIndex0;}DBm.closeDB;}ife.getSour__==b5{Stringuserid=tt
1.getTextusername=tt
2.getTextdepart=tt
3.getTextpost=Stringthis.post.getSelectedItem;String___=男;ifr
2.isSelected{___=女;}Stringbirth=String.valueOfIntegeryy.getSelectedItem+-+String.valueOfIntegermm.getSelectedItem+-+String.valueOfIntegerdd.getSelectedItem;Stringsql=execInsertTeacher+userid++username++___++birth++post++depart+;Strings=execI___istsTea+userid+;Stringinsertlog=execInsertLogon+userid+;System.out.printlnsql;Sql__nagerDBm=Sql__nager.createInstan__;//单态模式获取实例DBm.connectDB;ResultSetrset=DBm.executeQuerys;System.out.printlns;try{ifrset.next{JOptionPane.showMessageDialogthis教师信息插入失败,该教师ID号已存在警告JOptionPane.WARNING_MESSAGE;rset.close;}else{ResultSetrs=DBm.executeQuerysql;ifrs.next{JOptionPane.showMessageDialogthis教师信息插入成功成功JOptionPane.WARNING_MESSAGE;DBm.connectDB;DBm.executeUpdateinsertlog;tt
1.setTextT;tt
2.setTextnull;tt
3.setTextnull;r
1.setSelectedtrue;this.post.setSelectedIndex0;yy.setSelectedIndex0;mm.setSelectedIndex0;dd.setSelectedItem0;Vectorrec_vector=newVector;//从结果集中取数据放入向量rec_vector中rec_vector.addElementrs.getString1;rec_vector.addElementrs.getString2;rec_vector.addElementrs.getString3;rec_vector.addElementrs.getString4;rec_vector.addElementrs.getString5;rec_vector.addElementrs.getString6;vector
2.addElementrec_vector;//向量rec_vector加入向量vect中model
2.fireTableStructureChanged;//更新表格,显示向量vect的内容rs.close;}else{JOptionPane.showMessageDialogthis教师信息插入失败警告JOptionPane.WARNING_MESSAGE;rs.close;}}}catchSQLEx__ptionex{ex.printStackTra__;}DBm.closeDB;}ife.getSour__==b6{//同步删除数据库中的数据intselectrow=0;selectrow=table
2.getSelectedRow;Stringid=table
2.getValueAtselectrow
0.toString;Stringsql=execDeleteTeacher+id+;Stringdeletelog=execDeleteLogon+id+;Sql__nagerDBm=Sql__nager.createInstan__;//单态模式获取实例DBm.connectDB;ifDBm.executeUpdatesql==1{JOptionPane.showMessageDialogthis教师信息信息已删除删除成功JOptionPane.INFOR__TION_MESSAGE;DBm.connectDB;DBm.executeUpdatedeletelog;model
2.removeRowselectrow;tt
1.setTextT;tt
2.setTextnull;tt
3.setTextnull;r
1.setSelectedtrue;yy.setSelectedIndex0;mm.setSelectedIndex0;dd.setSelectedIndex0;}DBm.closeDB;}}publicvoidmousePressedMouseEvente{}publicvoidmouseReleasedMouseEvente{}publicvoidmouseEnteredMouseEvente{}publicvoidmouseExitedMouseEvente{}publicvoidmouseMovedMouseEvente{}publicvoidmouseDragedMouseEvente{}publicvoidmouseClickedMouseEvente{ife.getSour__==table1{intselectrow=0;selectrow=table
1.getSelectedRow;Stringid=table
1.getValueAtselectrow
0.toString;Stringname=table
1.getValueAtselectrow
1.toString;String___=table
1.getValueAtselectrow
2.toString;Stringbirth=table
1.getValueAtselectrow
3.toString.substring010;Stringclasss=table
1.getValueAtselectrow
4.toString;t
1.setTextid;t
2.setTextname;t
3.setTextclasss;if___.trim.equals男radio
1.setSelectedtrue;elseif___.equals女radio
2.setSelectedtrue;inty=Integer.parseIntbirth.substring04;intm=Integer.parseIntbirth.substring57;intd=Integer.parseIntbirth.substring8;year.setSelectedIndexy-1980;month.setSelectedIndexm-1;date.setSelectedIndexd-1;}elseife.getSour__==table2{intselectrow=0;selectrow=table
2.getSelectedRow;Stringid=table
2.getValueAtselectrow
0.toString;Stringname=table
2.getValueAtselectrow
1.toString;String___=table
2.getValueAtselectrow
2.toString;Stringbirth=table
2.getValueAtselectrow
3.toString.substring010;Stringposition=table
2.getValueAtselectrow
4.toString;Stringdepart=table
2.getValueAtselectrow
5.toString;tt
1.setTextid;tt
2.setTextname;tt
3.setTextdepart;if___.trim.equals男r
1.setSelectedtrue;elseif___.equals女r
2.setSelectedtrue;inty=Integer.parseIntbirth.substring04;intm=Integer.parseIntbirth.substring57;intd=Integer.parseIntbirth.substring8;yy.setSelectedIndexy-1950;mm.setSelectedIndexm-1;dd.setSelectedIndexd-1;ifposition.equals助教post.setSelectedIndex0;elseifposition.equals讲师post.setSelectedIndex1;elseifposition.equals副教授post.setSelectedIndex2;elseifposition.equals教授post.setSelectedIndex3;}}publicvoiditemStateChangedItemEvente{//主要实现生日日期的选择(略)}CourseList.j__a:publicclassCourseListextendsJPanelimplementsActionListener{intcount=0;//可供选择的课程数MyTabletable1;JTabletable2;TableColum__odeltcm;JButtonbutton;CourseList{setLayoutnewBorderLayout;button=newJButton确定;button.addActionListenerthis;JPanelp=newJPanel;p.addbutton;table1=newMyTable;JTabletable2=initTabletable1;JScrollPanesp=newJScrollPanetable2;addspBorderLayout.__NTER;addpBorderLayout.SOUTH;}privateJTableinitTableJTabletable{DefaultTableModeldtm=newDefaultTableModelnewO__ect[]{课程编号课程名称学分任课教师教师职称上课地点以选人数}0;Sql__nagerDBm=Sql__nager.createInstan__;DBm.connectDB;Stringsql=execAllCourse;//所有选修课,如果选课人数没有达到5时设置MyTable.b=true;ResultSetrs=DBm.executeQuerysql;try{whilers.next{dtm.addRownewO__ect[]{newBooleanfalsers.getString1rs.getString2rs.getString3rs.getString4rs.getString5rs.getString6rs.getString7};count++;}rs.close;}catchSQLEx__ptione{e.printStackTra__;}DBm.closeDB;table.setModeldtm;TableColum__odeltcm=table.getColum__odel;tcm.getColumn
0.set__llEditornewDefault__llEditornewJCheckBox;tcm.getColumn
0.set__llRenderernewMyTableRenderer;tcm.getColumn
0.setPreferredWidth20;tcm.getColumn
0.setWidth20;tcm.getColumn
0.set__xWidth20;returntable;}publicvoidactionPerformedActionEvente{ife.getSour__==button{ifselectcourse0{JOptionPane.showMessageDialogthis选课成功\n__\确定\查看以选课程选课成功JOptionPane.INFOR__TION_MESSAGE;ChooseList.updateTable;StuPanel.card.showStuPanel.p__nter已选课程;}}}publicintselectcourse{intselectedCount=ChooseList.getSelectedCount;inta=xianzhi;intc=0;String[]courseID=newString[selectedCount];ifselectedCount==3{JOptionPane.showMessageDialogthis选课数目不能超过3门,你已经选择了3门\n__\确定\查看以选课程警告JOptionPane.WARNING_MESSAGE;ChooseList.updateTable;StuPanel.card.showStuPanel.p__nter已选课程;returnc;}else{ifa+selectedCount3{JOptionPane.showMessageDialogthis选课数目不能超过3门,你已经选择了+selectedCount+门\n__\确定\查看以选课程警告JOptionPane.WARNING_MESSAGE;ChooseList.updateTable;StuPanel.card.showStuPanel.p__nter已选课程;returnc;}else{//不能选重复了Stringsql=execSelectedCourse+Logon.userid+;//System.out.printlnsql+不能选重复了;Sql__nagerDBm=Sql__nager.createInstan__;DBm.connectDB;ResultSetrs=DBm.executeQuerysql;try{inti=0;whilers.next{courseID[i]=rs.getString
1.trim;System.out.printlncourseID[i]+changdu;}rs.close;}catchSQLEx__ptione{e.printStackTra__;returnc;}DBm.closeDB;forinti=0;icount;i++{forintj=0;jselectedCount;j++{iftable
1.getValueAti
0.toString.equalstrue{//System.out.printlntable
1.getValueAti
1.toString.trim+选课不能重复__;//System.out.printlncourseID[j];iftable
1.getValueAti
1.toString.trim.equalscourseID[j]{JOptionPane.showMessageDialogthis选课不能重复,\n__\确定\查看已选课程警告JOptionPane.WARNING_MESSAGE;ChooseList.updateTable;StuPanel.card.showStuPanel.p__nter已选课程;returnc;}}}}forinti=0;icount;i++{iftable
1.getValueAti
0.toString.equalstrue{Stringcourseid=table
1.getValueAti
1.toString;sql=execSelectCourse+Logon.userid++courseid+;DBm.connectDB;c=DBm.executeUpdatesql;DBm.closeDB;System.out.printlnc1=+c;}System.out.printlnc2=+c;}ifc==0{JOptionPane.showMessageDialogthis请选择选修课警告JOptionPane.WARNING_MESSAGE;}returnc;}}}publicintxianzhi{inta=0;forinti=0;icount;i++{iftable
1.getValueAti
0.toString.equalstruea++;}returna;}}classMyTableextendsJTable{staticbooleanb=true;publicbooleanis__llEditableintrowIndexintcolumnIndex{ifcolumnIndex0returnfalse;elsereturntrue;}}classMyTableRendererextendsJCheckBoximplementsTable__llRenderer{publicComponentgetTable__llRendererComponentJTabletableO__ectvaluebooleanisSelectedbooleanhasFocusintrowintcolumn{Booleanb=Booleanvalue;this.setSelectedb.booleanValue;returnthis;}}Logon.j__aclassLogonextendsJPanel{JTextFieldt1;JPasswordFieldt2;JButtonbutton1button2;staticStringinfo[];staticStringuseridpassword;Logon{JLabellabel=newJLabel登陆;label.setFontnewFontTimesRo__nFont.BOLD24;t1=newJTextField20;t2=newJPasswordField20;button1=newJButton登陆;button2=newJButton取消;JPanelp1p2p3p4;Boxbox=Box.createVerticalBox;p1=newJPanel;//p
1.setBackgroundColor.PINK;p2=newJPanel;p3=newJPanel;p4=newJPanel;p
1.addlabel;p
2.addnewLabel用户名:;p
2.addt1;p
3.addnewLabel口令:;p
3.addt2;p
4.addbutton1;p
4.addbutton2;box.addp1;box.addp2;box.addp3;box.addp4;addbox;}publiccharlogonthrowsSQLEx__ption{Stringtuserid=t
1.getText;Stringtpassword=newStringt
2.getPassword;Stringsql1=nullsql2=null;ResultSetrs=null;Sql__nagerDBm=Sql__nager.createInstan__;//单态模式获取实例DBm.connectDB;sql1=execProcLogon+tuserid++tpassword+;rs=DBm.executeQuerysql1;ifrs.next//如果存储过程有结果返回,则将用户信息读入并保存{System.out.printlnrs.getString1+如果存储过程有结果返回,则将用户信息读入并保存;userid=rs.getString1;password=rs.getString2;ifuserid.startsWithT{TeaInfo.s__eTeauserid;}elseifuserid.startsWithS{StuInfo.s__eStuuserid;}elseifuserid.startsWithA{sql2=sql1;DBm.connectDB;rs=DBm.executeQuerysql2;}rs.close;DBm.closeDB;returnuserid.substring
01.toCharArray
[0];}else{userid=null;password=null;JOptionPane.showMessageDialogthis用户名或__错误请重新填写警告JOptionPane.WARNING_MESSAGE;rs.close;DBm.closeDB;return0;}}privatestaticvoiddispResultSetResultSetrsthrowsSQLEx__ption{ResultSetMetaDatar__d=rs.getMetaData;intnumCols=r__d.getColumnCount;info=newString[numCols];whilers.next{forinti=1;i=numCols;i++{info[i-1]=rs.getStringi;ifi1System.out.print;System.out.printrs.getStringi;}System.out.println;}}publicvoidreset{t
1.setTextnull;t
2.setTextnull;t
1.requestFocusInWindow;}}学生选课管理系统教师登录模块学生登录模块登录模块___登录模块教师信息管理模块学生信息管理模块教师录入成绩模块教师密码修改模块学生密码修改模块学生选择课程模块学生查询成绩模块教师学生学生学号教师职称学生姓名教师编号课程选课授课教师性别教师姓名所在班级学生生日学生性别教师生日所在院系学分课程编号课程名选课人数成绩上课地点ChooseList.j__aJPanel的子类Logon.j__aJPanel的子类StuPanel.j__aJPanel的子类Stunfo.j__aJPanel的子类TeaPanel.j__aJPanel的子类AdmPanel.j__aJPanel的子类ChooseList.j__aJPanel的子类CourseList.j__aJPanel的子类TeaInfo.j__aJPanel的子类MyFrame.j__aJFrame的子类。