SQL Server+Java——数据库实验1.x 代码展示

从第一篇大作业博客2020-04-27到第二篇2020-05-06,第三篇2020-05-25,第四篇2020-06-03到现在,一个多月了,虽然其中出现了一些意外情况,但所幸,我的数据库大作业1.x 系列可以说是顺利完成了。今天,我就将我这一个多月做的成果展示一下。

另:文章结尾处有视频讲解演示以及程序源文件

代码展示就按照每个Java类来吧,就不按照功能分类了。

初始登陆界面 Login

在这里插入图片描述
由一个文本框,一个密码框,两个按钮组成

import java.awt.*;
import java.awt.event.*;
import java.sql.*;

import javax.swing.*;

public class Login  extends JFrame implements ActionListener,ComponentListener
{
	private TextField tx1;
	private JPasswordField jp;   //密码框
	private JButton jb1,jb2;
	private MessageJDialog jdialog;
	private ComponentEvent event;
	
	static String s1,s2;
	static int a;     //区分操作来自于学生还是教师
	private static final long serialVersionUID = 1L;
	
	public Login()
	{
		super("登录界面");
		this.setBounds(600,240,320,120);
		this.setBackground(Color.lightGray);
		this.setLayout(new GridLayout(3,2));
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		
		//第一行
		this.add(new Label("用户名",Label.CENTER));
		this.tx1=new TextField(15);
		this.add(this.tx1);
		//第二行
		this.add(new Label("密码",Label.CENTER));
		this.jp=new JPasswordField(15);
		this.add(this.jp);
		//第三行
		this.jb1 =new JButton("学生登陆") ;
		this.add(this.jb1);
		this.jb1.addActionListener(this );
		this.jb2 =new JButton("教师登陆") ;
		this.add(this.jb2);
		this.jb2.addActionListener(this );
		
		this.setVisible(true);
		this.addWindowListener(new WinClose());
	}
	

	public void componentMoved(ComponentEvent e) {	}

	public void componentShown(ComponentEvent e) {	}

	public void componentHidden(ComponentEvent e) {  }

	public void actionPerformed(ActionEvent e)
	{
		s1=tx1.getText();
		s2=new String(jp.getPassword());
		
		if(!s1.equals("")&& !s2.equals(""))
		{
			try
			{
				Statement st=Connect.doConnect();
				if(e.getSource()==jb1)    //学生登录
				{
					String a0="select * from Student where Sno=\'"+s1+"\'";
					//从Student表中查找是否有该学生的学号信息
					ResultSet  rs=st.executeQuery(a0);
					if(rs.next())
					{
						Search.doSearch(0, 0);
						int l=Search.u;     //接收来自Search的查询结果,1为成功,0为失败
						if(l==1)
						{
							JOptionPane.showMessageDialog(this,"登录成功!");
							a=1;
							new Student();
							dispose();      //关闭当前窗口
						}
						else 
						{
							JOptionPane.showMessageDialog(this,"用户名或密码输入有误,请检查输入!");
						}
					}
					else
					{
						JOptionPane.showMessageDialog(this,"该用户名尚未注册,请尽快联系教师管理员进行注册!");
					}
				}
				
				else if(e.getSource()==jb2)    //教师登录
				{
					Search.doSearch(0, 1);
					int l=Search.u;
					if(l==1)
					{
						JOptionPane.showMessageDialog(this,"登录成功!");
						a=2;
						new Teacher();
						dispose();
					}
					else 
					{
						JOptionPane.showMessageDialog(this,"用户名或密码输入有误,请检查输入!");
					}
				}
			} 
			catch (SQLException e2) 
			{
				e2.printStackTrace();
			}
		}
		else
		{
			JOptionPane.showMessageDialog(this,"用户名和密码不能为空,请检查输入!");
		}
	}
	
	private class MessageJDialog extends JDialog
	{	
		private static final long serialVersionUID = 1L;
		private JLabel jlable;
		private MessageJDialog()
		{
			super(Login.this,"提示",true);
			this.setSize(420, 110);
			this.jlable=new JLabel("",JLabel.CENTER);
			this.getContentPane().add(this.jlable);
			this.setDefaultCloseOperation(HIDE_ON_CLOSE);
			this.addComponentListener(Login.this);
		}
	}
	
	public void componentResized(ComponentEvent e) 
	{
		event = null;
		Component comp=event.getComponent();
		int size=(comp.getWidth()+comp.getHeight())/40;
		Font font=new Font("宋体",1,size);
		if(comp instanceof JFrame)
		{
			int n=this.getContentPane().getComponentCount();
			for(int i=0;i<n;i++)
			{
				this.getContentPane().getComponent(i).setFont(font);
			}
		}
		else if(comp instanceof JDialog)
		{
			this.jdialog.jlable.setFont(font);
		}
	}
	
	public static void main(String[] args) 
	{
		JOptionPane.showMessageDialog(null,"登录名为自己的学号或职工号,初始密码为00000,请登陆后及时修改密码!");
		new Login();
	}
}
之后是学生操作界面 Student

在这里插入图片描述

import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import javax.swing.*;


public class Student  extends JFrame implements ActionListener
{
	private JButton jb1,jb2,jb3,jb4;
	public JComboBox<String> jcom1;
	private static String[] oper={" ","全部成绩","个人信息","本学期课表"};
	private static final long serialVersionUID = 1L;
	
	public Student()
	{
		super("学生登录界面");
		this.setBounds(600,240,300,100);
		this.setBackground(Color.lightGray);
		this.setLayout(new GridLayout(2,3));
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		
		//第一行
		this.add(new Label("请选择",Label.CENTER));
		this.add(this .jcom1 =new JComboBox<String>(Student.oper));
		this .jcom1.addActionListener(this);
		this .jb1=new JButton("查询");
		this.add(this .jb1);
		this .jb1.addActionListener(this);
		//第二行
		this .jb2=new JButton("选课");
		this.add(this .jb2);
		this .jb2.addActionListener(this);
		this .jb3=new JButton("修改密码");
		this.add(this .jb3);
		this .jb3.addActionListener(this);
		this .jb4=new JButton("退出");
		this.add(this .jb4);
		this .jb4.addActionListener(this);
		
		this.setVisible(true);
		this.addWindowListener(new WinClose());
		
	}

