java学生管理系统总结报告.docx

上传人:b****6 文档编号:8299982 上传时间:2023-01-30 格式:DOCX 页数:21 大小:48.71KB
下载 相关 举报
java学生管理系统总结报告.docx_第1页
第1页 / 共21页
java学生管理系统总结报告.docx_第2页
第2页 / 共21页
java学生管理系统总结报告.docx_第3页
第3页 / 共21页
java学生管理系统总结报告.docx_第4页
第4页 / 共21页
java学生管理系统总结报告.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

java学生管理系统总结报告.docx

《java学生管理系统总结报告.docx》由会员分享,可在线阅读,更多相关《java学生管理系统总结报告.docx(21页珍藏版)》请在冰豆网上搜索。

java学生管理系统总结报告.docx

java学生管理系统总结报告

东软信息技术职业学院

期末项目报告

项目名称:

学生管理系统

系别:

计算机科学与技术系

年级专业:

XX级软件技术

班级:

X

学号:

XX

学生:

XX

XX年XX月XX日

1・项目容及知识应用

1.1项目完成容

>首先实现登录模块,分为教室登录和学生登录

>登录界面有一个下拉条分别为学生和教师,选中哪一个就会登录到相应的界面

>学生管理系统分为两大块:

学生和教师两个模块

>学生登录后进入学生界面,学生界面有菜单项和按钮

>学生界面里面有查询自己的成绩,查询自己的详细信息,还可以修改密码,修改自己的信息,菜单项还有帮助等按钮

>教师界面里面可以增加学生,显示所有学生的成绩,查找学生,查询学生的详细信息,删除学生的成绩和删除学生,还有刷新和退出等功能

>教室界面当点击选中学生时在上面的标签面板会显示学生的详细信息,当查询学生的详细信息时会之间进入该学生的学生面板,教师就可以对学生的信息进行修改

>刚登录教师界面时系统启用了另外一个线程,会默认加载所有的学生成绩和信息,当教师点击'‘显示所有成绩”时就会马上把学生成绩的面板显示在界面上,所有教师就无需等待系统加载

>教师界面当老师点击刷新时,会再启动一个线程来重新把学生的信息加载到存然后显示到界面上

>教师界面的成绩表中还有总分和平均分,系统加载的时候会自动计算每一个学生的总分和平均分

>教师还可以直接在成绩表中修改学生的成绩,用以来会很方便,修改成绩后要点击刷新按钮来刷新总分和平均分

>教室界面还增加了班级的分类,可以查看所有的班级,也可以查看一个班级的学生信息

>学生管理系统还增加了上传照片的功能,每个学生都可以上传自己的照片,老师也可以帮学生上传照片

1・2知识(点)应用以及经验总结

>该学生管理系统采用了分层的思想而且参考了MVC设计模式,但是都做得不够完美。

>该系统分为业务逻辑层、实体层和显示层:

■业务逻辑层(.ccniit.student,manage)有StudentManage、

GradeManage、PasswordNotFountException、StduentNotFountException和GradeNotFountExceptiono先写了一个工具类(DBConnection),负责与数据库的连接,业务逻辑层联系数据库实体、显示层。

进行综合的控制与处理。

这里自定义了几个异常类,主要是抛出无法找到相应类的异常。

这样就可以返回多个结果。

■实体层(.ccniit.student)有两个类Student和Grade,是根据数据库里面的表来实现的,字段就是实体里面的属性还有所有属性的get和set方法,也可以写几个构造方法,没有其他的方法。

业务逻辑层就操作这两个类。

■显示层(.ccniit.student,view)有Login、StduentGrade、Teacher、ImagePanel、Showimage.Uploading这六个类。

主要是负责显示给客户,用于和客户交互信息。

所有学生成绩用一个表来显示,Teacher类有另外一个线程来读取所有学生的成绩,在表中教师可以直接在表中修改学生的成绩,修改过后系统会自动修改数据库的数据,来实现动态修改。

■显示层主要是添加的部匿名监听,由于会有重复监听所以大部分监听都分别写了一个方法,来调用这个方法。

■每个学生都可以上传自己的照片,在有照片的情况下,老师可以看到学生的照片这样可以让老师更快的认识每一个学生,点击学生的照片可以放大该学生的照片,点击别的地方该放大的照片就会消失

>该系统主要用到的知识有:

■流程控制

■类和对象

■类的继承

■接口和多态

■数组

■顺序表

■数据库编程

■常用的GUI组件

■JTable

■多线程

■事件处理

2.项目实现及关键代码

(各个功能界面截图+代码说明,代码为关键代码并加入注释)

系统流程图

数据库(数据持久层)

功能

DBConnection

.ccniit・student・util

逻辑

连接数据库

Student

.ccniit・student

模型

保存学生对象

Grade

.ccniit.student

模型

保存成绩对象

StduentMaruige

.ccniit・student・nuinage

逻辑

操作学竺对象

GradeManage

.ccniit・student・nuinage

逻辑

操作成绩对象

StudentNotFoundException

.ccniit・student・nuinage

逻辑

当学生找不到旷抛出此异常

GradeNotFoundException

.ccniit・student・nuinage

逻辑

当成绩找不到时抛出此异常

PasswordNotFoundException

.ccniit・student・nuinage

逻辑

当密码找不到时抛出此异常

Login

.ccniit.student・view

显示

显示登录界面

Teacher

.ccniit.student・view

显示

显示教师界面

StudentGrade

.ccniit.student・view

显示

显示学兰界面

ImagePanel

.ccniit.student・view

显示

读取图片

ShowImage

.ccniit.student・view

显示

显示放大的图片

Uploading

.ccniit.student・view

显示

上传图片

•ccniit

说明:

此类是一个学生的模型类,提供了学生的属性和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;i

Gradegrade=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类

说明:

此类是得到一个图片的路径然后把这个图片读取出来

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1