用idea写学生信息管理系统

时间: 2023-08-26 18:16:08 浏览: 130
首先,需要在MySQL中创建相应的数据库和表。在MySQL中执行以下SQL语句: ``` CREATE DATABASE student_info; USE student_info; CREATE TABLE student ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL, gender VARCHAR(10) NOT NULL, age INT NOT NULL, class VARCHAR(50) NOT NULL, phone VARCHAR(20) NOT NULL ); CREATE TABLE score ( id INT PRIMARY KEY AUTO_INCREMENT, student_id INT NOT NULL, subject VARCHAR(50) NOT NULL, score INT NOT NULL, exam_time DATE NOT NULL, FOREIGN KEY (student_id) REFERENCES student(id) ); ``` 然后,可以使用Java语言编写前端界面和后台逻辑。下面是一个简单的示例: 1. 创建Maven项目,并在pom.xml中添加以下依赖: ``` <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.26</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.12.0</version> </dependency> </dependencies> ``` 2. 创建GUI界面,使用Swing实现。 3. 创建数据库连接类,实现对MySQL数据库的连接和操作。 ``` import java.sql.*; public class DBUtil { private static final String URL = "jdbc:mysql://localhost:3306/student_info?serverTimezone=UTC"; private static final String USERNAME = "root"; private static final String PASSWORD = "123456"; private static Connection conn = null; static { try { Class.forName("com.mysql.cj.jdbc.Driver"); conn = DriverManager.getConnection(URL, USERNAME, PASSWORD); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } public static Connection getConnection() { return conn; } public static void close(Connection conn, Statement stmt, ResultSet rs) { try { if (rs != null) { rs.close(); } if (stmt != null) { stmt.close(); } if (conn != null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } } ``` 4. 创建学生信息操作类,实现对学生信息的增删改查。 ``` import org.apache.commons.lang3.StringUtils; import java.sql.*; import java.util.ArrayList; import java.util.List; public class StudentDao { public boolean add(Student student) { Connection conn = null; PreparedStatement stmt = null; try { conn = DBUtil.getConnection(); String sql = "INSERT INTO student (name, gender, age, class, phone) VALUES (?, ?, ?, ?, ?)"; stmt = conn.prepareStatement(sql); stmt.setString(1, student.getName()); stmt.setString(2, student.getGender()); stmt.setInt(3, student.getAge()); stmt.setString(4, student.getClazz()); stmt.setString(5, student.getPhone()); int count = stmt.executeUpdate(); if (count > 0) { return true; } } catch (SQLException e) { e.printStackTrace(); } finally { DBUtil.close(conn, stmt, null); } return false; } public boolean update(Student student) { Connection conn = null; PreparedStatement stmt = null; try { conn = DBUtil.getConnection(); String sql = "UPDATE student SET name = ?, gender = ?, age = ?, class = ?, phone = ? WHERE id = ?"; stmt = conn.prepareStatement(sql); stmt.setString(1, student.getName()); stmt.setString(2, student.getGender()); stmt.setInt(3, student.getAge()); stmt.setString(4, student.getClazz()); stmt.setString(5, student.getPhone()); stmt.setInt(6, student.getId()); int count = stmt.executeUpdate(); if (count > 0) { return true; } } catch (SQLException e) { e.printStackTrace(); } finally { DBUtil.close(conn, stmt, null); } return false; } public boolean delete(int id) { Connection conn = null; PreparedStatement stmt = null; try { conn = DBUtil.getConnection(); String sql = "DELETE FROM student WHERE id = ?"; stmt = conn.prepareStatement(sql); stmt.setInt(1, id); int count = stmt.executeUpdate(); if (count > 0) { return true; } } catch (SQLException e) { e.printStackTrace(); } finally { DBUtil.close(conn, stmt, null); } return false; } public Student getById(int id) { Connection conn = null; PreparedStatement stmt = null; ResultSet rs = null; try { conn = DBUtil.getConnection(); String sql = "SELECT * FROM student WHERE id = ?"; stmt = conn.prepareStatement(sql); stmt.setInt(1, id); rs = stmt.executeQuery(); if (rs.next()) { Student student = new Student(); student.setId(rs.getInt("id")); student.setName(rs.getString("name")); student.setGender(rs.getString("gender")); student.setAge(rs.getInt("age")); student.setClazz(rs.getString("class")); student.setPhone(rs.getString("phone")); return student; } } catch (SQLException e) { e.printStackTrace(); } finally { DBUtil.close(conn, stmt, rs); } return null; } public List<Student> getAll() { Connection conn = null; Statement stmt = null; ResultSet rs = null; List<Student> students = new ArrayList<>(); try { conn = DBUtil.getConnection(); String sql = "SELECT * FROM student"; stmt = conn.createStatement(); rs = stmt.executeQuery(sql); while (rs.next()) { Student student = new Student(); student.setId(rs.getInt("id")); student.setName(rs.getString("name")); student.setGender(rs.getString("gender")); student.setAge(rs.getInt("age")); student.setClazz(rs.getString("class")); student.setPhone(rs.getString("phone")); students.add(student); } } catch (SQLException e) { e.printStackTrace(); } finally { DBUtil.close(conn, stmt, rs); } return students; } public List<Student> search(String keyword) { Connection conn = null; PreparedStatement stmt = null; ResultSet rs = null; List<Student> students = new ArrayList<>(); try { conn = DBUtil.getConnection(); String sql = "SELECT * FROM student WHERE id LIKE ? OR name LIKE ?"; stmt = conn.prepareStatement(sql); stmt.setString(1, "%" + keyword + "%"); stmt.setString(2, "%" + keyword + "%"); rs = stmt.executeQuery(); while (rs.next()) { Student student = new Student(); student.setId(rs.getInt("id")); student.setName(rs.getString("name")); student.setGender(rs.getString("gender")); student.setAge(rs.getInt("age")); student.setClazz(rs.getString("class")); student.setPhone(rs.getString("phone")); students.add(student); } } catch (SQLException e) { e.printStackTrace(); } finally { DBUtil.close(conn, stmt, rs); } return students; } } ``` 5. 创建考试成绩操作类,实现对考试成绩的增删改查。 ``` import java.sql.*; import java.util.ArrayList; import java.util.List; public class ScoreDao { public boolean add(Score score) { Connection conn = null; PreparedStatement stmt = null; try { conn = DBUtil.getConnection(); String sql = "INSERT INTO score (student_id, subject, score, exam_time) VALUES (?, ?, ?, ?)"; stmt = conn.prepareStatement(sql); stmt.setInt(1, score.getStudentId()); stmt.setString(2, score.getSubject()); stmt.setInt(3, score.getScore()); stmt.setDate(4, new Date(score.getExamTime().getTime())); int count = stmt.executeUpdate(); if (count > 0) { return true; } } catch (SQLException e) { e.printStackTrace(); } finally { DBUtil.close(conn, stmt, null); } return false; } public boolean update(Score score) { Connection conn = null; PreparedStatement stmt = null; try { conn = DBUtil.getConnection(); String sql = "UPDATE score SET student_id = ?, subject = ?, score = ?, exam_time = ? WHERE id = ?"; stmt = conn.prepareStatement(sql); stmt.setInt(1, score.getStudentId()); stmt.setString(2, score.getSubject()); stmt.setInt(3, score.getScore()); stmt.setDate(4, new Date(score.getExamTime().getTime())); stmt.setInt(5, score.getId()); int count = stmt.executeUpdate(); if (count > 0) { return true; } } catch (SQLException e) { e.printStackTrace(); } finally { DBUtil.close(conn, stmt, null); } return false; } public boolean delete(int id) { Connection conn = null; PreparedStatement stmt = null; try { conn = DBUtil.getConnection(); String sql = "DELETE FROM score WHERE id = ?"; stmt = conn.prepareStatement(sql); stmt.setInt(1, id); int count = stmt.executeUpdate(); if (count > 0) { return true; } } catch (SQLException e) { e.printStackTrace(); } finally { DBUtil.close(conn, stmt, null); } return false; } public Score getById(int id) { Connection conn = null; PreparedStatement stmt = null; ResultSet rs = null; try { conn = DBUtil.getConnection(); String sql = "SELECT * FROM score WHERE id = ?"; stmt = conn.prepareStatement(sql); stmt.setInt(1, id); rs = stmt.executeQuery(); if (rs.next()) { Score score = new Score(); score.setId(rs.getInt("id")); score.setStudentId(rs.getInt("student_id")); score.setSubject(rs.getString("subject")); score.setScore(rs.getInt("score")); score.setExamTime(rs.getDate("exam_time")); return score; } } catch (SQLException e) { e.printStackTrace(); } finally { DBUtil.close(conn, stmt, rs); } return null; } public List<Score> getByStudentId(int studentId) { Connection conn = null; PreparedStatement stmt = null; ResultSet rs = null; List<Score> scores = new ArrayList<>(); try { conn = DBUtil.getConnection(); String sql = "SELECT * FROM score WHERE student_id = ?"; stmt = conn.prepareStatement(sql); stmt.setInt(1, studentId); rs = stmt.executeQuery(); while (rs.next()) { Score score = new Score(); score.setId(rs.getInt("id")); score.setStudentId(rs.getInt("student_id")); score.setSubject(rs.getString("subject")); score.setScore(rs.getInt("score")); score.setExamTime(rs.getDate("exam_time")); scores.add(score); } } catch (SQLException e) { e.printStackTrace(); } finally { DBUtil.close(conn, stmt, rs); } return scores; } public List<Score> getAll() { Connection conn = null; Statement stmt = null; ResultSet rs = null; List<Score> scores = new ArrayList<>(); try { conn = DBUtil.getConnection(); String sql = "SELECT * FROM score"; stmt = conn.createStatement(); rs = stmt.executeQuery(sql); while (rs.next()) { Score score = new Score(); score.setId(rs.getInt("id")); score.setStudentId(rs.getInt("student_id")); score.setSubject(rs.getString("subject")); score.setScore(rs.getInt("score")); score.setExamTime(rs.getDate("exam_time")); scores.add(score); } } catch (SQLException e) { e.printStackTrace(); } finally { DBUtil.close(conn, stmt, rs); } return scores; } } ``` 6. 创建主程序类,在GUI界面中实现对学生信息和考试成绩的增删改查操作。 ``` import javax.swing.*; import javax.swing.border.EmptyBorder; import javax.swing.table.DefaultTableModel; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; public class MainFrame extends JFrame { private JPanel contentPane; private JTextField txtId; private JTextField txtName; private JTextField txtGender; private JTextField txtAge; private JTextField txtClass; private JTextField txtPhone; private JTextField txtScoreId; private JTextField txtStudentId; private JTextField txtSubject; private JTextField txtScore; private JTextField txtExamTime; private JTable tableStudent; private JTable tableScore; private StudentDao studentDao = new StudentDao(); private ScoreDao scoreDao = new ScoreDao(); public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { MainFrame frame = new MainFrame(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } public MainFrame() { setTitle("学生信息管理系统"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 800, 600); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(null); // 学生信息管理面板 JPanel panelStudent = new JPanel(); panelStudent.setBounds(10, 10, 764, 275); contentPane.add(panelStudent); panelStudent.setLayout(null); JLabel lblId = new JLabel("学号:"); lblId.setBounds(10, 10, 60, 25); panelStudent.add(lblId); txtId = new JTextField(); txtId.setBounds(80, 10, 120, 25); panelStudent.add(txtId); txtId.setColumns(10); JLabel lblName = new JLabel("姓名:"); lblName.setBounds(10, 45, 60, 25); panelStudent.add(lblName); txtName = new JTextField(); txtName.setBounds(80, 45, 120, 25); panelStudent.add(txtName); txtName.setColumns(10); JLabel lblGender = new JLabel("性别:"); lblGender.setBounds(10, 80, 60, 25); panelStudent.add(lblGender); txtGender = new JTextField(); txtGender.setBounds(80, 80, 120, 25); panelStudent.add(txtGender); txtGender.setColumns(10); JLabel lblAge = new JLabel("年龄:"); lblAge.setBounds(10, 115, 60, 25); panelStudent.add(lblAge); txtAge = new JTextField(); txtAge.setBounds(80, 115, 120, 25); panelStudent.add(txtAge); txtAge.setColumns(10); JLabel lblClass = new JLabel("班级:"); lblClass.setBounds(10, 150, 60, 25); panelStudent.add(lblClass); txtClass = new JTextField(); txtClass.setBounds(80, 150, 120, 25); panelStudent.add(txtClass); txtClass.setColumns(10); JLabel lblPhone = new JLabel("联系方式:"); lblPhone.setBounds(10, 185, 60, 25); panelStudent.add(lblPhone); txtPhone = new JTextField(); txtPhone.setBounds(80, 185, 120, 25); panelStudent.add(txtPhone); txtPhone.setColumns(10); JButton btnStudentAdd = new JButton("添加"); btnStudentAdd.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { addStudent(); } }); btnStudentAdd.setBounds(10, 220, 80, 25); panelStudent.add(btnStudentAdd); JButton btnStudentUpdate = new JButton("修改"); btnStudentUpdate.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateStudent(); } }); btnStudentUpdate.setBounds(100,
阅读全文

相关推荐

最新推荐

recommend-type

java面向对象之学生信息管理系统

"java面向对象之学生信息管理系统" 本资源主要介绍了java面向对象之学生信息管理系统的设计与实现,通过控制台来完成一系列的增删查改的操作。以下是该系统的知识点: 1. 面向对象编程:本系统采用面向对象编程...
recommend-type

学生信息管理系统论文及代码

《学生信息管理系统设计与实现》 学生信息管理系统是一种常见的应用软件,主要用于高校或者教育机构管理学生的基本信息。本文将详细探讨如何设计并实现一个基于文件结构的学籍管理系统,涵盖系统的需求分析、功能...
recommend-type

【java课设】学生选课系统.pdf

在这个学生选课系统的设计中,我们需要考虑的主要实体有两个:学生信息和课程信息。学生信息包括学号、姓名、性别、年龄、系别、班级和联系方式等,而课程信息则涵盖开课教师、课程代码、课程名称、课程性质、总学时...
recommend-type

JSP学生学籍管理系统毕业设计论文

系统分析包括需求分析和功能分析,明确了系统应具备的学生信息管理、课程管理、成绩管理和系统管理等功能。设计原则强调了系统的实用性、安全性、扩展性和稳定性。系统设计部分详细规划了各个功能模块和流程,数据库...
recommend-type

1基于蓝牙的项目开发--蓝牙温度监测器.docx

1基于蓝牙的项目开发--蓝牙温度监测器.docx
recommend-type

Haskell编写的C-Minus编译器针对TM架构实现

资源摘要信息:"cminus-compiler是一个用Haskell语言编写的C-Minus编程语言的编译器项目。C-Minus是一种简化版的C语言,通常作为教学工具使用,帮助学生了解编程语言和编译器的基本原理。该编译器的目标平台是虚构的称为TM的体系结构,尽管它并不对应真实存在的处理器架构,但这样的设计可以专注于编译器的逻辑而不受特定硬件细节的限制。作者提到这个编译器是其编译器课程的作业,并指出代码可以在多个方面进行重构,尽管如此,他对于编译器的完成度表示了自豪。 在编译器项目的文档方面,作者提供了名为doc/report1.pdf的文件,其中可能包含了关于编译器设计和实现的详细描述,以及如何构建和使用该编译器的步骤。'make'命令在简单的使用情况下应该能够完成所有必要的构建工作,这意味着项目已经设置好了Makefile文件来自动化编译过程,简化用户操作。 在Haskell语言方面,该编译器项目作为一个实际应用案例,可以作为学习Haskell语言特别是其在编译器设计中应用的一个很好的起点。Haskell是一种纯函数式编程语言,以其强大的类型系统和惰性求值特性而闻名。这些特性使得Haskell在处理编译器这种需要高度抽象和符号操作的领域中非常有用。" 知识点详细说明: 1. C-Minus语言:C-Minus是C语言的一个简化版本,它去掉了许多C语言中的复杂特性,保留了基本的控制结构、数据类型和语法。通常用于教学目的,以帮助学习者理解和掌握编程语言的基本原理以及编译器如何将高级语言转换为机器代码。 2. 编译器:编译器是将一种编程语言编写的源代码转换为另一种编程语言(通常为机器语言)的软件。编译器通常包括前端(解析源代码并生成中间表示)、优化器(改进中间表示的性能)和后端(将中间表示转换为目标代码)等部分。 3. TM体系结构:在这个上下文中,TM可能是一个虚构的计算机体系结构。它可能被设计来模拟真实处理器的工作原理,但不依赖于任何特定硬件平台的限制,有助于学习者专注于编译器设计本身,而不是特定硬件的技术细节。 4. Haskell编程语言:Haskell是一种高级的纯函数式编程语言,它支持多种编程范式,包括命令式、面向对象和函数式编程。Haskell的强类型系统、模式匹配、惰性求值等特性使得它在处理抽象概念如编译器设计时非常有效。 5. Make工具:Make是一种构建自动化工具,它通过读取Makefile文件来执行编译、链接和清理等任务。Makefile定义了编译项目所需的各种依赖关系和规则,使得项目构建过程更加自动化和高效。 6. 编译器开发:编译器的开发涉及语言学、计算机科学和软件工程的知识。它需要程序员具备对编程语言语法和语义的深入理解,以及对目标平台架构的了解。编译器通常需要进行详细的测试,以确保它能够正确处理各种边缘情况,并生成高效的代码。 通过这个项目,学习者可以接触到编译器从源代码到机器代码的转换过程,学习如何处理词法分析、语法分析、语义分析、中间代码生成、优化和目标代码生成等编译过程的关键步骤。同时,该项目也提供了一个了解Haskell语言在编译器开发中应用的窗口。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

【数据整理秘籍】:R语言与tidyr包的高效数据处理流程

![【数据整理秘籍】:R语言与tidyr包的高效数据处理流程](https://www.lecepe.fr/upload/fiches-formations/visuel-formation-246.jpg) # 1. 数据整理的重要性与R语言介绍 数据整理是数据科学领域的核心环节之一,对于后续的数据分析、模型构建以及决策制定起到至关重要的作用。高质量的数据整理工作,能够保证数据分析的准确性和可靠性,为数据驱动的业务决策提供坚实的数据基础。 在众多数据分析工具中,R语言因其强大的统计分析能力、丰富的数据处理包以及开放的社区支持而广受欢迎。R语言不仅仅是一种编程语言,它更是一个集数据处理、统
recommend-type

在使用STEP7编程环境为S7-300 PLC进行编程时,如何正确分配I/O接口地址并利用SM信号模板进行编址?

在西门子STEP7编程环境中,对于S7-300系列PLC的I/O接口地址分配及使用SM信号模板的编址是一个基础且至关重要的步骤。正确地进行这一过程可以确保PLC与现场设备之间的正确通信和数据交换。以下是具体的设置步骤和注意事项: 参考资源链接:[PLC STEP7编程环境:菜单栏与工具栏功能详解](https://wenku.csdn.net/doc/3329r82jy0?spm=1055.2569.3001.10343) 1. **启动SIMATIC Manager**:首先,启动STEP7软件,并通过SIMATIC Manager创建或打开一个项目。 2. **硬件配置**:在SIM
recommend-type

水电模拟工具HydroElectric开发使用Matlab

资源摘要信息:"该文件是一个使用MATLAB开发的水电模拟应用程序,旨在帮助用户理解和模拟HydroElectric实验。" 1. 水电模拟的基础知识: 水电模拟是一种利用计算机技术模拟水电站的工作过程和性能的工具。它可以模拟水电站的水力、机械和电气系统,以及这些系统的相互作用和影响。水电模拟可以帮助我们理解水电站的工作原理,预测和优化其性能,以及评估和制定运行策略。 2. MATLAB在水电模拟中的应用: MATLAB是一种高性能的数值计算和可视化软件,广泛应用于工程、科学和数学领域。在水电模拟中,MATLAB可以用于建立模型、模拟、分析和可视化水电站的性能。MATLAB提供了强大的数学函数库和图形工具箱,可以方便地进行复杂的计算和数据可视化。 3. HydroElectric实验的模拟: HydroElectric实验是一种模拟水电站工作的实验,通常包括水轮机、发电机、水道、负荷等部分。在这个实验中,我们可以模拟各种运行条件下的水电站性能,如不同水流量、不同负荷等。 4. MATLAB开发的水电模拟应用程序的使用: 使用MATLAB开发的水电模拟应用程序,用户可以方便地设置模拟参数,运行模拟,查看模拟结果。应用程序可能包括用户友好的界面,用户可以通过界面输入各种参数,如水流量、负荷等。然后,应用程序将根据输入的参数,进行计算,模拟水电站的工作过程和性能,最后将结果以图表或数据的形式展示给用户。 5. MATLAB的高级功能在水电模拟中的应用: MATLAB提供了丰富的高级功能,如优化工具箱、神经网络工具箱、符号计算等,这些功能可以进一步提高水电模拟的效果。例如,使用优化工具箱,我们可以找到最佳的工作参数,使水电站的性能最优化。使用神经网络工具箱,我们可以建立更复杂的模型,更准确地模拟水电站的工作过程。使用符号计算,我们可以处理更复杂的数学问题,如求解非线性方程。 6. 水电模拟的未来发展方向: 随着计算机技术的不断发展,水电模拟的应用前景广阔。未来,水电模拟可能会更加注重模型的精确度和复杂度,更多地运用人工智能、大数据等先进技术,以提高模拟的效率和准确性。此外,水电模拟也可能更多地应用于其他领域,如能源管理、环境影响评估等。