Java+sql server学生管理系统代码展示

我会先细致的说一下我的界面设计和功能实现以及遇到的问题,然后代码会放到每块的后面展示。

所有界面除了主界面(因为主界面较简单就用了BorderLayout),其余都用的自由布局:

setLayout(null);//自由布局,然后可所以设置组件的位置

setBounds(1, 2, 3, 4);//四个参数分别为横坐标,纵坐标,所占空间的长度,所占空间的宽度

主界面:
主界面我用到了左右分屏(分屏的方式:左右是HORIZONTAL_SPLIT,上下是VERTICAL_SPLIT):

JSplitPane jSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,A,B);
//分屏的方式:左右是HORIZONTAL_SPLIT,上下是VERTICAL_SPLIT

jSplitPane.setDividerLocation(300);//左边占的长度

jSplitPane.setDividerSize(0);//分界线的宽度 设置为0 即不显示出分界线

添加图片:

ImageIcon im =new ImageIcon("C:\\\\Users\\\\小甘同学\\\\Pictures\\\\d.png");//图片地址
JLabel a=new JLabel(im);//添加到JLabel里,然后就可以放到你想放的地方

在这里插入图片描述

package homework;

import java.awt.BorderLayout;//省略咯!!

public class 界面 extends JFrame{
   	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	public 界面() 
	{
    
	setTitle("登录");
	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	this.setSize(600,470);
	this.setLocation(300,120);
	JPanel A=new JPanel();
	A.setBackground(Color.WHITE);
	ImageIcon im =new ImageIcon("C:\\\\Users\\\\小甘同学\\\\Pictures\\\\d.png");
    JLabel a=new JLabel(im);
	A.add(a);
	JPanel B=new JPanel(new BorderLayout());
	B.setBackground(Color.PINK);
    JSplitPane jSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,A,B);//分屏的方式:左右HORIZONTAL_SPLIT,上下VERTICAL_SPLIT
    jSplitPane.setDividerLocation(300);//左边占的长度
    this.add(jSplitPane);
    jSplitPane.setDividerSize(0);//分界线的宽度 设置为0 即不显示出分界线
    A.setBorder(BorderFactory.createLineBorder(Color.BLUE));
    B.setBorder(BorderFactory.createLineBorder(Color.BLUE));
    
    JLabel w=new JLabel(" 我  是 ");
    JButton g=new JButton("管理员");
    
    JPanel G=new JPanel();    
    G.setBackground(Color.PINK);
    G.add(g);
    g.setContentAreaFilled(false);
    
    JButton x=new JButton("学生");
    JPanel X=new JPanel();
    X.add(x);
    X.setBackground(Color.PINK);
    x.setContentAreaFilled(false);
    
    B.add(w,BorderLayout.NORTH);
    w.setHorizontalAlignment(SwingConstants.CENTER);//居中
    w.setPreferredSize(new Dimension(0,150));//宽度150
    w.setFont(new Font("楷体",Font.PLAIN,25));//设置字体的字体,样子,大小	
    B.add(X,BorderLayout.CENTER);
    B.add(G,BorderLayout.SOUTH);
    G.setPreferredSize(new Dimension(0,200));//宽度200
    
    x.addActionListener(new ActionListener()    //监听学生按钮
			{
   

		public void actionPerformed(ActionEvent e)
		{
   
              new XX(); 
		}
			});
    
    g.addActionListener(new ActionListener()   //监听管理员按钮
    		{
   
    	public void actionPerformed(ActionEvent e)
		{
   
              new GG(); 
		}
    		});
    
	}
	
	public static void main(String[] args)
	{
   		
		new 界面().setVisible(true);
	
	}
	
}


学生登陆界面和管理员登陆界面:
两个图标在这里可自取:
在这里插入图片描述
在这里插入图片描述
按钮透明化和背景颜色:

setContentAreaFilled(false);

setBackground(Color.PINK);

在这里插入图片描述
在这里插入图片描述
验证码功能(区分大小写,点击可更换)单独写了个类:

public class ValidCode extends JComponent implements MouseListener {
     	  
