用Java代码写一个学生成绩管理系统 要求1:带有图形界面。(20%) 要求2:登录时输入用户名密码。(20%) 要求3:能够录入、查询、修改、删除课程。(20%) 要求4:能够录入、查询、修改、删除学生某个课程的成绩。(20%) 要求5:能够持久化。(20%)

时间: 2023-08-11 13:06:05 浏览: 19
好的,以下是一些基本的代码实现思路和步骤,供您参考: 1. 设计数据库表结构,并使用Java连接数据库,实现数据的持久化。可以使用MySQL、Oracle、SQL Server等关系型数据库。示例代码如下: ```java import java.sql.*; public class Database { private Connection connection; private Statement statement; private ResultSet resultSet; private String url = "jdbc:mysql://localhost:3306/student?useSSL=false&serverTimezone=UTC"; private String user = "root"; private String password = "123456"; public Database() { try { Class.forName("com.mysql.cj.jdbc.Driver"); connection = DriverManager.getConnection(url, user, password); statement = connection.createStatement(); } catch (Exception e) { e.printStackTrace(); } } public ResultSet executeQuery(String sql) { try { resultSet = statement.executeQuery(sql); } catch (Exception e) { e.printStackTrace(); } return resultSet; } public boolean executeUpdate(String sql) { try { statement.executeUpdate(sql); return true; } catch (Exception e) { e.printStackTrace(); return false; } } public void close() { try { if (resultSet != null) { resultSet.close(); } if (statement != null) { statement.close(); } if (connection != null) { connection.close(); } } catch (Exception e) { e.printStackTrace(); } } } ``` 2. 使用Java GUI框架,如Swing或JavaFX,实现图形界面。示例代码如下: ```java import javax.swing.*; public class GUI extends JFrame { private JLabel label; private JTextField textField; private JButton button; public GUI() { setTitle("学生成绩管理系统"); setSize(600, 400); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(null); label = new JLabel("请输入用户名:"); label.setBounds(100, 100, 120, 30); add(label); textField = new JTextField(); textField.setBounds(220, 100, 120, 30); add(textField); button = new JButton("登录"); button.setBounds(350, 100, 80, 30); add(button); setVisible(true); } } ``` 3. 实现登录功能,可以使用Java中的JPasswordField类实现密码输入框,并使用JDBC连接数据库进行用户验证。示例代码如下: ```java import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.sql.ResultSet; public class LoginGUI extends JFrame { private JLabel userLabel; private JLabel passwordLabel; private JTextField userTextField; private JPasswordField passwordField; private JButton loginButton; private Database database; public LoginGUI() { setTitle("学生成绩管理系统 - 登录"); setSize(600, 400); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(null); userLabel = new JLabel("用户名:"); userLabel.setBounds(100, 100, 80, 30); add(userLabel); userTextField = new JTextField(); userTextField.setBounds(220, 100, 120, 30); add(userTextField); passwordLabel = new JLabel("密码:"); passwordLabel.setBounds(100, 150, 80, 30); add(passwordLabel); passwordField = new JPasswordField(); passwordField.setBounds(220, 150, 120, 30); add(passwordField); loginButton = new JButton("登录"); loginButton.setBounds(220, 200, 80, 30); add(loginButton); database = new Database(); loginButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String username = userTextField.getText(); String password = new String(passwordField.getPassword()); ResultSet resultSet = database.executeQuery("select * from user where username='" + username + "' and password='" + password + "'"); try { if (resultSet.next()) { JOptionPane.showMessageDialog(null, "登录成功!"); dispose(); new MainGUI(); } else { JOptionPane.showMessageDialog(null, "用户名或密码错误!"); } } catch (Exception ex) { ex.printStackTrace(); } } }); setVisible(true); } public static void main(String[] args) { new LoginGUI(); } } ``` 4. 实现录入、查询、修改、删除课程的功能。可以通过输入表单,将数据插入到数据库中;通过查询条件,查询数据库中的数据;通过修改表单,修改数据库中的数据;通过删除操作,删除数据库中的数据。示例代码如下: ```java import javax.swing.*; import javax.swing.table.DefaultTableModel; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.sql.ResultSet; public class CourseGUI extends JFrame { private JLabel nameLabel; private JLabel creditLabel; private JTextField nameTextField; private JTextField creditTextField; private JButton addButton; private JButton searchButton; private JButton updateButton; private JButton deleteButton; private JTable table; private DefaultTableModel tableModel; private JScrollPane scrollPane; private Database database; public CourseGUI() { setTitle("学生成绩管理系统 - 课程管理"); setSize(800, 600); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(null); nameLabel = new JLabel("课程名称:"); nameLabel.setBounds(100, 50, 80, 30); add(nameLabel); nameTextField = new JTextField(); nameTextField.setBounds(200, 50, 120, 30); add(nameTextField); creditLabel = new JLabel("学分:"); creditLabel.setBounds(350, 50, 80, 30); add(creditLabel); creditTextField = new JTextField(); creditTextField.setBounds(450, 50, 80, 30); add(creditTextField); addButton = new JButton("添加"); addButton.setBounds(550, 50, 80, 30); add(addButton); searchButton = new JButton("查询"); searchButton.setBounds(650, 50, 80, 30); add(searchButton); updateButton = new JButton("修改"); updateButton.setBounds(550, 100, 80, 30); add(updateButton); deleteButton = new JButton("删除"); deleteButton.setBounds(650, 100, 80, 30); add(deleteButton); tableModel = new DefaultTableModel(); tableModel.addColumn("编号"); tableModel.addColumn("课程名称"); tableModel.addColumn("学分"); table = new JTable(tableModel); scrollPane = new JScrollPane(table); scrollPane.setBounds(100, 150, 600, 300); add(scrollPane); database = new Database(); addButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String name = nameTextField.getText(); String credit = creditTextField.getText(); database.executeUpdate("insert into course (name, credit) values ('" + name + "', " + credit + ")"); JOptionPane.showMessageDialog(null, "添加成功!"); } }); searchButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String name = nameTextField.getText(); tableModel.setRowCount(0); ResultSet resultSet = database.executeQuery("select * from course where name like '%" + name + "%'"); try { while (resultSet.next()) { Object[] rowData = new Object[3]; rowData[0] = resultSet.getInt("id"); rowData[1] = resultSet.getString("name"); rowData[2] = resultSet.getDouble("credit"); tableModel.addRow(rowData); } } catch (Exception ex) { ex.printStackTrace(); } } }); updateButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { int row = table.getSelectedRow(); if (row >= 0) { int id = (int) tableModel.getValueAt(row, 0); String name = (String) tableModel.getValueAt(row, 1); double credit = (double) tableModel.getValueAt(row, 2); database.executeUpdate("update course set name='" + name + "', credit=" + credit + " where id=" + id); JOptionPane.showMessageDialog(null, "修改成功!"); } else { JOptionPane.showMessageDialog(null, "请选择要修改的数据!"); } } }); deleteButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e)

相关推荐

好的,下面是一个简单的Java代码实现: import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.io.*; public class GradeManagementSystem extends JFrame { private JMenuBar menuBar; private JMenu courseMenu, gradeMenu; private JMenuItem addCourseItem, searchCourseItem, modifyCourseItem, deleteCourseItem; private JMenuItem addGradeItem, searchGradeItem, modifyGradeItem, deleteGradeItem; private JTable gradeTable; private JScrollPane scrollPane; public GradeManagementSystem() { super("学生成绩管理系统"); // 创建菜单栏 menuBar = new JMenuBar(); setJMenuBar(menuBar); // 创建课程管理菜单 courseMenu = new JMenu("课程管理"); menuBar.add(courseMenu); // 创建添加课程菜单项 addCourseItem = new JMenuItem("添加课程"); addCourseItem.addActionListener(new AddCourseListener()); courseMenu.add(addCourseItem); // 创建查询课程菜单项 searchCourseItem = new JMenuItem("查询课程"); searchCourseItem.addActionListener(new SearchCourseListener()); courseMenu.add(searchCourseItem); // 创建修改课程菜单项 modifyCourseItem = new JMenuItem("修改课程"); modifyCourseItem.addActionListener(new ModifyCourseListener()); courseMenu.add(modifyCourseItem); // 创建删除课程菜单项 deleteCourseItem = new JMenuItem("删除课程"); deleteCourseItem.addActionListener(new DeleteCourseListener()); courseMenu.add(deleteCourseItem); // 创建成绩管理菜单 gradeMenu = new JMenu("成绩管理"); menuBar.add(gradeMenu); // 创建添加成绩菜单项 addGradeItem = new JMenuItem("添加成绩"); addGradeItem.addActionListener(new AddGradeListener()); gradeMenu.add(addGradeItem); // 创建查询成绩菜单项 searchGradeItem = new JMenuItem("查询成绩"); searchGradeItem.addActionListener(new SearchGradeListener()); gradeMenu.add(searchGradeItem); // 创建修改成绩菜单项 modifyGradeItem = new JMenuItem("修改成绩"); modifyGradeItem.addActionListener(new ModifyGradeListener()); gradeMenu.add(modifyGradeItem); // 创建删除成绩菜单项 deleteGradeItem = new JMenuItem("删除成绩"); deleteGradeItem.addActionListener(new DeleteGradeListener()); gradeMenu.add(deleteGradeItem); // 创建表格

最新推荐

基于单片机温度控制系统设计--大学毕业论文.doc

基于单片机温度控制系统设计--大学毕业论文.doc

"REGISTOR:SSD内部非结构化数据处理平台"

REGISTOR:SSD存储裴舒怡,杨静,杨青,罗德岛大学,深圳市大普微电子有限公司。公司本文介绍了一个用于在存储器内部进行规则表达的平台REGISTOR。Registor的主要思想是在存储大型数据集的存储中加速正则表达式(regex)搜索,消除I/O瓶颈问题。在闪存SSD内部设计并增强了一个用于regex搜索的特殊硬件引擎,该引擎在从NAND闪存到主机的数据传输期间动态处理数据为了使regex搜索的速度与现代SSD的内部总线速度相匹配,在Registor硬件中设计了一种深度流水线结构,该结构由文件语义提取器、匹配候选查找器、regex匹配单元(REMU)和结果组织器组成。此外,流水线的每个阶段使得可能使用最大等位性。为了使Registor易于被高级应用程序使用,我们在Linux中开发了一组API和库,允许Registor通过有效地将单独的数据块重组为文件来处理SSD中的文件Registor的工作原

如何使用Promise.all()方法?

Promise.all()方法可以将多个Promise实例包装成一个新的Promise实例,当所有的Promise实例都成功时,返回的是一个结果数组,当其中一个Promise实例失败时,返回的是该Promise实例的错误信息。使用Promise.all()方法可以方便地处理多个异步操作的结果。 以下是使用Promise.all()方法的示例代码: ```javascript const promise1 = Promise.resolve(1); const promise2 = Promise.resolve(2); const promise3 = Promise.resolve(3)

