学生学籍信息管理系统(Java + SQL)

学生学籍信息管理系统(Java + SQL)

开发环境:eclipse,SQLserve2008
开发语言:Java、SQL

第一步,数据库设计,我们设计之前先进行需求分析,我们要满足哪些基本需求呢,我们应该有两大功能模块,(1)管理员,教师和学生登录系统的模块。(2)管理员,教师和学生管理相应信息的模块。其次,我们要满足相应权限的人才能访问相应的数据和修改相应的数据。
第二步,就是开始数据库设计了,首先创建名为“学生学籍信息管理系统”的数据库,然后在数据库上建表和视图,以及录入数据,当然,这些你可以通过图形界面的方式录入,我直接上SQL语句,搞定一切,SQL语句如下。

数据库设计过程如下:
创建名为“学生学籍信息管理系统”的数据库
创建管理员表
创建教师表
创建班级表
创建学生表
创建课程表
创建成绩表
创建视图

go
create table 管理员(
管理员号 char(10) ,
登录密码 char(20)
) ; 
insert into 管理员
values('1234','123');

create table 教师表(
教师号 char(20) primary key ,
教师姓名 char(20),
教师性别 char(10),
职称 char(10),
所属学院 char(20),
登录密码 char(20)
) ;
insert into 教师表
values ('20170001','孙菁','女','副教授','计算机软件学院','123'),
       ('20170002','郑关胜','男','副教授','计算机软件学院','123'),
       ('20170003','方忠进','男','副教授','计算机软件学院','123'),
       ('20170004','左相','男','副教授','数学与统计学院','123'),
       ('20170005','何彬彬','男','讲师','应用技术学院','123');

create table 班级表(
班级号 char (20)primary key ,
班级名称 char(20),
所属学院 char(20),
班级人数 char(10),
班主任 char(20)
) ;
insert into 班级表 
values ('01','软工1班','应用技术学院','35','胡歌') ,
       ('02','软工2班','应用技术学院','35','孙菁'),
       ('03','自动化2班','应用技术学院','35','刘涛'),
       ('04','电气2班','自动化学院','35','朱伟');
   
create table 学生表(
学号 char(20) primary key,
姓名 char(20),
性别 char(10),
年龄 smallint, 
班级号 char(20),
登录密码 char(20),
foreign key (班级号) references 班级表 (班级号)
) ;
insert into 学生表 
values ('201733070046','王国栋','男',23,'02','123') ,
       ('201733070048','王祥安','男',22,'02','123') ,
       ('201733070044','孙汉成','男',22,'02','123') ,
       ('201733070054','姚壮','男',22,'02','123') ,
       ('201733070146','唐乃乔','男',23,'03','123') ,
       ('201733070246','陈向军','男',22,'04','123') ;
       
create table 课程表(
课程号 char(20) primary key,
课程名 char(20),
教师号 char(20),
foreign key(教师号) references 教师表 (教师号)
) ;
insert into 课程表
values ('01','数据库系统','20170001'),
       ('02','编译原理','20170002'),
       ('03','安卓','20170003'),
       ('04','离散数学','20170004'),
       ('05','就业指导','20170005');
create table 成绩表(
学号 char(20),
课程号 char(20),
成绩 smallint ,
foreign key (学号) references 学生表(学号),
foreign key (课程号) references 课程表(课程号)
) ;
insert into 成绩表
values ('201733070044','01',88),
       ('201733070146','01',80),
       ('201733070246','01',77),
       ('201733070046','01',92),
       ('201733070048','01',90),
       ('201733070046','02',92),
       ('201733070044','02',88),
       ('201733070146','02',98),
       ('201733070246','02',68),
       ('201733070048','02',78),
       ('201733070046','03',93),
       ('201733070046','04',94),
       ('201733070048','03',94),
       ('201733070048','04',90),
       ('201733070044','03',88),
       ('201733070146','03',89),
       ('201733070246','03',83);
go

go
create view 班级视图
as
select 学生表.学号,班级表.班级号,班级表.班级名称,班级表.所属学院,班级表.班级人数,班级表.班主任
from 学生表,班级表
where 学生表.班级号=班级表.班级号;
go

go
create view 成绩视图
as
select 成绩表.学号,学生表.姓名,成绩表.课程号,课程表.课程名,教师表.教师姓名,成绩表.成绩
from 成绩表,学生表,课程表,教师表
where 成绩表.学号=学生表.学号 and 成绩表.课程号=课程表.课程号 and 课程表.教师号=教师表.教师号   
go

go
create view 课程表1视图
as 
select 成绩表.课程号,课程表.课程名,课程表.教师号,教师表.教师姓名 
from 成绩表,课程表,教师表
where 成绩表.课程号=课程表.课程号 and 课程表.教师号=教师表.教师号
go

go
create view 课程表2视图
as 
select 成绩表.课程号,课程表.课程名,课程表.教师号,教师表.教师姓名 
from 成绩表,课程表,教师表
where 成绩表.课程号=课程表.课程号 and 课程表.教师号=教师表.教师号
go

go
create view 课程表3视图
as 
select 成绩表.课程号,课程表.课程名,课程表.教师号,教师表.教师姓名 
from 成绩表,课程表,教师表
where 成绩表.课程号=课程表.课程号 and 课程表.教师号=教师表.教师号
go

go
create view 课程表4视图
as 
select 成绩表.课程号,课程表.课程名,课程表.教师号,教师表.教师姓名 
from 成绩表,课程表,教师表
where 成绩表.课程号=课程表.课程号 and 课程表.教师号=教师表.教师号
go

go
create view 课程表5视图
as 
select 成绩表.课程号,课程表.课程名,课程表.教师号,教师表.教师姓名 
from 成绩表,课程表,教师表
where 成绩表.课程号=课程表.课程号 and 课程表.教师号=教师表.教师号
go

go
create view 学生信息表
as
select 学生表.学号,学生表.姓名,学生表.性别,学生表.年龄,学生表.班级号,班级表.班级名称,成绩表.课程号,课程表.课程名,成绩表.成绩,课程表.教师号
from 学生表,班级表,成绩表,课程表
where 学生表.班级号=班级表.班级号 and 学生表.学号=成绩表.学号 and 课程表.课程号=成绩表.课程号
go

数据库设计就这样结束了,是不是很简单呢,接下来我们在eclipse中写界面和控制程序,然后连接到数据库,就可以实现学籍信息的管理了。

当然,数据库设计虽然结束了,但是访问数据库,需要用户名和密码,我们默认的用户名为“sa”,在数据库中将其密码改成“123”,和程序中保持一致。修改方法很简单,参考这个猛戳一下

第三步,我们在连接数据库的时候需要一个驱动,如图所示,就是这个驱动,我的版本需要4.0的才可以。直接网上搜一下,下载就可以,然后在eclipse中加载就可以了,至于如何加载驱动,很简单,参考我的这篇博客中的方法就可以了,猛戳一下
在这里插入图片描述
接下来就是干活了,敲代码,首先是用户登录模块,先上效果图。默认选择的角色只能是管理员,老师和学生,输入用户ID和密登录,错误会有错误提示。
学生学籍信息管理系统(Java + SQL)_第1张图片

                       登录界面

学生学籍信息管理系统(Java + SQL)_第2张图片

            密码登录成功提示界面

学生学籍信息管理系统(Java + SQL)_第3张图片

                   管理员管理界面

学生学籍信息管理系统(Java + SQL)_第4张图片

                    教师信息管理界面