	public void actionPerformed(ActionEvent e)
	{
		int i=jcom1.getSelectedIndex();    //接收下拉框的选择
		try
		{
			if (e.getSource()==jb4)   //退出
			{
				new Login();
				dispose();
			}
			
			else if(e.getSource()==jb2)    //选课
			{
				Search.doSearch(1, 1);
				new Select_C();
				dispose();
			}
			
			else if(e.getSource()==jb3)    //改密码
			{
				new Change_code();
				dispose();
			}
			
			else if(e.getSource()==jb1)    //查询
			{
				try 
				{
					if(i!=0)
					{
						Search.doSearch(1, i+1);
						dispose();
					}
					else
					{
						JOptionPane.showMessageDialog(this,"请选择你想进行查询的选项!");
					}
				} 
				catch (Exception e2) 
				{
					e2.printStackTrace();
				}
			}
		}
		catch(SQLException w1)
		{
			w1.printStackTrace();
		}
	}

//	public static void main(String[] args) {  new Student();}
}

教师登录操作界面 Teacher

在这里插入图片描述

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Teacher extends JFrame implements ActionListener
{
	private JButton jb1,jb2,jb3,jb4,jb5;
	public JComboBox<String> jcom1,jcom2;
	private static String[] oper1={" ","全部学生成绩","全部学生信息","所有课程平均成绩","选课结果","课表查询"};
	private static String[] oper2={" ","学生信息","学生成绩","个人密码","增加课程","删除课程"};
	
	static int a;    //在删除信息时使用,1为删除学生信息,2为删除课程信息
	
	private static final long serialVersionUID = 1L;
	
	public Teacher()
	{
		super("教师登录界面");
		this.setBounds(600,240,320,180);
		this.setBackground(Color.lightGray);
		this.setLayout(new GridLayout(4,2));
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		this.setVisible(true);
		this.addWindowListener(new WinClose());
		
		//第一行
		this.add(new Label("请选择",Label.CENTER));
		this .jb1=new JButton("增加学生信息");
		this.add(this .jb1);
		this .jb1.addActionListener(this);
		//第二行
		this.add(this .jcom1 =new JComboBox<String>(Teacher.oper1));
		this .jcom1.addActionListener(this);
		this .jb2=new JButton("查询");
		this.add(this .jb2);
		this .jb2.addActionListener(this);
		//第三行
		this.add(this .jcom2 =new JComboBox<String>(Teacher.oper2));
		this .jcom2.addActionListener(this);
		this .jb3=new JButton("修改");
		this.add(this .jb3);
		this .jb3.addActionListener(this);
		//第四行
		this .jb4=new JButton("删除学生信息");
		this.add(this .jb4);
		this .jb4.addActionListener(this);
		this .jb5=new JButton("退出");
		this.add(this .jb5);
		this .jb5.addActionListener(this);
		
	}

	public void actionPerformed(ActionEvent e)
	{
		int i=this .jcom1.getSelectedIndex();     //接收查询下拉框的选择
		int j=this .jcom2.getSelectedIndex();    //接收修改下拉框的选择
		if(e.getSource()==jb1)    //插入学生信息
		{
			new Insert();
			dispose();
		}
		
		else if (e.getSource()==jb2)    //查询
		{
			try
			{
				if(i!=0)
				{
					Search.doSearch(2, i);
					dispose();
				}
				else
				{
					JOptionPane.showMessageDialog(this,"请选择你想进行查询的选项!");
				}
			} 
			catch (Exception e2) 
			{
				e2.printStackTrace();
			}
		}
		
		else if (e.getSource()==jb3)    //修改
		{
			try
			{
				if(j!=0)
				{
					a=2;
					Search.doSearch(2, j+5);
					dispose();
				}
				else
				{
					JOptionPane.showMessageDialog(this,"请选择你想进行修改的选项!");
				}
			} 
			catch (Exception e2) 
			{
				e2.printStackTrace();
			}
		}
		
		else if (e.getSource()==jb4)   // 删除学生信息
		{
			a=1;
			new Delete();
			dispose();
		}
		
	    else if (e.getSource()==jb5)    //退出
		{
			new Login();
			dispose();
		}
	}

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

}
查询,修改操作统一在一起的类 Search

教师查询平均成绩时直接查询比较麻烦,所以我这里用了视图,先建立相应的试图,然后再查询,关闭显示界面时做一个判断,如果是查询视图的操作,先删除视图,再关闭。
这里说的查询是指学生和教师相应的查询操作,修改是指教师除修改密码操作之外的修改操作。
因为修改密码要进行的操作很难与其他操作统一在一起,所以我另建了一个修改密码的类。
这个类更相当于一个中转站,接受教师或学生的操作选择,再分别转到进行相应操作的不同的类中

import java.sql.*;
import javax.swing.*;

public class Search 
{
	public  int i;   //接收信息,1:来自学生端;2:来自教师端
	public  int j;   //接受各自选项框的选择
	
	static ResultSet rs;
	
	static String Ss;   //向其他类传输字符串时的静态变量
	static int u;   //登录检验时的返回值
	
	static int p,q,m;
	
	static Statement st=Connect.doConnect();
	
