1、 学生管理系统还增加了上传照片的功能,每个学生都可以上传自己的照片,老师也可以帮学生上传照片1.2知识(点)应用以及经验总结 该学生管理系统采用了分层的思想而且参考了MVC设计模式,但是都做得不够完美。 该系统分为业务逻辑层、实体层和显示层: 业务逻辑层(com.ccniit.student.manage)有StudentManage、GradeManage、PasswordNotFountException、StduentNotFountException和GradeNotFountException。先写了一个工具类(DBConnection),负责与数据库的连接,业务逻辑层联系数据库实体
2、、显示层。进行综合的控制与处理。这里自定义了几个异常类,主要是抛出无法找到相应类的异常。这样就可以返回多个结果。 实体层(com.ccniit.student)有两个类Student和Grade,是根据数据库里面的表来实现的,字段就是实体里面的属性还有所有属性的get和set方法,也可以写几个构造方法,没有其他的方法。业务逻辑层就操作这两个类。 显示层(com.ccniit.student.view)有Login、StduentGrade、Teacher、ImagePanel、ShowImage、Uploading这六个类。主要是负责显示给客户,用于和客户交互信息。所有学生成绩用一个表来显示,
3、Teacher类有另外一个线程来读取所有学生的成绩,在表中教师可以直接在表中修改学生的成绩,修改过后系统会自动修改数据库的数据,来实现动态修改。 显示层主要是添加的内部匿名监听,由于会有重复监听所以大部分监听都分别写了一个方法,来调用这个方法。 每个学生都可以上传自己的照片,在有照片的情况下,老师可以看到学生的照片这样可以让老师更快的认识每一个学生,点击学生的照片可以放大该学生的照片,点击别的地方该放大的照片就会消失 该系统主要用到的知识有: 流程控制 类和对象 类的继承 接口和多态 数组 顺序表 数据库编程 常用的GUI组件 JTable 多线程 事件处理2. 项目实现及关键代码(各个功能界
4、面截图+代码说明,代码为关键代码并加入注释)系统流程图StduentManage/GradeManage(逻辑处理层)DBConnectionLogin / Teacher / StduentGrade (显示层)Stduent / Grade(数据模型)Uploading / ShowImage / ImagePanel(显示层辅助类)数据库(数据持久层)类包层功能com.ccniit.student.util逻辑连接数据库Studentcom.ccniit.student模型保存学生对象Grade保存成绩对象StduentManagecom.ccniit.student.manage操作学
5、生对象GradeManage操作成绩对象StudentNotFoundException当学生找不到时抛出此异常GradeNotFoundException当成绩找不到时抛出此异常PasswordNotFoundException当密码找不到时抛出此异常Logincom.ccniit.student.view显示显示登录界面Teacher显示教师界面StudentGrade显示学生界面ImagePanel读取图片ShowImage显示放大的图片Uploading上传图片com.ccniit.student.Stduent类说明:此类是一个学生的模型类,提供了学生的属性和get、set方法,便于
6、StudentManage来操作还提供了几个构造方法。com.ccniit.student.Grade类说明: 此类是成绩模型类,提供了成绩的属性和get、set方法和几个构造方法,便于GradeManage来操作。com.ccniit.student.util.DBConnection类这个类的功能是与底层数据库创建连接给逻辑处理层,还有关闭连接的相关功能。/管理与数据库的连接public class DBConnection static try Class.forName(com.microsoft.sqlserver.jdbc.SQLServerDriver); catch (Clas
7、sNotFoundException e) e.printStackTrace(); public static Connection getConn() throws SQLException Connection conn = DriverManager.getConnection( jdbc:sqlserver:/localhost:1433;databaseName = studentManage,sa, 580000 return conn;/数据库关闭的方法 public static void closePstmt(PreparedStatement pstmt) if (pst
8、mt != null) try pstmt.close(); catch (SQLException e) e.printStackTrace(); public static ResultSet executeQuery(PreparedStatement pstmt) throws SQLException ResultSet rs = pstmt.executeQuery(); return rs; public static void closeRs(ResultSet rs) if (rs ! rs.close();com.ccniit.student.manage.StudentM
9、anage类此类是逻辑处理层里面的学生管理类,有添加学生、删除学生、修改学生信息、检查学生是否登录成功、查找学生等方法,显示层可以直接调用这些方法来实现需要的功能。其中查找方法是有方法的组合。public class StudentManage / 添加学生 public static boolean add(Student s) Connection conn = null; PreparedStatement pstmt = null; boolean flag = false; conn = DBConnection.getConn(); String sql = insert into
10、 student(studentID, studentName, password, sex, birth, phone, qq, homeAddr, entranceTime) values(?, ?); pstmt = DBConnection.getPstmt(conn, sql); pstmt.setString(1, s.getStudentID(); pstmt.setString(2, s.getStudentName(); pstmt.setString(3, s.getPassword(); pstmt.setString(4, s.getSex(); pstmt.setDa
11、te(5, s.getBirth(); pstmt.setString(6, s.getPhone(); pstmt.setString(7, s.getQq(); pstmt.setString(8, s.getHomeAddr(); pstmt.setDate(9, s.getEntranceTime(); if (pstmt.executeUpdate() 0) flag = true; catch (SQLException e) finally DBConnection.closePstmt(pstmt); DBConnection.closeConn(conn); return f
12、lag; / 修改学生信息 public static boolean update(Student s) update student set studentName = ?, password = ?, sex = ?, birth = ?, phone = ?, qq = ?, homeAddr = ?, entranceTime = ? where studentID = ? pstmt.setString(1, s.getStudentName(); pstmt.setString(2, s.getPassword(); pstmt.setString(3, s.getSex();
13、pstmt.setDate(4, s.getBirth(); pstmt.setString(5, s.getPhone(); pstmt.setString(6, s.getQq(); pstmt.setString(7, s.getHomeAddr(); pstmt.setDate(8, s.getEntranceTime(); pstmt.setString(9, s.getStudentID(); / 检查学生登录是否成功 public static Student check(String studentID, String password) throws StudentNotFo
14、undException, PasswordNotCorrectException Student student = null; ResultSet rs = null;select * from student where studentID = ? pstmt.setString(1, studentID); rs = DBConnection.executeQuery(pstmt); if (!rs.next() throw new StudentNotFoundException(); else if (!rs.getString(password).trim().equals(pa
15、ssword) / System.out.println(rs.getString(); / System.out.println(password); throw new PasswordNotCorrectException(); else student = new Student(rs.getString(1), rs.getString(2), rs.getString(3), rs.getString(4), rs.getDate(5), rs.getString(6), rs.getString(7), rs.getString(8), rs.getDate(9); DBConn
16、ection.closeRs(rs); return student;com.ccniit.student.manage.GradeManage类此类是逻辑处理层里面的成绩管理类,有添加成绩、删除成绩、修改成绩、查找成绩等方法,显示层可以直接调用这些方法来实现需要的功能。com.ccniit.student.view.Login类此类是显示层的登录界面,此界面类似一个对话框,但是他是继承JFrame,分为两个模块:学生登录和教师登录。有一个下拉条可以选择是学生登录还是教师登录,当选择学生登录时,会登录进入学生界面,当选择教师登录时会进入教师界面。 /添加登录界面的角色选择监听 jcbPost.
17、addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) if (jcbPost.getSelectedItem().equals(学生) jlLogin.setText(学生登录 jlID.setText(学号: else 教师登录教师号: ); add(jcbPost); /监听登录按钮 jbLogin.addActionListener(new ActionListener() /由于一般就是一个教师修改学生信息,所以教师没有建表,所有的教师都通过一个id号和密码登录教师 if (j
18、tfID.getText().trim().equals(jiaoshi) & String.valueOf(jpfPassword.getPassword().trim().equals( setVisible(false); new Teacher().setVisible(true); else JOptionPane.showMessageDialog(Login.this, 登录失败!jiaoshi 密码:jiaoshi. String id = jtfID.getText().trim(); String password = String.valueOf(jpfPassword.
19、getPassword().trim(); if (.equals(id) 请输入学号! return; else if (.equals(password) 请输入密码! try /检查学生登录是否正确,会抛出下面的两种异常,返回登录的学生信息,传递给StudentGrade类 Student student = StudentManage.check(id, password); new StudentGrade(student, false).setVisible(true); catch (StudentNotFoundException e1) 学号不存在! catch (Passw
20、ordNotCorrectException e1) 密码错误!com.ccniit.student.view.StduentGrade类此类是显示层的学生成绩界面,有菜单栏、内容窗口、功能按钮,此界面的功能是查询登录学生的成绩,查询学生的个人详细信息,修改个人信息,修改密码等功能。还新创建了一个线程来读取学生的成绩和信息,此线程是一个内部类,有一个修改密码的小窗口是一个内部类继承了JDialog,修改信息的内部类小窗口继承了JDialog。学生还可以上传自己的照片,修改自己上传的照片,上传后学生就能看到自己的照片,但是学生不能修改自己的班级和入学时间,这两项老师可以修改。部分界面如下图所示:
21、还有一些关键代码: / 声明一个线程来默认读取学生的成绩信息 private class LoadThread implements Runnable public void run() int records = GradeManage.findByID(grades, student.getStudentID(); Object columnNames = 课程名称学期学年分数 ; Object rowData = new ObjectrecordscolumnNames.length; for (int i = 0; i grades.size(); i+) Grade grade = grades.get(i); rowDatai0 = grade.getCourseName(); rowDatai1 = grade.getSemester(); rowDatai2 = grade.getSchoolYear(); rowDatai3 = grade.getGrade(); table = new JTable(rowData, columnName
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1