学生学籍信息管理系统(Java + SQL)_第5张图片

                学生信息管理及查询结果界面

学生学籍信息管理系统(Java + SQL)_第6张图片

                      课程信息管理界面

学生学籍信息管理系统(Java + SQL)_第7张图片

                     成绩信息管理界面

学生学籍信息管理系统(Java + SQL)_第8张图片

                   班级信息管理界面

学生学籍信息管理系统(Java + SQL)_第9张图片

              数据库老师的学生信息管理界面

学生学籍信息管理系统(Java + SQL)_第10张图片

            数据库老师的学生课程信息管理界面

在这里插入图片描述

            数据库老师的学生成绩信息管理界面   

学生学籍信息管理系统(Java + SQL)_第11张图片

            数据库老师的可以查看的班级信息界面   

学生学籍信息管理系统(Java + SQL)_第12张图片
学生学籍信息管理系统(Java + SQL)_第13张图片
时间有限,博主也是新手,还在修改Bug中,仅展示部分效果,下面开始贴源代码,由于源代码,比较多,这里面贴几个主要的供参考,需要全部源码的,去我的博客下载就可以了,链接呈上猛戳这里
登录模块的源代码

package 学生学籍信息管理系统新;

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
//import java.util.EventListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

//登录页面
/*
 * Author WangGuodong
 */

public class DengLu extends JFrame implements ActionListener,ItemListener{
	JPanel p1,p2,p3;
	Font f1,f2,f3,f4;
    /*Font f1=new Font("宋体",Font.BOLD,26);  //如果变量已经声明,则再定义必须放在方法里面(*此处出错)
    Font f2=new Font("幼圆",Font.ITALIC,20);
    Font f3=new Font("黑体",Font.BOLD,30);
    Font f4=new Font("隶书",Font.PLAIN,40);*/
    JLabel head1=new JLabel("用户登录  / ");
    JLabel head2=new JLabel("LOGIN ");
    /*head1.setFont(f1);
    head1.setForeground(Color.BLUE);
    head2.setFont(f2);
    head2.setForeground(Color.GRAY);*/
    
    //定义标签和文本框以及下拉列表
    //用户名标签和输入文本框
	JLabel usename=new JLabel("用户ID:");
	JTextField usenametext=new JTextField(10);
	
	//密码标签和密码文本框,JPasswordField对象会自动对密码进行隐藏处理
	JLabel password=new JLabel("密 码:");
	JPasswordField txtPwd=new JPasswordField(10);
	
	//添加验证码
	JLabel test=new JLabel("验证码:");
	//此处后期需要重写
	
	//角色标签和下拉列表,此处使用swing中的JComboBox类,也可使用awt中的Choice类
	JLabel role=new JLabel("角色:");
	JComboBox boxrole=new JComboBox();
	
	//创建三个选择按钮
	JButton a=new JButton("登录");
	JButton b=new JButton("重置");
	JButton c=new JButton("取消");
	
	//创建Connection和Statement对象
	//连接数据库和调用数据库
	Connection conn;
	Statement stmt;
	ResultSet rs;
	
	//定义连接字符
	String dbURL = "jdbc:sqlserver://localhost:1433;DatabaseName=学生学籍信息管理系统";
	String userName = "sa";
	String userPwd = "123";
	
	//定义变量来接收下拉列表的索引值,也可返回具体值
	int index=0;
	String index1;
	
	static int ok=1;
	static int cancel=0;
	int actionCode=0;
	
	public DengLu(){        //构造方法
		super("南京信息工程大学学分制管理系统");
		setLayout(new FlowLayout());
		p1=new JPanel();
		p2=new JPanel();
		p3=new JPanel();
		f1=new Font("宋体",Font.BOLD,30);
	    f2=new Font("幼圆",Font.ITALIC,30);
	    f3=new Font("楷书",Font.BOLD,18);
	    f4=new Font("隶书",Font.PLAIN,40);
	    
	    //设置面板1的标签
	    head1.setFont(f1);
	    head1.setForeground(Color.BLUE);
	    head2.setFont(f2);
	    head2.setForeground(Color.GRAY);
	    //p1.setBackground(new Color(255,240,240));
	    p1.setBackground(null);
	    p1.setOpaque(false);
		p1.add(head1);
	    p1.add(head2);
	    
	    //面板2为4行2列的网格布局管理器
	    p2.setLayout(new GridLayout(4,2));
	    /*usename.setFont(f3);
	    password.setFont(f3);
	    role.setFont(f3);*/
	    //下拉列表中添加数据
	    boxrole.addItem("管理员");
	    boxrole.addItem("教师");
	    boxrole.addItem("学生");
	    //p2.setBackground(new Color(240,255,240));
	    p2.setBackground(null);
	    p2.setOpaque(false);
	    boxrole.setOpaque(false);
	    usenametext.setOpaque(false);
	    txtPwd.setOpaque(false);
	    p2.add(role);
	    p2.add(boxrole);
	    p2.add(usename);
	    p2.add(usenametext);
	    p2.add(password);
	    p2.add(txtPwd);
	    
	    
	    
	    //将3个按钮添加进面板3中
	    //p3.setBackground(new Color(230,230,250));
	    p3.setBackground(null);
	    p3.setOpaque(false);//设置透明
	    a.setContentAreaFilled(false);
	    b.setContentAreaFilled(false);
	    c.setContentAreaFilled(false);
	    //setGround(a);
	    p3.add(a);
	    p3.add(b);
	    p3.add(c);
	    
	    //将三个面板添加进框架容器中
	    this.add(p1);
	    this.add(p2);
	    this.add(p3);
	    //this.add(new MyPanel());
	    //设置背景图片  
	    
		ImageIcon ic=new ImageIcon("D:\\picture\\登录界面.png");
		JLabel l=new JLabel(ic);
		l.setBounds(0,0,ic.getIconWidth(),ic.getIconHeight());
		//l.setBounds(0,0,this.getWidth(),this.getHeight());
		//JPanel ip=(JPanel)this.getContentPane();
		this.getLayeredPane().add(l,new Integer(Integer.MIN_VALUE));
		((JPanel)this.getContentPane()).setOpaque(false);//设置透明		
	    
	    //设置顶层容器的大小、位置、可见性及close功能
	    setDefaultCloseOperation(EXIT_ON_CLOSE);
	    setSize(350,300);
	    setLocationRelativeTo(null);
	    setVisible(true);
	    
	    //注册事件监听器
	    //这里的this就是本类,已经是ActionListener的实现类    --有待探究
	    boxrole.addItemListener(this);  
	    a.addActionListener(this);
	    b.addActionListener(this);
	    c.addActionListener(this);
	}
	
	public void connDB() {   //连接数据库方法
		//对于jdbc4版本,加载驱动可以选择性省略
		/*try {
			//加载驱动
			Class.forName("com.microsoft.sqlsever.jdbc.SQLSeverDriver");
			//System.out.println("加载成功");
		}catch(ClassNotFoundException e) {
			e.printStackTrace();
		}*/
		try {
			//连接数据库
			//两条语句选择性使用,Debug时此处出问题!
			//conn=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=教务系统","sa","123");
			conn=DriverManager.getConnection(dbURL,userName,userPwd);
			stmt=conn.createStatement();
		}catch(Exception e) {
			e.printStackTrace();
			//System.out.println("连接失败!");
		}
	}
	