android studio设置文档

android studio默认设置文档

海量3D模型的自适应传输

为了获得的目的图卢兹大学博士学位发布人:图卢兹国立理工学院(图卢兹INP)学科或专业:计算机与电信提交人和支持人:M. 托马斯·福吉奥尼2019年11月29日星期五标题:海量3D模型的自适应传输博士学校:图卢兹数学、计算机科学、电信(MITT)研究单位:图卢兹计算机科学研究所(IRIT)论文主任:M. 文森特·查维拉特M.阿克塞尔·卡里尔报告员:M. GWendal Simon,大西洋IMTSIDONIE CHRISTOPHE女士,国家地理研究所评审团成员:M. MAARTEN WIJNANTS,哈塞尔大学,校长M. AXEL CARLIER,图卢兹INP,成员M. GILLES GESQUIERE,里昂第二大学,成员Géraldine Morin女士,图卢兹INP,成员M. VINCENT CHARVILLAT,图卢兹INP,成员M. Wei Tsang Ooi,新加坡国立大学,研究员基于HTTP的动态自适应3D流媒体2019年11月29日星期五,图卢兹INP授予图卢兹大学博士学位,由ThomasForgione发表并答辩Gilles Gesquière�

MutableDenseMatrix' object has no attribute 'flatten'

