期末作业设计之连接数据库的学生管理系统(增删改查)

目录

功能:登录页面

 功能:管理页面

增加功能展示:

删除功能展示

修改功能演示

查找功能演示

增删改查页面整体 代码如下:

 连接数据库


前期准备:电脑已安装mysql  拥有navicat  且java已经完成jdbc导入驱动jar包工作(想要整个项目包的可以私信我)

功能:登录页面

展示:

 

 

登录页面代码如下:

package com.tjl.jdbc;
import java.sql.Connection;
import java.sql.*;
import javax.swing.*;
import javax.swing.text.DefaultEditorKit.InsertBreakAction;
import javax.swing.text.StyledEditorKit.BoldAction;

import com.tjl.jdbc.JDBC;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Login extends JFrame implements ActionListener {
	  Statement  sql; //用来执行命令
	  ResultSet rs;   // 结果集
	JButton jb1,jb2;   // 两个按钮
	JTextField jt1;  // 文本框
	JPasswordField jp; // 密码框
	//一个登录的静态页面
  Login(){
	  
         setTitle("用户登录界面");  // 设置标题 (用户登录界面)
         setSize(400,150);      // 设施窗体长400像素   宽150像素
         setLayout(new GridLayout(3,1)); // 三行一列的布局
         JPanel jp1 = new JPanel();      // 定义容器
         JPanel jp2 = new JPanel();
         JPanel jp3 = new JPanel();
         JLabel jl1 = new JLabel("用户名");  // 用户名标签
         JLabel jl2 = new JLabel("密码");
	     jt1 = new JTextField(22);     // 账号文本框
	     jp = new JPasswordField(22);  // 密码文本框
	     jb1 =new JButton("登录");      // 登录按钮
	     jb2= new JButton("退出");
	     jp1.add(jl1);jp1.add(jt1);   // 将标签添加到容器中
	     jp2.add(jl2);jp2.add(jp);
	     jp3.add(jb1);jp3.add(jb2);
	     add(jp1);add(jp2); add(jp3);
	     setVisible(true);
	     jb1.addActionListener(this);   // 监听 jb1按钮
	     jb2.addActionListener(this);
	     jt1.addActionListener(this);
	     jp.addActionListener(this);
  }
  // main方法是程序 的入口 在入口我们可以看到  在为JDBC.java 中的JDBC这个方法传参  就是为了连接mysql 
	public static void main(String[] args) {
		JDBC a=new JDBC("root","111111"); 
		new Login();
	}
	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		//监听着按钮1 2  1 是登录 2是关闭
		if(e.getSource()==jb1) {
			denglu();
		}
		else if(e.getSource()==jb2) {
			dispose();
		}
	}
	void denglu() {
		
	    boolean account = jt1.getText().equals("");  // 获取账号文本框 并将他与空格比较
		String password = new String(jp.getPassword()); // 获取密码框内容
		boolean passwordT = password.equals("");
		if(account==true) {
			JOptionPane.showMessageDialog(null, "用户不能为空","登录消息",JOptionPane.WARNING_MESSAGE);
		}
		else if(passwordT==true) {
			JOptionPane.showMessageDialog(null, "密码不能为空","登录消息",JOptionPane.WARNING_MESSAGE);
		}
		else {
			String acco = jt1.getText();
			String pw =password;
			// acco 和pw 就是用户输入的账户和密码 要与我们数据库中有的账户和密码进行比对
			if(JDBC.loginAccount(acco, pw)==true) {
				new MSui();
			}else {
				JOptionPane.showMessageDialog(null, "登录失败","登录消息",JOptionPane.WARNING_MESSAGE);	
			}
		}
			
	}
}

 功能:管理页面

增加功能展示:

 局部代码

if(e.getSource()==jb1) {
		// 获取各个输入框的内容
		  String xuehao = jt1.getText(); 
		  String xingming = jt2.getText();
		  String xingbie = jt3.getText();
		  String minzu = jt4.getText();
		  String chushengriqi = jt5.getText();
		  String ruxueshijian = jt6.getText();
		  String xueyuan = jt7.getText();
		  String zhuanye = jt8.getText();
	 
          Connection con = JDBC.con;
          // 执行插入语句
		  String Uri = "insert into student values(?,?,?,?,?,?,?,?)";
		  
		  PreparedStatement preSql; //PreparedStatement是java.sql包下面的一个接口,用来执行SQL语句查询,通过调用connection.preparedStatement(sql)方法可以获得PreparedStatment对象
		  try {
			  
			  preSql= con.prepareStatement(Uri);
			  preSql.setString(1, xuehao);//这里的setString 的用法就是给第一个?的值 赋予xuehao 文本框的内容
			  preSql.setString(2, xingming);//这里的setString 的用法就是给第二个?的值 赋予姓名 文本框的内容
			  preSql.setString(3, xingbie);
			  preSql.setString(4, minzu);
			  preSql.setString(5, chushengriqi);
			  preSql.setString(6, ruxueshijian);
			  preSql.setString(7, xueyuan);
			  preSql.setString(8, zhuanye);
			  int ok  = preSql.executeUpdate();// 可执行增,删,改,返回执行受到影响的行数
			  JOptionPane.showMessageDialog(null, "添加成功","添加消息",JOptionPane.WARNING_MESSAGE);
			     
		  }catch (Exception e1) {
			// TODO: handle exception
			  JOptionPane.showMessageDialog(null, "当前学号已经存在","添加消息",JOptionPane.WARNING_MESSAGE);
		}
      }