	public void closeDB() {  //关闭数据库方法
		try {
			rs.close();
			stmt.close();
			conn.close();
		}catch(Exception e) {
			e.printStackTrace();
			//System.out.println("关闭失败!");
		}
	}
	
	//实现ItemListener的抽象方法
	//对下拉列表进行事件处理
	public void itemStateChanged(ItemEvent e) {
		//该高级事件用于监听用户的选定与否
		if(e.getStateChange()==ItemEvent.SELECTED) {  //判断下拉列表是否选定
			JComboBox j=(JComboBox)e.getSource();  //强制类型转换+获取事件源
			index=j.getSelectedIndex();
			//index1=j.getSelectedItem();
		}
	}
	
	//该方法用来确认是否在数据库中找到学号
	public boolean searchsno(String str) {
		boolean x=false;
		this.connDB();
		try {
			rs=stmt.executeQuery("select * from 学生表");
			while(rs.next()) {
				if(rs.getString("学号").trim().equals(str)) {
					x=true;
				}
			}
			//return x;
		}catch(Exception e) {
			e.printStackTrace();
		}
		return x;
	}
	
	//该方法用来确认是否在数据库中找到教师号
	public boolean searchtno(String str) {
		boolean x=false;
		this.connDB();
		try {
			rs=stmt.executeQuery("select * from 教师表");
			while(rs.next()) {
				if(rs.getString("教师号").trim().equals(str)) {  //在java中,判断字符串是否相同,一定要使用equals函数!!!!!!!!
					x=true;
				}
			}
			//return x;
		}catch(Exception e) {
			e.printStackTrace();
		}
		return x;
	}
	
	//该方法用来确认是否能在数据库中找到管理员ID
	public boolean searchmanagerno(String str) {
		boolean x=false;
		this.connDB();
		try {
			rs=stmt.executeQuery("select * from 管理员");
			while(rs.next()) {
				if(rs.getString("管理员号").trim().equals(str)) {  //在java中,判断字符串是否相同,一定要使用equals函数!!!!!!!!
					x=true;
				}
			}
			//return x;
		}catch(Exception e) {
			e.printStackTrace();
		}
		return x;
	}
	
	//实现ActionListener的抽象方法
	//对三个按钮进行事件处理
	public void actionPerformed(ActionEvent e){
		Object source=e.getSource();
		String un;
		String pw;
		boolean success= false;  //用于判断是否登录成功
		if(source==a) {  //如果事件源是“确定”按钮
			if(usenametext.getText().equals("") || txtPwd.getText().equals("")) {  //判断用户名和密码是否为空
				//JOptionPane类用作提示框,常见方法:1.showMessageDialog; 2.showOptionDialog
				JOptionPane.showMessageDialog(null,"登录名和密码不能为空!");
			}else {
				//用户名和密码均不为空,进行连接数据库
				this.connDB();
				//这里先连接数据库,再执行数据库操作步骤,等效为将一个try{}catch{}分解成几个,效果一样!
				try {
					if(index==0) {  //管理员登录
						//trim()方法:从当前 String 对象移除所有前导空白字符和尾部空白字符
						
						if(!searchmanagerno(usenametext.getText().trim())) {
							JOptionPane.showMessageDialog(null,"对不起,此用户不存在!请重新登录!");
							usenametext.setText("");
							txtPwd.setText("");
						}else {
							rs=stmt.executeQuery("select * from 管理员  where 管理员号="+ usenametext.getText().trim());
							while(rs.next()) {
								pw=rs.getString(2).trim();
								if(txtPwd.getText().equals(pw)) {
									JOptionPane.showMessageDialog(null,"管理员登录成功!");
									this.setVisible(false);
									new GLFrame();  //进入管理员界面
								}else {
									JOptionPane.showMessageDialog(null,"密码错误!请重试");
									txtPwd.setText("");
								}
							}
						}
					}
				
					if(index==1) {  //教师登录
						if(!searchtno(usenametext.getText().trim())) {
							JOptionPane.showMessageDialog(null,"对不起,此用户不存在!请重新登录!");
							usenametext.setText("");
							txtPwd.setText("");
						}else {
							rs=stmt.executeQuery("select * from 教师表  where 教师号="+ usenametext.getText().trim());
							while(rs.next()) {
								pw=rs.getString("登录密码").trim();
								if(txtPwd.getText().equals(pw)) {
									JOptionPane.showMessageDialog(null,"教师登录成功!");
									this.setVisible(false);
									new Teacher(usenametext.getText());  //进入教师界面
								}
								else {
									JOptionPane.showMessageDialog(null,"密码错误!请重试");
									txtPwd.setText("");
								}
							}
						}
					}
					if(index==2) {  //学生登录
						if(!searchsno(usenametext.getText().trim())) {
							JOptionPane.showMessageDialog(null,"对不起,此用户不存在!请重新登录!");
							usenametext.setText("");
							txtPwd.setText("");
						}else {
							rs=stmt.executeQuery("select * from 学生表  where 学号="+ usenametext.getText().trim());
							while(rs.next()) {
								pw=rs.getString("登录密码").trim();
								if(txtPwd.getText().equals(pw)) {
									JOptionPane.showMessageDialog(null,"学生登录成功!");
									this.setVisible(false);
									new Student(usenametext.getText());  //进入学生界面
								}
								else {
									JOptionPane.showMessageDialog(null,"密码错误!请重试");
									txtPwd.setText("");
								}
							}
						}
					}
				}catch(Exception e1) {
					e1.printStackTrace();
					//System.out.println("连接失败!");
				}
				closeDB();
			}
		}
		if(source==b) {   //如果事件源是“重置”按钮
			usenametext.setText("");    
			txtPwd.setText("");
		}
		if(source==c) {   //如果事件源是“取消”按钮
		    //System.exit(0);
			this.dispose();
			new DengLu();
		}
	}
	
	public static void main(String[] args){
		new DengLu();
	}
}


教师模块的源代码

package 学生学籍信息管理系统新;
import java.awt.Button;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
/*
 * Author WangGuodong
 */
public class Teacher extends JFrame implements ActionListener{
	JLabel l=new JLabel("--教师页面--");
	//定义面板容器
	JPanel p1=new JPanel();
	JPanel p2=new JPanel();
	//设置字体类型
	Font f1=new Font("宋体",Font.BOLD,30);
    Font f2=new Font("幼圆",Font.ITALIC,30);
    Font f3=new Font("楷体",Font.BOLD,17);
    Font f4=new Font("隶书",Font.PLAIN,40);
	
	//设置6个按钮,以便管理员操作
	JButton btnTmg=new JButton("个人信息管理");
	JButton btnSsh=new JButton("学生信息查询");
	JButton btnCsh=new JButton("课程信息查询");
	JButton btnSCmg=new JButton("成绩信息管理");
	JButton btnCSsh=new JButton("班级信息查询");
	JButton btnEXIT=new JButton("退出");
	
	String tno;
	String dbURL="jdbc:sqlserver://localhost:1433;DatabaseName=学生学籍信息管理系统";
	String useName="sa";
	String usePwd="123";
	
	Connection conn;
	Statement stmt;
	ResultSet rs;
	
	Object[][] arr;
	String tpwd;
	JScrollPane scroll1,scroll2,scroll3,scroll4,scroll5,scroll6;
	JTable tb1,tb2,tb3,tb4,tb5,tb6; 
	int row;
	
