JDBC+GUI实现简单学生管理系统

刚学完JDBC不久,做了一个简单的学生管理系统,可能还有不完善的地方,望各路大神见谅。废话不多说,我先贴个图让大家让大家瞅瞅,觉得是你想要的再看下去吧。

我是以管理者的身份去做的,适合初学者去学习。

在做之前,先捋一遍思路,简单来说分为三大步。

一、在数据库里建Student表存放学生信息

二、用JDBC来连接、操作数据库

三、展示Student数据,实现增删改查功能。

思路是非常简单的,但是要实现还是有很多细节需要注意,下面我就贴上我的代码,结合着代码给大家一步步的分析说明。

实现:

一、在数据库建表:这个不用细说,直接贴图。

二、用JDBC连接数据库:这一块对于刚刚学JDBC的同学来说可能比较绕,所以我把这一块又分成了四部分(最后的db.properties跟com.student.db一起的),我会逐个说明。看图。

(1)com.student.db包里有两个类,一个是DBHelper 一个是DBManager,这俩类是用JDBC连接数据库的,固定写法。

DBManager类

package com.student.db;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.student.mapper.IMapper;
public class DBManager {
//这里把JDBC连接数据库的步骤(找驱动,建连接,建通道,执行SQL)封装在DBHelper类里面,在DBManager里用getConnection()调用。这样写的目的是方便
 public Connection getConnection(){
 try {
 return DBHelper.getConnection();//得到DBHelper类里面写好的连接
 } catch (ClassNotFoundException e) {
 e.printStackTrace();
 } catch (SQLException e) {
 e.printStackTrace();
 }
 return null;
 }
//增删改结果集。因为sql语句是变化的,所以设为参数比较方便。params是占位符的,没学的可以忽略。
 public int executeUpdate(String sql,Object[] params){
 Connection conn=null;
 PreparedStatement pst=null;
 try {
 conn=getConnection();//连接
 pst=conn.prepareStatement(sql);//通道
 if(params != null){//占位符的应用。
 for(int i=0;i<params.length;i++){
 pst.setObject(i+1,params[i]);//往通道里放数据,占位符下标从1开始。
 }
 }
 return pst.executeUpdate();

 } catch (SQLException e) {
 e.printStackTrace();
 }
 return -1;
 }
//查询结果集。比增删改要复杂一些,慢慢看。
//这里的IMapper是将所有可能的用到的类都放进去,方便以后继承使用。(现在我们写的是Student信息,以后可能会有Teacher信息,Class信息等等)
//用接口是因为接口多继承,方便维护升级
 public List executeQuery(String sql,IMapper mapper,Object []params){
 Connection conn=null;
 PreparedStatement pst=null;
 ResultSet rst=null;//查询结果集
 List list=new ArrayList();//用一个集合存放Student信息
 try {
 conn=getConnection();
 pst=conn.prepareStatement(sql);
 if(params != null){
 for(int i=0;i<params.length;i++){
 pst.setObject(i+1,params[i]);
 }
 }
 rst=pst.executeQuery();//把通道里的数据放入结果集
 list=mapper.map(rst);//IMapper里有个map接口,里面存着结果集数据。把结果集的数据放入list集合
 } catch (SQLException e) {
 e.printStackTrace();
 }
 return list;
 }
 public int count(String sql){//分页查询 count代表页数。
 Connection conn=null;
 PreparedStatement pst=null;
 ResultSet rst=null;
 try {
 conn=getConnection();
 pst=conn.prepareStatement(sql);
 rst=pst.executeQuery();
 while(rst.next()){
 return rst.getInt(1);//sql语句是select count(*) from stu,显示的是count值,就是一行。
 }
 } catch (SQLException e) {
 e.printStackTrace();
 }
 return -1;
 }

}

DBHelper类。在写之前先建一个properties文件,名字为db.properties(如图),注意不要建在包里面。

package com.student.db;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
public class DBHelper {
 private static String DRIVER;
 private static String URL;
 private static String USER;
 private static String PASSWORD;
 static{
 Properties pro=new Properties();
 InputStream in=DBHelper.class.getClassLoader()
 .getResourceAsStream("db.properties");//读取文件数据
 try {
 pro.load(in);
 } catch (IOException e) {
 e.printStackTrace();
 }
 DRIVER=pro.getProperty("DRIVER");
 URL=pro.getProperty("URL");
 USER=pro.getProperty("USER");
 PASSWORD=pro.getProperty("PASSWORD");

 }

