大作業—JAVAGUI實現數據庫管理系統(5)

這次把登錄註冊界面都完善好了(我舉得蠻可愛hh)(跟第一次的界面完全不一樣了🤔)
增添了驗證碼功能、密碼MD5加密和上傳照片功能
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
驗證碼單獨寫了個類,這個大小寫也得區別(emmm雖然是問的度娘但是我也研究了半天😱)

import java.awt.Color;  
import java.awt.Dimension;  
import java.awt.Font;  
import java.awt.FontMetrics;  
import java.awt.Graphics;  
import java.awt.Graphics2D;  
import java.awt.event.MouseEvent;  
import java.awt.event.MouseListener;  
 
import java.util.Random;  

import javax.swing.JComponent;  

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();  
    }  
  
    @Override  
    public void mouseClicked(MouseEvent e) {  
          
        nextCode();  
    }  
  
    @Override  
    public void mousePressed(MouseEvent e) {  
        // TODO Auto-generated method stub  
          
    }  
  
    @Override  
    public void mouseReleased(MouseEvent e) {  
        // TODO Auto-generated method stub  
          
    }  
  
    @Override  
    public void mouseEntered(MouseEvent e) {  
        // TODO Auto-generated method stub  
          
    }  
  
    @Override  
    public void mouseExited(MouseEvent e) {  
        // TODO Auto-generated method stub  
          
    }  
}  

MD5加密方法

public void encrypByMd5(String context) {
	        try {
	            MessageDigest md = MessageDigest.getInstance("MD5");
	            md.update(context.getBytes());//update處理  
	            byte [] encryContext = md.digest();//調用該方法完成計算  
	 
	            int i;  
	            StringBuffer buf = new StringBuffer("");  
	            for (int offset = 0; offset < encryContext.length; offset++) {//做相應的轉化(十六進制)
	                i = encryContext[offset];  
	                if (i < 0) i += 256;  
	                if (i < 16) buf.append("0");  
	                buf.append(Integer.toHexString(i));  
	           }  
	           System.out.println("32result: " + buf.toString());// 32位的加密
	        } catch (NoSuchAlgorithmException e) {  
	            // TODO Auto-generated catch block  
	            e.printStackTrace();  
	        }  
	    } 

那個管理員和學生界面還沒寫好呢明天接着寫!
我覺得我下週就可以完成了嘎嘎嘎嘎(上週的flag這周存檔了,下週再讀檔😁)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章