	public Teacher(String str) {   //构造方法
		super("教师页面");
		setLayout(new FlowLayout());
		//设置标签的颜色
	    l.setFont(f1);
	    l.setForeground(Color.blue);
	    //设置按钮字体和颜色
	    btnTmg.setFont(f3);
	    btnTmg.setContentAreaFilled(false);
	    //btnTM.setBackground(Color.blue);
	    btnSsh.setFont(f3);
	    btnSsh.setContentAreaFilled(false);
	    btnCsh.setFont(f3);
	    btnCsh.setContentAreaFilled(false);
	    btnSCmg.setFont(f3);
	    btnSCmg.setContentAreaFilled(false);
	    btnCSsh.setFont(f3);
	    btnCSsh.setContentAreaFilled(false);
	    btnEXIT.setFont(f3);
	    btnEXIT.setContentAreaFilled(false);
	    
	    this.tno=str;
	    
		p1.add(l);	
		p1.setOpaque(false);
		p2.setOpaque(false);
		p2.setLayout(new GridLayout(3,2,10,10));
		p2.add(btnTmg);
		p2.add(btnSsh);
		p2.add(btnCsh);
		p2.add(btnSCmg);
		p2.add(btnCSsh);
		p2.add(btnEXIT);
		 
		//布局管理器
		this.add(p1);
		this.add(p2);
		
		ImageIcon ic=new ImageIcon("C:\\Users\\YXS\\eclipse-workspace\\edu-a-s\\src\\edu\\yxs\\sqldemo\\6.jpg");
		JLabel l=new JLabel(ic);
		l.setBounds(0,0,ic.getIconWidth(),ic.getIconHeight());
		//l.setBounds(0,0,this.getWidth(),this.getHeight());
		//JPanel ip=(JPanel)this.getContentPane();
		this.getLayeredPane().add(l,new Integer(Integer.MIN_VALUE));
		((JPanel)this.getContentPane()).setOpaque(false);//设置透明
		
		//设置顶层容器的大小、位置、可见性及close功能
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(350,300);
		setLocationRelativeTo(null);
		setVisible(true);
		
		this.connDB();
		
		btnTmg.addActionListener(this);
		btnSsh.addActionListener(this);
		btnCsh.addActionListener(this);
		btnSCmg.addActionListener(this);
		btnCSsh.addActionListener(this);
		btnEXIT.addActionListener(this);
	}
	