 public static Connection getConnection() throws ClassNotFoundException, SQLException{
 Class.forName(DRIVER);//找驱动
 return DriverManager.getConnection(URL, USER, PASSWORD);//建连接
 }

}

(2)com.student.vo包。这里面有一个vo类,我们是要把数据库里的数据放到java里展示,用一个类对象把数据库里的信息一一对应起来就可以很容易的操作。数据库里的一个列对应类对象的一个属性。

package com.student.vo;

public class Student {
 private String stuid;
 private String name;
 private String age;
 private String sex;

 public String getStuid(){
 return stuid;
 }
 public void setStuid(String stuid){
 this.stuid=stuid;
 }
 public String getName() {
 return name;
 }
 public void setName(String name) {
 this.name = name;
 }
 public String getAge() {
 return age;
 }
 public void setAge(String age) {
 this.age = age;
 }
 public String getSex() {
 return sex;
 }
 public void setSex(String sex) {
 this.sex = sex;
 }
 public Student(String stuid,String name,String sex,String age){
 super();
 this.stuid=stuid;
 this.name=name;
 this.age=age;
 this.sex=sex;
 }
 public Student(){
 super();
 }
}

(3)com.student.mapper包。这里面一个接口,一个实现类。

接口:

package com.student.mapper;

import java.sql.ResultSet;
import java.util.List;

public interface IMapper {
 List map(ResultSet rst);//声明一个方法存着结果集。
}

实现类:

package com.student.mapper;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.student.vo.Student;
public class StuMapper implements IMapper {//实现接口方法
 public List map(ResultSet rst) {
 List<Student> list=new ArrayList<Student>();//建一个集合,里面是Student类里的信息。
 try {
 while(rst.next()){//
 Student stu=new Student();
 stu.setStuid(rst.getString("STUID"));//类对象每一个属性对应数据库的每一列。
 stu.setName(rst.getString("STUNAME"));
 stu.setAge(rst.getString("AGE"));
 stu.setSex(rst.getString("SEX"));
 list.add(stu);//把类对象放到集合里
 }
 } catch (SQLException e) {
 e.printStackTrace();
 }
 return list;
 }

}

(4)com.student.dao包:这里面的StuDAO类放着增删改查分页等功能

package com.student.dao;

import java.util.List;

import com.student.db.DBManager;
import com.student.mapper.IMapper;
import com.student.mapper.StuMapper;
import com.student.vo.Student;

public class StuDAO {
 public List<Student> check(){//查看
 String sql="select * from STUDENT";//sql语句
 DBManager db=new DBManager();
 IMapper mapper=new StuMapper();//实现StuMapper
 List<Student> list=db.executeQuery(sql, mapper,null);//null是指占位符为null,因为查看的是所有信息
 return list;
 }
 public boolean add(Student stu){//添加
 String sql="insert into STUDENT values(?,?,?,?)";
 Object[] params={stu.getStuid(),stu.getName(),stu.getAge(),stu.getSex()};
 DBManager db=new DBManager();
 int i=db.executeUpdate(sql, params);
 if(i>=0){
 System.out.println("成功");
 }else{
 System.out.println("失败");
 }
 return true;
 }
 public boolean update(Student stu){//修改
 String sql="update STUDENT set stuname=?,age=?,sex=? where stuid=?";
 Object params[]={stu.getName(),stu.getAge(),stu.getSex(),stu.getStuid()};
 DBManager db=new DBManager();
 int i=db.executeUpdate(sql, params);
 if(i>=0){
 System.out.println("成功");
 }else{
 System.out.println("失败");
 }
 return true;
 }
 public boolean delete(Student stu){//删除
 String sql="delete from STUDENT where stuid=?";
 Object params[]={stu.getStuid()};
 DBManager db=new DBManager();
 int i=db.executeUpdate(sql, params);
 if(i>=0){
 System.out.println("成功");
 }else{
 System.out.println("失败");
 }
 return true;
 }
 public List<Student> findPage(int pagesize,int pagenow){//分页
 String sql="select * from (select rownum rn ,stu .* from stu) "
 + "where rownum<=? and rn>?";//分页公式
 Object []params={pagesize,(pagenow-1)*pagesize};
 DBManager db=new DBManager();
 IMapper mapper=new StuMapper();
 return db.executeQuery(sql, mapper, params);
 }
 public int findcount(){
 String sql="select count(*) from stu";
 DBManager db=new DBManager();
 return db.count(sql);
 }

}