	public static void doSearch(int i,int j) throws SQLException
	{
		if(st!=null)
		{
			if(i==0)   //登陆检验
			{
				switch(j)
				{
				case 0:  //学生登陆检验
					String  s0="select * from Student where Sno=\'"+Login.s1+"\' and Scode=\'"+Login.s2+"\'";
					ResultSet rs=st.executeQuery(s0);
					if(rs.next())
					{
						u=1;
					}
					else
					{
						u=0;
					}
					break;
				case 1:   //教师登陆检验
					String  s1="select * from Teacher where Tno=\'"+Login.s1+"\' and Tcode=\'"+Login.s2+"\'";
					ResultSet rs1=st.executeQuery(s1);
					if(rs1.next())
					{
						u=1;
					}
					else
					{
						u=0;
					}
					break;
				}
			}
			else if(i==1)   //学生端操作
			{
				switch(j)
				{
				case 1:   //课程表显示
					String s1="select * from Course where Cnum>0";
					rs=st.executeQuery(s1);
					 if(rs.next())
					 {
						 Ss=s1;
						 p=4;
	                     new Output();          
	                  }
	                else
	                {
	                    JOptionPane.showMessageDialog(null,"查询失败,请检查输入!","错误!",JOptionPane.ERROR_MESSAGE);
	                }
	                 break;
	            case 2:  //学生成绩
	            	String s2="select * from SC where Grade >0 and Sno=\'"+Login.s1+"\'";
					//st.execute(s1);
					rs=st.executeQuery(s2);
					if(rs.next())
					 {
						Ss=s2;
						p=2;
	                    new Output();          
	                  }
	                else
	                {
	                    JOptionPane.showMessageDialog(null,"查询失败,请检查输入!","错误!",JOptionPane.ERROR_MESSAGE);
	                }
	                break;
	            case 3:  //学生信息
	            	String s3="select Sno,Sname,Sage,Ssex,Sdept from Student where Sno=\'"+Login.s1+"\'";
					rs=st.executeQuery(s3);
					 if(rs.next())
					 {
						 Ss=s3;
						 p=1;
	                     new Output();          
	                  }
	                else
	                {
	                    JOptionPane.showMessageDialog(null,"查询失败,请检查输入!","错误!",JOptionPane.ERROR_MESSAGE);
	                }
	                break;
	            case 4:  //本学期课表
	            	String s4="select * from SC where Grade =0 and Sno=\'"+Login.s1+"\'";
					rs=st.executeQuery(s4);
					if(rs.next())
					 {
						Ss=s4;
						p=2;
	                     new Output();          
	                  }
	                else
	                {
	                    JOptionPane.showMessageDialog(null,"查询失败,请检查输入!","错误!",JOptionPane.ERROR_MESSAGE);
	                }
				}
			}
			
			else if(i==2)  //教师端操作
			{
				switch(j)
				{
				case  1:   //全部学生成绩
					String s1="select * from SC where Grade>0";
					//st.execute(s1);
					rs=st.executeQuery(s1);
					if(rs.next())
					 {
						Ss=s1;
						p=2;
	                    new Output();          
	                  }
	                else
	                {
	                    JOptionPane.showMessageDialog(null,"查询失败,请检查输入!","错误!",JOptionPane.ERROR_MESSAGE);
	                }
					break;
				case  2:   //全部学生信息
					String s2="select Sno,Sname,Sage,Ssex,Sdept from Student ";
					rs=st.executeQuery(s2);
					 if(rs.next())
					 {
						 Ss=s2;
						 p=1;
	                     new Output();          
	                  }
	                else
	                {
	                    JOptionPane.showMessageDialog(null,"查询失败,请检查输入!","错误!",JOptionPane.ERROR_MESSAGE);
	                }
	                  break;
				case  3:   //全部课程的平均成绩
					String s00="create view C_G(Cno,A_Grade)  "+
				" as  "+
							"  (SELECT  Cno,avg(Grade)  FROM SC group by Cno)";     //建立视图
					st.executeUpdate(s00);
					String s5="SELECT *  FROM C_G where A_Grade >0";
					rs=st.executeQuery(s5);
					if(rs.next())
					 {
						Ss=s5;
						p=3;
	                    new Output();          
	                  }
	                else
	                {
	                    JOptionPane.showMessageDialog(null,"查询失败,请检查输入!","错误!",JOptionPane.ERROR_MESSAGE);
	                }
					break;
				case 4:   //选课结果
					String s7="select * from SC ";    
					//String s7="select * from SC where Grade is not null";
					rs=st.executeQuery(s7);
					if(rs.next())
					 {
						Ss=s7;
						p=2;
	                     new Output();          
	                  }
	                else
	                {
	                    JOptionPane.showMessageDialog(null,"查询失败,请检查输入!","错误!",JOptionPane.ERROR_MESSAGE);
	                }
					break;
				case  5:    //课表信息查询
					String s8="select * from Course";    
					rs=st.executeQuery(s8);
					if(rs.next())
					 {
						Ss=s8;
						p=4;
	                     new Output();          
	                  }
	                else
	                {
	                    JOptionPane.showMessageDialog(null,"查询失败,请检查输入!","错误!",JOptionPane.ERROR_MESSAGE);
	                }
					break;
				case  6:    //更改学生信息
					Insert.x=1;
					new Insert();
					break;
				case 7:   //更改学生成绩
					new Change_Grade();
					break;
				case 8:   //更改密码
					new Change_code();
					break;
				case 9:  //插入课程
					new Insert_C();
					break;
				case  10:   //删除课程
					new Delete();
					break;
				}
			}
		}
		else
		{
			JOptionPane.showMessageDialog(null, "数据库连接失败!");
       	    System.exit(0);
		}
	}
	
	public static void main(String[] args) {	}
	
}

查询显示输出界面 Output

在这里插入图片描述
这个部分我借鉴了怎么样将数据库的表在Java中界面中显示出来这篇百度文库中的思路以及部分代码
在Search类中进行查询或修改操作后需要进行的输出会在这里执行

import java.awt.event.*;
import javax.swing.*;
import java.sql.*;

public class Output extends JFrame
{

	private static final long serialVersionUID = 1L;
	
	private JScrollPane scpDemo;   //滚动面板
	private JTable tabDemo;            //表格组件
	private JButton jbt,jbt1;
	 int b=0;       //做一个判断区别,主要在查询平均成绩时用
	ResultSet r;
	Statement st;
	