	public void connDB() {
		try {
			conn=DriverManager.getConnection(dbURL,useName,usePwd);
			stmt=conn.createStatement();
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
	
	public void closeDB() {
		try {
			rs.close();
			stmt.close();
			conn.close();
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
	
	public void tmg(String str) {   //个人信息管理方法
		JFrame f=new JFrame("个人信息");
		//JPanel p=new JPanel();
		f.setLayout(new FlowLayout());
		f.setDefaultCloseOperation(EXIT_ON_CLOSE);
		f.setSize(500,150);
		f.setVisible(true);
		f.setLocationRelativeTo(null);
		Button btnchange=new Button("修改密码");
		Button btnrt=new Button("返回");
		btnchange.setFont(f3);
		btnchange.setBackground(new Color(131,175,155));
		btnrt.setFont(f3);
		btnrt.setBackground(new Color(131,175,155));
		//btnrt.setSize(20,10);

		this.connDB();
		arr=new Object[1][7];
		try {
			rs=stmt.executeQuery("select * from 教师表  where 教师号="+str);
			while(rs.next()) {
				arr[0][0]=rs.getString("教师号");
				arr[0][1]=rs.getString("姓名");
				arr[0][2]=rs.getString("性别");
				arr[0][3]=rs.getString("学历");
				arr[0][4]=rs.getString("职称");
				arr[0][5]=rs.getString("所属学院");
				arr[0][6]=rs.getString("登录密码");
			}
		}catch(Exception e){
			e.printStackTrace();
		}
		String[] list= {"教师号","姓名","性别","学历","职称","所属学院","登录密码"};
		tb1=new JTable(arr,list); //创建表格
		scroll1=new JScrollPane(tb1);
		//f.add(btnrt,BorderLayout.NORTH);
		f.add(btnchange);
		f.add(btnrt);
		f.add(scroll1);  //此处有个小bug,只有添加进滚轮面板,才能将头部名称显示出来
		//f1.add(btnrt); 
		btnrt.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e) {
				f.dispose();
				new Teacher(tno);
			}
		});
		btnchange.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e) {
				f.dispose();
				change();
			}
		});
	}
	
	public void change() {  //创建修改密码页面,新窗口用于修改密码
		this.connDB();
		JFrame f=new JFrame("修改密码");
		f.setLayout(new FlowLayout());
		JPanel p=new JPanel();
		JPanel p1=new JPanel();
		p.setLayout(new GridLayout(3,2));
		JLabel btn1=new JLabel("初始密码:");
		btn1.setFont(f3);
		JTextField tf1=new JTextField(10);
		JLabel btn2=new JLabel("修改密码:");
		btn2.setFont(f3);
		JTextField tf2=new JTextField(10);
		Button ok=new Button("确定");
		ok.setBackground(new Color(131,175,155));
		Button cancel=new Button("取消");
		cancel.setBackground(new Color(131,175,155));
		p.add(btn1);
		p.add(tf1);
		p.add(btn2);
		p.add(tf2);
		p1.add(ok);
		p1.add(cancel);
		f.add(p);
		f.add(p1);
		
		f.setDefaultCloseOperation(EXIT_ON_CLOSE);
		f.setLocation(530,300);
		//f.setLocationRelativeTo(null);
		f.setSize(300,150);
		f.setVisible(true);
		
		ok.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e) {
				try {   //获取初始密码
					rs=stmt.executeQuery("select * from 教师表 where 教师号="+tno);
					while(rs.next()) {
						tpwd=rs.getString("登录密码").trim();
					}
				}catch(Exception e1) {
					e1.printStackTrace();
				}
				
				if(tf2.getText().equals("") || tf1.getText().equals("")) {
					JOptionPane.showMessageDialog(null, "密码不能为空!请重新修改!");
				}else{
					if(!tpwd.equals(tf1.getText().trim())) {     //spwd.equals(tf1.getText().trim())
					    JOptionPane.showMessageDialog(null,"初始密码错误,请重新输入密码!");  //"原密码是"+spwd+"输入密码是"+tf1.getText();
					    tf1.setText("");
					    tf2.setText("");
					}else {
						try {
							stmt.executeUpdate("update 教师表 set 登录密码 ="+tf2.getText().trim()+"where 教师号="+tno);
						}catch(Exception e1) {
							e1.printStackTrace();
						}
						JOptionPane.showMessageDialog(null,"密码修改成功!请重新登录!");
						f.dispose();
						new DengLu();
					}
					
				}
			}
		});
		cancel.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e) {
				f.dispose();
				new Teacher(tno);
			}
		});
	}
	
	public void ssh(String str) {  //学生信息查询
		JFrame f=new JFrame("学生信息");
		//JPanel p=new JPanel();
		f.setLayout(new FlowLayout());
		f.setDefaultCloseOperation(EXIT_ON_CLOSE);
		f.setSize(500,150);
		f.setVisible(true);
		f.setLocationRelativeTo(null);
		Button btnrt=new Button("返回");
		btnrt.setFont(f3);
		btnrt.setBackground(new Color(131,175,155));
		//btnrt.setSize(20,10);

		this.connDB();
		int i=0,j=0;
		ArrayList al=new ArrayList();
		try {
			rs=stmt.executeQuery("select * from 学生信息表  where 教师号="+str);
			while(rs.next()) {
				al.add(rs.getString("学号"));
				al.add(rs.getString("姓名"));
				al.add(rs.getString("性别"));
				al.add(rs.getInt("年龄"));
				al.add(rs.getString("班级名称"));
				al.add(rs.getString("课程名"));
				i++;
			}
		}catch(Exception e){
			e.printStackTrace();
		}
		
		arr=new Object[i][6];
		try {
			rs=stmt.executeQuery("select * from 学生信息表  where 教师号="+str);
			while(rs.next()) {
				arr[j][0]=rs.getString("学号");
				arr[j][1]=rs.getString("姓名");
				arr[j][2]=rs.getString("性别");
				arr[j][3]=rs.getString("年龄");
				arr[j][4]=rs.getString("班级名称");
				arr[j][5]=rs.getString("课程名");
				j++;
			}
		}catch(Exception e){
			e.printStackTrace();
		}
		String[] list= {"学号","姓名","性别","年龄","班级名称","课程名"};
		tb2=new JTable(arr,list); //创建表格
		scroll2=new JScrollPane(tb2);
		//f.add(btnrt,BorderLayout.NORTH);
		f.add(btnrt);
		f.add(scroll2);  //此处有个小bug,只有添加进滚轮面板,才能将头部名称显示出来
		//f1.add(btnrt); 
		btnrt.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e) {
				f.dispose();
				new Teacher(tno);
			}
		});
	}
	
	public void csh(String str) {  //课程信息查询
		JFrame f=new JFrame("课程信息");
		//JPanel p=new JPanel();
		f.setLayout(new FlowLayout());
		f.setDefaultCloseOperation(EXIT_ON_CLOSE);
		f.setSize(500,150);
		f.setVisible(true);
		f.setLocationRelativeTo(null);
		Button btnrt=new Button("返回");
		btnrt.setFont(f3);
		btnrt.setBackground(new Color(131,175,155));
		//btnrt.setSize(20,10);

		this.connDB();
		int i=0,j=0;
		ArrayList al=new ArrayList();
		try {
			rs=stmt.executeQuery("select  distinct 班级号  ,班级名称,课程号,课程名  from 学生信息表  where 教师号="+str);
			while(rs.next()) {
				al.add(rs.getString("班级号"));
				al.add(rs.getString("班级名称"));
				al.add(rs.getString("课程号"));
				al.add(rs.getString("课程名"));
				i++;
			}
		}catch(Exception e){
			e.printStackTrace();
		}
		
		arr=new Object[i][4];
		try {
			rs=stmt.executeQuery("select  distinct 班级号  ,班级名称,课程号,课程名  from 学生信息表  where 教师号="+str);
			while(rs.next()) {
				arr[j][0]=rs.getString("班级号");
				arr[j][1]=rs.getString("班级名称");
				arr[j][2]=rs.getString("课程号");
				arr[j][3]=rs.getString("课程名");
				j++;
			}
		}catch(Exception e){
			e.printStackTrace();
		}
		String[] list= {"班级号","班级名称","课程号","课程名"};
		tb3=new JTable(arr,list); //创建表格
		scroll3=new JScrollPane(tb3);
		//f.add(btnrt,BorderLayout.NORTH);
		f.add(btnrt);
		f.add(scroll3);  //此处有个小bug,只有添加进滚轮面板,才能将头部名称显示出来
		//f1.add(btnrt); 
		btnrt.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e) {
				f.dispose();
				new Teacher(tno);
			}
		});
	}
	
	public void scmg(String str) {  //成绩信息管理
		JFrame f=new JFrame("学生成绩信息");
		//JPanel p=new JPanel();
		f.setLayout(new FlowLayout());
		f.setDefaultCloseOperation(EXIT_ON_CLOSE);
		f.setSize(500,150);
		f.setVisible(true);
		f.setLocationRelativeTo(null);
		Button btnrt=new Button("返回");
		Button btnchange=new Button("修改成绩");
		btnchange.setFont(f3);
		btnchange.setBackground(new Color(131,175,155));
		btnrt.setFont(f3);
		btnrt.setBackground(new Color(131,175,155));
		//btnrt.setSize(20,10);

		this.connDB();
		int i=0,j=0;
		ArrayList al=new ArrayList();
		try {
			rs=stmt.executeQuery("select * from 学生信息表  where 教师号="+str);
			while(rs.next()) {
				al.add(rs.getString("学号"));
				al.add(rs.getString("姓名"));
				al.add(rs.getString("性别"));
				al.add(rs.getInt("年龄"));
				al.add(rs.getString("班级名称"));
				al.add(rs.getString("课程名"));
				al.add(rs.getString("成绩"));
				i++;
			}
		}catch(Exception e){
			e.printStackTrace();
		}
		
		arr=new Object[i][7];
		try {
			rs=stmt.executeQuery("select * from 学生信息表  where 教师号="+str);
			while(rs.next()) {
				arr[j][0]=rs.getString("学号");
				arr[j][1]=rs.getString("姓名");
				arr[j][2]=rs.getString("性别");
				arr[j][3]=rs.getString("年龄");
				arr[j][4]=rs.getString("班级名称");
				arr[j][5]=rs.getString("课程名");
				arr[j][6]=rs.getString("成绩");
				j++;
			}
		}catch(Exception e){
			e.printStackTrace();
		}
		String[] list= {"学号","姓名","性别","年龄","班级名称","课程名","成绩"};
		tb4=new JTable(arr,list); //创建表格
		scroll4=new JScrollPane(tb4);
		//f.add(btnrt,BorderLayout.NORTH);
		f.add(btnchange);
		f.add(btnrt);
		f.add(scroll4);  //此处有个小bug,只有添加进滚轮面板,才能将头部名称显示出来
		//f1.add(btnrt); 
		btnrt.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e) {
				f.dispose();
				new Teacher(tno);
			}
		});
		btnchange.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e) {
				f.dispose();
				scchange();
			}
		});
	}
	
	public void scchange() {  //修改成绩页面
		JFrame f=new JFrame("修改成绩");
		f.setLayout(new FlowLayout());
		JLabel l=new JLabel("输入班级号");
		JTextField tf=new JTextField(10);
		JButton jb1=new JButton("确定");
		jb1.setFont(f3);
		jb1.setBackground(new Color(131,175,155));
		JButton jb2=new JButton("返回");
		jb2.setFont(f3);
		jb2.setBackground(new Color(131,175,155));
		
		f.add(l);
		f.add(tf);
		f.add(jb1);
		f.add(jb2);
		
		jb1.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e) {
				f.dispose();
				new SCmg(tno,tf.getText());  //重新刷新成绩页面,为班级成绩
			}
		});
		jb2.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e) {
				f.dispose();
				scmg(tno);  //取消按钮,重新显示页面
			}
		});
		
		f.setSize(200,150);
		f.setLocationRelativeTo(null);
		f.setDefaultCloseOperation(EXIT_ON_CLOSE);
		f.setVisible(true);
	}
	
	
	
	public void cssh(String str) {  //班级信息查询
		JFrame f=new JFrame("班级信息");
		//JPanel p=new JPanel();
		f.setLayout(new FlowLayout());
		f.setDefaultCloseOperation(EXIT_ON_CLOSE);
		f.setSize(500,150);
		f.setVisible(true);
		f.setLocationRelativeTo(null);
		Button btnrt=new Button("返回");
		btnrt.setFont(f3);
		btnrt.setBackground(new Color(131,175,155));
		//btnrt.setSize(20,10);

		this.connDB();
		int i=0,j=0;
		ArrayList al=new ArrayList();
		try {
			rs=stmt.executeQuery("select  distinct 学生信息表.班级号  ,班级表.班级名称,班级表.所属学院,班级表.班级人数,班级表.班主任 from 班级表,学生信息表  where 学生信息表.班级号=班级表.班级号 and 教师号="+str);
			while(rs.next()) {
				al.add(rs.getString("班级号"));
				al.add(rs.getString("班级名称"));
				al.add(rs.getString("所属学院"));
				al.add(rs.getInt("班级人数"));
				al.add(rs.getString("班主任"));
				i++;
			}
		}catch(Exception e){
			e.printStackTrace();
		}
		
		arr=new Object[i][5];
		try {
			rs=stmt.executeQuery("select  distinct 学生信息表.班级号  ,班级表.班级名称,班级表.所属学院,班级表.班级人数,班级表.班主任 from 班级表,学生信息表  where 学生信息表.班级号=班级表.班级号 and 教师号="+str);
			while(rs.next()) {
				arr[j][0]=rs.getString("班级号");
				arr[j][1]=rs.getString("班级名称");
				arr[j][2]=rs.getString("所属学院");
				arr[j][3]=rs.getInt("班级人数");
				arr[j][4]=rs.getString("班主任");
				j++;
			}
		}catch(Exception e){
			e.printStackTrace();
		}
		String[] list= {"班级号","班级名称","所属学院","班级人数","班主任"};
		tb6=new JTable(arr,list); //创建表格
		scroll6=new JScrollPane(tb6);
		//f.add(btnrt,BorderLayout.NORTH);
		f.add(btnrt);
		f.add(scroll6);  //此处有个小bug,只有添加进滚轮面板,才能将头部名称显示出来
		//f1.add(btnrt); 
		btnrt.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e) {
				f.dispose();
				new Teacher(tno);
			}
		});
	}
	
	public void actionPerformed(ActionEvent e) {
		//按钮为“教师信息管理”,跳转页面
		if(e.getSource().equals(btnTmg)) {
			this.dispose();
			this.tmg(tno);
		}
		//按钮为“学生信息管理”,跳转页面
		if(e.getSource().equals(btnSsh)) {
			//new SM().display();
			this.dispose();
			this.ssh(tno);
		}
		//按钮为“课程信息管理”,跳转页面
		if(e.getSource().equals(btnCsh)) {
			this.dispose();
			this.csh(tno);
		}
		//按钮为“成绩信息管理”,跳转页面
		if(e.getSource().equals(btnSCmg)) {
			this.dispose();
			this.scmg(tno);
		}
		//按钮为“班级信息管理”,跳转页面
		if(e.getSource().equals(btnCSsh)) {
			this.dispose();
			this.cssh(tno);
		}
		//按钮为“退出管理系统”,程序退出
		if(e.getSource().equals(btnEXIT)) {
        	//System.exit(0);
			this.dispose();
			new DengLu();
		}
	}

	public static void main(String[] args) {
		
		new Teacher("20050002");
	}
}



