




已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
成都东软信息技术职业学院期末项目报告项目名称:学生管理系统系 别:计算机科学与技术系年级专业:xx级软件技术班 级:x学 号:xx学生姓名:xxxx年 xx 月 xx 日1. 项目内容及知识应用1.1项目完成内容 首先实现登录模块,分为教室登录和学生登录 登录界面有一个下拉条分别为学生和教师,选中哪一个就会登录到相应的界面 学生管理系统分为两大块:学生和教师两个模块 学生登录后进入学生界面,学生界面有菜单项和按钮 学生界面里面有查询自己的成绩,查询自己的详细信息,还可以修改密码,修改自己的信息,菜单项还有帮助等按钮 教师界面里面可以增加学生,显示所有学生的成绩,查找学生,查询学生的详细信息,删除学生的成绩和删除学生,还有刷新和退出等功能 教室界面当点击选中学生时在上面的标签面板会显示学生的详细信息,当查询学生的详细信息时会之间进入该学生的学生面板,教师就可以对学生的信息进行修改 刚登录教师界面时系统启用了另外一个线程,会默认加载所有的学生成绩和信息,当教师点击“显示所有成绩”时就会马上把学生成绩的面板显示在界面上,所有教师就无需等待系统加载 教师界面当老师点击刷新时,会再启动一个线程来重新把学生的信息加载到内存然后显示到界面上 教师界面的成绩表中还有总分和平均分,系统加载的时候会自动计算每一个学生的总分和平均分 教师还可以直接在成绩表中修改学生的成绩,用以来会很方便,修改成绩后要点击刷新按钮来刷新总分和平均分 教室界面还增加了班级的分类,可以查看所有的班级,也可以查看一个班级的学生信息 学生管理系统还增加了上传照片的功能,每个学生都可以上传自己的照片,老师也可以帮学生上传照片1.2知识(点)应用以及经验总结 该学生管理系统采用了分层的思想而且参考了MVC设计模式,但是都做得不够完美。 该系统分为业务逻辑层、实体层和显示层:n 业务逻辑层(com.ccniit.student.manage)有StudentManage、GradeManage、PasswordNotFountException、StduentNotFountException和GradeNotFountException。先写了一个工具类(DBConnection),负责与数据库的连接,业务逻辑层联系数据库实体、显示层。进行综合的控制与处理。这里自定义了几个异常类,主要是抛出无法找到相应类的异常。这样就可以返回多个结果。n 实体层(com.ccniit.student)有两个类Student和Grade,是根据数据库里面的表来实现的,字段就是实体里面的属性还有所有属性的get和set方法,也可以写几个构造方法,没有其他的方法。业务逻辑层就操作这两个类。n 显示层(com.ccniit.student.view)有Login、StduentGrade、Teacher、ImagePanel、ShowImage、Uploading这六个类。主要是负责显示给客户,用于和客户交互信息。所有学生成绩用一个表来显示,Teacher类有另外一个线程来读取所有学生的成绩,在表中教师可以直接在表中修改学生的成绩,修改过后系统会自动修改数据库的数据,来实现动态修改。n 显示层主要是添加的内部匿名监听,由于会有重复监听所以大部分监听都分别写了一个方法,来调用这个方法。n 每个学生都可以上传自己的照片,在有照片的情况下,老师可以看到学生的照片这样可以让老师更快的认识每一个学生,点击学生的照片可以放大该学生的照片,点击别的地方该放大的照片就会消失 该系统主要用到的知识有:n 流程控制n 类和对象n 类的继承n 接口和多态n 数组n 顺序表n 数据库编程n 常用的GUI组件n JTablen 多线程n 事件处理2. 项目实现及关键代码(各个功能界面截图+代码说明,代码为关键代码并加入注释)系统流程图StduentManage/GradeManage(逻辑处理层)DBConnectionLogin / Teacher / StduentGrade (显示层)Stduent / Grade(数据模型)Uploading / ShowImage / ImagePanel(显示层辅助类)数据库(数据持久层)类包层功能DBConnectioncom.ccniit.student.util逻辑连接数据库Studentcom.ccniit.student模型保存学生对象Gradecom.ccniit.student模型保存成绩对象StduentManagecom.ccniit.student.manage逻辑操作学生对象GradeManagecom.ccniit.student.manage逻辑操作成绩对象StudentNotFoundExceptioncom.ccniit.student.manage逻辑当学生找不到时抛出此异常GradeNotFoundExceptioncom.ccniit.student.manage逻辑当成绩找不到时抛出此异常PasswordNotFoundExceptioncom.ccniit.student.manage逻辑当密码找不到时抛出此异常Logincom.ccniit.student.view显示显示登录界面Teachercom.ccniit.student.view显示显示教师界面StudentGradecom.ccniit.student.view显示显示学生界面ImagePanelcom.ccniit.student.view显示读取图片ShowImagecom.ccniit.student.view显示显示放大的图片Uploadingcom.ccniit.student.view显示上传图片com.ccniit.student.Stduent类说明:此类是一个学生的模型类,提供了学生的属性和get、set方法,便于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 (ClassNotFoundException 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 (pstmt != 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 != null) try rs.close(); catch (SQLException e) e.printStackTrace();com.ccniit.student.manage.StudentManage类说明:此类是逻辑处理层里面的学生管理类,有添加学生、删除学生、修改学生信息、检查学生是否登录成功、查找学生等方法,显示层可以直接调用这些方法来实现需要的功能。其中查找方法是有方法的组合。public class StudentManage / 添加学生public static boolean add(Student s) Connection conn = null;PreparedStatement pstmt = null;boolean flag = false;try conn = DBConnection.getConn();String sql = insert into 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.setDate(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) e.printStackTrace(); finally DBConnection.closePstmt(pstmt);DBConnection.closeConn(conn);return flag;/ 修改学生信息public static boolean update(Student s) Connection conn = null;PreparedStatement pstmt = null;boolean flag = false;try conn = DBConnection.getConn();String sql = update student set studentName = ?, password = ?, sex = ?, birth = ?, phone = ?, qq = ?, homeAddr = ?, entranceTime = ? where studentID = ?;pstmt = DBConnection.getPstmt(conn, sql);pstmt.setString(1, s.getStudentName();pstmt.setString(2, s.getPassword();pstmt.setString(3, s.getSex();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();if (pstmt.executeUpdate() 0) flag = true; catch (SQLException e) e.printStackTrace(); finally DBConnection.closePstmt(pstmt);DBConnection.closeConn(conn);return flag;/ 检查学生登录是否成功public static Student check(String studentID, String password)throws StudentNotFoundException, PasswordNotCorrectException Student student = null;Connection conn = null;PreparedStatement pstmt = null;ResultSet rs = null;try conn = DBConnection.getConn();String sql = select * from student where studentID = ?;pstmt = DBConnection.getPstmt(conn, sql);pstmt.setString(1, studentID);rs = DBConnection.executeQuery(pstmt);if (!rs.next() throw new StudentNotFoundException(); else if (!rs.getString(password).trim().equals(password) / System.out.println(rs.getString(password);/ 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); catch (SQLException e) e.printStackTrace(); finally DBConnection.closeRs(rs);DBConnection.closePstmt(pstmt);DBConnection.closeConn(conn);return student;com.ccniit.student.manage.GradeManage类说明:此类是逻辑处理层里面的成绩管理类,有添加成绩、删除成绩、修改成绩、查找成绩等方法,显示层可以直接调用这些方法来实现需要的功能。其中查找方法是有方法的组合。com.ccniit.student.view.Login类说明:此类是显示层的登录界面,此界面类似一个对话框,但是他是继承JFrame,分为两个模块:学生登录和教师登录。有一个下拉条可以选择是学生登录还是教师登录,当选择学生登录时,会登录进入学生界面,当选择教师登录时会进入教师界面。/添加登录界面的角色选择监听jcbPost.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) if (jcbPost.getSelectedItem().equals(学生) jlLogin.setText(学生登录);jlID.setText(学号:); else jlLogin.setText(教师登录);jlID.setText(教师号:););add(jcbPost);/监听登录按钮jbLogin.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) /由于一般就是一个教师修改学生信息,所以教师没有建表,所有的教师都通过一个id号和密码登录if (jcbPost.getSelectedItem().equals(教师) if (jtfID.getText().trim().equals(jiaoshi) & String.valueOf(jpfPassword.getPassword().trim().equals(jiaoshi) setVisible(false);new Teacher().setVisible(true); else JOptionPane.showMessageDialog(Login.this, 登录失败!教师号:jiaoshi 密码:jiaoshi.); else String id = jtfID.getText().trim();String password = String.valueOf(jpfPassword.getPassword().trim();if (.equals(id) JOptionPane.showMessageDialog(Login.this, 请输入学号!);return; else if (.equals(password) JOptionPane.showMessageDialog(Login.this, 请输入密码!);return;try /检查学生登录是否正确,会抛出下面的两种异常,返回登录的学生信息,传递给StudentGrade类Student student = StudentManage.check(id, password);setVisible(false);new StudentGrade(student, false).setVisible(true); catch (StudentNotFoundException e1) JOptionPane.showMessageDialog(Login.this, 学号不存在!); catch (PasswordNotCorrectException e1) JOptionPane.showMessageDialog(Login.this, 密码错误!););com.ccniit.student.view.StduentGrade类说明:此类是显示层的学生成绩界面,有菜单栏、内容窗口、功能按钮,此界面的功能是查询登录学生的成绩,查询学生的个人详细信息,修改个人信息,修改密码等功能。还新创建了一个线程来读取学生的成绩和信息,此线程是一个内部类,有一个修改密码的小窗口是一个内部类继承了JDialog,修改信息的内部类小窗口继承了JDialog。学生还可以上传自己的照片,修改自己上传的照片,上传后学生就能看到自己的照片,但是学生不能修改自己的班级和入学时间,这两项老师可以修改。部分界面如下图所示:还有一些关键代码:/ 声明一个线程来默认读取学生的成绩信息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, columnNames);table.setRowHeight(20);table.setFont(font);table.setEnabled(false);jsp = new JScrollPane(table);这是一个内部线程类,当进入这个界面以后,这个线程就会默认启动,来读取该学生的信息/ 添加上传照片的监听jbPhoto.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) try File file = upload.choose();if (file != null)jtfPhoto.setText(file.getPath(); catch (FileNotFoundException e1) e1.printStackTrace(); catch (IOException e1) e1.printStackTrace(););这是一个上传照片的监听,当点击这个按钮以后,会出现一个选择文件的对话框,选择自己的照片以后,就可以上传自己的照片,然后系统就会把该学生的照片存到默认的文件夹下面,数据库存的是该学生的照片的名字,系统根据名字就可以读取到该学生的照片com.ccniit.student.view.ImagePanel类说明:此类是得到一个图片的路径然后把这个图片读取出来,显示在调用这个类的组件里面,这个类继承了JPanel,可以直接添加在窗口组件上面。这个类是用来读取学生照片,照片会根据窗口的大小来方法或缩小图片,但是图片不会失真关键代码:protected void paintComponent(Graphics g) int frameWidth = this.getWidth();int frameHeight = this.getHeight();rateFrame = (double) frameHeight / frameWidth;if (rateFrame rateImage) height = frameHeight;width = (int) (height / rateImage); else width = frameWidth;height = (int) (width * rateImage);/ System.out.println(width + + height);g.drawImage(image.getImage(), 0, 0, width, height, this);这是一个画出图片的方法,组件会自动调用这个方法,然后画出来,图片的高度和宽度,是更具图片和窗口的大小共同决定的com.ccniit.student.view.ShowImage类说明:这个类是显示放大过后的图片,当老师点击学生的图片的会new这个类的对象来,然后把这个图片重新显示在一个比较大的窗口里面,所以图片就会放大。关键代码:public class ShowImage extends JDialog public ShowImage(ImagePanel image) setSize(700, 700);setLocation(600, 0);add(image);在构造方法里面得到ImagePanel然后把这个对象添加上去,就会显示出来图片com.ccniit.student.view.Uploading类说明:此类是上传照片的类,进入主界面的添加学生或修改学生成绩的时候就会new这个类的对象出来,当点击上传照片后就会弹出一个选择文件的对话框出来,然后老师就可以选择学生图片,该类有两个方法分别是:choose()和upload(),第一个方法就是点击上传照片的时候调用,老师选择完成后,该照片的路径会存在这个对象里面,当点击确认按钮时就是调用upload()这个方法,然后就会把图片存到默认的位置里面。关键代码:/ 上传文件public boolean upload(String path) throws FileNotFoundException,IOException outputStream = new FileOutputStream(path);if (inputStream = null) return false;byte buf = new byteinputStream.available();inputStream.read(buf);outputStream.write(buf);return true;com.ccniit.student.view.Teacher类说明:此类是显示层的教师界面,有菜单栏、内容窗口、功能按钮,此界面的功能是查询所有学生的成绩,增加学生,查找学生,删除成绩,删除学生,刷新,查询学生的个人详细信息,修改个人信息,修改密码等功能。还新创建了一个线程来读取所有学生的成绩和信息,此线程是一个内部类,还有增加学生的内部类继承了JDialog。在成绩表中还实现了监听成绩被修改的匿名类,老师可以直接在成绩表中修改学生成绩,还添加了鼠标监听,当老师点击某个学生时,在上面的标签中会显示学生的详细信息,实现了模糊查找功能,只要老师输入学生姓名的关键字或学生学号的关键字就会自动查找出包含这些关键字的学生,然后显示在面板的表中。该系统还实现了班级分类,老师可以选择所以班级或着一个班级的学生,例如老师选择软件技术8班,在窗口中就会列出软件技术8班的所有的学生信息,还实现了上传照片的功能,老师可以上传学生的照片,学生也可以上传照片,但是只能上传自己的照片。老师点击学生的时候,在上面部分会显示学生的详细信息,还有该学生的照片,点击该照片可放大照片,点击别的地方该放大的照片就会消失。部分界面如下图所示:关键代码:jcbClasses.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) String info = (String) jcbClasses.getSelectedItem();if (info.equals(所有班级) removeJsp();listStudent = new ArrayList();listStudent = students;int records = listStudent.size();showTable(listStudent, records);queryGrade(e);return;removeJsp();listStudent = new ArrayList();for (int i = 0; i students.size(); i+) if (info.equals(students.get(i).getClasses() listStudent.add(students.get(i);int records = listStudent.size();jlCount.setText(info + 总人数: + records);showTable(listStudent, records);queryGrade(e););这是选择班级的监听,当老师选择班级时,就会调用这个方法private void showTable(List students, int records) Object rowData = new Objectrecords + 1columnNames.length; / 最后一行用来保存平均成绩/ 遍历每一个学生得到每一个学生的成绩for (int i = 0; i students.size(); i+) / 得到所有的成绩List grades = new ArrayList();GradeManage.findByID(grades, students.get(i).getStudentID();students.get(i).setGrades(grades);for (int i = 0; i students.size(); i+) Student student = students.get(i);rowDatai0 = student.getStudentID();rowDatai1 = student.getStudentName();List grades = student.getGrades();double sum = 0.0;for (int j = 0, k = 0; j 7; j+) Grade grade = null;if (k grades.size()grade = grades.get(k);/ 判断标题名等于课程名时才赋值if (grade != null& columnNames2 + j.equals(grade.getCourseName().trim() rowDatai2 + j = grade.getGrade();sum += grade.getGrade();k+;rowDatai9 = sum;String avgs = colAvg(rowData);rowDatarecords1 = 平均成绩;for (int i = 0; i rowDatarecords.length - 2; i+) rowDatarecordsi + 2 = avgsi;table = new MyTable(rowData, columnNames);table.setRowHeight(20); / 设置行高Font f = new Font(楷体, 0, 14);table.setFont(f);table.setSelectionMode(0); / 设置只允许选择一行jsp = new JScrollPane(table);这是添加表的一个方法,所有把表显示出来的组件都会调用这个方法,这个方法需要两个参数,一个是要显示的数据,还有一个是显示的这个数据的数据jbAddStudent.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) String studentID = jtfStudentID.getText().trim();if (.equals(studentID) JOptionPane.showMessageDialog(AddStudent.this, 请输入学号!);return; else if (studentID.length() 12) JOptionPane.showMessageDialog(AddStudent.this,学号在6-12位之间!);return;student.setStudentID(studentID);String name = jtfName.getText().trim();if (.equals(name) JOptionPane.showMessageDialog(AddStudent.this, 请输入姓名!);return;student.setStudentName(name);String password = jtfPassword.getText().trim();if (.equals(password) JOptionPane.showMessageDialog(AddStudent.this, 请输入密码!);return; else if (studentID.length() 12) JOptionPane.showMessageDialog(AddStudent.this,密码在6-12位之间!);return;student.setPassword(password);student.setSex(jrbMan.isSelected() ? 男 : 女);String date = jtfBirth.getText().trim();if (.equals(date) student.setBi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 难点解析-福建省邵武市7年级上册期末测试卷定向测试试卷(含答案详解版)
- 内科护理(中级)复习提分资料附完整答案详解【典优】
- 内科护理(中级)考试历年机考真题集【预热题】附答案详解
- 粮油食品检验人员综合提升测试卷【巩固】附答案详解
- Biotin-PEG-Amine-MW-10000-Biotin-PEG-NH2-MW-10000-生命科学试剂-MCE
- 攀枝花市人大常委会办公室攀枝花市人大常委会办公室代表联络服务中心2025年春季引才考核模拟试卷含答案解析
- 生态旅游可持续发展规划与管理在2025年的乡村旅游发展策略研究
- 农村信用社招聘考试试题预测试卷附参考答案详解(轻巧夺冠)
- 聚焦2025年产业扶贫项目实施的社会稳定风险分析与预防策略报告
- 内科护理(中级)模拟题库及完整答案详解(名校卷)
- 医院防溺水急救培训课件
- 医疗器械直调管理制度
- 餐饮业员工的培训方案
- 消化道出血课件
- 美团BD岗前培训
- 全套课件-计算机基础
- 2024年09月2024中国银行中银国际证券股份有限公司校园招聘38人笔试历年参考题库附带答案详解
- 无人机应聘面试简历
- 智慧能源与运维云平台解决方案
- 2024广西继续教育公需科目(高质量共建“一带一路”)真题
- 再生障碍性贫血诊断与治疗中国指南(2024年版)解读
评论
0/150
提交评论