根据提供的引用内容,可以看出这是一个关于Python中矩阵操作的问题。具体来说,'MutableDenseMatrix' object has no attribute 'flatten'的错误提示表明,矩阵对象没有名为'flatten'的属性。因此,我们需要使用其他方法来展平该矩阵对象。 以下是一种可能的解决方案: ```python # 导入必要的库 from sympy import Matrix # 创建一个矩阵对象 mat = Matrix([[1, 2], [3, 4]]) # 将矩阵对象转换为列表 mat_list = mat.tolist() # 将列表展平 flat

MySQL 75道面试题及答案.docx

MySQL 75道面试题及答案.docx

HAL多学科开放获取档案库的作用及代理重加密和认证委托的研究

0HAL编号:tel-038172580https://theses.hal.science/tel-038172580提交日期:2022年10月17日0HAL是一个多学科开放获取档案库,用于存储和传播科学研究文档,无论其是否发表。这些文档可以来自法国或国外的教育和研究机构,也可以来自公共或私人研究中心。0HAL多学科开放获取档案库旨在存储和传播法国或国外的教育和研究机构、公共或私人实验室发表或未发表的研究文档。0代理重加密和认证委托的贡献0Anass Sbai0引用此版本:0Anass Sbai. 代理重加密和认证委托的贡献. 离散数学[cs.DM]. 皮卡第朱尔大学, 2021. 法语. �NNT:2021AMIE0032�. �tel-03817258�0博士学位论文0专业“计算机科学”0提交给科技与健康学院博士学位学校0皮卡第朱尔大学0由0Anass SBAI0获得皮卡第朱尔大学博士学位0代理重加密和认证委托的贡献0于2021年7月5日,在评审人的意见后,面向考试委员会进行

已有一个已排好序的数组,要求输入一个数后,按原来的排序规律将它插入数组中

已有一个已排好序的数组,要求输入一个数后,按原来的排序规律将它插入数组中,可以使用二分查找的方法来提高查找效率。具体实现如下: ```python def insert_num(arr, num): left = 0 right = len(arr) - 1 while left <= right: mid = (left + right) // 2 if arr[mid] == num: arr.insert(mid, num) return arr elif arr[m

基于单片机的语音门铃设计毕业论文.doc

基于单片机的语音门铃设计毕业论文.doc