学生模块的源代码

package 学生学籍信息管理系统新;

import java.awt.Button;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;

public class Student extends JFrame implements ActionListener{

	///////////////注意////////////////
	//在类里面只有成员变量和方法,切忌在成员变量里直接定义
	//“管理员”标签
	JLabel l=new JLabel("--学生页面--");
	//定义面板容器
	JPanel p1=new JPanel();
	JPanel p2=new JPanel();
	//设置字体类型
	Font f1=new Font("宋体",Font.BOLD,30);
    Font f2=new Font("幼圆",Font.ITALIC,20);
    Font f3=new Font("楷体",Font.BOLD,15);
    Font f4=new Font("隶书",Font.PLAIN,18);
	
	//设置6个按钮,以便管理员操作
	Button btnSelf=new Button("个人信息管理");
	Button btnSCsh=new Button("成绩信息查询");
	Button btnCsh=new Button("课程信息查询");
	Button btnCSsh=new Button("班级信息查询");
	Button btnEXIT=new Button("退出");
	/*
 * Author WangGuodong
 */
	//
	String dbURL="jdbc:sqlserver://localhost:1433;databaseName=学生学籍信息管理系统";
	String userName="sa";
	String userPwd="123";
	
	//
	Connection conn;
	Statement stmt;
	ResultSet rs;
	//
	Object[][] arr;
	String sno;
	String spwd;
	JScrollPane scroll1;
	JScrollPane jsp1;
	JTable stable1;
	JTable tb1;
	public void connDB() {
		try {
			conn=DriverManager.getConnection(dbURL,userName,userPwd);
			stmt=conn.createStatement();
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
	
	public void closeDB() {
		try {
			rs.close();
			stmt.close();
			conn.close();
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
	
	public Student(String str) {   //构造方法
		super("学生页面");
		setLayout(new FlowLayout());
		//设置标签的颜色
	    l.setFont(f1);
	    l.setForeground(Color.blue);
	    //设置按钮字体和颜色
	    btnSelf.setFont(f2);
	    btnSelf.setBackground(new Color(0,255,255));
	    btnSCsh.setFont(f3);
	    btnSCsh.setBackground(new Color(255,160,122));
	    btnCsh.setFont(f4);
	    btnCsh.setBackground(new Color(30,144,255));
	    btnCSsh.setFont(f3);
	    btnCSsh.setBackground(new Color(0,255,0));
	    btnEXIT.setFont(f2);
	    btnEXIT.setBackground(new Color(220,20,60));
	    
		p1.add(l);
		p1.setOpaque(false);
		p2.setLayout(new GridLayout(4,2,10,10));
		p2.setOpaque(false);
		p2.add(btnSelf);
		p2.add(btnSCsh);
		p2.add(btnCsh);
		p2.add(btnCSsh);
		p2.add(btnEXIT);
		
		this.connDB();
		this.sno=str;
		//布局管理器
		this.add(p1);
		this.add(p2);
		
		ImageIcon ic=new ImageIcon("C:\\Users\\YXS\\eclipse-workspace\\edu-a-s\\src\\edu\\yxs\\sqldemo\\1.jpg");
		JLabel l=new JLabel(ic);
		l.setBounds(0,0,ic.getIconWidth(),ic.getIconHeight());
		//l.setBounds(0,0,this.getWidth(),this.getHeight());
		//JPanel ip=(JPanel)this.getContentPane();
		this.getLayeredPane().add(l,new Integer(Integer.MIN_VALUE));
		((JPanel)this.getContentPane()).setOpaque(false);//设置透明
		
		//设置顶层容器的大小、位置、可见性及close功能
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(350,300);
		setLocationRelativeTo(null);
		setVisible(true);
		
		btnSelf.addActionListener(this);
		btnSCsh.addActionListener(this);
		btnCsh.addActionListener(this);
		btnCSsh.addActionListener(this);
		btnEXIT.addActionListener(this);
	}
	
	public void cssearch(String str) {   //班级查询方法
		JFrame f=new JFrame("班级信息页面");
		//JPanel p=new JPanel();
		f.setLayout(new FlowLayout());
		f.setDefaultCloseOperation(EXIT_ON_CLOSE);
		f.setSize(500,150);
		f.setVisible(true);
		f.setLocationRelativeTo(null);
		Button btnrt=new Button("返回");
		btnrt.setFont(f3);
		btnrt.setBackground(new Color(131,175,155));
		//btnrt.setSize(20,10);

		this.connDB();
		arr=new Object[1][6];
		try {
			rs=stmt.executeQuery("select * from 班级表1  where 学号="+str);
			while(rs.next()) {
				arr[0][0]=rs.getString("学号");
				arr[0][1]=rs.getString("班级号");
    			arr[0][2]=rs.getString("班级名称");
    			arr[0][3]=rs.getString("所属学院");
    			arr[0][4]=rs.getString("班级人数");
    			arr[0][5]=rs.getString("班主任");
			}
		}catch(Exception e){
			e.printStackTrace();
		}
		String[] list={"学号","班级号","班级名称","所属学院","班级人数","班主任"};
		tb1=new JTable(arr,list); //创建表格
		jsp1=new JScrollPane(tb1);
		
		f.add(btnrt);
		f.add(jsp1);  //此处有个小bug,只有添加进滚轮面板,才能将头部名称显示出来
		
		btnrt.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e) {
				f.dispose();
				new Student(sno);
			}
		});
	}
	
	public void csearch(String str) {   //课程查询方法
		JFrame f=new JFrame("课程信息页面");
		//JPanel p=new JPanel();
		f.setLayout(new FlowLayout());
		f.setDefaultCloseOperation(EXIT_ON_CLOSE);
		f.setSize(500,150);
		f.setVisible(true);
		f.setLocationRelativeTo(null);
		Button btnrt=new Button("返回");
		btnrt.setFont(f3);
		btnrt.setBackground(new Color(131,175,155));
		//btnrt.setSize(20,10);
        
		int i=0,j=0;
		ArrayList ar=new ArrayList();
		this.connDB();
		try {
			rs=stmt.executeQuery("select * from 课程表2 where 学号="+str);
			while(rs.next()){
				ar.add(rs.getString("学号"));
				ar.add(rs.getString("课程号"));
				ar.add(rs.getString("课程名"));
				ar.add(rs.getString("教师号"));
				ar.add(rs.getString("教师姓名"));
				j++;
			}
		}catch(Exception e) {
			e.printStackTrace();
		}
		arr=new Object[j][5];
		try {
			rs=stmt.executeQuery("select * from 课程表2  where 学号="+str);
			while(rs.next()) {
				arr[i][0]=rs.getString("学号");
				arr[i][1]=rs.getString("课程号");
    			arr[i][2]=rs.getString("课程名");
    			arr[i][3]=rs.getString("教师号");
    			arr[i][4]=rs.getString("教师姓名");
    			i++;
			}
		}catch(Exception e){
			e.printStackTrace();
		}
		String[] list={"学号","课程号","课程名","教师号","教师姓名"};
		tb1=new JTable(arr,list); //创建表格
		jsp1=new JScrollPane(tb1);
		//f.add(btnrt,BorderLayout.NORTH);
		f.add(btnrt);
		f.add(jsp1);  //此处有个小bug,只有添加进滚轮面板,才能将头部名称显示出来
		//f1.add(btnrt); 
		btnrt.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e) {
				f.dispose();
				new Student(sno);
			}
		});
	}
	
	public void scsearch(String str) {  //查询成绩页面
		int i=0,j=0;
		JFrame f=new JFrame("成绩信息页面");
		//JPanel p=new JPanel();
		f.setLayout(new FlowLayout());
		f.setDefaultCloseOperation(EXIT_ON_CLOSE);
		f.setSize(500,200);
		f.setVisible(true);
		f.setLocationRelativeTo(null);
		Button btnrt=new Button("返回");
		btnrt.setFont(f3);
		btnrt.setBackground(new Color(131,175,155));
		//btnrt.setSize(20,10);

		this.connDB();
		ArrayList list=new ArrayList();
    	try {
    		rs=stmt.executeQuery("select * from 成绩表1 ");
    		while(rs.next()) {
    			list.add(rs.getString("学号"));
    			list.add(rs.getString("姓名"));
    			list.add(rs.getString("课程号"));
    			list.add(rs.getString("课程名"));
    			list.add(rs.getString("教师姓名"));
    			list.add(rs.getString("成绩"));
    			i++;
    		}
    	}catch(Exception e) {
    		e.printStackTrace();
    	}
		arr=new Object[i][6];
		try {
			rs=stmt.executeQuery("select * from 成绩表1  where 学号="+str+"order by 课程号");
			while(rs.next()) {
				arr[j][0]=rs.getString("学号");
    			arr[j][1]=rs.getString("姓名");
    			arr[j][2]=rs.getString("课程号");
    			arr[j][3]=rs.getString("课程名");
    			arr[j][4]=rs.getString("教师姓名");
    			arr[j][5]=rs.getString("成绩");
    			j++;
			}
		}catch(Exception e){
			e.printStackTrace();
		}
		String[] listname={"学号","姓名","课程号","课程名","教师姓名","成绩"};
		tb1=new JTable(arr,listname); //创建表格
		jsp1=new JScrollPane(tb1);
		//f.add(btnrt,BorderLayout.NORTH);
		f.add(btnrt);
		f.add(jsp1);  //此处有个小bug,只有添加进滚轮面板,才能将头部名称显示出来
		//f1.add(btnrt); 
		btnrt.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e) {
				f.dispose();
				new Student(str);
			}
		});   	
    }
	
	public void display(String str) {   //用来显示个人信息
		JFrame f1=new JFrame("个人信息");
		f1.setLayout(new FlowLayout());
		f1.setSize(500,150);
		f1.setVisible(true);
		f1.setLocationRelativeTo(null);
		Button btnchange=new Button("修改密码");
		Button btnrt=new Button("返回");
		btnchange.setFont(f3);
		btnchange.setBackground(new Color(131,175,155));
		btnrt.setFont(f3);
		btnrt.setBackground(new Color(131,175,155));

		this.connDB();
		arr=new Object[1][6];
		try {
			rs=stmt.executeQuery("select * from 学生表  where 学号="+str);
			while(rs.next()) {
				arr[0][0]=rs.getString("学号");
				arr[0][1]=rs.getString("姓名");
				arr[0][2]=rs.getString("性别");
				arr[0][3]=rs.getInt("年龄");
				arr[0][4]=rs.getString("班级号");
				arr[0][5]=rs.getString("密码");
			}
		}catch(Exception e){
			e.printStackTrace();
		}
		String[] columnNames= {"学号","姓名","性别","年龄","班级号","密码"};
		stable1=new JTable(arr,columnNames); //创建表格
		scroll1=new JScrollPane(stable1);
		f1.add(btnchange);
		f1.add(btnrt);
		f1.add(scroll1);  //此处有个小bug,只有添加进滚轮面板,才能将头部名称显示出来
		//f1.add(btnrt);
		btnrt.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e) {
				f1.dispose();
				new Student(sno);
			}
		});
		btnchange.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e) {
				f1.dispose();
				change();
			}
		});
	}
	
	public void change() {  //创建修改密码页面,新窗口用于修改密码
		this.connDB();
		JFrame f=new JFrame("修改密码");
		f.setLayout(new FlowLayout());
		JPanel p=new JPanel();
		JPanel p1=new JPanel();
		p.setLayout(new GridLayout(3,2));
		JLabel btn1=new JLabel("初始密码:");
		btn1.setFont(f3);
		JTextField tf1=new JTextField(10);
		JLabel btn2=new JLabel("修改密码:");
		btn2.setFont(f3);
		JTextField tf2=new JTextField(10);
		Button ok=new Button("确定");
		ok.setBackground(new Color(131,175,155));
		Button cancel=new Button("取消");
		cancel.setBackground(new Color(131,175,155));
		p.add(btn1);
		p.add(tf1);
		p.add(btn2);
		p.add(tf2);
		p1.add(ok);
		p1.add(cancel);
		f.add(p);
		f.add(p1);
		
		f.setDefaultCloseOperation(EXIT_ON_CLOSE);
		f.setLocation(530,300);
		//f.setLocationRelativeTo(null);
		f.setSize(300,150);
		f.setVisible(true);
		
		ok.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e) {
				try {   //获取初始密码
					rs=stmt.executeQuery("select * from 学生表 where 学号="+sno);
					while(rs.next()) {
						spwd=rs.getString("密码").trim();  //!!!对于数据库中传回来的值一定要用trim();因为后面会有多余的空格!!!
						/*bug:数据库中数据会有空格,mmp,记于12/10/凌晨1:56,耻!*/
						//spwd="123";
					}
				}catch(Exception e1) {
					e1.printStackTrace();
				}
				
				if(tf1.getText().equals("") || tf2.getText().equals("")) {
					JOptionPane.showMessageDialog(null, "密码不能为空!请重新修改!");
				}else {
					if(!spwd.equals(tf1.getText())) {     //spwd.equals(tf1.getText().trim())
					    JOptionPane.showMessageDialog(null,"初始密码错误,请重新输入密码!");  //"原密码是"+spwd+"输入密码是"+tf1.getText();
					    tf1.setText("");
					    tf2.setText("");
				    }else {
					    try {
						    stmt.executeUpdate("update 学生表 set 密码 ="+"'"+tf2.getText().trim()+"'"+"where 学号="+sno);
					    }catch(Exception e1) {
						    e1.printStackTrace();
					    }
					    JOptionPane.showMessageDialog(null,"密码修改成功!请重新登录!");
					    f.dispose();
					    new DengLu();
				    }
			    }
			}
		});
		cancel.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e) {
				f.dispose();
				new Student(sno);
			}
		});
	}
	
	public void actionPerformed(ActionEvent e) {
		//按钮为“个人信息修改”,跳转页面
		if(e.getSource().equals(btnSelf)) {
			this.dispose();
			this.display(sno);
		}
		//按钮为“成绩信息查询”,跳转页面
		if(e.getSource().equals(btnSCsh)) {
			//new SM().display();
			this.dispose();
			this.scsearch(sno);
		}
		//按钮为“课程信息查询”,跳转页面
		if(e.getSource().equals(btnCsh)) {
			this.dispose();
			this.csearch(sno);
		}
		//按钮为“班级信息查询”,跳转页面
		if(e.getSource().equals(btnCSsh)) {
			this.dispose();
			this.cssearch(sno);
		}
		//按钮为“退出管理系统”,程序退出
		if(e.getSource().equals(btnEXIT)) {
        	//System.exit(0);
			this.dispose();
			new DengLu();
		}
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new Student("1610421084");
	}