删除功能展示

局部代码

if(e.getSource()==jb2) {
		 String xuehao = jt1.getText();
		 // 因为我设置的学号是主键  所以我这边要删除学生信息的话应该用学号信息来进行删除
		 if(xuehao.equals("")) {
			 JOptionPane.showMessageDialog(null, "文本框不能为空","删除消息",JOptionPane.WARNING_MESSAGE);
		 }else {
		  Connection con = JDBC.con;
		  // 删除语句
		  String del = "delete from student where sNum=?";
		  PreparedStatement preSql;
		  try {
			   preSql= con.prepareStatement(del);
			   preSql.setString(1, xuehao);
			   int ok  = preSql.executeUpdate();
			   if(ok==0) {
					  JOptionPane.showMessageDialog(null, "未找到相关学号","删除消息",JOptionPane.WARNING_MESSAGE);
				  }else {
				  JOptionPane.showMessageDialog(null, "删除成功","删除消息",JOptionPane.WARNING_MESSAGE);
				  }
		  }catch(Exception e2) {
			  JOptionPane.showMessageDialog(null, "删除失败","删除消息",JOptionPane.WARNING_MESSAGE);
		  }
		
	   }
     }

修改功能演示

 局部代码

	// 修改功能的实现(修改的实质就是更新) 修改也是根据学号来修改 
	if(e.getSource()==jb3) {
		  String xuehao = jt1.getText();
		  String xingming = jt2.getText();
		  String xingbie = jt3.getText();
		  String minzu = jt4.getText();
		  String chushengriqi = jt5.getText();
		  String ruxueshijian = jt6.getText();
		  String xueyuan = jt7.getText();
		  String zhuanye = jt8.getText();	
		 if(xuehao.equals("")) {
			 JOptionPane.showMessageDialog(null, "文本框不能为空","修改消息",JOptionPane.WARNING_MESSAGE);
		 }else {
			 Connection con = JDBC.con;
			  String change = "update  student set sName=?,sSex=?,sEthnic=?,sBirth=?,sYear=?,sCollege=?,sMajor=? where sNum=?";
			  PreparedStatement preSql;
			  try {
				  
				  preSql= con.prepareStatement(change);
				  preSql.setString(1, xingming);
				  preSql.setString(2, xingbie);
				  preSql.setString(3, minzu);
				  preSql.setString(4,chushengriqi);
				  preSql.setString(5,ruxueshijian);
				  preSql.setString(6, xueyuan);
				  preSql.setString(7, zhuanye);
				  preSql.setString(8, xuehao);
				  
				  int ok  = preSql.executeUpdate();
				  if(ok==0) {
					  JOptionPane.showMessageDialog(null, "请输入正确的学号","修改消息",JOptionPane.WARNING_MESSAGE);
				  }else {
				  JOptionPane.showMessageDialog(null, "修改成功","修改消息",JOptionPane.WARNING_MESSAGE);
				  }
			  }catch(Exception e3) {
				  JOptionPane.showMessageDialog(null, "修改失败","修改消息",JOptionPane.WARNING_MESSAGE);
				  System.out.println(e3);
			   }	  
		}		 
	}

查找功能演示

局部代码:

if(e.getSource()==jb4) {
		 String xuehao = jt1.getText();
		  String xingming = jt2.getText();
		  String xingbie = jt3.getText();
		  String minzu = jt4.getText();
		  String chushengriqi = jt5.getText();
		  String ruxueshijian = jt6.getText();
		  String xueyuan = jt7.getText();
		  String zhuanye = jt8.getText();	
		PreparedStatement preSql;
		ResultSet rs = null;
		 String search = "select * from student where sNum=?" ;//查找所有的信息 根据学号为条件
		 Connection con = JDBC.con;
		 try {
			  preSql= con.prepareStatement(search);
			  preSql.setString(1, xuehao);
			  rs =  preSql.executeQuery(); //executeQuery()方法会把数据库响应的查询结果存放在ResultSet类对象中供我们使用。
			  String data[] = new String[8]; // 定义一个数组
			  rs.next();//将指针从当前位置下移一行。ResultSet 指针最初位于第一行之前;第一次调用 next 方法使第一行成为当前行;第二次调用使第二行成为当前行
			  data[0]= rs.getString(1); //将学号 姓名 等等信息放进数据内
			  data[1] = rs.getString(2);
			  data[2]= rs.getString(3);
			  data[3] = rs.getString(4);
			  data[4]= rs.getString(5);
			  data[5] = rs.getString(6);
			  data[6]= rs.getString(7);
			  data[7] = rs.getString(8);
			  jt1.setText(data[0]); // 将数组中的信息依次赋值到我们的显示文本框中
			  jt2.setText(data[1]);
			  jt3.setText(data[2]);
			  jt4.setText(data[3]);
			  jt5.setText(data[4]);
			  jt6.setText(data[5]);
			  jt7.setText(data[6]);
			  jt8.setText(data[7]);
			  
		 }catch(Exception e4) {
			 
			 	System.out.println(e4);	 
		 }
		 	
	}
	// 退出
	  if(e.getSource()==jb5) {
		dispose();
	}
	
	}
  }	

 

增删改查页面整体 代码如下:

 