当把这一块写完之后,其实大部分就已经完成了,JDBC连接数据库基本上是固定的,多写几遍就明白了。

三、展示Student信息,实现增删改查。看图:

(1)com.student.show包,展示界面:这里面内容比较多,但是都很容易理解

package com.student.show;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;

import com.student.add.Add;
import com.student.check.Check;
import com.student.dao.StuDAO;
import com.student.delete.Delete;
import com.student.update.Update;
import com.student.vo.Student;

public class Show extends JFrame {
 public static int pagesize=5;//每页显示5条信息
 public static int pagenow=1;//当前页为第一页
 public Show() {
 setSize(500, 430);
 setVisible(true);
 setDefaultCloseOperation(EXIT_ON_CLOSE);//点X号就是关闭
 setResizable(false);//不可改变窗口大小
 setLocationRelativeTo(null);//默认居中显示
 setLayout(null);//采用坐标布局

 StuDAO dao = new StuDAO();//前面我们已经把增删改查分页写到StuDAO里面,现在就直接拿出来用
 List<Student> list =dao.findPage(pagesize, pagenow);
 Student stu = new Student();
 for (int i = 0; i < list.size(); i++) {
 stu = list.get(i);
 }
 String[] rowName = { "学号", "姓名", "年龄", "性别" };//从这里开始是二维数组的遍历使用
 Object[][] data = new Object[list.size()][4];
 for (int i = 0; i < list.size(); i++) {
 Student s = list.get(i);
 Object st[] = { s.getStuid(), s.getName(), s.getAge(), s.getSex() };
 data[i] = st;
 }
 final JTable table = new JTable(data,rowName);
 JScrollPane JSP=new JScrollPane(table);//这一步不能省去,否则显示不出列名
 JSP.setBounds(20, 10, 400, 200);
 add(JSP);

 JButton jb11=new JButton("首页");
 jb11.setBounds(40,220,80,30);
 add(jb11);
 JButton jb22=new JButton("上一页");
 jb22.setBounds(130,220,80,30);
 add(jb22);
 JButton jb33=new JButton("下一页");
 jb33.setBounds(220,220,80,30);
 add(jb33);
 JButton jb44=new JButton("尾页");
 jb44.setBounds(310,220,80,30);
 add(jb44);

 JButton jb1 = new JButton("查看信息");
 jb1.setBounds(50, 270, 100, 30);
 add(jb1);
 JButton jb2 = new JButton("修改信息");
 jb2.setBounds(280, 270, 100, 30);
 add(jb2);
 JButton jb3 = new JButton("添加信息");
 jb3.setBounds(50, 320, 100, 30);
 add(jb3);
 JButton jb4 = new JButton("删除信息");
 jb4.setBounds(280, 320, 100, 30);
 add(jb4);
 JButton jb5 = new JButton("退出");
 jb5.setBounds(280, 360, 100, 30);
 add(jb5);

 jb1.addActionListener(new ActionListener() {//查看
 public void actionPerformed(ActionEvent event) {
 int row = table.getSelectedRow();//选中第几行
 int index = 0;
 if(row==-1){
 JOptionPane.showMessageDialog(null,"您没有选中信息");
 return;
 }
 String id = (String) table.getValueAt(row, index);// 跟Check联系起来
 Check check=new Check(id);
 check.setVisible(true);
 setVisible(false);
 }
 });

 jb2.addActionListener(new ActionListener() {//修改
 public void actionPerformed(ActionEvent event) {
 int row = table.getSelectedRow();
 int index = 0;
 if(row==-1){
 JOptionPane.showMessageDialog(null,"您没有选中信息");
 return;
 }
 String id = (String) table.getValueAt(row, index);// 跟Update联系起来
 Update up=new Update(id);
 up.setVisible(true);
 setVisible(false);

 }
 });

 jb3.addActionListener(new ActionListener() {//添加
 public void actionPerformed(ActionEvent event) {
 Add add = new Add();
 add.setVisible(true);
 setVisible(false);
 }
 });
 jb4.addActionListener(new ActionListener() {//删除
 public void actionPerformed(ActionEvent event) {
 int row = table.getSelectedRow();
 int index = 0;
 if(row==-1){
 JOptionPane.showMessageDialog(null,"您没有选中信息");
 return;
 }
 String num=(String) table.getValueAt(row, index);
 Delete d=new Delete(num);
 d.setVisible(true);
 setVisible(false);

 }
 });
 jb11.addActionListener(new ActionListener() {//首页
 public void actionPerformed(ActionEvent event) {
 pagenow=1;
 Show show=new Show();
 setVisible(false);
 show.setVisible(true);
 }
 });
 jb22.addActionListener(new ActionListener() {//上一页
 public void actionPerformed(ActionEvent event) {
 if(pagenow != 1){
 pagenow=pagenow-1;
 }else{
 return;
 }
 Show show=new Show();
 setVisible(false);
 show.setVisible(true);
 }
 });
 jb33.addActionListener(new ActionListener() {//下一页
 public void actionPerformed(ActionEvent event) {
 StuDAO dao=new StuDAO();
 int count=dao.findcount();
 int pageCount=(count-1)/pagesize+1;//pageCount表示最后一页
 if(pagenow != pageCount){
 pagenow=pagenow+1;
 }else{
 return;
 }
 Show show=new Show();
 setVisible(false);
 show.setVisible(true);
 }
 });
 jb44.addActionListener(new ActionListener() {//尾页
 public void actionPerformed(ActionEvent event) {
 StuDAO dao=new StuDAO();
 int count=dao.findcount();
 int pageCount=(count-1)/pagesize+1;
 pagenow=pageCount;
 Show show=new Show();
 setVisible(false);
 show.setVisible(true);
 }
 });
 }