管理员模块的源代码

package 学生学籍信息管理系统新;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class GLFrame extends JFrame implements ActionListener{

	///////////////注意////////////////
	//在类里面只有成员变量和方法,切忌在成员变量里直接定义
	//“管理员”标签
	JLabel l=new JLabel("--管理员--");
	//定义面板容器
	JPanel p1=new JPanel();
	JPanel p2=new JPanel();
	//设置字体类型
	Font f1=new Font("宋体",Font.BOLD,30);
    Font f2=new Font("幼圆",Font.ITALIC,30);
    Font f3=new Font("楷体",Font.BOLD,18);
    Font f4=new Font("隶书",Font.PLAIN,40);
	
	//设置6个按钮,以便管理员操作
	JButton btnTM=new JButton("教师信息管理");
	JButton btnSM=new JButton("学生信息管理");
	JButton btnCM=new JButton("课程信息管理");
	JButton btnSCM=new JButton("成绩信息管理");
	JButton btnCSM=new JButton("班级信息管理");
	JButton btnEXIT=new JButton("退出管理系统");
	
	public GLFrame() {   //构造方法
		super("管理员管理页面");
		setLayout(new FlowLayout());
		//设置标签的颜色
	    l.setFont(f1);
	    l.setForeground(Color.blue);
	    //设置按钮字体和颜色
	    btnTM.setFont(f3);
	    btnTM.setContentAreaFilled(false);
	    //btnTM.setBackground(Color.blue);
	    btnSM.setFont(f3);
	    btnSM.setContentAreaFilled(false);
	    btnCM.setFont(f3);
	    btnCM.setContentAreaFilled(false);
	    btnSCM.setFont(f3);
	    btnSCM.setContentAreaFilled(false);
	    btnCSM.setFont(f3);
	    btnCSM.setContentAreaFilled(false);
	    btnEXIT.setFont(f3);
	    btnEXIT.setContentAreaFilled(false);
	    
		p1.add(l);
		p1.setOpaque(false);
		p2.setLayout(new GridLayout(3,2,10,10));
		p2.setOpaque(false);
		p2.add(btnTM);
		p2.add(btnSM);
		p2.add(btnCM);
		p2.add(btnSCM);
		p2.add(btnCSM);
		p2.add(btnEXIT);
		 
		//布局管理器
		this.add(p1);
		this.add(p2);
		
		//设置背景图片
		ImageIcon ic=new ImageIcon("D:\\picture\\管理界面.png");
		JLabel l=new JLabel(ic);
		l.setBounds(0,0,ic.getIconWidth(),ic.getIconHeight());
		//l.setBounds(0,0,this.getWidth(),this.getHeight());
		//JPanel ip=(JPanel)this.getContentPane();
		this.getLayeredPane().add(l,new Integer(Integer.MIN_VALUE));
		((JPanel)this.getContentPane()).setOpaque(false);//设置透明
		
		//设置顶层容器的大小、位置、可见性及close功能
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(350,300);
		setLocationRelativeTo(null);
		setVisible(true);
		
		btnTM.addActionListener(this);
		btnSM.addActionListener(this);
		btnCM.addActionListener(this);
		btnSCM.addActionListener(this);
		btnCSM.addActionListener(this);
		btnEXIT.addActionListener(this);
	}
	
	public void actionPerformed(ActionEvent e) {
		//按钮为“教师信息管理”,跳转页面
		if(e.getSource().equals(btnTM)) {
			this.dispose();
			new TM().display();
		}
		//按钮为“学生信息管理”,跳转页面
		if(e.getSource().equals(btnSM)) {
			//new SM().display();
			this.dispose();
			new SM().display();
		}
		//按钮为“课程信息管理”,跳转页面
		if(e.getSource().equals(btnCM)) {
			this.dispose();
			new CM().display();
		}
		//按钮为“成绩信息管理”,跳转页面
		if(e.getSource().equals(btnSCM)) {
			this.dispose();
			new SCM().display();
		}
		//按钮为“班级信息管理”,跳转页面
		if(e.getSource().equals(btnCSM)) {
			this.dispose();
			new ClassM().display();
		}
		//按钮为“退出管理系统”,程序退出
		if(e.getSource().equals(btnEXIT)) {
        	//System.exit(0);
			this.dispose();
			new DengLu();
		}
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new GLFrame();
	}

}

本博主只是入门新手,思路和源码仅供参考,这个设计还有一些缺陷,博主正在奋力修改中!

设计小结

爱你所爱,行你所行,听从你心,无问西东!

你可能感兴趣的:(学生学籍信息管理系统(Java + SQL))