迷你型学生管理系统

1.设计数据库(一般先设计界面,再设计数据库)

学生表(stus)

字段名类型备注
stuIdvarchar(30)学生id
stuNamenvarchar(50)学生名not null
stuSexnchar(1)性别‘男’或’女’ default’男’
stuAgeint年龄>0
stuJgnvarchar(20)籍贯
stuDeptnvarchar(30)所在系

2.设计界面(原型开发【先搞定界面,再写代码】)

--创建学生表
create table stu
(stuId varchar(30) primary key,
stuName nvarchar(50) not null,
stuSex nchar(1) 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','猪八戒','男',25,'高老庄','天上的');
insert into stu values('sp003','沙悟净','男',26,'流沙河','水里的');
insert into stu values('sp004','唐三藏','男',21,'长安','庙里的');

--StuManage类
    package com.stumanage02;

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.util.Vector;

import javax.swing.*;

/**
 * 
 *完成一个迷你版的学生管理系统
 *1.查询任务
 *2.添加一个学生
 *3.删除一个学生
 *4.修改一个学生
 */
public class StuManage 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) {
		// TODO Auto-generated method stub
		StuManage test3=new StuManage();
	}
	
	//构造函数
	public StuManage() {
		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);
		
		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);
		
		
		
		
		
		//创建一个数据模型对象
		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.setSize(400,300);
		
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
	}

	@Override
	public void actionPerformed(ActionEvent arg0) {
		// TODO Auto-generated method stub
		//判断是哪个按钮被点击
		if(arg0.getSource()==jb1) {
			System.out.println("用户希望查询");
			//因为把对表的数据封装到StuMOdel中,我们就可以比较简单的完成查询
			//从jtf拿到关键字
			String name=this.jtf.getText().trim();//trim是用来过滤空字符的
			String sql="select * from stu where stuName='"+name+"'";
			//构建新的模型数据,并更新
			sm=new StuModel(sql);
			//更新JTable
			jt.setModel(sm);
		}
		//当用户点击添加
		else if(arg0.getSource()==jb2) {
			StuAddDialog sa=new StuAddDialog(this, "添加学生", true);
			
			//重新再获得新的数据模型
			//构建新的模型数据,并更新
			sm=new StuModel();
			//更新JTable
			jt.setModel(sm);
		}else if(arg0.getSource()==jb3) {
			//用户希望修改
			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(arg0.getSource()==jb4) {
			//说明用户希望删除记录
			//1.得到该学生的id
			//getSelectedRow会返回用户点中的行
			//如果该用户一行都没选择,就返回-1
			int rowNum=this.jt.getSelectedRow();
			if(rowNum==-1) {
				//提示
				JOptionPane.showMessageDialog(this, "请选择一行");
				return;
			}
			//得到学生编号
			String stuId=(String)sm.getValueAt(rowNum, 0);
//			System.out.println("id="+stuId);
			
			//连接数据库,完成删除任务
			try {
				//1.加载驱动
				Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
				//2.注册驱动程序,打开连接对象
				ct=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=spdb1", "sa", "sa");
				ps=ct.prepareStatement("delete from stu where stuId=?");
				ps.setString(1, stuId);
				ps.executeUpdate();
				
			} catch (Exception e) {
				// TODO: handle exception
				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
					e2.printStackTrace();
				}
			}
			//更新数据模型
			//重新再获得新的数据模型
			//构建新的模型数据,并更新
			sm=new StuModel();
			//更新JTable
			jt.setModel(sm);
		}
	}
}

--StuModel类
/**
 * 这是我的一个stu表的模型
 * 可以把对student表的各种操作封装到该模型
 */
package com.stumanage02;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Vector;

import javax.swing.table.AbstractTableModel;

public class StuModel extends AbstractTableModel{
	// rowDate用来存放行数据
	// columnNames存放列名
	Vector rowDate, 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("系别");

		rowDate = new Vector();

		try {
			// 1.加载驱动
			Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
			ct = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=spdb1", "sa", "sa");
			ps = ct.prepareStatement(sql);
			rs = ps.executeQuery();

			while (rs.next()) {
				// rowDate可以存放多行
				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));

				// 加入到rowDate
				rowDate.add(hang);
			}
		} catch (Exception e) {
			// TODO: handle exception
			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
				e2.printStackTrace();
			}
		}
	}

	public void addStu(String sql) {
		//根据用户输入的sql语句,完成添加
	}
	// 做一个构造函数,用于初始化我们的数据模型
	public StuModel() {
		this.init("");
	}
	
	
	//通过转递的sql语句来获得数据模型
	public StuModel(String sql) {
		this.init(sql);
	}
	
	//得到共有多少列
	@Override
	public int getColumnCount() {
		// TODO Auto-generated method stub
		return this.columnNames.size();
	}
	
	//得到共有多少行
	@Override
	public int getRowCount() {
		// TODO Auto-generated method stub
		return this.rowDate.size();
	}

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

	//得到某行某列的数据
	@Override
	public Object getValueAt(int row, int column) {
		// TODO Auto-generated method stub
		return ((Vector)this.rowDate.get(row)).get(column);
	}

}


