电子商务代码
效果图
建议拿来自己改一下,图片地址,框框大小都有,还有大量的注释提醒你这个参数是干嘛的,考试雷同就怪自己吧。
使用流程
先在登录框中输入账户密码,点击登录
登录后凯撒加密第一个框就会出现账户和密码,格式为 账户:密码
第二个框中输入秘钥(自定义,随便输入,加密解密保持一致即可)
点击加密按钮 -> 加密结果会在第三个框中出现
登录框 Login
,项目在这个类中运行的
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class Login extends JFrame {
//修改登录框的大小,默认400, 250,考试时就改成比较合适大小的
static final int HEIGHT=400,WIDTH=250;
//修改凯撒加密解密框的大小,默认400, 250,考试时就改成比较合适大小的
static final int HEIGHT_KENSA=400,WIDTH_KENSA=350;
//背录图片的路径。(相对路径或者绝对路径。本例图片放于"java项目名”的文件下)
static String path = "改成你的图片地址";//登录的背景图
static String path2 = "改成你的图片地址";//加密的背景图
static String str; //明文or密文,无需修改
static int key; //用于存储明秘钥,无需修改
static JTextField text_str; //用于存储 明文or密文,无需修改
public static void main(String[] args) {
Login login = new Login();
login.initUI();//初始化登录界面
login.iniFocusevent();//初始化登录界面
}
/**
* 初始化登录界面
*/
private void initUI() {
JFrame frame = new JFrame();
frame.setTitle("Login");
frame.setSize(HEIGHT, WIDTH);
frame.setDefaultCloseOperation(3);
frame.setLocationRelativeTo(null);
frame.setResizable(false);
frame.setFont(new Font("宋体", Font.PLAIN, 14));//设置字体类型,大小为14号,PLAIN为字体类型,可设置为加粗
//实例化布局对象
FlowLayout fl = new FlowLayout(FlowLayout.CENTER, 10, 10);//布局,随便改,能看就行
frame.setLayout(fl);
//设置账户
JLabel labname = new JLabel("账户:");
labname.setFont(new Font("宋体", Font.PLAIN, 14));//设置字体类型,大小为14号,PLAIN为字体类型,可设置为加粗
frame.add(labname);
JTextField text_name = new JTextField();
Dimension dim1 = new Dimension(300, 30);
text_name.setPreferredSize(dim1);
frame.add(text_name);
//设置密码
JLabel labpass = new JLabel("密码:");
labpass.setFont(new Font("宋体", Font.PLAIN, 14));//设置字体类型,大小为14号,PLAIN为字体类型,可设置为加粗
frame.add(labpass);
JPasswordField text_password = new JPasswordField();
text_password.setPreferredSize(dim1);
frame.add(text_password);
//设置图片
ImageIcon background = new ImageIcon(path);//设置图片
JLabel label = new JLabel(background);//把背景圆片显示在一个标签玉面
label.setBounds(0,0, frame.getWidth(), frame.getHeight());//
//把标签的大小位置设置为图片刚好填充委个面板
JPanel imagePanel = (JPanel) frame.getContentPane();//把内容窗格转化为JPanel.否则不能用方法setOpaque()
imagePanel.setOpaque(false);
frame.getLayeredPane().add(label, new Integer(Integer.MIN_VALUE));//把景国片器加到分层窗格的最高层作为
label.setBounds(0,0,500,158);
//设置登录按钮
JButton button1 = new JButton();
Dimension dim2 = new Dimension(100, 30);
button1.setText("登录");
button1.setFont(new Font("宋体", Font.PLAIN, 14));
button1.setSize(dim2);
frame.add(button1);
frame.setVisible(true);
//设置登录逻辑
button1.addActionListener(new LoginListener(frame,text_name,text_password));
//处理账户密码,进行账户密码的加密
button1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String text = text_name.getText();
String passwordText = text_password.getText();
str = text+":"+passwordText;//赋值给它
text_str.setText(str);//给text_str复制
}
});
}
/**
* 初始化加密解密界面
*/
private static void iniFocusevent() {
JFrame frame = new JFrame();
frame.setTitle("凯撒加密解密");
frame.setSize(HEIGHT_KENSA, WIDTH_KENSA);
frame.setDefaultCloseOperation(3);
frame.setLocationRelativeTo(null);
frame.setResizable(false);
frame.setFont(new Font("宋体", Font.PLAIN, 14));
//实例化布局对象
FlowLayout fl = new FlowLayout(FlowLayout.LEADING, 20, 20);
frame.setLayout(fl);
//设置账户
JLabel labname = new JLabel("请输入明文/密文:");
labname.setFont(new Font("宋体", Font.BOLD, 15));
frame.add(labname);
text_str = new JTextField();
Dimension dim1 = new Dimension(300, 30);
text_str.setPreferredSize(dim1);
frame.add(text_str);
//设置密码
JLabel labpass = new JLabel("输入秘钥:");
labpass.setFont(new Font("宋体", Font.BOLD, 15));
frame.add(labpass);
JPasswordField text_password = new JPasswordField();
text_password.setPreferredSize(dim1);
frame.add(text_password);
//设置结果
JLabel labResults= new JLabel("结果为:");
labResults.setFont(new Font("宋体", Font.BOLD, 15));
frame.add(labResults);
JTextField text_Result = new JTextField();
text_Result.setPreferredSize(dim1);
frame.add(text_Result);
//设置图片
ImageIcon background = new ImageIcon(path2);
JLabel label = new JLabel(background);//把背景圆片显示在一个标签玉面
label.setBounds(0,0, frame.getWidth(), frame.getHeight());//
//把标签的大小位置设置为图片刚好填充委个面板
JPanel imagePanel = (JPanel) frame.getContentPane();//把内容窗格转化为JPanel.否则不能用方法setOpaque()
imagePanel.setOpaque(false);
frame.getLayeredPane().add(label, new Integer(Integer.MIN_VALUE));//把景国片器加到分层窗格的最高层作为
label.setBounds(0,0,500,158);
//设置加密按钮
JButton button1 = new JButton();
Dimension dim2 = new Dimension(100, 30);
button1.setText("加密");
button1.setFont(new Font("宋体", Font.PLAIN, 14));
button1.setSize(dim2);
frame.add(button1);
frame.setVisible(true);
//设置加密逻辑
button1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String resu = text_password.getText();
String encryption = Encrypt.Encryption(text_str.getText(), Integer.valueOf(resu));
text_Result.setText(encryption);
}
});
//设置解密按钮
JButton button2 = new JButton();
Dimension dim3 = new Dimension(100, 30);
button2.setText("解密");
button2.setFont(new Font("宋体", Font.PLAIN, 14));
button2.setSize(dim3);
frame.add(button2);
frame.setVisible(true);
//设置解密逻辑
button2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String resu = text_password.getText();
String encryption = Encrypt.Decrypt(text_str.getText(), Integer.valueOf(resu));
text_Result.setText(encryption);
}
});
}
}
用于凯撒加密的,此类是用于凯撒密码的加密和解密的,无需运行,保持跟Login类在同一个包
import java.util.Scanner;
/**
* 凯撒加密
* 此类是用于凯撒密码的加密和解密的,无需运行
*/
public class Encrypt {
//运行测试
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("[A 加密][J 解密],请选择一个");
Scanner c=new Scanner(System.in);// 创建Scanner对象
String s1=c.nextLine();//获取本行的字符串
if(s1.equalsIgnoreCase("A")) {//判断变量s1与A是否相等,忽略大小
System.out.println("请输入明文:");
Scanner sc=new Scanner(System.in);
String s=sc.nextLine();
System.out.println("请输入密钥:");
Scanner sc1=new Scanner(System.in);
int key=sc1.nextInt();//将下一输入项转换成int类型
Encryption(s,key);//调用Encryption方法
}else if(s1.equalsIgnoreCase("J")) {
System.out.println("请输入密文:");
Scanner sc=new Scanner(System.in);
String s=sc.nextLine();
System.out.println("请输入密钥:");
Scanner sc1=new Scanner(System.in);
int key=sc1.nextInt();
Decrypt(s,key);//调用Encryption方法
}
}
/**
* Decrypt 解密
* @param str 密文
* @param n 秘钥
*/
public static String Decrypt(String str, int n) {
// TODO Auto-generated method stub
//解密
int k=Integer.parseInt("-"+n);
String string="";
for(int i=0;i<str.length();i++) {
char c=str.charAt(i);
if(c>='a'&&c<='z')//如果字符串中的某个字符是小写字母
{
c+=k%26;//移动key%26位
if(c<'a')
c+=26;//向左超界
if(c>'z')
c-=26;//向右超界
}else if(c>='A'&&c<='Z')//如果字符串中的某个字符是大写字母
{
c+=k%26;//移动key%26位
if(c<'A')
c+=26;//向左超界
if(c>'Z')
c-=26;//向右超界
}
string +=c;//将解密后的字符连成字符串
}
System.out.println(str+"解密后为:"+string);
return string;
}
/**
* Encryption 加密方法
* @param str 明文
* @param k 秘钥
*/
public static String Encryption(String str, int k) {
// TODO Auto-generated method stub
//加密
String string="";
for(int i=0;i<str.length();i++) {
char c=str.charAt(i);
if(c>='a'&&c<='z')//如果字符串中的某个字符是小写字母
{
c+=k%26;//移动key%26位
if(c<'a')
c+=26;//向左超界
if(c>'z')
c-=26;//向右超界
}else if(c>='A'&&c<='Z')//如果字符串中的某个字符是大写字母
{
c+=k%26;//移动key%26位
if(c<'A')
c+=26;//向左超界
if(c>'Z')
c-=26;//向右超界
}
string +=c;//将解密后的字符连成字符串
}
System.out.println(str+"加密后为:"+string);
return string;
}
}
LoginListener
,用于处理登录的逻辑的,不用修改,无需运行,保持跟Login类在同一个包
package com.smoyui;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.Font;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
/**
* 处理登录的逻辑,当账户为vv,密码为123456时就显示登录成功
* 相关账户密码的参数已经提取出来,可以根据你的需求来变动账户密码
* @author Administrator
*
*/
public class LoginListener implements ActionListener{
private static final String USERNAME = "vv"; //登录的账户
private static final String PASSWORD = "123456";//登录的密码
private javax.swing.JTextField text_name;
private javax.swing.JPasswordField text_password;
private javax.swing.JFrame login;
public LoginListener(javax.swing.JFrame login,javax.swing.JTextField text_name,javax.swing.JPasswordField text_password)
{//获取登录界面、账号密码输入框对象
this.login=login;
this.text_name=text_name;
this.text_password=text_password;
}
int i=3;//3次登录机会
public void actionPerformed(ActionEvent e)
{
Dimension dim2 = new Dimension(100,30);
Dimension dim3 = new Dimension(300,30);
javax.swing.JFrame login2 = new javax.swing.JFrame();
login2.setSize(400,200);
login2.setDefaultCloseOperation(3);
login2.setLocationRelativeTo(null);
login2.setFont(new Font("宋体",Font.PLAIN,14));
javax.swing.JPanel jp1 = new JPanel();
javax.swing.JPanel jp2 = new JPanel();
if(text_name.getText().equals(USERNAME) && text_password.getText().equals(PASSWORD))
{
JLabel message = new JLabel("登陆成功!");
message.setFont(new Font("宋体",Font.PLAIN,14)); //宋体,正常风格,14号字体
message.setPreferredSize(dim3);
jp1.add(message);
login2.add(jp1,BorderLayout.CENTER);
login2.setResizable(false);
login2.setVisible(true);
login.dispose();
}
else if(i>=2)
{
JLabel message = new JLabel("账号或密码错误,您今天还有"+(i-1)+"次机会");
message.setFont(new Font("宋体",Font.PLAIN,14)); //宋体,正常风格,14号字体
message.setPreferredSize(dim3);
//将textName标签添加到窗体上
jp1.add(message);
login2.add(jp1,BorderLayout.CENTER);
JButton close = new JButton("确定");
close.setFont(new Font("宋体",Font.PLAIN,14));
//设置按键大小
close.setSize(dim3);
jp2.add(close);
login2.add(jp2,BorderLayout.SOUTH);
i--;//次数减少
close.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
login2.dispose();
}
});
login2.setResizable(false);
login2.setVisible(true);
}
else if(i == 1)
{
JLabel message = new JLabel("账号已锁定,请明天再试");
message.setFont(new Font("宋体",Font.PLAIN,14)); //宋体,正常风格,14号字体
message.setPreferredSize(dim3);
jp1.add(message);
login2.add(jp1,BorderLayout.CENTER);
JButton close = new JButton("确定");
close.setFont(new Font("宋体",Font.PLAIN,14));
close.setSize(dim3);
jp2.add(close);
login2.add(jp2,BorderLayout.SOUTH);
close.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
login2.dispose();
}
});
login2.setResizable(false);
login2.setVisible(true);
login.dispose();
}
}
}