java-学生管理系统源代码

1.StuManager.java文件(实现查询任务,添加学生信息和删除学生信息的功能)

/**
 * 完成学生管理系统
 * 1.查询任务
 * 2.添加一个学生
 * 3.删除一个学生 
 */
package com.test1;
import javax.swing.*;

import java.util.*;
import java.awt.*;
import java.awt.event.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class StuManager extends JFrame implements ActionListener {
	//定义一些组件
	JPanel jp1,jp2;
	JLabel jl1;
	JButton jb1,jb2,jb3,jb4;
	JTable jt;
	JScrollPane jsp;
	JTextField jtf;
	StuModel sm;
	
	//定义操作数据库需要的东西
	PreparedStatement ps = null;
	Connection ct = null;
	ResultSet rs = null;
	
	public static void main(String[] args) {
		
		StuManager test3 = new StuManager();
	}
	//构造函数
	public StuManager() {
		//1.上面的界
		jp1 = new JPanel();
		jtf = new JTextField(10);
		jb1 = new JButton("查询");
		
		jb1.addActionListener(this);
		jl1 = new JLabel("请输入名字:");
		
		//把各个空间加入到jp1
		jp1.add(jl1);
		jp1.add(jtf);
		jp1.add(jb1);
		
		//2.下面的界
		jp2 = new JPanel();
		jb2 = new JButton("添加");
		jb2.addActionListener(this);
		jb3 = new JButton("修改");
		jb3.addActionListener(this);
		jb4 = new JButton("删除");
		jb4.addActionListener(this);
		
		//把各个空间加入到jp2中
		jp2.add(jb2);
		jp2.add(jb3);
		jp2.add(jb4);
		
		
		//创建一个数据模型对象
		StuModel sm = new StuModel();
		
		//初始化JTable
		jt = new JTable(sm);
		
		//初始化jsp JScrollPane
		jsp = new JScrollPane(jt);
		
		//把jsp放入到jframe
		this.add(jsp);
		this.add(jp1,"North");
		this.add(jp2,"South");
		

		//给窗口设置一个标题
		this.setTitle("学生管理系统");
		//给窗口设置一个大小
		this.setSize(500, 500);
		//禁止用户改变窗口的大小
		//this.setResizable(false);
		//设置窗口的初始位置
		this.setLocationRelativeTo(null);
		//this.setLocation(300, 300);
		//设置当关闭窗口时,保证JVM也关闭
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//显示
		this.setVisible(true);
				
	}
	
	
	//对查询按钮响应
	public void actionPerformed(ActionEvent e) {
		
		//判断哪个按钮被点击
		if(e.getSource()==jb1) {
			System.out.println("用户希望查询");
			//因 为把对表的数据封装到模型里。我们就可以简单完成查询
			
			String name = this.jtf.getText().trim();
			//写一个SQL语句
			String sql = "select * from stu where stuName='"+name+"'";
			//构建新的数据模型类,并更新
			sm = new StuModel(sql);
			//更新JTable
			jt.setModel(sm);
		}
		//当用户点击添加
		else if(e.getSource()==jb2) 
		{
			StuAdddialog sa = new StuAdddialog(this, "添加学生", true);
			//构建新的数据模型类,并更新
			 sm = new StuModel();
			//更新JTable
			jt.setModel(sm);
			System.out.println("成功添加一位新同学");
			   
		}else if(e.getSource()==jb3) 
		{
			StuModel sm=new StuModel();
            
            int rownum =this.jt.getSelectedRow(); 
            if(rownum==-1) { //提示 
                JOptionPane. showMessageDialog (this, "请选择一行");
                return;//代表不要再往下面走了,谁调用就返回给谁 } 
                //显示修改对话框
}
            new StuUpdDialog(this,"修改学生信息",true,sm,rownum);
          //构建新的数据模型类,并更新
			sm = new StuModel();
			//更新JTable
			jt.setModel(sm);
		}
		
		
		else if(e.getSource()==jb4) 
		{
			//用户删除记录
			//1.得到学生的ID号
			//getSelectedRow会返回用户点中的行
			//如果该 用户一行都没选择,则返回-1
			int rowNum = this.jt.getSelectedRow();
			if(rowNum==-1)
			{
				//提示
				JOptionPane.showMessageDialog(this, "请选择一行");
				return;
			}
			//得到学生的编号
			//没String会返回一个object需要用String强转
			sm = new StuModel();
			String stuId=(String)sm.getValueAt(rowNum, 0); 
			
			//连接数据库,完成删除任务
			//定义操作数据库需要的东西
			try {
				Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
				ct = DriverManager.getConnection("jdbc:sqlserver://本机的ID;databaseName=XueSheng","sa","123456");
				ps=ct.prepareStatement("delete from stu where stuId=?");
				ps.setString(1, stuId);
				ps.executeUpdate();
			} catch (Exception e2) {
				e2.printStackTrace();
			}finally {
				//关闭资源
				try {
					if(rs!=null) rs.close();
					if(ps!=null) ps.close();
					if(ct!=null) ct.close();
				} catch (Exception e3) {
					e3.printStackTrace();
					
				}
			}
			//更新数据模型
			
			//构建新的数据模型类,并更新
			 sm = new StuModel();
			//更新JTable
			jt.setModel(sm);
			System.out.println("成功删除一名学生信息");
	
		}
		
	}

}