--StuAddDialog类
package com.stumanage02;

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.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

import com.sun.corba.se.spi.orbutil.fsm.Guard.Result;

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它的父窗口
	//tile窗口名
	//model指定是模式窗口,还是非模式的窗口
	public StuAddDialog(Frame owner,String title,boolean model) {
		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();
		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);
		

		
		//展现
		this.setSize(300,250);
//		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		if(e.getSource()==jb1) {
			//对用户点击添加按钮后的响应动作
			//连接数据库
			Connection conn=null;
			Statement stmt=null;
			ResultSet rs=null;
			PreparedStatement pstmt=null;
			//连接数据库,判断用户是否合法
			try {
				//1.加载驱动
				Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
				//2.创建连接对象
				String url="jdbc:sqlserver://localhost:1433;DatabaseName=spdb1";
				//3.注册驱动程序,打开连接对象
				conn=DriverManager.getConnection(url, "sa", "sa");
				
				//4.获取语句对象
				//stmt=conn.createStatement();
				
				//与编译语句对象
				String strsql="insert into stu values(?,?,?,?,?,?)";
				pstmt=conn.prepareStatement(strsql);
				
				//给参数赋值
				pstmt.setString(1, jtf1.getText());
				pstmt.setString(2, jtf2.getText());
				pstmt.setString(3, jtf3.getText());
				pstmt.setString(4, jtf4.getText());
				pstmt.setString(5, jtf5.getText());
				pstmt.setString(6, jtf6.getText());
				
				//5.执行操作
				pstmt.executeUpdate();
				this.dispose();//关闭添加学生对话框
				
			} catch (ClassNotFoundException e2) {
				// TODO: handle exception
				e2.printStackTrace();
			} catch (SQLException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}finally {
				//6.释放语句对象,连接对象
				try {
					if(rs!=null)rs.close();
					if(stmt!=null)stmt.close();
					if(conn!=null)conn.close();
				} catch (SQLException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
			}
		}
	}
}


--StuUpdDialog类
package com.stumanage02;
/**
 * 修改学生信息
 */
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.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

import com.sun.corba.se.spi.orbutil.fsm.Guard.Result;

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;
	
	//owner它的父窗口
	//tile窗口名
	//model指定是模式窗口,还是非模式的窗口
	public StuUpdDialog(Frame owner,String title,boolean model,StuModel sm,int rowNums) {
		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(rowNums, 0));
		//让jtf1不能修改
		jtf1.setEditable(false);
		jtf2=new JTextField();
		jtf2.setText((String)sm.getValueAt(rowNums, 1));
		jtf3=new JTextField();
		jtf3.setText((String)sm.getValueAt(rowNums, 2));
		jtf4=new JTextField();
		jtf4.setText(sm.getValueAt(rowNums, 3).toString());
		jtf5=new JTextField();
		jtf5.setText((String)sm.getValueAt(rowNums, 4));
		jtf6=new JTextField();
		jtf6.setText((String)sm.getValueAt(rowNums, 5));
		
		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);
		

		
		//展现
		this.setSize(300,250);
//		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		if(e.getSource()==jb1) {
			//对用户点击修改按钮后的响应动作
			//连接数据库
			Connection conn=null;
			Statement stmt=null;
			ResultSet rs=null;
			PreparedStatement pstmt=null;
			//连接数据库,判断用户是否合法
			try {
				//1.加载驱动
				Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
				//2.创建连接对象
				String url="jdbc:sqlserver://localhost:1433;DatabaseName=spdb1";
				//3.注册驱动程序,打开连接对象
				conn=DriverManager.getConnection(url, "sa", "sa");
				
				//4.获取语句对象
				//stmt=conn.createStatement();
				
				//与编译语句对象
				String strsql="update stu set stuName=?,stuSex=?,stuAge=?,"
						+ "stuJg=?,stuDept=? where stuId=?";
		
				pstmt=conn.prepareStatement(strsql);
				
		
		
				//给问号赋值
				pstmt.setString(1, jtf2.getText());
				pstmt.setString(2, jtf3.getText());
				pstmt.setString(3, jtf4.getText());
				pstmt.setString(4, jtf5.getText());
				pstmt.setString(5, jtf6.getText());
				pstmt.setString(6, jtf1.getText());
				
				//5.执行操作
				pstmt.executeUpdate();
				this.dispose();//关闭添加学生对话框
				
			} catch (ClassNotFoundException e2) {
				// TODO: handle exception
				e2.printStackTrace();
			} catch (SQLException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}finally {
				//6.释放语句对象,连接对象
				try {
					if(rs!=null)rs.close();
					if(stmt!=null)stmt.close();
					if(conn!=null)conn.close();
				} catch (SQLException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
			}
		}
	}
}

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值