说明:
此类是一个学生的模型类,提供了学生的属性和get、set方法,便TStudentManage来操作还提供了几个构造方法。
•ccniit.student.Grade类
说明:
此类是成绩模型类,提供了成绩的属性和get、set方法和几个构造方法,便于GradeManage来操作。
・ccniit・student・uti1.DBConnection类
说明:
这个类的功能是与底层数据库创建连接给逻辑处理层,还有关闭连接的相关功能。
//管理与数据库的连接
publicclassDBConnection{
static(
try{
Class.forNanie("・microsofI.sqlserver・jdbc・SQLServerDriver,r);}catch(ClassNotFoundExceptione){
o.printStackTrace();
publicstaticConnectiongetConnOthrowsSQLException(Connectionconn=DriverManager.getConnection(
Mjdbc:
sqlserver:
//localhost:
1433;databaseName=studentManage0,
Msa\”580000”);
returnconn;
〃数据库关闭的方法
publicstaticvoidclosePstmt(PreparedStatementpstmt){if(pstmt!
=null){
try{
pstmt・closeO;
}catch(SQLExceptione){
e.printStackTrace():
publicstaticResultSetexecuteQuery(PreparedStatementpstmt)throwsSQLException{
ResultSetrs=pstmt・execuleQuery();
returnrs;
}
publicstaticvoidcloseRs(ResultSetrs){
if(rs!
=null){
try(
rs.close();
}catch(SQLExceptione){
e.printStackTrace():
•ccniit.student,manage•StudentManage类
说明:
此类是逻辑处理层里面的学生管理类,有添加学生、删除学生、修改学生信息.检查学生是否登录成功、查找学生等方法,显示层可以直接调用这些方法来实现需要的功能。
其中查找方法是有方法的组合。
publicclassStudentManage{
//添加学生
publicstaticbooleanadd(Students){
Connectionconn=null;
PreparedStatementpstmt=null;
booleanflag=false;
try{
conn=DBConnection.getConnO:
Stringsql=,finsertintostudent(studentID.sludentName,password,sex,birth,phone,qq9homeAddr,entranceTiine)values(?
t?
?
?
?
?
?
t?
.?
)";pstmt二DBConnection.getPstmt(conn,sql);
pstmt.setStringd,s.getStudentlDO);
pstmt.setString(2,s.getStudentName());
pstmt.setString(3,s.getPassword());
pstmt.setString(4,s.getSexO);
pstmt.setDate(5,s.getBirthO);
pstmt.setString(6,s.getPhoneO);
pstmt.setString(7,s.getQqO);
pstmt.setString(8,s.getHoineAddr());
pstmt.setDate(9,s.getEntranceTimeO):
if(pstmt.executeUpdate0>0){
flag=true;
}
:
catch(SQLExceptione){
e.printStackTrace();
}finally{
DBConnection.closePstmt(pstint);
DBConnection.closeConn(con\\);
)
returnflag;
}
//修改学生信息
publicstaticbooleanupdate(Students)(
Connectionconn=null:
PreparedStatementpstmt=null;
booleanflag=false;
try
conn=DBConnection.gelConnO;
Stringsql=”updatestudentsetstudentName=?
.password=?
sex=?
birth=?
phone=?
qq=?
homeAddr=?
entranceTime=?
wherestudentII)二
•・
pstint二DBConnection.geIPsi川l(cozsql);
pstmI.setString(l,s.getStudentName());
pstinl.setString(2,s.getPasswordO);
pstint.setString(3,s.getSexO);
pstml.setDate(4ts.getBirth0);
pstml.setString(5,s.getPhoneO);
pstml.setString(6,s.getQqO):
pstml.setString(7,s.getHomeAddr());
pstml.setDate(8ts.gelEntranceTimeO):
pstml.setString(9,s.getStudentIDO);
if(pstmt.executeUpdate()>0){
flag=true;
}
}catch(SQLExceptione){
e.printStackTraceO;
:
finally{
DBConnection.closePslmt(pstmt);
DBConnection・closeConn(conn);
)
returnflag;
}
//检查学生登录是否成功
publicstaticStudentcheck(StringstudentlD,Stringpassword)
throwsStudentNotFoundException,PasswordNotCorrectException{Studentstudent=null;
Connectionconn=null;
PreparedStatementpstmt=null;
ResultSetrs=null;
try{
conn=DBConnection・gelConnO;
Stringsql=^select*fromstudentwherestudentID=?
";
pstmt=DBConnection.geIPsmt(cozsql);
pstml.setString(l,studentID);
rs=DBConnection.executeQuery^slml):
if(!
rs.nextO)(
thrownewStudentNotFoundExceptionO:
}elseif(!
rs・gelSlring("password")・trim()・equals(password)){
//System・out・println(rs・getString(hpassword^));
//System・out・printIn(password):
thrownewPasswordNotCorrectExceptionO;
}else{
student=newStudent(rs・getString(l),rs.getString
(2),
rs.getString(3),rs.getString(4),rs.getDate(5),
rs.getString(6),rs.getString(7),rs.getString(8).
rs.getDate(9)):
}
}catch(SQLExceptione){
e.printStackTraceO;
}finally{
DBConnection.closeRsdQ;
DBConnection・closePsttnt(pstmt);
DBConnection.closeConn(com\);
)
returnstudent;
}
•ccniit.student.manage.GradeManage类
说明:
此类是逻辑处理层里面的成绩管理类,有添加成绩、删除成绩、修改成绩、查找成绩等方法,显示层可以直接调用这些方法来实现需要的功能。
其中查找方法是有方法的组合。
•ccniit.student.view.Login类
说明:
此类是显示层的登录界面,此界面类似一个对话框,但是他是继承JFeme,分为两个模块:
学生登录和教师登录。
有一个下拉条可以选择是学生登录还是教师登录,当选择学生登录时,会登录进入学生界面,当选择教师登录时会进入教师界面。
g学生营理系统•登录
学生管理系统螯录界面
教师登录
教师▼
〃添加登录界面的角色选择监听
jcbPost・addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){if(jcbPost.getSelectedlteinO.equalsC学生")){jlLogin.setText("学生登录”);jlID.setText("学号:
");
:
else{
jlLogin.setText(,r教师登录”);jllD.setText("教师号:
");
)
}
});
add(jcbPost);
//监听登录按钮
jbLogiri.addActionListener(newActionListener()(
publicvoidactionPerformed(*«\ctionEvente){
〃由于一般就是一个教师修改学生信息,所以教师没有建表,所有的教师都通过一个id号和密码登录
if(jcbPost.getSelectedlteinO.equalsC教师")){
if(jtfID.getText().trim().equals(Hjiaoshi”)&&
String・r^/z/e^AjpfPassword・getPassword())・trim().equals(MjiaoshiM)){setVisible(false);
newTeacher()・setVisible(true):
}else{
JOptionPane.showMessageDialog(\.o^\n.this,"登录失败!
教师号:
jiaoshi密码:
jiaoshLM);
Stringid=jtflD・gelText()・trim():
Stringpassword=
String・阳/“eO/XjpfPassword.getPassword())・triin():
ifequals(id)){
JOptionPane.showMessageDialog(\^o^in.this,"请输入学号!
”);
return;
}elseif(”"・equals(password)){
JOptionPane.showMessageDialog(\.G^\n.this•"请綸入密码!
”);
return;
}
try{
//检查学生登录是否正确,会抛出下面的两种异常,返回登录
的学生信息,传递给SludenlGrade类
Studentstudent-StudentManage.check(id.
password):
setVisible(false):
newStudentGrade(student,false)・setVisible(true):
}catch(StudentNotFoundExceptionel){JOptionPane・sHowMessagoDj&1og(Login・this,
"学号不存
在!
”);
}catch(PasswordNotCorrectExceptionel){
JOptionPane・showMessageDialog(\.G^\n.this.
"密码错
误!
”);
}
\
}});
}
1
•ccniit.student.view.StduentGrade类
说明:
此类是显示层的学生成绩界面,有菜单栏、容窗口、功能按钮,此界面的功能是查询登录学生的成绩,查询学生的个人详细信息,修改个人信息,修改密码等功能。
还新创建了一个线程来读取学生的成绩和信息,此线程是一个部类,有一个修改密码的小窗口是一个部类继承了JDialog,修改信息的部类小窗口继承了JDialog。
学生还可以上传自己的照片,修改自己上传的照片,上传后学生就能看到自己的照片,但是学生不能修改自己的班级和入学时间,这两项老师可以修改。
部分界面如下图所示:
还有一些关键代码:
//声明一个线程来默认读取学生的成绩信息
privateclassLoadThreadimplementsRunnable{publicvoidrun(){
intrecords二GradeManage・findBylDQades,
student・getStudentIDO);
Object[]columnNames={”课程名称J”学期J”学年”分数”};
Object[][]rowData=newObject[records][columnNames.1ength];for(inti=0;iGradegrade=grades・gel(i);
rowData[i]IO]=grade・getCourseNameO;rowData[i][1]=grade・getSemester():
rowData[i][2]=grade・getSchoolYear();rowData[i][3]=grade・getGrade();
table=newJTable(rowData,columnNames):
table.setRowHeight(20);
table・setFont(font);
table.setEnabled(false);
jsp=newJScrollPane(table):
)
}
这是一个部线程类,当进入这个界面以后,这个线程就会默认启动,来读取该学生的信息
//添加上传照片的监听
jbPhoto・add/\ctionListener(newActionListener(){publicvoidactionPerformed(ActionEvenle){try(
Filefile=upload・choose():
if(file!
=null)
jtfPhoto.setText(file.getPathO);
}catch(FileNotFoundExceptionel)(
el.printStackTrace();
}catch(lOExceptionel){
el.printStackTrace();
}
)
});
这是一个上传照片的监听,当点击这个按钮以后,会出现一个选择文件的对话框,选择自己的照片以后,就可以上传自己的照片,然后系统就会把该学生的照片存到默认的文件夹下面,数据库存的是该学生的照片的名字,系统根据名字就可以读取到该学生的照片
・ccniit.student.view.ImagePane1类
说明:
此类是得到一个图片的路径然后把这个图片读取出来