 public static void main(String args[]) {
 Show s = new Show();
 }
}

(2)增删改查:大同小异,因为我们在StuDAO里面已经写好了,在用的时候就方便多了。

①添加:

package com.student.add;

import java.sql.SQLException;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

import com.student.dao.StuDAO;
import com.student.db.DBManager;
import com.student.show.Show;
import com.student.vo.Student;

public class Add extends JFrame{
 public Add(){
 setSize(300,400);
 setVisible(true);
 setDefaultCloseOperation(EXIT_ON_CLOSE);
 setResizable(false);
 setLocationRelativeTo(null);
 setLayout(null);

 JLabel j0=new JLabel("添加信息");
 j0.setBounds(100,20,80,30);
 add(j0);

 JLabel j1=new JLabel("学号:");
 j1.setBounds(30,70,50,30);
 add(j1);

 final JTextField jt1=new JTextField();
 jt1.setBounds(100,70,130,30);
 add(jt1);

 JLabel j2=new JLabel("姓名:");
 j2.setBounds(30,120,50,30);
 add(j2);

 final JTextField jt2=new JTextField();
 jt2.setBounds(100,120,130,30);
 add(jt2);

 JLabel j3=new JLabel("性别:");
 j3.setBounds(30,170,50,30);
 add(j3);

 final JTextField jt3=new JTextField();
 jt3.setBounds(100,170,130,30);
 add(jt3);

 JLabel j4=new JLabel("年龄:");
 j4.setBounds(30,220,50,30);
 add(j4);

 final JTextField jt4=new JTextField();
 jt4.setBounds(100,220,130,30);
 add(jt4);

 JButton jb1=new JButton("添加");
 jb1.setBounds(50,280,80,30);
 add(jb1);

 JButton jb2=new JButton("返回");
 jb2.setBounds(150,280,80,30);
 add(jb2);

 jb1.addActionListener(new ActionListener(){
 public void actionPerformed(ActionEvent event){
 String a=jt1.getText();//获取输入的信息
 String b=jt2.getText();
 String c=jt3.getText();
 String d=jt4.getText();
 Student stu=new Student(a,b,c,d);
 StuDAO dao=new StuDAO();
 List<Student> list=dao.check();//调用StuDAO里面的check()方法
 for(Student st:list){//遍历集合
 if(st.getStuid().equals(a)){
 JOptionPane.showMessageDialog(null,"该账号存在");
 return;
 }
 }
 dao.add(stu);
 JOptionPane.showMessageDialog(null,"添加成功");
 Show show=new Show();
 show.setVisible(true);
 setVisible(false);
 }
 });
 jb2.addActionListener(new ActionListener(){
 public void actionPerformed(ActionEvent event){
 Show s=new Show();
 s.setVisible(true);
 setVisible(false);
 }
 });
 }
 public static void main(String []args){
 Add add=new Add();
 }
}

②修改:

package com.student.update;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import java.util.List;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

import com.student.dao.StuDAO;
import com.student.db.DBManager;
import com.student.show.Show;
import com.student.vo.Student;

