Java课程设计 | 您所在的位置:网站首页 › 简单的学生成绩系统java › Java课程设计 |
大家好,又见面了,我是你们的朋友全栈君。 Java 课程设计题 目: 学生成绩管理系统 摘要 在现今信息时代,生活速度的加快,使得人们越来越向信息化、数字化发展。随着学校的规模不断扩大,学生数量急剧增加,有关学生的各种信息量也成倍增长,尤其是学生的考试成绩数据。面对庞大的学生的成绩,需要有学生成绩管理系统来提高学生管理工作的效率。介于此提出了学生成绩管理系统,学生管理系统是计算机对学生档案信息进行管理,具有手工管理无可比拟的优点,如索检迅速、查找方便、可靠性高、存储量大等有点。现在我国的大中专院校的学生成绩管理水平正在不断提高,停留在纸介质基础上的管理手段早已被时代淘汰,因为它浪费了许多的人力和物力。本系统使用 Swing + MySQL + IntelliJ IDEA 开发。为管理人员提供充足的信息和快捷的查询手段,提高学校学籍管理的效率。 关键词: Swing,MySQL,学生成绩管理系统 序言管理信息系统正在向着网络化、智能化和集成化等趋势发展。学生成绩管理系统是为了更好的管理学生考试成绩而开发的数据管理软件。它对于一个学校是不可缺少的重要部分,它的内容对于学校的决策者和管理者来说都至关重要。学生成绩管理管理系统为用户提供充足的信息和快捷的查询手段,实现学生基本信息、成绩的录入,删除,查询,维护以及成绩的统计分析等几方面的功能,是现实问题的迫切要求。 本系统开发的总体任务是实现学生成绩管理的系统化、规范化、自动化。达到提高学生成绩管理效率的目的。与传统管理方法相比有明显的优点:查找方便,可靠性高,保密性好,成本低。彻底改变了以前繁杂的管理模式,实现全面的、相对集中的、职能化的信息综合管理。 计算机被用到信息管理系统的环境正是适应了当今时代飞速发展的信息时代。人们深刻的认识到了计算机功能的强大,对于复杂的信息管理,计算机充分发挥着它的优越性。检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低,这些优点极大地减轻了学院教学人员的工作量,缩小开支,提高了学生档案管理的效率和准确性,能够合理的安排时间,学生能够尽快的知道自己的考试成绩。同时,学生管理系统的应用也为今天的教育在未来市场的竞争力有所提高。 1 需求分析1.1 需求分析概述需求分析是开发软件系统的重要环节,是系统开发的第一步和基础环节。通过需求分析充分认识系统的目标、系统的各个组成部分、各部分的任务职责、工作流程、工作中使用的各种数据及数据结构、各部门的业务关系和数据流程等, 为系统设计打下基础。 而在一些学校机构,随着学生数量的不断增加,学生的信息不断增多,人工管理信息的难度也越来越大。而且效率也是很低的。所以如何自动高效地管理信息是这些年来许多人所研究的。 随着这些年电脑计算机的速度质的提高,成本的下降,IT 互联网大众趋势的发展。我们使用电脑的高效率才处理数据信息成为可能。学生学籍管理系统的出现,正是管理人员与信息数据,计算机的进入互动时代的体现。友好的人机交互模式,清晰简明的图形界面,高效安全的操作使得我们对成千上万的信息的管理得心应手。 1.2 系统需求分析实现数据的录入(添加)、删除、修改按姓名或学号查询按照成绩排序,按照成绩段统计汇总2 设计思路系统通过窗口显示并以菜单方式工作,;能查询、修改和删除文件中考生信息;能够显示全部的考生信息;根据上述系统功能分析,按照结构化程序设计的要求,得到系统的功能结构图, 如图所示。 Java课程设计——学生成绩管理系统图 2.1 简易流程图 3、详细设计3.1 登录界面 Login 类通过选择教师或学生登录,从两张表查找各自的密码检查是否正确,从而进入不同的客户端。实现代码如下: 代码语言:javascript复制public class Login extends JFrame { Login father = this; JTextField user = null; JPasswordField password = null; JButton button1 = null; String flag = "teacher"; Login() { this.setSize(500, 420); this.setLocationRelativeTo(null); this.setTitle("学生成绩管理系统"); this.setResizable(false); init(); this.setVisible(true); password.requestFocus();//让密码输入框获得焦点 } public void login() {//进入主菜单事件String password_true = null; String where = " where T_ID = "; if (flag.equals("teacher")) { where = " where T_ID = "; } else { where = " where S_ID = "; } try { String password_sql = "select passcode from ssms." + flag + where + Integer.parseInt(user.getText()) + ";"; Connection conn = Main.sendConnection(); PreparedStatement stmt = conn.prepareStatement(password_sql); ResultSet result = stmt.executeQuery(); result.next(); password_true = result.getString("passcode"); } catch (SQLException e) { e.printStackTrace();单界面代码语言:javascript复制} char[] pswd = password.getPassword(); if (String.valueOf(pswd).equals(password_true)) {//密码JOptionPane.showMessageDialog(father, "登陆成功!"); if (flag.equals("teacher")) { TeacherMenu teacherMenu = new TeacherMenu();//创建主菜 teacherMenu.sendObject(father);//传递主窗口引用teacherMenu.sendID(user.getText());//传递输入的账号ID 用于数据库的操作等代码语言:javascript复制teacherMenu.init(); } else { StudentMenu studentMenu = new StudentMenu(); studentMenu.sendObject(father); studentMenu.sendID(user.getText()); studentMenu.init(); } father.setVisible(false);//进入主菜单界面时隐藏登录界面 } else { JOptionPane.showMessageDialog(father, "账号或密码错误!", " 错误", JOptionPane.WARNING_MESSAGE); } } public void init() { setLayout(new GridLayout(2, 1, 0, 0)); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel panel1 = new JPanel() {//登录界面上半部分private static final long serialVersionUID = 1L; ImageIcon image = new ImageIcon("Image\\up.png");//登录界面上部图片代码语言:javascript复制public void paintComponent(Graphics g) { super.paintComponent(g); g.drawImage(image.getImage(), 0, 0, this.getWidth(), this.getHeight(), this); } }; panel1.setLayout(null); JPanel head = new JPanel() {//头像 private static final long serialVersionUID = 1L; ImageIcon icon = new ImageIcon("Image\\flower.jpg"); public void paintComponent(Graphics g) { super.paintComponent(g); g.drawImage(icon.getImage(), 0, 0, this.getWidth(), this.getHeight(), this); } }; head.setBounds(200, 70, 100, 100); panel1.add(head); JPanel panel2 = new JPanel(new GridLayout(2, 1, 0, 0));//登录界面下半部分 add(panel1); add(panel2); JLabel label1 = new JLabel("账 号:"); JLabel label2 = new JLabel("密 码:"); user = new JTextField("10001", 15);//账号输入框password = new JPasswordField(15);//密码输入框 password.addActionListener(e -> login());//密码框添加回车登录事件,进入主菜单界面 JPanel panel3 = new JPanel(new GridLayout(2, 1, 0, 0));//放置用户名和密码及其输入框 JPanel panel4 = new JPanel(new FlowLayout(FlowLayout.CENTER, 0, 16));//放置用户名及其输入框 JPanel panel5 = new JPanel(new FlowLayout(FlowLayout.CENTER, 0, 16));//放置密码及其输入框 panel3.add(panel4); panel3.add(panel5); panel4.add(label1); panel4.add(user);//添加用户名输入框panel5.add(label2); panel5.add(password);//添加密码输入框panel2.add(panel3); button1 = new JButton("登 录"); JButton button2 = new JButton("退 出"); button1.setFocusPainted(false);//不绘制焦点button2.setFocusPainted(false); try {//改变成 win10风格UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e) { e.printStackTrace(); } button1.addActionListener(e -> login()); button2.addActionListener(e -> System.exit(0));//lambda 表达式JPanel panel_choice = new JPanel(); JRadioButton radioButton_1 = new JRadioButton("教师", true);// 默认选择教师登录 JRadioButton radioButton_2 = new JRadioButton("学生"); radioButton_1.setFocusPainted(false); radioButton_2.setFocusPainted(false); radioButton_1.addActionListener(e -> flag = "teacher"); radioButton_2.addActionListener(e -> flag = "student"); ButtonGroup group = new ButtonGroup(); group.add(radioButton_1); group.add(radioButton_2); panel_choice.add(radioButton_1); panel_choice.add(radioButton_2); JPanel panel6 = new JPanel(new GridLayout(3, 1, 0, 0)); panel2.add(panel6); panel6.add(panel_choice); JPanel panel_button = new JPanel(new FlowLayout(FlowLayout.CENTER, 30, 5)); panel_button.add(button1); panel_button.add(button2); panel6.add(panel_button); panel6.add(new JPanel()); } }3.2 返回数据库连接的 Connection 的主类 Main 类将连接数据库的操作封装在主类中,定义一个静态方法,该方法返回一个连接数据库的 Connection 类型的引用,以便随时方便连接数据库。 代码语言:javascript复制public class Main { static Connection sendConnection() { String driver = "com.mysql.cj.jdbc.Driver"; //URL 指向要访问的数据库名String url = "jdbc:mysql://localhost:3306/world?serverTimezone=UTC"; //MySQL 配置时的用户名String user = "root"; //MySQL 配置时的密码 String password = "n3483226"; Connection conn = null; try { Class.forName(driver); conn = DriverManager.getConnection(url, user, password); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } return conn; } public static void main(String[] args) { new Login(); } }3.3 返回查询结果 ReturnQueryResult 类将数据库的查询操作封装成一个类,定义一个静态方法,通过传入不同的 SQL 语句,以字符串二维数组的方式返回查询结果。 代码语言:javascript复制class ReturnQueryResult {代码语言:javascript复制public static String[][] send(String sql) { String[][] result = null; Connection conn = null; Statement statement = null; try { conn = Main.sendConnection(); statement = conn.createStatement(); ResultSet rs = statement.executeQuery(sql); ResultSetMetaData rsmd = rs.getMetaData(); int column = rsmd.getColumnCount();//获取列数rs.last(); int row = rs.getRow();//获取行数rs.beforeFirst(); result = new String[row][column]; int count = 0; while (rs.next()) { for (int i = 1; i cl.show(panel_right, "home")); "insert" )); button_add.addActionListener(e -> cl.show(panel_right, button_score.addActionListener(e -> { flag.init(); cl.show(panel_right, "score"); }); button_message.addActionListener(e -> cl.show(panel_right, "message")); add(panel_head, new MyGridBagConstraints(0, 0, 1, setInset(new Insets(5, 0, 5, 0)). setFill(GridBagConstraints.BOTH).setWeight(10, setIpad(1, 1)); add(button_search, new MyGridBagConstraints(0, 2, 1, setInset(new Insets(5, 0, 5, 0)). setFill(GridBagConstraints.BOTH).setIpad(20, ; add(button_add, new MyGridBagConstraints(0, 3, 1, setInset(new Insets(5, 0, 5, 0)). setFill(GridBagConstraints.BOTH).setIpad(20, ; add(button_score, new MyGridBagConstraints(0, 4, 1, setInset(new Insets(5, 0, 5, 0)). setFill(GridBagConstraints.BOTH).setIpad(20, ; add(button_message, new MyGridBagConstraints(0, 6, 1, setInset(new Insets(5, 0, 5, 0)). setFill(GridBagConstraints.BOTH).setIpad(20, ; add(panel_tail, new MyGridBagConstraints(0, 7, 1, setInset(new Insets(5, 0, 5, 0)). setFill(GridBagConstraints.BOTH).setWeight(10, setIpad(1, 1)); } } class JPanelRight extends JPanel {//放置右侧 主页面板,个人信息面板等 JPanelRight parent = this; public JPanelRight() { flag = this; this.setBackground(Color.MAGENTA); this.setLayout(cl);//CardLayout init(); } void init() { JPanelHome panel_home = new JPanelHome(); JPanelInsert panel_insert = new JPanelInsert(); JPanelScore panel_score = new JPanelScore(); PanelMessage panel_message = new PanelMessage(); add(panel_home, "home"); add(panel_insert, "insert"); add(panel_score, "score"); add(panel_message, "message"); } //添加学生信息面板类 class JPanelInsert extends JPanelHome { JPanelInsert() { this.setLayout(new GridLayout(7, 2)); } void init() { JPanel[] panels = new JPanel[7]; for (int i = 0; i < panels.length; i++) { panels[i] = new JPanel(); "电话" }; } JLabel title = new JLabel("添加学生信息:"); panels[0].setLayout(new FlowLayout(FlowLayout.LEFT)); panels[0].add(title); JLabel[] jLabels = new JLabel[5]; JTextField[] jTextFields = new JTextField[5]; String[] label_text = {"学号", "姓名", "性别", "年龄", for (int i = 0; i < 5; i++) { jLabels[i] = new JLabel(label_text[i]); jTextFields[i] = new JTextField(20); panels[i + 1].add(jLabels[i]); panels[i + 1].add(jTextFields[i]); ; } JButton button_confirm = new JButton("添加"); button_confirm.setPreferredSize(new Dimension(100, button_confirm.addActionListener(e -> { Connection conn = Main.sendConnection(); try { String sql_student = "insert into ssms.student values (" + jTextFields[0].getText() + ", '" + jTextFields[1].getText() + "', '" + jTextFields[2].getText() + "', " + jTextFields[3].getText() + ", '" + jTextFields[4].getText() + "', '123456'); "; PreparedStatement pstmt = conn.prepareStatement(sql_student); pstmt.executeUpdate(); for (int i = 1; i layout.show(panel_show, "1")); button_all[2].addActionListener(e->layout.show(panel_show, "2")); button_all[3].addActionListener(e->layout.show(panel_show, "3")); button_all[4].addActionListener(e->layout.show(panel_show, "4")); } } class JPanelShow extends JPanel { JPanel[] panels = new JPanel[5]; JPanelShow() { this.setLayout(new CardLayout()); for(int i=0; i= 80 then "count(case when ave < 80 and ave >= 70 then "count(case when ave < 70 and ave >= 60 then "count(case when ave < 60 then 1 end) as ' "from(select score.S_ID, student.name,\n" "sum(case when T_ID = 10001 then score.grade "sum(case when T_ID = 10002 then score.grade else 0 end) as '数据库',\n" + "sum(case when T_ID = 10003 then score.grade else 0 end) as '算法',\n" + else 0 end) as 'C++',\n" + ave,\n" + @r : = 0) alias\n" + "sum(case when T_ID = 10004 then score.grade "sum(score.grade) as '总分',\n" + "format(sum(score.grade)/count(*), 2) as "format(@r := @r + 1, 0) as '排名' \n" + "from ssms.score, ssms.student, (select "where score.S_ID = student.S_ID\n" + "group by score.S_ID) t;"; String[][] resultSet = ReturnQueryResult.send(sql_1); for(int i = 1; i new AlterDialog(father));//弹出修改个人信息对话框 button_password.addActionListener(e -> new PasswordDialog(father)); this.add(button_alter); this.add(button_password); } } class AlterDialog extends JDialog {//修改个人信息对话框 AlterDialog(JFrame parents) { super(parents); this.setSize(350, 460); this.setLocationRelativeTo(parents); init(); this.setVisible(true); } void init() { Container c = this.getContentPane(); c.setLayout(new GridLayout(10, 1, 0, 15)); JLabel label_age = new JLabel("请输入年龄:"); this.add(label_age); JTextField text_age = new JTextField(); this.add(text_age); JLabel label_phone = new JLabel("请输入电话:"); this.add(label_phone); JTextField text_phone = new JTextField(); this.add(text_phone); JButton bt_save = new JButton("保 存"); Connection conn = Main.sendConnection(); String sql = "update ssms.teacher set teacher.age=?, teacher.phone=? where teacher.T_ID=?;"; bt_save.addActionListener(e -> { PreparedStatement pstmt = null; try { pstmt = conn.prepareStatement(sql); pstmt.setInt(1, Integer.parseInt(text_age.getText())); pstmt.setString(2, text_phone.getText()); pstmt.setInt(3, Integer.parseInt(input_ID)); pstmt.executeUpdate(); parent.init(); cl.show(panel_right, "message"); showmessage.button_message.requestFocus(); JOptionPane.showMessageDialog(this, "修改成功!",代码语言:javascript复制"Succeed", JOptionPane.INFORMATION_MESSAGE); ex) {有误,请重新输入!",代码语言:javascript复制} catch (SQLException | NumberFormatException ex.printStackTrace(); JOptionPane.showMessageDialog(this, "格式 "Error", JOptionPane.WARNING_MESSAGE); } }); this.add(bt_save); this.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE); } } class PasswordDialog extends JDialog {//修改密码对话框PasswordDialog(JFrame parents) { super(parents); this.setSize(300, 260); this.setLocationRelativeTo(parents); init(); this.setVisible(true); } void compare(String s1, String s2) throws Exception { if (!s1.equals(s2)) throw new Exception("两次输入的密码不同!"); } void init() { Container c = this.getContentPane(); c.setLayout(new GridLayout(5, 1, 0, 15)); JLabel label_1 = new JLabel("请输入你的新密码:"); this.add(label_1); JTextField text_1 = new JTextField(); this.add(text_1); JLabel label_2 = new JLabel("请再次输入你的密码:"); this.add(label_2); JTextField text_2 = new JTextField(); this.add(text_2); JButton bt_save = new JButton("保 存"); Connection conn = Main.sendConnection(); String sql = "update ssms.teacher set teacher.passcode =? where teacher.T_ID=?;"; bt_save.addActionListener(e -> { PreparedStatement pstmt = null; try { pstmt = conn.prepareStatement(sql); try { compare(text_1.getText(), text_2.getText()); Integer.parseInt(input_ID)); pstmt.setString(1, text_1.getText()); pstmt.setInt(2, pstmt.executeUpdate(); JOptionPane.showMessageDialog(this, "修改成功!", "Succeed", JOptionPane.INFORMATION_MESSAGE);代码语言:javascript复制} catch (Exception ex) { JOptionPane.showMessageDialog(this, "两次输入的密码不同!”, “Error”, JOptionPane.WARNING_MESSAGE); 代码语言:javascript复制} } catch (SQLException ex) { ex.printStackTrace(); JOptionPane.showMessageDialog(this, "格式有误,请重新输入!", "Error", JOptionPane.WARNING_MESSAGE); } }); this.add(bt_save); this.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE); } } } //主页面板类 class JPanelHome extends JPanel {//主页面板 JPanel panel_top = null; JPanelHome dd = this; String sign_id = ""; DownPanel down = null; public JPanelHome() { this.setLayout(new BorderLayout()); init(); } , 30)); , 30)); void init() { panel_top = new JPanel(new GridLayout(1, 2)); panel_top.setPreferredSize(new Dimension(0, 80)); panel_top.setBackground(Color.pink); JPanel id = new JPanel(new FlowLayout(FlowLayout.CENTER, JPanel name = new JPanel(new FlowLayout(FlowLayout.LEFT, JTextField input_id = new JTextField(20); id.add(input_id); JButton button_id = new JButton("按学号查询"); id.add(button_id); JTextField input_name = new JTextField(20); name.add(input_name); JButton button_name = new JButton("按姓名查询"); name.add(button_name); panel_top.add(id); panel_top.add(name); add(panel_top, BorderLayout.NORTH); button_id.addActionListener(e -> { String sql = "SELECT student.*, course.Cname, score.grade, teacher.name FROM" + " ssms.student, ssms.course, ssms.score, ssms.teacher" + + " where student.S_ID = " + input_id.getText() " and student.S_ID = score.S_ID and score.T_ID = teacher.T_ID and course.Cno = teacher.subject; "; try { search(sql); } catch (Exception e1) { e1.printStackTrace(); } }); button_name.addActionListener(e -> { String sql = "SELECT student.*, course.Cname, score.grade, teacher.name FROM" + " ssms.student, ssms.course, ssms.score, ssms.teacher" + input_name.getText() + " where student.name = '" + "' and student.S_ID = score.S_ID and score.T_ID = teacher.T_ID and course.Cno = teacher.subject; "; try { search(sql); } catch (Exception e1) { e1.printStackTrace(); } }); } class DownPanel extends JPanel {//放置查询结果面板 DownPanel() { this.setLayout(new GridLayout(3, 1)); } void init(String sql) { String[][] result = null; try { result = ReturnQueryResult.send(sql); sign_id = result[0][0]; } catch (Exception e) { dd.removeAll(); dd.init(); } String[][] result_1 = new String[1][5]; try { for (int i = 0; i { JDialog alter = new JDialog(father); alter.setSize(new Dimension(400, 500)); alter.setLocationRelativeTo(father); Container c = alter.getContentPane(); c.setLayout(new GridLayout(10, 1, 0, 15)); JLabel label_age = new JLabel("请输入年龄:"); alter.add(label_age); JTextField text_age = new JTextField(); alter.add(text_age); JLabel label_phone = new JLabel("请输入电话:"); alter.add(label_phone); JTextField text_phone = new JTextField(); alter.add(text_phone); JButton bt_save = new JButton("保 存"); Connection conn = Main.sendConnection(); String sql_alter = "update ssms.student set student.age=?, student.phone=? where student.S_ID=?;"; bt_save.addActionListener(l -> { PreparedStatement pstmt = null; try { pstmt = conn.prepareStatement(sql_alter); pstmt.setInt(1, Integer.parseInt(text_age.getText())); pstmt.setString(2, text_phone.getText()); Integer.parseInt(sign_id)); "修改成功!" , "Succeed", pstmt.setInt(3, pstmt.executeUpdate(); //修改信息后刷新界面,更新数据update_page(); JOptionPane.showMessageDialog(alter, JOptionPane.INFORMATION_MESSAGE); } catch (SQLException | NumberFormatException ex) { "格式有误,请重新输入!", JOptionPane.WARNING_MESSAGE); } ex.printStackTrace(); JOptionPane.showMessageDialog(alter, "Error", }); alter.add(bt_save); alter.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE); alter.setVisible(true); }); "); JButton button_alter_score = new JButton("修改成绩 button_alter_score.addActionListener(e -> { String sql_cname = "SELECT course.Cname FROM ssms.course where course.Cno = " + "( select teacher.subject from ssms.teacher where teacher.T_ID = " + input_ID + " );"; String[][] Cname = ReturnQueryResult.send(sql_cname); String flag = JOptionPane.showInputDialog(parent, "请输入" + Cname[0][0] + "成绩:", "修改成绩", JOptionPane.PLAIN_MESSAGE); if (flag != null && flag != "") { String sql_write_score = "update ssms.score set score.grade = " + Integer.parseInt(flag) + " where score.S_Id = " + sign_id + " and score.T_ID = " + input_ID; Connection conn = Main.sendConnection(); try { PreparedStatement pstmt = conn.prepareStatement(sql_write_score); pstmt.executeUpdate(); update_page(); JOptionPane.showMessageDialog(parent, "修改成功!", JOptionPane.INFORMATION_MESSAGE); "Succeed" , "修改失败!", } catch (SQLException e1) { e1.printStackTrace(); JOptionPane.showMessageDialog(parent, "Error", JOptionPane.WARNING_MESSAGE); } } });有信息 代码语言:javascript复制JButton button_delete = new JButton("彻底删除"); button_delete.addActionListener(e -> {//删除学生所 Object[] options = {"确认", "取消"}; int flag = JOptionPane.showOptionDialog(parent, "确认删除该生所有信息吗?", "标题", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[0]); if (flag == JOptionPane.YES_OPTION) { Connection conn = Main.sendConnection(); String sql_score = "delete from ssms.score where S_ID = " + sign_id; String sql_student = "delete from ssms.student where S_ID = " + sign_id; try { PreparedStatement pstmt = conn.prepareStatement(sql_score); pstmt.executeUpdate(); pstmt = conn.prepareStatement(sql_student); pstmt.executeUpdate(); update_page(); "删除成功!" , JOptionPane.showMessageDialog(parent, "Succeed", JOptionPane.INFORMATION_MESSAGE); } catch (SQLException ex) { ex.printStackTrace(); JOptionPane.showMessageDialog(parent, "删除错误!", JOptionPane.WARNING_MESSAGE); } "Error", } }); panel_bottom.add(button_alter_score); panel_bottom.add(button_delete); panel_bottom.add(button_alter); this.add(panel_bottom); } } void update_page() { //修改信息后刷新界面,更新数据 String sql_updata = "SELECT student.*, course.Cname, score.grade, teacher.name FROM" + " ssms.student, ssms.course, ssms.score, ssms.teacher" + " where student.S_ID = " + sign_id + " and student.S_ID = score.S_ID " + "and score.T_ID = teacher.T_ID and course.Cno = teacher.subject; "; try { search(sql_updata); } catch (Exception e1) { e1.printStackTrace(); dd.removeAll(); dd.init(); } } void search(String sql) {//按学号查询事件this.removeAll(); this.init(); down = new DownPanel(); try { down.init(sql); } catch (NullPointerException e) { e.printStackTrace(); this.removeAll(); this.init(); } add(down, BorderLayout.CENTER); cl.show(panel_right, "message");//先跳转到其他面板,再调回来,起到刷新的作用 cl.show(panel_right, "home"); } } } }3.5 学生客户端类将学生的所有功能封装在 StudentMenu 类中。详细代码如下: public class StudentMenu extends JFrame { 代码语言:javascript复制StudentMenu now = this; public StudentMenu() { this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setLayout(new BorderLayout()); this.setSize(700, 600); this.setLocationRelativeTo(null); this.setResizable(false); } Login send = null; void sendObject(Login o) { send = o; } String input_ID = null; void sendID(String ID) { input_ID = ID; } public void init() { JPanelUp panel_up = new JPanelUp(); JPanelBottom panel_bottom = new JPanelBottom(); this.add(panel_up, BorderLayout.NORTH); this.add(panel_bottom, BorderLayout.CENTER); this.setVisible(true); } class JPanelUp extends JPanel { JPanelUp() { this.setPreferredSize(new Dimension(800, 480)); this.setLayout(new GridLayout(1, 2, 0, 0)); init(); } public void init() { String sql_message = "select * from ssms.student where S_ID = " + input_ID + "; "; Connection conn = Main.sendConnection(); PreparedStatement pstmt = null; ResultSet resultSet = null; String no = "", name = "", sex = "", age = "", phone = ""; try { pstmt = conn.prepareStatement(sql_message); resultSet = pstmt.executeQuery(); resultSet.next(); no = resultSet.getString(1); name = resultSet.getString(2); sex = resultSet.getString(3); age = resultSet.getString(4); phone = resultSet.getString(5); } catch (SQLException e) { e.printStackTrace(); } JLabel l_message = new JLabel("个人信息:"); l_message.setFont(new Font("楷体", Font.BOLD, 20)); JLabel l_no = new JLabel("学 号: " + no); JLabel l_name = new JLabel("姓 名: " + name); JLabel l_sex = new JLabel("性 别: " + sex); JLabel l_age = new JLabel("年 龄: " + age); JLabel l_phone = new JLabel("电 话: " + phone); JPanel panel_left = new JPanel(new GridLayout(10, 1)); panel_left.add(l_message); panel_left.add(l_no); panel_left.add(l_name); panel_left.add(l_sex); panel_left.add(l_age); panel_left.add(l_phone); this.add(panel_left); JLabel l_score = new JLabel("各科成绩:"); l_score.setFont(new Font("楷体", Font.BOLD, 20)); JPanel panel_right = new JPanel(new BorderLayout()); String sql_score = "select Cname, grade, teacher.name from ssms.student," + student.S_ID = " + course.Cno; "; " ssms.teacher, ssms.course, ssms.score where + input_ID + " and student.S_ID = score.S_ID and " "score.T_ID = teacher.T_ID and teacher.subject = String[][] result = ReturnQueryResult.send(sql_score); String[] head = {"科目", "分数", "老师"}; MyTable t_score = new MyTable(result, head); JScrollPane sp = new JScrollPane(t_score); panel_right.add(l_score, BorderLayout.NORTH); panel_right.add(sp, BorderLayout.CENTER); this.add(panel_right); } } class JPanelBottom extends JPanel { JPanelBottom() { this.setLayout(new FlowLayout(FlowLayout.CENTER, 60, 10)); init(); } public void init() { JButton button_alter = new JButton("修改信息"); JButton button_password = new JButton("修改密码"); JButton button_quit = new JButton("退出系统"); button_alter.setFocusPainted(false); button_password.setFocusPainted(false); button_quit.setFocusPainted(false); button_alter.setPreferredSize(new Dimension(100, 30)); button_password.setPreferredSize(new Dimension(100, 30)); button_quit.setPreferredSize(new Dimension(100, 30)); button_alter.addActionListener(e -> new AlterDialog(now));//弹出修改个人信息对话框button_password.addActionListener(e -> new PasswordDialog(now)); button_quit.addActionListener(e -> System.exit(0)); this.add(button_alter); this.add(button_password); this.add(button_quit); } } class PasswordDialog extends JDialog { PasswordDialog(JFrame parents) { super(parents); this.setSize(300, 260); this.setLocationRelativeTo(parents); init(); this.setVisible(true); } void compare(String s1, String s2) throws Exception { if (!s1.equals(s2)) throw new Exception("两次输入的密码不同!"); } void init() { Container c = this.getContentPane(); c.setLayout(new GridLayout(5, 1, 0, 15)); JLabel label_1 = new JLabel("请输入你的新密码:"); this.add(label_1); JTextField text_1 = new JTextField(); this.add(text_1); JLabel label_2 = new JLabel("请再次输入你的密码:"); this.add(label_2); JTextField text_2 = new JTextField(); this.add(text_2); JButton bt_save = new JButton("保 存"); Connection conn = Main.sendConnection(); String sql = "update ssms.student set student.passcode =? where student.S_ID=?;"; bt_save.addActionListener(e -> { PreparedStatement pstmt = null; try { pstmt = conn.prepareStatement(sql); try { compare(text_1.getText(), text_2.getText()); pstmt.setString(1, text_1.getText()); pstmt.setInt(2, Integer.parseInt(input_ID)); pstmt.executeUpdate(); JOptionPane.showMessageDialog(this, "修改成功! ", "Succeed", JOptionPane.INFORMATION_MESSAGE); } catch (Exception ex) { JOptionPane.showMessageDialog(this, "两次输入的密码不同!",代码语言:javascript复制} "Error", JOptionPane.WARNING_MESSAGE); } catch (SQLException ex) { ex.printStackTrace(); } }); this.add(bt_save); this.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE); } } class AlterDialog extends JDialog { AlterDialog(JFrame parents) { super(parents); this.setSize(350, 460); this.setLocationRelativeTo(parents); init(); this.setVisible(true); } void init() { Container c = this.getContentPane(); c.setLayout(new GridLayout(10, 1, 0, 15)); JLabel label_age = new JLabel("请输入年龄:"); this.add(label_age); JTextField text_age = new JTextField(); this.add(text_age); JLabel label_phone = new JLabel("请输入电话:"); this.add(label_phone); JTextField text_phone = new JTextField(); this.add(text_phone); JButton bt_save = new JButton("保 存"); Connection conn = Main.sendConnection(); String sql = "update ssms.student set student.age=?, student.phone=? where student.S_ID=?;"; bt_save.addActionListener(e -> { PreparedStatement pstmt = null; try { pstmt = conn.prepareStatement(sql); pstmt.setInt(1, Integer.parseInt(text_age.getText())); pstmt.setString(2, text_phone.getText()); pstmt.setInt(3, Integer.parseInt(input_ID)); pstmt.executeUpdate(); now.init(); JOptionPane.showMessageDialog(this, "修改成功!", "Succeed", JOptionPane.INFORMATION_MESSAGE); } catch (SQLException | NumberFormatException ex) { ex.printStackTrace(); JOptionPane.showMessageDialog(this, "格式有误,请重新输入!",代码语言:javascript复制} }); "Error" , JOptionPane.WARNING_MESSAGE); this.add(bt_save); this.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE); } } }4、运行调试与分析讨论(1)登录 先选择以教师或学生身份登录,输入账号和密码进入相应的客户端。账号分别为老师的职工号和学生的学号。 Java课程设计——学生成绩管理系统图 4.1 登录界面 Java课程设计——学生成绩管理系统图 4.2 登陆成功界面 (2)教师客户端主页面 Java课程设计——学生成绩管理系统图 4.3 教师客户端主页面 (3)学生客户端主页面 Java课程设计——学生成绩管理系统图 4.4 学生客户端主页面 (4)按学号查询 Java课程设计——学生成绩管理系统图 4.5 按学号查询界面 (5)按姓名查找 Java课程设计——学生成绩管理系统图 4.6 按姓名查找界面 (6)修改成绩 Java课程设计——学生成绩管理系统图 4.7 修改成绩界面 Java课程设计——学生成绩管理系统图 4.8 修改成功界面 (7)彻底删除学生信息 Java课程设计——学生成绩管理系统图 4.9 删除学生成绩界面 Java课程设计——学生成绩管理系统图 4.10 删除信息成功界面 (8)修改学生信息 Java课程设计——学生成绩管理系统图 4.11 修改学生成绩界面 Java课程设计——学生成绩管理系统图 4.12 修改成绩成功界面 (9)添加学生 Java课程设计——学生成绩管理系统图 4.12 添加学生信息界面 (10)成绩统计 Java课程设计——学生成绩管理系统图 4.13 总成绩统计界面 Java课程设计——学生成绩管理系统图 4.14 单科成绩统计界面 (11)个人信息 Java课程设计——学生成绩管理系统图 4.15 教师个人信息界面 (12)学生客户端主页面 Java课程设计——学生成绩管理系统图 4.16 学生个人信息界面 (13)修改信息 Java课程设计——学生成绩管理系统图 4.17 修改学生信息界面 修改密码Java课程设计——学生成绩管理系统图 4.18 学生修改密码界面 5、数据结构基本算法实现 利用 SQL 查询语句 select from 返回查询结果 public static String[][] send(String sql) { 代码语言:javascript复制String[][] result = null; Connection conn = null; Statement statement = null; try { conn = Main.sendConnection(); statement = conn.createStatement(); ResultSet rs = statement.executeQuery(sql); ResultSetMetaData rsmd = rs.getMetaData(); int column = rsmd.getColumnCount();//获取列数rs.last(); int row = rs.getRow();//获取行数rs.beforeFirst(); result = new String[row][column]; int count = 0; while (rs.next()) { for (int i = 1; i = 70 then 1 end) as ' "count(case when ave < 70 and ave >= 60 then 1 end) as ' "count(case when ave < 60 then 1 end) as '不及格'\n" + "from(select score.S_ID, student.name,\n" + "sum(case when T_ID = 10001 then score.grade else 0 end) as 'java',\n" + "sum(case when T_ID = 10002 then score.grade else 0 end) as '数据库',\n" + "sum(case when T_ID = 10003 then score.grade else 0 end) as '算法',\n" + "sum(case when T_ID = 10004 then score.grade else 0 end) as 'C++',\n" + "sum(score.grade) as '总分',\n" + "format(sum(score.grade)/count(*), 2) as ave,\n" + "format(@r := @r + 1, 0) as '排名' \n" + "from ssms.score, ssms.student, (select @r := 0) alias\n" + "where score.S_ID = student.S_ID\n" + "group by score.S_ID) t;"; String[][] resultSet = ReturnQueryResult.send(sql_1); for(int i = 1; i |
CopyRight 2018-2019 实验室设备网 版权所有 |