	public Output()
	{
		super("输出显示");
		this.setSize(666, 500);
		this.setLayout(null);
		this.setLocation(340, 70);
		
		this .scpDemo=new JScrollPane();
		this .scpDemo.setBounds(27, 15, 600, 360);
		this .jbt=new JButton("显示数据");
		this .jbt.setBounds(130, 400, 106, 30);
		this .jbt.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent ae) 
			{
				jbt_ActionPerformed(ae);
				
			}
		});
		this .jbt1=new JButton("退出");
		this .jbt1.setBounds(410, 400, 106, 30);
		this .jbt1.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent a) 
			{
				try 
				{
					jbt1_ActionPerformed(a);
				} 
				catch (SQLException e)
				{
					e.printStackTrace();
				}
				
			}
		});
		add(this .scpDemo);
		add(this .jbt);
		add(this .jbt1);
		
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		this.setVisible(true);
		this.addWindowListener(new WinClose());
	}
	
	public void jbt_ActionPerformed(ActionEvent ae)
	{
		st=Connect.doConnect();
		int a=Search.p;       //p值不同,输出面板表格不同
		try 
		{
			if(st==null)
			{
				JOptionPane.showMessageDialog(null, "数据库连接失败!");
	       	    System.exit(0);
			}
			r=st.executeQuery(Search.Ss);
			int count=0;    //记录上一条语句查询得到的元组数量
			while(r.next())
			{
				count++;
			}
			r=st.executeQuery(Search.Ss);    
			/*这里划重点,必须要再执行一次,经过上面的 while 循环,r 已经到最后了,
			 * 不重新执行的话,输出结果是空值,就是最后的表格数目信息是对的,但没有任何值*/
			if(a==1)  //学生信息的输出
			{
				Object[][] array=new Object[count][5];
				count=0;
				while(r.next())
				{
					array[count][0]=r.getString("Sno");
					array[count][1]=r.getString("Sname");
					array[count][2]=Integer.valueOf(r.getInt("Sage"));
					array[count][3]=r.getString("Ssex");
					array[count][4]=r.getString("Sdept");
					count++;
				}
				String[] title={"学号 ","姓名 ","年龄 "," 性别"," 系别"};
				this.tabDemo=new JTable(array,title);
			}
			
			else if(a==2)  //学生成绩
			{
				Object[][] array=new Object[count][3];
				count=0;
				while(r.next())
				{
					array[count][0]=r.getString("Sno");
					array[count][1]=r.getString("Cno");
					array[count][2]=Integer.valueOf(r.getInt("Grade"));
					count++;
				}
				String[] title={"学号 ","课程号 ","成绩"};
				this.tabDemo=new JTable(array,title);
			}
			
			else if(a==3)  //平均成绩
			{
				b=1;
				Object[][] array=new Object[count][2];
				count=0;
				while(r.next())
				{
					array[count][0]=r.getString("Cno");
					array[count][1]=Double.valueOf(r.getDouble("A_Grade"));
					count++;
				}
				String[] title={"课程号 ","平均成绩"};
				this.tabDemo=new JTable(array,title);
			}
			
			else if(a==4)  //课程表
			{
				b=2;
				Object[][] array=new Object[count][5];
				count=0;
				while(r.next())
				{
					array[count][0]=r.getString("Cno");
					array[count][1]=r.getString("Cname");
					array[count][2]=r.getString("Cpno");
					array[count][3]=Integer.valueOf(r.getInt("Ccredit"));
					array[count][4]=Integer.valueOf(r.getInt("Cnum"));
					count++;
				}
				String[] title={"课程号 ","课程名 ","先修课 "," 学分","课余量"};
				this.tabDemo=new JTable(array,title);
			}
			
			this .tabDemo.getTableHeader();
			this .scpDemo.getViewport().add(tabDemo);
		} 
		catch (SQLException e1) 
		{
			JOptionPane.showMessageDialog(null, "数据源错误","错误",JOptionPane.ERROR_MESSAGE);
		}
	}
	
	public void jbt1_ActionPerformed(ActionEvent a) throws SQLException
	{
		if(Login.a==1)
		{
			if(b==1)
			{
			//删除视图
				String s00="drop view C_G";
				st.executeUpdate(s00);
			}
			new Student();
			dispose();
		}
		else if(Login.a==2)
		{
			if(b==1)
			{
				String s00="drop view C_G";
				st.executeUpdate(s00);
			}
			new Teacher();
			dispose();
		}
	}
	
	//public static void main(String[] args){	new Output();}

}
选课界面 Select_C

在这里插入图片描述
登录时系统会记住登录名,也就是登录学生的学号,再加上选择课程时输入的课程号就可以基本确定信息

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.sql.*;

public class Select_C extends JFrame implements ActionListener
{
	private TextField tx1;
	private JButton jbt1,jbt2;
	
	private static final long serialVersionUID = 1L;
	
	public Select_C()
	{
		super("选课");
		this.setBounds(650,540,320,90);
		this.setBackground(Color.lightGray);
		this.setLayout(new GridLayout(2,2));
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		this.setVisible(true);
		this.addWindowListener(new WinClose());
		
		//第一行
		this.add(new Label("课程号",Label.CENTER));
		this.tx1=new TextField(15);
		this.add(this.tx1);
		//第二行
		this.jbt1=new JButton("选课");
		this.jbt2=new JButton("重选");
		this.add(this.jbt2);
		this.add(this.jbt1);
		this.jbt1.addActionListener(this);
		this.jbt2.addActionListener(this);
	}
	
	public void actionPerformed(ActionEvent e)
	{
		String s=tx1.getText();
		if(s.equals(""))
		{
			JOptionPane.showMessageDialog(this,"输入不能为空,请检查输入!");
		}
		else 
		{
			try 
			{
				Statement st=Connect.doConnect();
				ResultSet rt;
				
				if(e.getSource()==jbt1)   //选课
				{
					String s0="select * from Course where Cno=\'"+s+"\'";
					//从Course表中查询是否有与输入中所对应的课序号
					rt=st.executeQuery(s0);
					if(rt.next())
					{
						String s00="select * from SC where Sno=\'"+Login.s1+"\' and Cno=\'"+s+"\'";
						//检查该学生是否已选过该课程
						rt=st.executeQuery(s00);
						if(rt.next())
						{
							JOptionPane.showMessageDialog(this,"你已选过该课程,请勿重复选择!");
						}
						else
						{
							String s1="insert into SC values(\'"+Login.s1+"\',\'"+s+"\',\'0\') ";     //在SC表中插入选课信息
							int a=st.executeUpdate(s1);
							String s2="Update Course set Cnum=Cnum-1  where Cno=\'"+s+"\'";   //在Course表中将对应课序号的课程的课余量减一
							int b=st.executeUpdate(s2);
							//executeUpdate的返回值是一个整数,指示受影响的行数(即更新计数)。
							if(a!=0&&b!=0)    
							{
								JOptionPane.showMessageDialog(this,"选课成功!");
								dispose();
							}
							else
							{
								JOptionPane.showMessageDialog(this,"选课失败,请检查输入!");
							}
						}
					}
					else
					{
						JOptionPane.showMessageDialog(this, "该课程不存在,请重新选择!");
					}
				}
			}
			catch (SQLException e1)
			{
				e1.printStackTrace();
			}
			if(e.getSource()==jbt2)  //重选
			{
				tx1.setText(null);
			}
		}
	}

	//public static void main(String[] args) { new Select_C();	}
}

数据库连接类 Connect

整个实验过程中几乎每个类都需要连接数据库,所以我就单独写了一个类。
这个连接代码大部分内容是我百度的😃之后根据我的需要改的。

import java.sql.*;

public class Connect
{
	public static Statement doConnect()
	{
		String JDriver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";// SQL数据库引擎
        String connectDB = "jdbc:sqlserver://127.0.0.1:1433;DatabaseName=你想进行操作的数据库名称";// 数据源
        try 
        {
             Class.forName(JDriver);// 加载数据库引擎,返回给定字符串名的类
         } 
        catch (ClassNotFoundException e) 
        {
        // e.printStackTrace();
             System.out.println("加载数据库引擎失败");
             //JOptionPane.showMessageDialog(this,"学号栏不能为空!");
             System.exit(0);
         }
         System.out.println("数据库驱动成功");
         try 
         {
        	 String user = "你自己的登录名";
             String password = "你自己的登录密码";
             Connection con = DriverManager.getConnection(connectDB, user, password);// 连接数据库对象
             System.out.println("连接数据库成功");
             Statement stmt = con.createStatement();
             return stmt;
		 } 
         catch (SQLException e) 
         {
               e.printStackTrace();
               System.out.println("数据库连接错误");
               System.exit(0);
         }
		return null;		
	}
	//public static void main(String[] args) {	}

}