public class Update extends JFrame{
 public Update(final String id){
 setSize(300,400);
 setVisible(true);
 setDefaultCloseOperation(EXIT_ON_CLOSE);
 setResizable(false);
 setLocationRelativeTo(null);
 setLayout(null);

 JLabel j0=new JLabel("修改信息");
 j0.setBounds(100,20,80,30);
 add(j0);

 JLabel j1=new JLabel("学号:");
 j1.setBounds(30,70,50,30);
 add(j1);

 final JLabel jt1=new JLabel();
 jt1.setBounds(100,70,130,30);
 add(jt1);

 JLabel j2=new JLabel("姓名:");
 j2.setBounds(30,120,50,30);
 add(j2);

 final JTextField jt2=new JTextField();
 jt2.setBounds(100,120,130,30);
 add(jt2);

 JLabel j3=new JLabel("年龄:");
 j3.setBounds(30,170,50,30);
 add(j3);

 final JTextField jt3=new JTextField();
 jt3.setBounds(100,170,130,30);
 add(jt3);

 JLabel j4=new JLabel("性别:");
 j4.setBounds(30,220,50,30);
 add(j4);

 final JTextField jt4=new JTextField();
 jt4.setBounds(100,220,130,30);
 add(jt4);

 JButton jb1=new JButton("修改");
 jb1.setBounds(50,280,80,30);
 add(jb1);

 JButton jb2=new JButton("返回");
 jb2.setBounds(150,280,80,30);
 add(jb2);

 StuDAO dao=new StuDAO();
 List<Student> list=dao.check();
 Student stu=new Student();
 for(int i=0;i<list.size();i++){//遍历,找到与id相同的学号。
 stu=list.get(i);
 if(stu.getStuid().equals(id)){//id是参数,跟前面Show联系起来。
 break;
 }
 }
 jt1.setText(stu.getStuid());
 jt2.setText(stu.getName());
 jt3.setText(stu.getAge());
 jt4.setText(stu.getSex());

 jb1.addActionListener(new ActionListener(){
 public void actionPerformed(ActionEvent event){
 StuDAO dao=new StuDAO();
 Student stu=new Student();
 stu.setStuid(id);
 stu.setName(jt2.getText());
 stu.setAge(jt3.getText());
 stu.setSex(jt4.getText());
 dao.update(stu);//StuDAO里的update()已经写好如何修改,这里直接用
 JOptionPane.showMessageDialog(null,"修改成功");
 Show show=new Show();
 show.setVisible(true);
 setVisible(false);
 }
 });
 jb2.addActionListener(new ActionListener(){
 public void actionPerformed(ActionEvent event){
 Show s=new Show();
 s.setVisible(true);
 setVisible(false);
 }
 });
 }

}

③查看:

package com.student.check;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

import com.student.dao.StuDAO;
import com.student.show.Show;
import com.student.vo.Student;

public class Check extends JFrame{
 public Check(String id) {
 setSize(300,400);
 setVisible(true);
 setDefaultCloseOperation(EXIT_ON_CLOSE);
 setResizable(false);
 setLocationRelativeTo(null);
 setLayout(null);

 JLabel j0=new JLabel("学生信息");
 j0.setBounds(100,20,80,30);
 add(j0);

 JLabel j1=new JLabel("学号:");
 j1.setBounds(30,70,50,30);
 add(j1);

 final JLabel jt1=new JLabel();
 jt1.setBounds(100,70,130,30);
 add(jt1);

 JLabel j2=new JLabel("姓名:");
 j2.setBounds(30,120,50,30);
 add(j2);

 final JLabel jt2=new JLabel();
 jt2.setBounds(100,120,130,30);
 add(jt2);

 JLabel j3=new JLabel("年龄:");
 j3.setBounds(30,170,50,30);
 add(j3);

 final JLabel jt3=new JLabel();
 jt3.setBounds(100,170,130,30);
 add(jt3);

 JLabel j4=new JLabel("性别:");
 j4.setBounds(30,220,50,30);
 add(j4);

 final JLabel jt4=new JLabel();
 jt4.setBounds(100,220,130,30);
 add(jt4);

 JButton jb1=new JButton("确认");
 jb1.setBounds(50,280,80,30);
 add(jb1);

 JButton jb2=new JButton("返回");
 jb2.setBounds(150,280,80,30);
 add(jb2);

 StuDAO dao=new StuDAO();
 List<Student> list=dao.check();
 Student stu=new Student();
 for(int i=0;i<list.size();i++){
 stu=list.get(i);
 if(stu.getStuid().equals(id)){
 break;
 }
 }
 jt1.setText(stu.getStuid());
 jt2.setText(stu.getName());
 jt3.setText(stu.getAge());
 jt4.setText(stu.getSex());

 jb1.addActionListener(new ActionListener(){
 public void actionPerformed(ActionEvent event){
 Show s=new Show();
 s.setVisible(true);
 setVisible(false);
 }
 });
 jb2.addActionListener(new ActionListener(){
 public void actionPerformed(ActionEvent event){
 Show s=new Show();
 s.setVisible(true);
 setVisible(false);
 }
 });

 }

}