package com.tjl.jdbc;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet; 
public  class MSui extends JFrame  implements ActionListener{
	JButton jb1,jb2,jb3,jb4,jb5;
	JTextField jt1,jt2,jt3,jt4,jt5,jt6,jt7,jt8,jt9;
	// 增删改查静态页面的制作
   MSui(){
	   setTitle("学生信息管理系统");
	   setSize(700,600);
	   setLayout(new GridLayout(6,1));
	   JPanel jp1 = new JPanel(); JPanel jp2 = new JPanel();
	   JPanel jp3 = new JPanel(); JPanel jp4 = new JPanel();
	   JPanel jp5 = new JPanel(); JPanel jp6 = new JPanel();
	   JLabel jl1 = new JLabel("学号");
	   JLabel jl2 = new JLabel("姓名");
	   JLabel jl3 = new JLabel("性别");
	   JLabel jl4 = new JLabel("民族");
	   JLabel jl5 = new JLabel("出生日期");
	   JLabel jl6 = new JLabel("入学时间");
	   JLabel jl7 = new JLabel("学院");
	   JLabel jl8 = new JLabel("专业");
	   jt1= new JTextField(15); jt2 = new JTextField(15);
	   jt3= new JTextField(15); jt4 = new JTextField(15);
	   jt5= new JTextField(15); jt6 = new JTextField(15);
	   jt7= new JTextField(15); jt8 = new JTextField(15);
	   jb1 = new JButton("增加"); jb2 = new JButton("删除");jb3 = new JButton("修改");jb4 = new JButton("查找");jb5= new JButton("退出");
	   jp1.add(jl1);jp1.add(jt1);jp1.add(jl2);jp1.add(jt2);
	   jp2.add(jl3);jp2.add(jt3);jp2.add(jl4);jp2.add(jt4);
	   jp3.add(jl5); jp3.add(jt5); jp3.add(jl6);jp3.add(jt6);
	   jp4.add(jl7);jp4.add(jt7); jp4.add(jl8); jp4.add(jt8);
	   jp6.add(jb1);jp6.add(jb2);jp6.add(jb3);jp6.add(jb4); jp6.add(jb5);
	   add(jp1);add(jp2); add(jp3); add(jp4); add(jp5); add(jp6);
	   setVisible(true);
	   jb1.addActionListener(this);
	   jb2.addActionListener(this );
	   jb3.addActionListener(this);
	   jb4.addActionListener(this);
	   jb5.addActionListener(this);
   }
   public static void main(String[] args) {
	 new MSui();
   }
@Override
public void actionPerformed(ActionEvent e) {
	
	// TODO Auto-generated method stub
	// 添加功能的实现
	if(e.getSource()==jb1) {
		// 获取各个输入框的内容
		  String xuehao = jt1.getText(); 
		  String xingming = jt2.getText();
		  String xingbie = jt3.getText();
		  String minzu = jt4.getText();
		  String chushengriqi = jt5.getText();
		  String ruxueshijian = jt6.getText();
		  String xueyuan = jt7.getText();
		  String zhuanye = jt8.getText();
	 
          Connection con = JDBC.con;
          // 执行插入语句
		  String Uri = "insert into student values(?,?,?,?,?,?,?,?)";
		  
		  PreparedStatement preSql; //PreparedStatement是java.sql包下面的一个接口,用来执行SQL语句查询,通过调用connection.preparedStatement(sql)方法可以获得PreparedStatment对象
		  try {
			  
			  preSql= con.prepareStatement(Uri);
			  preSql.setString(1, xuehao);//这里的setString 的用法就是给第一个?的值 赋予xuehao 文本框的内容
			  preSql.setString(2, xingming);//这里的setString 的用法就是给第二个?的值 赋予姓名 文本框的内容
			  preSql.setString(3, xingbie);
			  preSql.setString(4, minzu);
			  preSql.setString(5, chushengriqi);
			  preSql.setString(6, ruxueshijian);
			  preSql.setString(7, xueyuan);
			  preSql.setString(8, zhuanye);
			  int ok  = preSql.executeUpdate();// 可执行增,删,改,返回执行受到影响的行数
			  JOptionPane.showMessageDialog(null, "添加成功","添加消息",JOptionPane.WARNING_MESSAGE);
			     
		  }catch (Exception e1) {
			// TODO: handle exception
			  JOptionPane.showMessageDialog(null, "当前学号已经存在","添加消息",JOptionPane.WARNING_MESSAGE);
		}
      }
	//删除功能的实现
	if(e.getSource()==jb2) {
		 String xuehao = jt1.getText();
		 // 因为我设置的学号是主键  所以我这边要删除学生信息的话应该用学号信息来进行删除
		 if(xuehao.equals("")) {
			 JOptionPane.showMessageDialog(null, "文本框不能为空","删除消息",JOptionPane.WARNING_MESSAGE);
		 }else {
		  Connection con = JDBC.con;
		  // 删除语句
		  String del = "delete from student where sNum=?";
		  PreparedStatement preSql;
		  try {
			   preSql= con.prepareStatement(del);
			   preSql.setString(1, xuehao);
			   int ok  = preSql.executeUpdate();
			   if(ok==0) {
					  JOptionPane.showMessageDialog(null, "未找到相关学号","删除消息",JOptionPane.WARNING_MESSAGE);
				  }else {
				  JOptionPane.showMessageDialog(null, "删除成功","删除消息",JOptionPane.WARNING_MESSAGE);
				  }
		  }catch(Exception e2) {
			  JOptionPane.showMessageDialog(null, "删除失败","删除消息",JOptionPane.WARNING_MESSAGE);
		  }
		
	   }
     }
	
	// 修改功能的实现(修改的实质就是更新) 修改也是根据学号来修改 
	if(e.getSource()==jb3) {
		  String xuehao = jt1.getText();
		  String xingming = jt2.getText();
		  String xingbie = jt3.getText();
		  String minzu = jt4.getText();
		  String chushengriqi = jt5.getText();
		  String ruxueshijian = jt6.getText();
		  String xueyuan = jt7.getText();
		  String zhuanye = jt8.getText();	
		 if(xuehao.equals("")) {
			 JOptionPane.showMessageDialog(null, "文本框不能为空","修改消息",JOptionPane.WARNING_MESSAGE);
		 }else {
			 Connection con = JDBC.con;
			  String change = "update  student set sName=?,sSex=?,sEthnic=?,sBirth=?,sYear=?,sCollege=?,sMajor=? where sNum=?";
			  PreparedStatement preSql;
			  try {
				  
				  preSql= con.prepareStatement(change);
				  preSql.setString(1, xingming);
				  preSql.setString(2, xingbie);
				  preSql.setString(3, minzu);
				  preSql.setString(4,chushengriqi);
				  preSql.setString(5,ruxueshijian);
				  preSql.setString(6, xueyuan);
				  preSql.setString(7, zhuanye);
				  preSql.setString(8, xuehao);
				  
				  int ok  = preSql.executeUpdate();
				  if(ok==0) {
					  JOptionPane.showMessageDialog(null, "请输入正确的学号","修改消息",JOptionPane.WARNING_MESSAGE);
				  }else {
				  JOptionPane.showMessageDialog(null, "修改成功","修改消息",JOptionPane.WARNING_MESSAGE);
				  }
			  }catch(Exception e3) {
				  JOptionPane.showMessageDialog(null, "修改失败","修改消息",JOptionPane.WARNING_MESSAGE);
				  System.out.println(e3);
			   }	  
		}		 
	}
	// 查找功能的实现 
	if(e.getSource()==jb4) {
		 String xuehao = jt1.getText();
		  String xingming = jt2.getText();
		  String xingbie = jt3.getText();
		  String minzu = jt4.getText();
		  String chushengriqi = jt5.getText();
		  String ruxueshijian = jt6.getText();
		  String xueyuan = jt7.getText();
		  String zhuanye = jt8.getText();	
		PreparedStatement preSql;
		ResultSet rs = null;
		 String search = "select * from student where sNum=?" ;//查找所有的信息 根据学号为条件
		 Connection con = JDBC.con;
		 try {
			  preSql= con.prepareStatement(search);
			  preSql.setString(1, xuehao);
			  rs =  preSql.executeQuery(); //executeQuery()方法会把数据库响应的查询结果存放在ResultSet类对象中供我们使用。
			  String data[] = new String[8]; // 定义一个数组
			  rs.next();//将指针从当前位置下移一行。ResultSet 指针最初位于第一行之前;第一次调用 next 方法使第一行成为当前行;第二次调用使第二行成为当前行
			  data[0]= rs.getString(1); //将学号 姓名 等等信息放进数据内
			  data[1] = rs.getString(2);
			  data[2]= rs.getString(3);
			  data[3] = rs.getString(4);
			  data[4]= rs.getString(5);
			  data[5] = rs.getString(6);
			  data[6]= rs.getString(7);
			  data[7] = rs.getString(8);
			  jt1.setText(data[0]); // 将数组中的信息依次赋值到我们的显示文本框中
			  jt2.setText(data[1]);
			  jt3.setText(data[2]);
			  jt4.setText(data[3]);
			  jt5.setText(data[4]);
			  jt6.setText(data[5]);
			  jt7.setText(data[6]);
			  jt8.setText(data[7]);
			  
		 }catch(Exception e4) {
			 
			 	System.out.println(e4);	 
		 }
		 	
	}
	// 退出
	  if(e.getSource()==jb5) {
		dispose();
	}
	
	}
  }	

 连接数据库