2.StuAdddialog.java文件(增添功能的具体实现)

/**
 * 增添功能
 */
package com.test1;

import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class StuAdddialog extends JDialog implements ActionListener {
	
		//定义我需要的swing组件
		JLabel jl1,jl2,jl3,jl4,jl5,jl6;
		JButton jb1,jb2;
		JTextField jtf1,jtf2,jtf3,jtf4,jtf5,jtf6;
		JPanel jp1,jp2,jp3;
		
		//owner它的父窗口;title窗口名;model指定是模态窗口,还是非模态
		public StuAdddialog(Frame owner,String title,boolean modal)
		{
			super(owner,title,modal);//调用父类构造方法,达到模式对话框效果
			jl1=new JLabel("学号");
			jl2=new JLabel("名字");
			jl3=new JLabel("性别");
			jl4=new JLabel("年龄");
			jl5=new JLabel("籍贯");
			jl6=new JLabel("系别");
			
			//文本框
			jtf1=new JTextField();
			jtf2=new JTextField();
			jtf3=new JTextField();
			jtf4=new JTextField();
			jtf5=new JTextField();
			jtf6=new JTextField();
			
			jb1=new JButton("添加");
			//注册监听
			jb1.addActionListener(this);
			jb2=new JButton("取消");
			
			jp1=new JPanel();
			jp2=new JPanel();
			jp3=new JPanel();
			
			//设置布局
			jp1.setLayout(new GridLayout(6,1));
			jp2.setLayout(new GridLayout(6,1));
			
			//添加组件
			jp1.add(jl1);
			jp1.add(jl2);
			jp1.add(jl3);
			jp1.add(jl4);
			jp1.add(jl5);
			jp1.add(jl6);
			
			jp2.add(jtf1);
			jp2.add(jtf2);
			jp2.add(jtf3);
			jp2.add(jtf4);
			jp2.add(jtf5);
			jp2.add(jtf6);
			
			jp3.add(jb1);
			jp3.add(jb2);
			
			this.add(jp1,BorderLayout.WEST);
			this.add(jp2,BorderLayout.CENTER);
			this.add(jp3,BorderLayout.SOUTH);
			
		
			//jb2.addActionListener(this);
			
			//展现
			this.setSize(300, 250);
			this.setVisible(true);
		}

		@Override
		public void actionPerformed(ActionEvent e) {
			//用户点击添加按钮后的响应动作
			if(e.getSource()==jb1){
				//连接数据库
				Connection conn=null;
				Statement stmt=null;
				ResultSet rs=null;
				PreparedStatement ps=null;
				//连接数据库
				try {
					//1、加载驱动
					Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
					System.out.println("加载驱动成功");
					//2.创建连接对象:
					String url = "jdbc:sqlserver://本机的ID;databaseName=XueSheng";
					//注册驱动程序,打开连接对象
					conn = DriverManager.getConnection(url,"sa","123456");
					System.out.println("数据库连接成功");
					
				    //与编译语句对象
					String strsql="insert into stu values(?,?,?,?,?,?)";
					ps=conn.prepareStatement(strsql);
					
					//给参数赋值
					ps.setString(1,jtf1.getText());
					ps.setString(2,jtf2.getText());
					ps.setString(3,jtf3.getText());
					ps.setInt(4,Integer.parseInt(jtf4.getText()));
					ps.setString(5,jtf5.getText());
					ps.setString(6,jtf6.getText());
					
					//4.执行操作
					ps.executeUpdate();
					//关闭添加学生的对话框:
					this.dispose();
				} catch (Exception e2) {
					e2.printStackTrace();
				}finally{
					try {
						if(ps!=null){
							ps.close();
						}
						if(conn!=null){
							conn.close();
						}
					} catch (SQLException e1) {
						e1.printStackTrace();
					}
				}
			}
			else if(e.getSource()==jb2){
				this.dispose();
			}
		}
			
}