④删除:

package com.student.delete;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

import com.student.dao.StuDAO;
import com.student.db.DBManager;
import com.student.show.Show;
import com.student.vo.Student;

public class Delete extends JFrame{
 public Delete(final String num){
 setSize(300,400);
 setVisible(true);
 setDefaultCloseOperation(EXIT_ON_CLOSE);
 setResizable(false);
 setLocationRelativeTo(null);
 setLayout(null);

 JLabel j0=new JLabel("您确认要删除该信息吗");
 j0.setBounds(100,20,200,30);
 add(j0);

 JLabel j1=new JLabel("学号:");
 j1.setBounds(30,70,50,30);
 add(j1);

 final JLabel jt1=new JLabel();
 jt1.setBounds(100,70,130,30);
 add(jt1);

 JLabel j2=new JLabel("姓名:");
 j2.setBounds(30,120,50,30);
 add(j2);

 final JLabel jt2=new JLabel();
 jt2.setBounds(100,120,130,30);
 add(jt2);

 JLabel j3=new JLabel("年龄:");
 j3.setBounds(30,170,50,30);
 add(j3);

 final JLabel jt3=new JLabel();
 jt3.setBounds(100,170,130,30);
 add(jt3);

 JLabel j4=new JLabel("性别:");
 j4.setBounds(30,220,50,30);
 add(j4);

 final JLabel jt4=new JLabel();
 jt4.setBounds(100,220,130,30);
 add(jt4);

 JButton jb1=new JButton("确认");
 jb1.setBounds(20,280,80,30);
 add(jb1);

 JButton jb2=new JButton("返回");
 jb2.setBounds(180,280,80,30);
 add(jb2);

 StuDAO dao=new StuDAO();
 List<Student> list=dao.check();
 Student stu=new Student();
 for(int i=0;i<list.size();i++){
 stu=list.get(i);
 if(stu.getStuid().equals(num)){
 break;
 }
 }

 jt1.setText(stu.getStuid());
 jt2.setText(stu.getName());
 jt3.setText(stu.getAge());
 jt4.setText(stu.getSex());

 jb1.addActionListener(new ActionListener(){
 public void actionPerformed(ActionEvent event){
 StuDAO dao=new StuDAO();
 Student stu=new Student();
 stu.setStuid(num);
 dao.delete(stu);
 JOptionPane.showMessageDialog(null,"删除成功");
 Show show=new Show();
 show.setVisible(true);
 setVisible(false);
 }
 });
 jb2.addActionListener(new ActionListener(){
 public void actionPerformed(ActionEvent event){
 Show s=new Show();
 s.setVisible(true);
 setVisible(false);
 }
 });
 }

}

最后贴一下登录页面,因为是以管理者的身份登录的不需要判断,就非常简单:

package com.student.login;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import com.student.show.Show;

