目录
项目地址:https://download.csdn.net/download/mini_malism_/88762977?spm=1001.2014.3001.5503
运行环境
编译器: Intellij IDEA + JDK 17
数据库:DataGrip + MySQL
功能介绍
-
学生信息管理:可以添加、删除、修改和查询学生的个人信息,包括学号、姓名、性别、年龄、联系方式等。
-
数据备份与恢复:可以对学生信息和宿舍信息进行数据备份,以防数据丢失或损坏,并能够进行数据的恢复操作。
-
用户界面:提供用户友好的界面,方便用户进行各种操作,包括输入学生信息、查询宿舍信息、显示统计报表等。
数据库设计与实现
这个实验使用了JDBC和MySQL来实现学生学籍管理系统,并且使用Java Swing来创建图形界面。在初始化过程中,我们通过调用DriverManager类的静态函数getConnection来获取数据库连接。然后,我们使用连接对象的createStatement()函数来获取表达式对象,通过表达式对象的executeQuery()函数来执行查询操作,并将结果存储在ResultSet类的对象中。这样,我们就能够方便地处理和展示学生学籍管理系统的数据。
数据库表定义
此处表的定义省去了表的完整性约束(不建议这样做!)
create table dormitory
(
学号 varchar(20) null,
姓名 varchar(20) null,
性别 varchar(5) null,
班级 varchar(20) null,
专业 varchar(20) null,
寝室 varchar(20) null
);
项目展示
该项目使用Java swing 图形库制作图形化界面。页面采用卡片式布局,为每个组件设置相应的事件监听,每当触发某个组件时则进行相应的操作。
1.登陆界面展示
代码如下:
public void login(){
//登录界面
JFrame frame =new JFrame("登录");
Container c = frame.getContentPane();//创建视图
JLabel userLabel=new JLabel("用户名");
JTextField username= new JTextField();
JLabel passwdLabel=new JLabel("密码");
JTextField password=new JTextField();
//设置用户和密码
String acc="789";
String pwd="456";
JButton okbutton = new JButton("确定");
okbutton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println(password.getText());
if (password.getText().equals(pwd)&&username.getText().equals(acc)){
JOptionPane.showMessageDialog(frame,"成功进入系统","登录成功",1);
// System.out.println("登录成功");
init();
}else {
JOptionPane.showMessageDialog(frame,"账号或密码输入有误","登录失败",JOptionPane.ERROR_MESSAGE);
//System.out.println("登录失败");
}
}
});
JButton cancellbttton = new JButton("取消");
cancellbttton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
//设置背景图片
frame.setBounds(600, 200, 300, 220);//设置窗体位置&大小
c.setLayout(new BorderLayout());//设置视图的布局
// frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置?功能
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
JPanel titlePanel =new JPanel();//创建一个放置标题的面板
titlePanel.setLayout(new FlowLayout());
titlePanel.add(new JLabel("登录"));
c.add(titlePanel, "North");//加入视图中
// 输入框——中间
JPanel inputPanel =new JPanel();
inputPanel.setLayout(null);
userLabel.setBounds(50, 20, 50, 20);//标签位置
passwdLabel.setBounds(50, 60, 50, 20);
inputPanel.add(userLabel);
inputPanel.add(passwdLabel);
username.setBounds(110, 20, 120, 20);
password.setBounds(110, 60, 120, 20);
inputPanel.add(username);
inputPanel.add(password);
inputPanel.setOpaque(false);
c.add(inputPanel, "Center");
// 按钮底部
JPanel buttonPanel =new JPanel();
buttonPanel.setLayout(new FlowLayout());
buttonPanel.add(okbutton);
buttonPanel.add(cancellbttton);
c.add(buttonPanel, "South");
frame.setVisible(true);//设置窗体可见
}
2.主页面展示
本项目实现Java swing图形库创建图形化界面,采用卡片式布局(Card Layout)将所有操作均封装于操作菜单中,通过点击操作菜单中的不同选项可跳转至不同的页面实现不同的功能。
部分代码如下:
JFrame frame=new JFrame("欢迎使用宿舍管理系统");
frame.setBounds(450,200,850,650);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
card=new CardLayout();
panelMain=new JPanel(card);
JMenuBar menuBar=new JMenuBar();
//创建卡片布局页面
panelAdd=new Panel_Add("images/bg.jpg");//创建类的同时将背景图片添加
panelDelete=new Panel_Delete("images/hy.jpg");
panelUpdata=new Panel_Update("images/bk3.jpg");
panelSearch=new Panel_Search("images/dz.jpg");
panelFindAll=new Panel_FindAll();
//创建不同的菜单
items=new JMenuItem[menunames.length];
menu=new JMenu("操作菜单");
for (int i=0;i<menunames.length;i++){
items[i]=new JMenuItem(menunames[i]);
items[i].addActionListener(this);
menu.add(items[i]);
menu.addSeparator();
}
这段代码主要用于创建一个基于Java Swing的图形用户界面(GUI),实现宿舍管理系统的主界面和菜单功能。以下是对代码的简单梳理:
-
创建JFrame对象:首先创建一个JFrame对象
frame
,并设置标题为"欢迎使用宿舍管理系统",设置窗口位置和大小,并设置窗口关闭操作为退出程序,禁止窗口大小调整。 -
创建CardLayout面板:创建一个JPanel对象
panelMain
,并设置布局为CardLayout,用于切换显示不同的面板。 -
创建菜单栏:创建一个JMenuBar对象
menuBar
,用于存放菜单。 -
创建卡片布局页面:根据需求创建了不同的面板,分别是
panelAdd
、panelDelete
、panelUpdate
、panelSearch
和panelFindAll
,并在创建时传入不同的背景图片路径。 -
创建菜单和菜单项:通过循环遍历
menunames
数组,创建JMenuItem
对象items[i]
并添加到menu
中,同时为每个菜单项添加ActionListener
监听器,最后将菜单项和分隔符添加到菜单中。
总的来说,这段代码的主要作用是创建一个图形用户界面,包含一个主窗口和菜单栏,并通过CardLayout实现不同功能面板的切换。通过菜单项的点击事件,实现不同功能的触发和处理。
3.数据库的连接
需先导入MySQL的JDBC依赖库,这个库可以很方便下载到,下载后导入到ideal工程中;
如图所示:
导入jar包成功后定义MySQL类,作为SQL操作的工具类,构造函数定义代码部分如下:
String driver="com.mysql.cj.jdbc.Driver";
String url="jdbc:mysql://localhost:3306/java";
String user="root";
String passWord="ai2004131";
Connection con;
Statement stmt;
String sql;
ResultSet rs;
public Connection getCon() {
return con;
}
public DataBaseConnection(){
try {
Class.forName(driver);
con= DriverManager.getConnection(url,user,passWord);
// findAll();
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
段代码是用于建立与MySQL数据库的连接,并进行数据库操作的部分。以下是对代码的简单梳理:
-
导入必要的Java类库:首先需要导入需要使用的类库,在这段代码中,我们使用了
java.sql
和com.mysql.cj.jdbc
这两个包。 -
定义数据库连接所需的参数:定义了四个字符串变量,分别是
driver
、url
、user
和passWord
,用于指定数据库驱动、数据库连接地址、用户名和密码。 -
定义数据库连接和操作所需的变量:定义了
Connection
对象con
,用于建立数据库连接;定义了Statement
对象stmt
,用于执行SQL语句;定义了String
类型变量sql
,用于存储需要执行的SQL语句;定义了ResultSet
对象rs
,用于存储查询结果。 -
定义获取数据库连接的方法:通过
getCon()
方法返回数据库连接对象con
。 -
定义构造方法:在构造方法
DataBaseConnection()
中,首先使用Class.forName(driver)
加载并注册数据库驱动程序;然后通过DriverManager.getConnection(url, user, passWord)
方法创建数据库连接对象con
,并将连接信息传递给该方法;最后,将连接操作放在try-catch
块中,以捕获可能抛出的ClassNotFoundException
和SQLException
异常。
总的来说,这段代码的主要作用是设置数据库连接参数,建立与MySQL数据库的连接,并提供获取数据库连接对象的方法。在构造方法中,通过加载驱动程序和创建连接对象的方式实现与数据库的连接。
4.添加学生操作
代码如下:
public boolean insert(String [] info) {//插入新纪录
sql="insert into dormitory values('";
//update
try {
stmt=con.createStatement();
StringBuilder sb=new StringBuilder();
for(int i=0;i<info.length-1;i++) {
sb.append(info[i]).append("','");
}
sb.append(info[info.length-1]).append("')");
sql += sb.toString();
//执行crud(增删改查)
if(stmt.executeUpdate(sql)==1)
return true;
else
return false;
} catch (SQLException e) {
e.printStackTrace();
}
return false;
}
这段代码是一个方法,用于向数据库中插入新纪录。以下是对代码的简要梳理:
-
方法签名:该方法返回一个布尔值,并接受一个String类型的数组参数
info
,用于插入新的记录。 -
构造SQL语句:在方法内部,首先初始化一个字符串变量
sql
,并赋值为"insert into dormitory values('"。 -
循环构建插入值部分:使用循环遍历数组
info
,将数组中的元素逐个添加到StringBuilder
对象sb
中,并在每个元素之后加上"','",最后添加最后一个元素并加上"')",得到完整的插入值部分。 -
拼接完整的SQL语句:将插入值部分
sb.toString()
添加到sql
后面,得到完整的插入SQL语句。 -
执行SQL语句:通过
con.createStatement()
创建Statement
对象stmt
,然后使用stmt.executeUpdate(sql)
执行SQL语句,并返回受影响的行数。 -
返回结果:如果受影响的行数为1,则表示插入成功,返回true;否则,表示插入失败,返回false。
总的来说,这段代码的主要作用是通过构造SQL语句,向数据库中的"dormitory"表插入新的记录,并返回插入操作的结果。
5.删除学生操作
部分代码如下:
public boolean deleteByNum (String num) {// 通过学号删除学生信息
sql="DELETE FROM dormitory WHERE 学号='"+num+"'";
try {
stmt=con.createStatement();
if(stmt.executeUpdate(sql)>0)
return true;
else
return false;
} catch (SQLException e) {
e.printStackTrace();
}
return false;
}
这段代码是一个方法,用于通过学号删除学生信息。以下是对代码的简要梳理:
-
方法签名:该方法返回一个布尔值,并接受一个String类型的参数
num
,表示学号。 -
构造SQL语句:在方法内部,首先初始化一个字符串变量
sql
,并赋值为"DELETE FROM dormitory WHERE 学号='" + num + "'"。这个SQL语句的作用是删除"dormitory"表中学号等于给定学号的记录。 -
执行SQL语句:通过
con.createStatement()
创建Statement
对象stmt
,然后使用stmt.executeUpdate(sql)
执行SQL语句,并返回受影响的行数。 -
返回结果:如果受影响的行数大于0,则表示删除成功,返回true;否则,表示删除失败,返回false。
总的来说,这段代码的主要作用是通过构造SQL语句,根据给定的学号删除数据库中"dormitory"表中对应的记录,并返回删除操作的结果。
6.更新学生操作
部分代码如下:
public boolean updateByNum(String [] info) {//通过学号修改学生信息
sql="update dormitory set 姓名='";
String [] s=new String[] {",性别='",",班级='",",专业='",",寝室='",""};
try {
stmt=con.createStatement();
StringBuilder sb=new StringBuilder();
for(int i=0;i<info.length-1;i++) {
sb.append(info[i+1]).append("'").append(s[i]);
}
sb.append("where 学号='").append(info[0]).append("'");
sql += sb.toString();
//执行修改
if(stmt.executeUpdate(sql)>0)
return true;
else
return false;
} catch (SQLException e) {
e.printStackTrace();
}
return false;
}
这段代码是一个方法,用于通过学号修改学生信息。以下是对代码的简要分析:
-
方法签名:该方法返回一个布尔值,并接受一个String类型的数组参数
info
,表示待更新的学生信息。 -
构造SQL语句:在方法内部,首先初始化一个字符串变量
sql
,并赋值为"update dormitory set 姓名='"。接着,定义了一个字符串数组s
,用于存储SQL语句中其他字段和对应的连接符。这个SQL语句的作用是更新"dormitory"表中学号等于给定学号的记录的姓名字段。 -
构建SET部分:使用循环遍历数组
info
,从索引为1开始,将数组中的元素逐个添加到StringBuilder
对象sb
中,并依次添加对应的连接符和字段名,得到完整的SET部分。 -
构建WHERE条件:在SET部分构建完成后,将学号字段和对应的值添加到
sb
中,并加上WHERE关键字,得到完整的WHERE条件。 -
拼接完整的SQL语句:将SET部分
sb.toString()
添加到sql
后面,得到完整的更新SQL语句。 -
执行SQL语句:通过
con.createStatement()
创建Statement
对象stmt
,然后使用stmt.executeUpdate(sql)
执行SQL语句,并返回受影响的行数。 -
返回结果:如果受影响的行数大于0,则表示更新成功,返回true;否则,表示更新失败,返回false。
总的来说,这段代码的主要作用是通过构造SQL语句,根据给定的学号和学生信息更新数据库中"dormitory"表中对应的记录,并返回更新操作的结果。
7.查询学生操作
部分代码如下:
public ResultSet findByNumber(String number){
if(con!=null){
try {
stmt=con.createStatement();
sql="select * from dormitory where 学号='"+number+"'";
rs=stmt.executeQuery(sql);
if(rs.next()){
return rs;
}
} catch (SQLException e) {
e.printStackTrace();
}
}
return null;
}
这段代码是一个方法,用于通过学号查询学生信息。以下是对代码的简要分析:
-
方法签名:该方法返回一个ResultSet类型的结果集,并接受一个String类型的参数
number
,表示待查询的学号。 -
执行SQL查询语句:在方法内部,首先通过
con.createStatement()
创建Statement
对象stmt
,然后使用"select * from dormitory where 学号='"+number+"'"构造SQL查询语句。这个SQL语句的作用是从"dormitory"表中查询学号等于给定学号的记录,并返回所有字段的值。 -
执行SQL查询操作:使用
stmt.executeQuery(sql)
执行SQL查询语句,并将结果存储到ResultSet类型的结果集变量rs
中。 -
返回结果集:如果结果集
rs
不为空,则表示查询成功,返回ResultSet类型的结果集rs
;否则,表示查询失败,返回null。
总的来说,这段代码的主要作用是通过构造SQL查询语句,根据给定的学号查询数据库中"dormitory"表中对应的记录,并返回结果集。
项目地址:https://download.csdn.net/download/mini_malism_/88762977?spm=1001.2014.3001.5503
如果感兴趣的话可以进入地址自行下载源码。