插入学生信息+修改学生信息 Insert

在这里插入图片描述
插入学生信息界面和修改学生信息界面的布局基本相同,要进行的操作也相近,所以我就写在了一个类里面,就是加了一个判断,在生成这个界面时作一个判断,看要进行的操作是插入还是修改。

import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import javax.swing.*;


public class Insert extends JFrame implements ActionListener
{
	private TextField jtx1,jtx2,jtx3,jtx4,jtx5,jtx6,jtx7;
	private JButton jb1,jb2,jb3;
	
	String s6,s7;
	static int x=0;    //做判断,看是输入学生信息,还是更改学生信息
	
	private static final long serialVersionUID = 1L;
	public Insert()
	{
		super("请输入信息");
		this.setBounds(380,240,750,120);
		this.setBackground(Color.lightGray);
		this.setLayout(new GridLayout(3,5));
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		this.setVisible(true);
		this.addWindowListener(new WinClose());
		
		//第一行
		this.add(new Label("学号",Label.CENTER));
		this.add(new Label("姓名",Label.CENTER));
		this.add(new Label("年龄",Label.CENTER));
		this.add(new Label("性别",Label.CENTER));
		this.add(new Label("专业",Label.CENTER));
		//第二行
		this.jtx1=new TextField(15);
		this.add(this.jtx1);
		jtx1.setText("0");
		this.jtx2=new TextField(15);
		this.add(this.jtx2);
		this.jtx3=new TextField(15);
		this.add(this.jtx3);
		jtx3.setText("0");
		this.jtx4=new TextField(15);
		this.add(this.jtx4);
		this.jtx5=new TextField(15);
		this.add(this.jtx5);
		//第三行
		this.jb2=new JButton("重新输入/再次添加");
		this.add(this.jb2);
		this.jb2.addActionListener(this );
		this.jtx6=new TextField(15);
		this.add(this.jtx6);
		jtx6 .setEnabled(false);
		this.jb1=new JButton("确定");
		this.add(this.jb1);
		this.jb1.addActionListener(this );
		this.jtx7=new TextField(15);
		this.add(this.jtx7);
		jtx7 .setEnabled(false);
		this.jb3=new JButton("退出");
		this.add(this.jb3);
		this.jb3.addActionListener(this );
	}
	
	public void actionPerformed(ActionEvent e)
	{
		String s1=jtx1.getText();
		String s2=jtx2.getText();
		int s3=Integer.parseInt(jtx3.getText());
		String s4=jtx4.getText();
		String s5=jtx5.getText();
		
		if(jtx1.getText().equals(""))
		{
			JOptionPane.showMessageDialog(this,"学号栏不能为空!");
		}
		
		else
		{
			if(e.getSource()==jb1)
			{
				try 
		         {
					Statement st=Connect.doConnect();			
		            if(st!=null)
		            {
		            	if(x==1)  //修改学生信息
		            	{
		            		String  a="select * from  Student where Sno=\'"+s1+"\'";
		            		ResultSet rs=st.executeQuery(a);
		            		if(rs.next())
		            		{
		            			String Sname=rs.getString("Sname");
		    					int Sage=Integer.valueOf(rs.getInt("Sage"));
		    					String Ssex=rs.getString("Ssex");
		    					String Sdept=rs.getString("Sdept");
		    					int i=Check(s3, s4);
		    					if(i==0)
		    					{
		    						JOptionPane.showMessageDialog(this,"学生年龄应在15至25岁,学生性别只能为‘男’或‘女’,请输入适当的学生信息!!");
		    					}
		    					else
		    					{
		    						int a1=s2.compareTo(Sname);
			    					if(a1!=0)    //新输入的Sname不同,更新
			    					{
			    						String b1="update Student set  Sname =\'"+s2+"\' where Sno=\'"+s1+"\'";
			    						st.executeUpdate(b1);
			    					}
			    					if(Sage!=s3)   //新输入的Sage不同,更新
			    					{
			    						String b2="update Student set  Sage =\'"+s3+"\' where Sno=\'"+s1+"\'";
			    						st.executeUpdate(b2);
			    					}
			    					int a3=s4.compareTo(Ssex);
			    					if(a3!=0)    //新输入的Ssex不同,更新
			    					{
			    						String b3="update Student set  Ssex =\'"+s4+"\' where Sno=\'"+s1+"\'";
			    						st.executeUpdate(b3);
			    					}
			    					int a4=s5.compareTo(Sdept);
			    					if(a4!=0)    //新输入的Sdept不同,更新
			    					{
			    						String b4="update Student set  Sdept =\'"+s5+"\' where Sno=\'"+s1+"\'";
			    						st.executeUpdate(b4);
			    					}
			    					String s7="恭喜你,更改成功!";
								    jtx7.setText(s7);
		    					}
		            		}
		            		else
		            		{
		            			JOptionPane.showMessageDialog(this,"学号输入错误,无法更改,请检查输入!");
							}
		            	}
		            	else   //增加学生信息
		            	{
		            		String  a="select * from  Student where Sno=\'"+s1+"\'";
		            		ResultSet rs=st.executeQuery(a);
		            		if(rs.next())
		            		{
		            			JOptionPane.showMessageDialog(this,"该学号已存在,请勿重复添加!");
		            		}
		            		else
		            		{
		            			int i=Check(s3, s4);
		    					if(i==0)
		    					{
		    						JOptionPane.showMessageDialog(this,"学生年龄应在15至25岁,学生性别只能为‘男’或‘女’,请输入适当的学生信息!!");
		    					}
		    					else
		    					{
		    						String a1 = "insert into Student (Sno,Sname,Sage,Ssex,Sdept,Scode)"
						             		+ " values(\'" + s1 +"\',\'"+ s2 +"\',\'" +s3+"\',\'" + s4 + "\',\'" + s5 + "\',\'00000\')";
				            	 //插入学生信息,初始学生密码为00000
									st.executeUpdate(a1);
								    //System.out.println("插入数据成功");
								    String s7="恭喜你,插入成功!";
								    jtx7.setText(s7);
		    					}
							}
						}
		            }
		            else 
		             {
		            	 JOptionPane.showMessageDialog(this,"数据库连接失败!");
		            	 System.exit(0);
					}
				 } 
		         catch (SQLException e1) 
		         {
		               e1.printStackTrace();
		               //System.out.println("数据库连接错误");
		               String s6="很遗憾,插入失败!";
					    jtx6.setText(s6);
		               System.exit(0);
		         }
			}
		}
		
	    if(e.getSource()==jb2)
		{
			jtx1.setText("0");
			jtx2.setText(null);
			jtx3.setText("0");
			jtx4.setText(null);
			jtx5.setText(null);
			jtx6.setText(null);
			jtx7.setText(null);
		}
		
		else if(e.getSource()==jb3)
		{
			new Teacher();
			dispose();
		}
	}
	