public class Login extends JFrame{
 public Login(){
 setSize(300,250);
 setVisible(true);
 setDefaultCloseOperation(EXIT_ON_CLOSE);
 setResizable(false);
 setLocationRelativeTo(null);
 setLayout(null);

 JLabel j=new JLabel("登录窗口");
 j.setBounds(100,20,80,30);
 add(j);

 JLabel j1=new JLabel("用户名:");
 j1.setBounds(50,80,60,30);
 add(j1);

 final JTextField jt1=new JTextField();
 jt1.setBounds(120,80,120,30);
 add(jt1);

 JLabel j2=new JLabel("密 码:");
 j2.setBounds(50,130,60,30);
 add(j2);

 final JPasswordField jp=new JPasswordField();
 jp.setBounds(120,130,120,30);
 add(jp);

 JButton jb1=new JButton("登录");
 jb1.setBounds(70,180,60,30);
 add(jb1);

 JButton jb2=new JButton("重置");
 jb2.setBounds(170,180,60,30);
 add(jb2);

 jb1.addActionListener(new ActionListener(){
 public void actionPerformed(ActionEvent event){
 String id=jt1.getText();
 char ch[]=jp.getPassword();
 String pass=new String(ch);
 if(id.equals(abcdefj){//设置用户名为abcdefj
 if(pass.equals(123456)){//设置密码为123456
 JOptionPane.showMessageDialog(null,"登录成功");
 Show s=new Show();//成功后跳到Show
 s.setVisible(true);
 setVisible(false);
 }else{
 JOptionPane.showMessageDialog(null,"密码错误");
 jt1.setText("");
 return;
 }
 }else{
 JOptionPane.showMessageDialog(null,"您输入的账号有误");
 jt1.setText("");
 jp.setText("");
 return;
 }
 }
 });
 }
 public static void main(String []args){
 Login lo=new Login();
 }
} 

写在最后:

刚开始学的时候感觉很绕,尤其是JDBC那,后来发现,是因为前面java基础掌握的不行,我又回去好好复习了java基础,才发现JDBC是死的,固定的写法,背过就行了。所以再做这个学生管理系统,就感觉不复杂了。先有一个大的思路,然后顺着思路往下走,逐步实现每个功能。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 基于jsp实现新闻管理系统 附完整源码

    很棒的新闻发布系统分享给大家,希望大家喜欢. 下面就让我们来说一说基于jsp的新闻发布系统,其中使用的技术有JavaBean.fillter.数据库等,能够实现新闻的发布功能,在发布之后能够进行对每一条新闻的删除.修改.或者继续增加新的文章,最后还能够进行查询功能,其中引用了百度编辑器,能够进行图文并茂的编辑,极大地方便用户的使用. 注:完整项目下载地址:新闻发布系统 一.效果演示 首先让我们来看一看实现的效果: 下面是登陆的首界面: 图1 首界面 管理员登录页面: 图2 管理员登录界面 下面是

  • JSP学生信息管理系统

    本文实例为大家分享了JSP学生信息管理系统源码,JSP+Servlet+Javabean+JDBC+MySQL,供大家参考,具体内容如下 1.service层,进行数据库操作     package com.service; /** * 负责学生信息的所有数据库操作,增删改查 */ import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQ

  • JDBC实现学生管理系统