    /**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private String code;   
    private int width, height = 40;  
    private int codeLength = 4;  
    private Random random = new Random();  
  
    public ValidCode() {
     
        width = this.codeLength * 16 + (this.codeLength - 1) * 10;  
        setPreferredSize(new Dimension(width, height));  
        setSize(width, height);  
        this.addMouseListener(this);  
        setToolTipText("点击可以更换验证码");  
    }  
  
    public int getCodeLength() {
     
        return codeLength;  
    }  
    
    //设置验证码文字的长度 
    public void setCodeLength(int codeLength) {
     
        if(codeLength < 4) {
     
            this.codeLength = 4;  
        } else {
     
            this.codeLength = codeLength;  
        }  
          
    }  
  
    public String getCode() {
     
        return code;  
    }  
  
    //    产生随机的颜色 
    public Color getRandColor(int min, int max) {
     
        if (min > 255)  
            min = 255;  
        if (max > 255)  
            max = 255;  
        int red = random.nextInt(max - min) + min;  
        int green = random.nextInt(max - min) + min;  
        int blue = random.nextInt(max - min) + min;  
        return new Color(red, green, blue);  
    }  
   
      //  设置验证码具体的字母是什么 
    protected String generateCode() {
     
        char[] codes = new char[this.codeLength];  
        for (int i = 0, len = codes.length; i < len; i++) {
     
            if (random.nextBoolean()) {
     
                codes[i] = (char) (random.nextInt(26) + 65);  
            } else {
     
                codes[i] = (char) (random.nextInt(26) + 97);  
            }  
        }  
        this.code = new String(codes);  
        return this.code;  
    }  
  
    @Override  
    protected void paintComponent(Graphics g) {
     
        super.paintComponent(g);  
        if(this.code == null || this.code.length() != this.codeLength) {
     
            this.code = generateCode();  
        }  
        width = this.codeLength * 16 + (this.codeLength - 1) * 10;  
        super.setSize(width, height);  
        super.setPreferredSize(new Dimension(width, height));  
        Font mFont = new Font("Arial", Font.BOLD | Font.ITALIC, 25);  
        g.setFont(mFont);  
        //绘制出验证码的背景的矩形轮廓  
        Graphics2D g2d = (Graphics2D) g;  
        g2d.setColor(getRandColor(200, 250));  
        g2d.fillRect(0, 0, width, height);  
        g2d.setColor(getRandColor(180, 200));  
        g2d.drawRect(0, 0, width - 1, height - 1);  
        //绘制出验证码背景的线  
        int i = 0, len = 150;  
        for (; i < len; i++) {
     
            int x = random.nextInt(width - 1);  
            int y = random.nextInt(height - 1);  
            int x1 = random.nextInt(width - 10) + 10;  
            int y1 = random.nextInt(height - 4) + 4;  
            g2d.setColor(getRandColor(180, 200));  
            g2d.drawLine(x, y, x1, y1);  
        }  
          
        //绘制出验证码的具体字母  
        i = 0; len = this.codeLength;  
        FontMetrics fm = g2d.getFontMetrics();  
        int base = (height - fm.getHeight())/2 + fm.getAscent();  
        for(;i<len;i++) {
     
            int b = random.nextBoolean() ? 1 : -1;  
            g2d.rotate(random.nextInt(10)*0.01*b);  
            g2d.setColor(getRandColor(20, 130));  
            g2d.drawString(code.charAt(i)+"", 16 * i + 10, base);  
        }  
    }  
  
    //下一个验证码  
    public void nextCode() {
     
        generateCode();  
        repaint();  
    }  
  

因为两个界面基本一样,仅展示学生登陆界面代码:

package homework;

import java.awt.Color;//省略咯!!

public class XX extends JFrame {
   
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private ValidCode vcode = new ValidCode();
	JTextField co;
	static JTextField user;
	JPasswordField pass;
	JButton ok,register;

	public XX()
	{
   
		super("学生登陆");			
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		this.setSize(450,350);	
		this.setLocationRelativeTo(null);
		setVisible(true);			
		
		//将整体设为粉色背景
	    JPanel frame=new JPanel();        
	    frame.setBackground(Color.PINK);
	    this.add(frame);
		
	    //账号、密码所代表的图形
	    Icon login = new ImageIcon("C:\\\\Users\\\\小甘同学\\\\Pictures\\\\1.png");
		JLabel l= new JLabel();
		l.setIcon(login);		
		Icon password = new ImageIcon("C:\\\\Users\\\\小甘同学\\\\Pictures\\\\2.png");		
		JLabel p= new JLabel();
		p.setIcon(password);
		
		JLabel code=new JLabel("验证码");
		code.setFont(new Font("楷体",Font.BOLD,17));
		
		user=new JTextField();
		pass=new JPasswordField();
		co=new JTextField();
		ok=new JButton("登录");
		ok.setContentAreaFilled(false);
		register=new JButton("注册");
		register.setContentAreaFilled(false);
		
		
		l.setBounds(80, 50, 60, 40);
		p.setBounds(80, 100, 60, 40);
		code.setBounds(70, 150, 60, 40);
	    user.setBounds(150, 50, 150, 30);
		pass.setBounds(150, 100, 150, 30);
		co.setBounds(150, 150, 150, 30);
		ok.setBounds(120, 220, 70, 30);
		register.setBounds(250, 220, 70, 30);
		vcode.setBounds(310, 145, 100, 40);
		
		frame.setLayout(null);
		frame.add(l);
		frame.add(p);
		frame.add(code);
		frame.add(user);
		frame.add(pass);
		frame.add(co);
		frame.add(ok);
		frame.add(register);
		frame.add(vcode);
	
	   register.addActionListener(new ActionListener()
			   {
   
			   public void actionPerformed(ActionEvent e)
			   {
   
				   new ZC();
				   closeThis();
			   }
			   });
	
	   ok.addActionListener(new ActionListener()    //监听登录按钮
				{
   

			public void actionPerformed(ActionEvent e)
			{
   
				String jusername=user.getText();
				char s[]=pass.getPassword();
				String jpassword=new String(s);
				String coo=co.getText();
			   
				try {
   
					Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");//加载对应的jdbc驱动
					String url="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=SCHOOL";//配置连接字符串
					String user="sa";//sa超级管理员
					String password="你的密码";//密码
					Connection conn=DriverManager.getConnection(url,user,password);//创建数据库连接对象
					Statement st=conn.createStatement();//创建SQL语句执行对象

					Md5 md5 = new Md5(); 
					String newString = md5.EncoderByMd5(jpassword);
					
				    String  strSQL="(Select * from  dbo.PY where ID='"+jusername+"'And PAWD='"+newString+"' )";
					ResultSet rs=st.executeQuery(strSQL);
												
					if(coo.isEmpty()) {
   
						JOptionPane.showMessageDialog(null, "请输入验证码!","提示消息",JOptionPane.WARNING_MESSAGE);
					}
					else
					{
   
						if(!isValidCodeRight()) {
   
							JOptionPane.showMessageDialog(null, "验证码错误,请重新输入!","提示消息",JOptionPane.WARNING_MESSAGE);
						}
						else {
   
						
						if(rs.next())
					{
   							 				    					
							new PY();	
			    			closeThis();			    
					}	
					
					else
					{
    
						
  • 101
    点赞
  • 439
    收藏
    觉得还不错? 一键收藏
  • 51
    评论
评论 51
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值