	public int Check(int  Sage,String Ssex)   //检查学生年龄和性别输入是否合法
	{
		int a=Sage;
		String aS=Ssex;
		if((a>=15&&a<=25)&&(aS.compareTo("男")==0||aS.compareTo("女")==0))
		{
			return 1;
		}
		else
		{
			return 0;
		}
	}

//	public static void main(String[] args) 	{  new Insert();	}
}

插入课程信息 Insert_C

在这里插入图片描述
也是插入相关的操作,本来我想和上面的 Insert 类写成一个类来的,但是学生和课程需要的文本框数不一样,写在一起就真的是个大工程了,所以就又写了一个。

import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import javax.swing.*;


public class Insert_C extends JFrame implements ActionListener
{
	private TextField jtx1,jtx2,jtx3,jtx4,jtx5;
	private JButton jb1,jb2,jb3;
	
	String s6,s7;
	
	private static final long serialVersionUID = 1L;
	
	public Insert_C()
	{
		super("请输入信息");
		this.setBounds(400,240,650,120);
		this.setBackground(Color.lightGray);
		this.setLayout(new GridLayout(3,4));
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		this.setVisible(true);
		this.addWindowListener(new WinClose());
		
		this.add(new Label("课序号",Label.CENTER));
		this.add(new Label("课程名",Label.CENTER));
		this.add(new Label("先修课",Label.CENTER));
		this.add(new Label("学分",Label.CENTER));
		//第二行
		this.jtx1=new TextField(15);
		this.add(this.jtx1);
		jtx1.setText("0");
		this.jtx2=new TextField(15);
		this.add(this.jtx2);
		this.jtx3=new TextField(15);
		this.add(this.jtx3);
		jtx3.setText("2");
		this.jtx4=new TextField(15);
		this.add(this.jtx4);
		jtx4.setText("0");
		//第三行
		this.jtx5=new TextField(15);
		this.add(this.jtx5);
		jtx5 .setEnabled(false);
		this.jb2=new JButton("重新输入/再次添加");
		this.add(this.jb2);
		this.jb2.addActionListener(this );
		
		this.jb1=new JButton("确定");
		this.add(this.jb1);
		this.jb1.addActionListener(this );
		this.jb3=new JButton("退出");
		this.add(this.jb3);
		this.jb3.addActionListener(this );
	}
	
	public void actionPerformed(ActionEvent e)
	{
		String s1=jtx1.getText();
		String s2=jtx2.getText();
		int s4=Integer.parseInt(jtx4.getText());
		String s3=jtx3.getText();
		
		if(jtx1.getText().equals(""))
		{
			JOptionPane.showMessageDialog(this,"课序号不能为空!");
		}
		
		else
		{
			if(e.getSource()==jb1)    //确定按钮
			{
				try 
		         {
					Statement st=Connect.doConnect();			
		            if(st!=null)
		            {
		            	String a0="select * from Course where Cno=\'"+s1+"\'";
		            	ResultSet rs=st.executeQuery(a0);
		            	 if(rs.next())
		            	 {
		            		 JOptionPane.showMessageDialog(this,"该课序号已存在,请勿重复添加!");
		            	 }
		            	 else 
		            	 {
		            		 String a = "insert into Course (Cno,Cname,Cpno,Ccredit,Cnum)"
					             		+ " values(\'" + s1 +"\',\'"+ s2 +"\',\'" +s3+"\',\'" + s4 + "\',\'20\')";
			            	 //插入课程信息,初始课余量默认20
								st.executeUpdate(a);
							    //System.out.println("插入数据成功");
							    String s7="恭喜你,插入成功!";
							    jtx5.setText(s7);
						}
		            }
		            else 
		             {
		            	 JOptionPane.showMessageDialog(this,"数据库连接失败!");
		            	 System.exit(0);
					}
				 } 
		         catch (SQLException e1) 
		         {
		               e1.printStackTrace();
		               //System.out.println("数据库连接错误");
		               String s6="很遗憾,插入失败!";
					    jtx5.setText(s6);
		               System.exit(0);
		         }
			}
		}
		
		 if(e.getSource()==jb2)   //重新输入
			{
				jtx1.setText("0");
				jtx2.setText(null);
				jtx3.setText(null);
				jtx4.setText("0");
				jtx5.setText(null);
//				jtx6.setText(null);
			}
			
			else if(e.getSource()==jb3)       //退出
			{
				new Teacher();
				dispose();
			}
	}
	
	//public static void main(String[] args) {	new Insert_C();	}
}

删除信息 Delete

在这里插入图片描述
用来删除学生信息和课程信息,由于在数据库中我将Student表中的Sno,Course表中的Cno设成了主码,所以删除时只要确定主码就能确定要删除的元组,一个接受输入信息的文本框就足够了。

import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import javax.swing.*;

public class Delete extends JFrame implements ActionListener
{
	private TextField tex1,tex2;
	private JButton jb1,jb2,jb3;
	
	String s6,s7;
	
	private static final long serialVersionUID = 1L;
	
	public Delete()
	{
		super("删除界面");
		this.setBounds(500,250,440,100);
		this.setBackground(Color.lightGray);
		this.setLayout(new GridLayout(2,3));
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		this.setVisible(true);
		this.addWindowListener(new WinClose());
		
		//第一行
		this.add(new Label("请输入要删除元组的编号",Label.LEFT));
		this.tex1=new TextField(15);
		this.add(this.tex1);
		this.tex2=new TextField(15);
		this.add(this.tex2);
		tex2.setEnabled(false);
		//第二行
		this.jb1=new JButton("重新输入/再次删除");
		this.add(this.jb1);
		this.jb1.addActionListener(this );
		this.jb2=new JButton("删除");
		this.add(this.jb2);
		this.jb2.addActionListener(this );
		this.jb3=new JButton("退出");
		this.add(this.jb3);
		this.jb3.addActionListener(this );
	}
	