    本文实例为大家分享了JDBC实现学生管理系统的具体代码,供大家参考,具体内容如下 1.学生类 package manage; import java.util.Date; /** * @author fanxf * @since 2018/4/27 17:01 */ public class Student { private int id; private int age; private String sex; private String name; private Date dateCr

  • JSP实现简单人事管理系统

    本文实例为大家分享了JSP实现简单人事管理系统的具体代码,供大家参考,具体内容如下 此系统使用jsp实现,其中包含了jsp九大内置对象和四大作用域的相关知识,采用map集合模拟数据库的方式,实现用户登录.员工信息展示.员工信息修改功能. JSP的九大内置对象:Application,Config,Exception,Out,PageContent,Page,Request,Respsonse,Sesstion JSP的四大作用域:Application Sesstion Page request

  • JSP学生信息管理系统设计

    本文实例为大家分享了JSP学生信息管理系统源码,供大家参考,具体内容如下 新建学生信息数据库 1.添加记录模块 <%@ page contentType="text/html" pageEncoding="UTF-8"%> <html> <head> <title>添加新学生</title> </head> <body> <form action="stuinsert

  • jdbc+jsp实现简单员工管理系统

    简单的页面分析 在上一个文章简单的数据库连接测试,已经测试和数据库做简单的交互,也就是dao层的实现,接下来要说的却是action的简单实现,在ssh中有struts作为表示层和server的交换,而这里我不是说的是关于struts这里只是简单的运用jsp的代码书写来实现数据的传输,这也是最繁琐的步骤,但是这却让我们对底层的调用有一个简单的了解,这里是直接调用封装好的数据,交换和使用,首先要书写的是action的使用,用的最多的就是getParameter表单的提交了,这里在网络上提交一个表单吗

  • JSP实现客户信息管理系统

    本文实例为大家分享了JSP实现客户信息管理系统的具体代码,供大家参考,具体内容如下 项目示意图大概这样吧.我自己画的 登录界面代码 index.jsp: 完全没技术含量的,直接调用一个servlet控制的是否登录 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD

  • JDBC+GUI实现简单学生管理系统

    刚学完JDBC不久,做了一个简单的学生管理系统,可能还有不完善的地方,望各路大神见谅.废话不多说,我先贴个图让大家让大家瞅瞅,觉得是你想要的再看下去吧. 我是以管理者的身份去做的,适合初学者去学习. 在做之前,先捋一遍思路,简单来说分为三大步. 一.在数据库里建Student表存放学生信息 二.用JDBC来连接.操作数据库 三.展示Student数据,实现增删改查功能. 思路是非常简单的,但是要实现还是有很多细节需要注意,下面我就贴上我的代码,结合着代码给大家一步步的分析说明. 实现: 一.在数

  • java基于jdbc实现简单学生管理系统

    目录 工具类 工程目录: 运行截图: 这个是java连接mysql数据库的一个简单学生系统,通过jdbc连接数据库. 工具类 JDBCuntils. package Student; import java.io.IOException; import java.sql.*; import java.util.Properties; //数据库的工具类 public class JDBCuntils { private static String driver = ""; privat

  • java实现简单学生管理系统项目

    本文实例为大家分享了java实现简单学生管理系统的具体代码,供大家参考,具体内容如下 功能: 1.增加学生 2.查看学生 3.根据学号修改学生信息 4.根据学号查看某一个学生信息 5.根据性别查看同性别的所有学生 6.根据学号删除某一个学生 7.按照学号升序排序(默认) 8.按照年龄降序排序 Student 类- - -学生的javabean类 package com.studentByArray.www; public class Student { //定义一个Student类{学号.姓名.

  • C++实现简单学生管理系统

    本文实例为大家分享了C++实现简单学生管理系统的具体代码,供大家参考,具体内容如下 实现学生管理,其中关键字可以自行替换.经过Visual C++6.0验证可执行成功. #include<iostream> #include"string" #include<fstream> #include <stdlib.h> #include <stdio.h> #define N 100 //N作为最大学生总数 int f=0; //f作为开关

  • Java实现简单学生管理系统

    本文实例为大家分享了Java实现简单学生管理系统的具体代码,供大家参考,具体内容如下 名为StudentManageTest的Java测试类 import java.util.Scanner;   public class StudentManageTest {     public static void main(String[] args) {         StudentManage stu = new StudentManage();         Scanner sc = new

  • C语言实现简单学生管理系统

    花了一个月的时间,学习了链表,文件,多文件编程,然后就开始写学生管理系统,比较简单的那种,实现了增,添,改,查,多种排序,输入的时候的限定,成绩分析的功能.遇到的问题很多,也尝试解决了,下面写点写学生管理系统的要注意的地方,希望对别人有帮助. 1.一定要先写好主函数的框架,然后再往上面加东西,这样说有点笼统,我把我的主函数在下面,可以借鉴下哈.我的主函数是一个while(1)的无限循环,里面一个switch选择,利用一个菜单函数,让其返回值当成switch选择的值,然后进入不同的功能主函数,其他

  • 基于Python实现简单学生管理系统

    学生信息管理系统负责编辑学生信息,供大家参考,具体内容如下 第一次发帖,下面通过python实现一个简单的学生信息管理系统 要求如下: 1.添加学生的信息 2.删除学生的信息 3.修改的信息 4.查询学生的信息 5.遍历学生的信息 6.退出系统 写法: 1.先考虑整体的框架(即搭框架),不要刚开始就考虑函数. 2.提示用户选择功能. 3.获取用户选择的功能. 4.根据用户的选择,执行相应的功能. 代码如下: # 0.学生管理系统界面 def showInfo(): print("-"*

  • Java GUI制作简单的管理系统

    本文实例为大家分享了Java GUI管理系统的具体代码,供大家参考,具体内容如下 1.先完成主页面MainUI(代码如下) package com.pag_1; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class MainUI extends JFrame implements ActionLis

  • java设计简单学生管理系统

    本文实例为大家分享了java学生成绩管理系统,供大家参考,具体内容如下 要求: 完善Student类,Student类包含学号.姓名.年级.专业.三门功课的成绩(英语.高数.计算机)的成员变量,完善成绩录入方法.设计按学号查找方法.按姓名查找方法.按单科成绩排序的方法. 设计主类,实例化包含5个学生信息的学生数组,查找某一个学生的信息并打印出来,同时打印这5个学生按某一科成绩的按高到低的排序信息(学号.姓名.成绩):输出所有学生的三门单科平均成绩. 首先先创建一个student类 使用构造方法来

随机推荐