3.StuModel.java文件(学生模型)

/**
 * 这是我的一个stu表的模型
 * 可以把对student表的各种操作封装的该模型
 */
package com.test1;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Vector;

import javax.swing.table.*;

public class StuModel extends AbstractTableModel{

	//JTable里的用法Vector
		//rowData用来存放行数据
		//columnNames存放列名
		Vector rowData, columnNames;
		
		//定义操作数据库需要的东西
			PreparedStatement ps = null;
			Connection ct = null;
			ResultSet rs = null;
			
	public void init(String sql) 
	{
		if(sql.equals(""))
		{
			sql = "select * from stu";
		}
		
		
		//中间
		columnNames = new Vector();
		//设置列名:
		columnNames.add("学号");
		columnNames.add("名字");
		columnNames.add("性别");
		columnNames.add("年龄");
		columnNames.add("籍贯");
		columnNames.add("系别");
		
		rowData = new Vector();
		
		//从数据库中提取信息
		try {
			//1.加载驱动
			Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
			System.out.println("加载驱动成功");
			//2.得到连接
			ct = DriverManager.getConnection("jdbc:sqlserver://本机的ID;databaseName=XueSheng","sa","123456");
			System.out.println("数据库连接成功");
			//3.发送sql语句
			ps=ct.prepareStatement(sql);
			//4.执行
			rs=ps.executeQuery();
			
			while(rs.next()) {
				Vector hang = new Vector();
				hang.add(rs.getString(1));
				hang.add(rs.getString(2));
				hang.add(rs.getString(3));
				hang.add(rs.getInt(4));
				hang.add(rs.getString(5));
				hang.add(rs.getString(6));
				
				//加入到rowData
				rowData.add(hang);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			//关闭
			try {
				if(rs!=null) rs.close();
				if(ps!=null) ps.close();
				if(ct!=null) ct.close();
			} catch (Exception e2) {
				// TODO: handle exception
			}
			
		}
	}	
			
	//通过传过的SQL语句来获得数据模型
	public StuModel(String sql)
	{
		this.init(sql);
	}
			
	//构造函数,用于初始化我们的数据模型
	public StuModel() {
		this.init("");		
	}		
	
			
	//得到共有多少列
	public int getColumnCount() {
		// TODO Auto-generated method stub
		return this.columnNames.size();
	}

	
	public String getColumnName(int arg0) {
		// TODO Auto-generated method stub
		return (String)this.columnNames.get(arg0);
	}


	//得到共有多少行
	public int getRowCount() {
		// TODO Auto-generated method stub
		return this.rowData.size();
	}

	//得到某行某列的数据
	public Object getValueAt(int rowIndex, int columnIndex) {
		// TODO Auto-generated method stub
		return ((Vector)this.rowData.get(rowIndex)).get(columnIndex);
	}

}

4.StuUpdDialog.java(修改学生信息任务)

package com.test1;
/*
 * 修改已经存在的学生信息
 * */
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.event.*;
import java.sql.*;
public class StuUpdDialog extends JDialog implements ActionListener{
//定义我需要的swing组件
    JLabel jl1, jl2,jl3, jl4, jl5 ,jl6; 
    JButton jb1,jb2; 
    JTextField jtf1,jtf2,jtf3,jtf4,jtf5,jtf6; 
    JPanel jp1,jp2,jp3;
    
//构造函数 Frame 代表父窗口口,title 代表窗口的名字,model指定是模式窗口,还是非模式的窗口 
    public StuUpdDialog(Frame owner,String title,boolean model,StuModel sm,int rownum) { 
        super(owner,title, model); //调用父类构造 方法,达到模式对话框效果
        jl1=new JLabel("学号"); 
        jl2=new JLabel("姓名"); 
        jl3=new JLabel("性别"); 
        jl4=new JLabel("年龄"); 
        jl5=new JLabel("籍贯"); 
        jl6=new JLabel("系别");
   
        jtf1=new JTextField();
		//初始化数据
		jtf1.setText((String)sm.getValueAt(rownum, 0));
		//让jtf1不能修改
		jtf1.setEditable(false);
		jtf2=new JTextField();
		jtf2.setText((String)sm.getValueAt(rownum, 1));
		jtf3=new JTextField();
		jtf3.setText((String)sm.getValueAt(rownum, 2));
		jtf4=new JTextField();
		jtf4.setText(sm.getValueAt(rownum, 3).toString());
		jtf5=new JTextField();
		jtf5.setText((String)sm.getValueAt(rownum, 4));
		jtf6=new JTextField();
		jtf6.setText((String)sm.getValueAt(rownum, 5));
    
        jb1=new JButton ("修改"); 
        jb2=new JButton ("取消");
        jp1=new JPanel(); 
        jp2=new JPanel(); 
        jp3=new JPanel();
      //设置布局
      	jp1.setLayout(new GridLayout(6,1));
      	jp2.setLayout(new GridLayout(6,1));
        //添加组件 
        jp1.add(jl1); 
        jp1.add(jl2);
        jp1.add(jl3); 
        jp1.add(jl4); 
        jp1.add(jl5);
        jp1.add(jl6);
    
        jp2.add(jtf1);
        jp2.add(jtf2); 
        jp2.add(jtf3); 
        jp2.add(jtf4); 
        jp2.add(jtf5); 
        jp2.add(jtf6);
    
        jp3.add(jb1);
        jp3.add(jb2);
        this.add(jp1,BorderLayout.WEST); 
        this.add(jp2,BorderLayout.CENTER); 
        this.add(jp3,BorderLayout.SOUTH);
        //注册监听
        jb1.addActionListener(this);
        jb2.addActionListener(this); //展现 
        this.setSize(400,300); //
        this.setLocation(200,150); 
        this.setVisible(true);
    }
    

    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
        if(e.getSource()==jb1) { //对用户点击添加按钮后的响应动作 //连接数据库 
            Connection ct =null; 
            PreparedStatement ps =null;
            try {
                //加载驱动
//                Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
//                String url="jdbc:sqlserver://localhost:1433;databaseName=HIRO"; 
                
                Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                String url="jdbc:sqlserver://本机的ID;databaseName=XueSheng";
                ct=DriverManager.getConnection(url,"sa","123456");
                
                //预编译的都是通过添加参数的方式来赋值
                System.out.println("已连接数据库");
                ps=ct.prepareStatement("update stu set stuName=?,stuSex=?,stuAge=?,stuJg=?,stuDept =? where stuId=?");
                ps.setString(1, this.jtf2.getText()); 
                ps.setString(2, this.jtf3.getText()); 
                ps.setString(3, this.jtf4.getText()); // 
                ps.setInt(3,Integer.parseInt(this.jtf4.getText())); 
                ps.setString(4, this.jtf5.getText());
                ps.setString(5, this.jtf6.getText()); 
                ps.setString(6, this.jtf1.getText());
                
                int i=ps.executeUpdate(); 
                if(i==1) { 
                    System.out.print("修改成功ok"); 
                    } else { 
                        System.out.print("修改失败"); }
            } catch (Exception e1) { 
                // TODO Auto-generated catch block 
                e1.printStackTrace();
            } finally { 
                try { ps.close(); ct.close(); 
                } catch (SQLException e1) {
                    // TODO Auto-generated catch block 
                    e1.printStackTrace(); 
                    }
            } 
            //关闭对话框,关闭添加对话框
            this.dispose();
        } else if(e.getSource() == jb2) {
            dispose();
        }
    }
}

5.SQL Server2012代码块:

--创建学生表
create table stu
(
stuId varchar(30) primary key,
stuName nvarchar(50) not null,
stuSex nchar(2) check (stuSex in('男','女')) default '男',
stuAge int check(stuAge>1),
stuJg nvarchar(30),
stuDept nvarchar(40)
)

insert into stu values('sp001','张三','男',20,'山西省','计算机系')
insert into stu values('sp002','李四','男',22,'深圳市','土木工程系')
insert into stu values('sp003','王五','男',26,'天津市','信息工程系')
insert into stu values('sp004','小孟鱼','男',18,'北京市','软件工程系')

--检查插入到表中的数据
select * from stu

备注:在进行java语言与数据库连接的时候需要注意以下问题:

  1. 在源代码上已用红色标注,要用到本机的ID
  2. 数据库操作需用管理员的身份操作,需要有自己独立的用户名个密码(我的用户名是:“sa”密码:“123456”)

你可能感兴趣的:(javase基础笔记)