	public void actionPerformed(ActionEvent e)
	{
		String s1=tex1.getText();
		
		if(tex1.getText().equals(""))
		{
			JOptionPane.showMessageDialog(this,"输入栏不能为空!");
		}
		else
		{	         
	         if(e.getSource()==jb2)
	         {
	        	 int p=Teacher.a;
	        	 if(p==1)     //删除学生信息
	        	 {
	        		 try 
			         {
		        		 Statement st=Connect.doConnect();
			             if(st!=null)
			             {
			            	 String a0="select * from Student where Sno=\'"+s1+"\'";
			            	 //在数据库中查询是否有与输入相对应的元组
					            ResultSet rs=st.executeQuery(a0);
					            if(rs.next())
					             {
					            	 String a = "delete from Student where Sno=\'"+s1+"\'";
										st.executeUpdate(a);
									    //System.out.println("插入数据成功");
									    String s7="恭喜你,删除成功!";
									    tex2.setText(s7);
					             }
					            else 
					            {
					            	 JOptionPane.showMessageDialog(this,"该学号不存在,删除失败!");
								}
			            	
			             }
			             else 
			             {
			            	 JOptionPane.showMessageDialog(this,"数据库连接失败!");
			            	 System.exit(0);
						}
			             st.close();// 关闭命令对象连接
					 } 
			         catch (SQLException e1) 
			         {
			               e1.printStackTrace();
			               //System.out.println("数据库连接错误");
			               String s6="很遗憾,删除失败!";
						    tex2.setText(s6);
			               System.exit(0);
			         }
	        	 }
	        	 
	        	 else if(p==2)   //删除课程信息
	        	 {
	        		 try 
			         {
		        		 Statement st=Connect.doConnect();
			             if(st!=null)
			             {
			            	String a0="select * from Course where Cno=\'"+s1+"\'";
				            ResultSet rs=st.executeQuery(a0);
				            if(rs.next())
				             {
				            	String a = "delete from Course where Cno=\'"+s1+"\'";
								st.executeUpdate(a);
									  //System.out.println("插入数据成功");
								String s7="恭喜你,删除成功!";
								tex2.setText(s7);
				             }
				            else 
				            {
				            	 JOptionPane.showMessageDialog(this,"该课序号不存在,删除失败!");
							}
			            	 
			             }
			             else 
			             {
			            	 JOptionPane.showMessageDialog(this,"数据库连接失败!");
			            	 System.exit(0);
						}
			             st.close();// 关闭命令对象连接
					 } 
			         catch (SQLException e1) 
			         {
			               e1.printStackTrace();
			               //System.out.println("数据库连接错误");
			               String s6="很遗憾,删除失败!";
						    tex2.setText(s6);
			               System.exit(0);
			         }
	        	 }
	         }
		}
		if(e.getSource()==jb1)
        {
			//JOptionPane.showMessageDialog(this,"eeeeee!");
			tex1.setText(null);
			tex2.setText(null);
        }
		if(e.getSource()==jb3)
        {
			new Teacher();
			dispose();
        }
	}

//	public static void main(String[] args)  {  new Delete(); }
}

修改学生成绩 Change_Grade

在这里插入图片描述
在SC表中进行操作,(Sno,Cno)是主码,根据这两项就能唯一确定元组。
先判断:1.是否有该学号的学生; 2.是否有该课程号;3.该学生是否选修了该课程
然后再修改。
这里的修改我好像弄麻烦了,我是先删除相应的元组信息,然后重新插入,额,直接更新不就行了吗?我忘了我当时咋想的了。。。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.sql.*;

public class Change_Grade extends JFrame implements ActionListener
{
	private TextField tx1,tx2,tx3,tx4;
	private JButton jb1,jb2;
	
	String s6;
	
	private static final long serialVersionUID = 1L;
	
	public Change_Grade()
	{
		super("输入界面");
		this.setBounds(600,240,500,120);
		this.setBackground(Color.lightGray);
		this.setLayout(new GridLayout(3,3));
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		this.setVisible(true);
		this.addWindowListener(new WinClose());
		
		//第一行
		this.add(new Label("学号",Label.CENTER));
		this.add(new Label("课程号",Label.CENTER));
		this.add(new Label("成绩",Label.CENTER));
		//第二行
		this.tx1=new TextField(15);
		this.add(this.tx1);
		this.tx2=new TextField(15);
		this.add(this.tx2);
		this.tx3=new TextField(15);
		this.add(this.tx3);
		//第三行
		this.tx4=new TextField(15);
		this.add(this.tx4);
		tx4.setEnabled(false);
		this.jb1=new JButton("重新输入");
		this.add(this.jb1);
		this.jb1.addActionListener(this );
		this.jb2=new JButton("确定");
		this.add(this.jb2);
		this.jb2.addActionListener(this );
	}
	
	public void actionPerformed(ActionEvent e)
	{
		String s1=tx1.getText();
		String s2=tx2.getText();
		String s3=tx3.getText();
		if(s1.equals("")||s2.equals("")||s3.equals(""))
		{
			JOptionPane.showMessageDialog(this, "输入不能为空!");
		}
		else
		{
			if(e.getSource()==jb2)
			{
				try
				{
					Statement st=Connect.doConnect();
					ResultSet rs;
					if(st!=null)
					{
						String a01="select * from Student where Sno=\'"+s1+"\'";
						//查询是否有与该学号对应的学生
						rs=st.executeQuery(a01);
						if(rs.next())
						{
							String a02="select * from Course where Cno=\'"+s2+"\'";
							rs=st.executeQuery(a02);
							if(rs.next())     //查询是否有与该课序号对应的课程信息
							{
								String a0="select * from SC where Sno=\'"+s1+"\' and Cno=\'"+s2+"\'";
								rs=st.executeQuery(a0);
								if(rs.next())     //查询该学生是否选修了该课程
								{
									//先删除对应的信息
									String a1="delete from SC  where Sno=\'"+s1+"\' and Cno=\'"+s2+"\'";
									int b1=st.executeUpdate(a1);
									if(b1!=0)
									{
										int p=Chack(s3);   //检测成绩输入是否在合法范围内
										if(p==1)
										{
											//重新插入信息
											String a2="insert into SC (Sno,Cno,Grade)  values (\'" + s1 +"\',\'"+ s2 +"\',\'" +s3+"\')" ;
											int b2=st.executeUpdate(a2);
											if(b2!=0)
											{
												JOptionPane.showMessageDialog(this, "修改成功!");
												new Teacher();
												dispose();
											}
											else
											{
												String a00="步骤二错误,修改失败";
												tx4.setText(a00);
											}
										}
										else
											JOptionPane.showMessageDialog(this,"学生成绩应在0至100分,请输入正确的学生信息!!");
									}
									else
									{
										String a00="步骤一错误,修改失败";
										tx4.setText(a00);
									}
								}
								else
								{
									JOptionPane.showMessageDialog(this, "该学生没有选修该课程,修改失败!");
								}
							}
							else
							{
								JOptionPane.showMessageDialog(this, "该课程不存在,修改失败!");
							}
						}
						else
						{
							JOptionPane.showMessageDialog(this, "该学生不存在,修改失败!");
						}
					}
					else
					{
						JOptionPane.showMessageDialog(this, "数据库连接失败!");
					}
				} 
				catch (SQLException e2)
				{
					e2.printStackTrace();
				}
			}
		}
	     if(e.getSource()==jb1)
		{
			tx1.setText(null);
			tx2.setText(null);
			tx3.setText(null);
		}
	}
	