代码如下:

package com.tjl.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.swing.JOptionPane;
//JDBC的连接
public class JDBC {

	 public static  Connection con = null;
	public JDBC(String account ,String password){
		//第一步 加载驱动
		// 尝试加载驱动 若成功 输出驱动加载成功 若失败(我这里是catch了一下  输出驱动加载失败 但是 并没有输出具体的失败细节)
		// 想知道失败细节的,可以输出一下e
		try {
			Class.forName("com.mysql.jdbc.Driver");
			System.out.print("驱动加载成功");
			
		}catch (Exception e) {
			// TODO: handle exception
			System.out.println("驱动加载失败");
		}
		// 连接数据库
		
		String uri ="jdbc:mysql://localhost:3306/student?characterEncoding=utf-8&useSSL=false";
		// 尝试连接 若成功 则输出连接数据库成功 (同驱动的加载)
		// try里面的两个参数 account password 是在login.java 中写死了的 root  111111 就是我自己连接mysql用的账号密码 并不是study库中的账号密码
		  try { 
			  con = DriverManager.getConnection(uri,account,password);
			  System.out.println("连接数据库成功");
			 
		 }catch(SQLException e) {
			System.out.println("连接数据库失败");
		 }
	}
	public static boolean loginAccount(String account ,String password) {
		//登录账号
		//对数据库的信息进行读取
		String uri="select account ,password from user";
		Statement sql; //用来执行命令
		  ResultSet rs; // 制定了一个结果集  用来接收返回的结果 
		
		try {
		   sql=con.createStatement(); //利用现有连接创建一个statement对象 
		   //statement对象是数据库sql语句的载体,通过statement对象可以执行数据库访问的sql语句;使用statement对象执行insert、update、delete语句是调用executeUpdate()方法。
		   rs=sql.executeQuery(uri);//查询语句  并且结果返回到了结果集上 
		   while(rs.next()) {
			   // rs.next() 如果集合中有数据 就返回的是真 没有数据返回的就是假
			   String acc = rs.getString(1);//返回的第一个值就是账号
			   String pass= rs.getString(2);//返回的第二个值就是密码
			   // 如果我从数据库中查到的 acc 和 pass 和我在登录界面输入的账号 密码一致的时候 就返回真
			   if(acc.equals(account)&&pass.equals(password)) {
			   return true;
			  }
		   }
	}catch(SQLException e) {
		return false;
	}
		return false;
 
   }
}

数据库中与项目相关的两个表表名和字段设置如下(建议大家和我设置成一样的)

创建了一个名为mysql 的连接 并且建了一个名为student的数据库

在student库中建立了两个表

 

user表的两个字段

 student表的字段

 

这是一个连接数据库的具有增删改查功能的学生管理系统,希望对大家的学习有所帮助!!!

 

  • 6
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值