	public int Chack(String Grade)   //检测成绩输入是否在合法范围内
	{
		int  i=Integer.valueOf(Grade);
		if(i>=0&&i<=100)
			return 1;
		else
			return 0;
	}
	
//     public static void main(String[] args) {	new  Change_Grade();	}
	
}


修改密码 Change_code

在这里插入图片描述
这里有多重判断,具体描述详见我之前的博客,这里就不多说了。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.sql.*;

public class Change_code extends JFrame implements ActionListener
{
	Statement st;
	
	private TextField tx1,tx2,tx3,tx4;
	private JButton jbt1;
	
	private static final long serialVersionUID = 1L;

	public Change_code()
	{
		super("密码修改");
		this.setBounds(610,250,320,120);
		this.setBackground(Color.lightGray);
		this.setLayout(new GridLayout(4,2));
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		this.setVisible(true);
		this.addWindowListener(new WinClose());
		
		//第一行
		this.add(new Label("原密码",Label.CENTER));
		this.tx1=new TextField(15);
		this.add(this.tx1);
		//第二行
		this.add(new Label("新密码",Label.CENTER));
		this.tx2=new TextField(15);
		this.add(this.tx2);
		//第三行
		this.add(new Label("再次输入新密码",Label.CENTER));
		this.tx3=new TextField(15);
		this.add(this.tx3);
		//第四行
		this.tx4=new TextField(15);
		this.add(this.tx4);
		tx4.setEnabled(false);
		this.jbt1 =new JButton("确定") ;
		this.add(this.jbt1);
		this.jbt1.addActionListener(this );
	}
	
	public void actionPerformed(ActionEvent e)
	{
		String s1=tx1.getText();
		String s2=tx2.getText();
		String s3=tx3.getText();
		
		if(s1.length()<=0||s2.length()<=0||s3.length()<=0)
		{
			JOptionPane.showMessageDialog(this,"输入不能有空值,请检查输入!");
		}
		else
		{
			if(e.getSource()==jbt1)
			{
				try 
				{
					st=Connect.doConnect();
					int p=Login.a;
					String s = null;
					int x=s1.compareTo(Login.s2);     //检验原密码与登录密码是否相同
					if(x==0)    
					{
						int y=s1.compareTo(s2);     //检验新密码与原密码是否相同
						if(y==0)
						{
							JOptionPane.showMessageDialog(this,"原密码与新密码不能相同,请重新输入!");
							tx2.setText(null);
						}
						else 
						{
							int z=s2.compareTo(s3);     //检验两次输入的新密码是否相同
							if(z!=0)
							{
								JOptionPane.showMessageDialog(this,"两次输入的密码不一致,请重新输入!");
								tx3.setText(null);
							}
							else 
							{
								if(p==1)     //修改学生密码
								{
									s="update Student  set Scode=\'"+s2+"\'  where Sno=\'"+Login.s1+"\'";
								}
								else if(p==2) //修改教师密码
								{
									s="update Teacher  set Tcode=\'"+s2+"\'  where Tno=\'"+Login.s1+"\'";
								}
								int q=st.executeUpdate(s);
								if(q!=0)
								{
									JOptionPane.showMessageDialog(this,"更改成功,请重新登录!");
									new Login();
									dispose();
								}
								else 
								{
									JOptionPane.showMessageDialog(this,"更改失败,请重试!");
								}
							}
						}
					}
					else 
					{
						JOptionPane.showMessageDialog(this,"原密码输入错误,请检查输入!");
					}
				}
				catch (SQLException e2) 
				{
					e2.printStackTrace();
				}
			}
		}
	}
	
	//public static void main(String[] args) {new Change_code();	}
}

还有最后一个,

WinClose

这个是使用界面关闭相应操作时系统需要生成的

import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

public class WinClose implements WindowListener {

	@Override
	public void windowOpened(WindowEvent e) {
		// TODO Auto-generated method stub

	}

	@Override
	public void windowClosing(WindowEvent e) {
		// TODO Auto-generated method stub

	}

	@Override
	public void windowClosed(WindowEvent e) {
		// TODO Auto-generated method stub

	}

	@Override
	public void windowIconified(WindowEvent e) {
		// TODO Auto-generated method stub

	}

	@Override
	public void windowDeiconified(WindowEvent e) {
		// TODO Auto-generated method stub

	}

	@Override
	public void windowActivated(WindowEvent e) {
		// TODO Auto-generated method stub

	}

	@Override
	public void windowDeactivated(WindowEvent e) {
		// TODO Auto-generated method stub

	}

}

OK

以上就是我此次数据库大作业1.x 所有的代码了。
终于完成大作业了,开心。
在这里插入图片描述
代码有很多不太完善的地方,我也是知道的,比如有的类里面多重的 if-else 语句。还有一些重复代码。也可能有很多我没想到的bug。所以希望各位读者能不吝赐教,有什么问题或者新的想法一起交流。

关于这次实验的实验报告我已经正在写了,再录一段程序讲解视频,这次大作业就算是圆满完成了。

等实验报告和讲解视频完成我也会将链接放在这里。
所以,诸位,再会喽~~

程序的源文件 链接:百度网盘 提取码:a2z3

程序视频讲解 链接 :数据库作业:学生信息管理系统

实验报告 链接:百度网盘 提取码:avlb

数据库文件 链接:百度网盘 提取码:1w9a

注意:更改学生成绩的Change_Grade类有更新,上面的代码我更新了,源文件没有,如果有使用的话请注意一下。

哦,对了,差点忘说,我的作业代码和其中的操作是根据我的数据库设置而来的,所以如果你的设置和我不同的话,呃——好吧,你们都懂的。
然后就是我的数据库设置我在视频讲解的时候会说,还有就是看完视频的时候,感觉还好的话,可以给我点个赞。
在这里插入图片描述

  • 124
    点赞
  • 283
    收藏
    觉得还不错? 一键收藏
  • 30
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值