最近要写一个关于java的实验,实验内容如下:
1.定义一个抽象的银行卡类,含有基本属性,并定义有关的处理方法,且分别定义含有借记卡、信用卡类的方法。并定义一个透支接口,信用卡可以透支。
2设计取款、透支异常。
3.设计一个操作界面,对此进行处理。

总的来说,题目不难,关于操作页面可以使用命令行或者图形界面,这里为了提前学习便进入到图形界面的学习,这里的图形设计起来需要一定的时间,当然在图形设计上面最大的障碍就是如何进行操作,这里就是涉及到了图形的事件响应了,一般来说可以使用监听器来操作

当然本次的UI界面设计得比较一般,对于很多方面没有进行深入的研究,总之,只是桌面开发的入门菜啦!不过在这里还有连接数据库也没有时间设计了,故没有很好的登陆操作,这些也都比较好弄。

入门毕竟是入门了,也不需要讲究太多了,关键去实现响应和监听器的操作

先放图:

登录界面:

JAVA图形界面显示框架 java图形界面设计_java


JAVA图形界面显示框架 java图形界面设计_抽象类_02


JAVA图形界面显示框架 java图形界面设计_基本属性_03

下面所有java文件可以单独写出,不用全部写在Main中。
本次的主函数
Main.java

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

public class Main{
    public static void main(String[] args){
        //loginJFrame f=new loginJFrame();
        try{
            new MainUI();
        }catch(Exception ex){
            ex.printStackTrace();
        }
        
    }                                                         
}

介绍三个类
BankCard.java

abstract class BankCard {
    /*
    基本属性
    */
    String cardNumber;
    String userName;
    String idNumber;
    String password;
    double balance;

    /**
     * 构造方法
     * 这里提供卡号构造、身份号构造方法,注意构造仅是银行卡的生成而非业务内容。
     */
    public BankCard(){}
    BankCard(String cardNumber){
        this.cardNumber=cardNumber;
    }
    BankCard(String idNumber,String uerName){
        this.idNumber=idNumber;
        this.userName=userName;
    }

    /**
     * 常规业务处理方法
     * 设置方法
     * 1.存款 2.取款  3.修改密码
     */
    void  deposit(double balance){
        this.balance+=balance;
    }
    void withdraw(double balance){
        this.balance-=balance;
    }
    void revisePassword(String password){
        this.password=password;
    }

    /**
     * 查询方法
     * 1.查询余额 2.查询密码
     */
    double checkBalance(){
        return balance;
    }
    String checkPassword(){
        return password;
    }

    public String toString(){
        return cardNumber;
    }
}

DebitCard.java

import javax.swing.*;
class getMoneyException extends Exception{
    String s;
    public getMoneyException(){
        s="卡上余额不足";
    }
    public String toString(){
        return s;
    }
}

public class DebitCard extends BankCard{
    /*
    基本属性
    */
    String cardNumber;
    String userName;
    String idNumber;
    String password;
    double balance;

    /**
     * 设置与查询方法同抽象类故不再书写,直接继承了,
     * 但是注意初始化必须要完成,否则会出现错误。
     */
    public DebitCard(){}
    DebitCard(String cardNumber){
        this.cardNumber=cardNumber;
    }
    DebitCard(String idNumber,String uerName){
        this.idNumber=idNumber;
        this.userName=userName;
    }
	
	void  deposit(double balance){
        this.balance+=balance;
    }
    /**
     * 判断取款信息并重写BankCard中取款方法
     * @throws getMoneyException
     */
    void judgeBalance() throws getMoneyException{
        if(this.balance<0) throw new getMoneyException();
    }
    void withdraw(double balance){
        this.balance-=balance;
        try{
            judgeBalance();
        }catch(getMoneyException ex){
            JOptionPane.showMessageDialog(null,
            "余额不足请重新输入,并且取出无效");
            this.balance+=balance;
        }
    }

}

CreditCard.java

import javax.swing.*;
interface Overdraft {
    /**
     * 写透支方法,注意接口普遍默认是抽象类
     * 这里的透支返回一个bool值,默认是不可以透支的
     */
    default boolean isOverdraft(){
        return false;
    }
}

class OverdraftException extends Exception{
    String s;
    public OverdraftException(){
        s="超过最高信用限额(20000万元)";
    }
    public String toString(){
        return s;
    }
}

public class CreditCard extends BankCard implements Overdraft{
    /*
    基本属性
    */
    String cardNumber;
    String userName;
    String idNumber;
    String password;
    double balance;

    /**
     * 设置与查询方法同抽象类故不再书写,直接继承了,
     * 但是注意初始化必须要完成,否则会出现错误。
     */
    public CreditCard(){}
    CreditCard(String cardNumber){
        this.cardNumber=cardNumber;
    }
    CreditCard(String idNumber,String uerName){
        this.idNumber=idNumber;
        this.userName=userName;
    }

    public boolean isOverdraft(){
        return true;
    }
    
    /**
     * 设置透支方法
     */
    void judgeOverdraft() throws OverdraftException{
        if(this.balance>20000) throw new OverdraftException();
    }

    void setOverdraft(double balance) {
        this.balance+=balance;
        try{
            judgeOverdraft();
        }catch(OverdraftException ex){
            JOptionPane.showMessageDialog(null,
            "透支超过2万元,透支无效");
            this.balance+=balance;
        }
    }


}

接着设计UI 界面,这里分为如下的步骤,先是定义总的ui图,就是登陆与注册界面,然后调用按钮的方法并自己重写一个接口,再设计借记卡、信用卡的ui界面。
下面是ui文件:
MainUI.java

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

public class MainUI extends JFrame {
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    final int width = 500;
    final int height = 300;

    private static JTextField utext;
    private static JTextField ptext;

    private static JFrame jf;

    public MainUI(){
        int i=0,j=0;
        JPanel jPanel = new JPanel();
        JPanel jPanelt = new JPanel();
        JButton register = new JButton("登录");
        JButton logon = new JButton("注册");
        JLabel text1 = new JLabel("=欢迎使用银行卡系统=");
        JLabel username = new JLabel("用户名");
        JLabel password = new JLabel("密    码");
        JTextField nametext = new JTextField(15);
        JTextField passtext = new JPasswordField(15);
        JComboBox sel = new JComboBox();


        Box hbox = Box.createHorizontalBox();
        sel.addItem("借记卡");
        sel.addItem("信用卡");
        sel.setSelectedIndex(-1);
        hbox.add(register);
        hbox.add(Box.createHorizontalStrut(50));
        hbox.add(sel);
        hbox.add(Box.createHorizontalStrut(50));
        hbox.add(logon);


        DebitAction user1=new DebitAction();
        CreditAction user2=new CreditAction();

        sel.addItemListener(new ItemListener() {
            @Override
            //下拉框添加监听
            public void itemStateChanged(ItemEvent e) {
                if(e.getStateChange()==ItemEvent.SELECTED)
                {
                    if(sel.getSelectedItem()=="借记卡")
                    {
                        register.removeActionListener(user2);
                        logon.removeActionListener(user2);
                        register.addActionListener(user1);
                        //logon.addActionListener(user1);
                    }
                    if(sel.getSelectedItem()=="信用卡")
                    {
                        register.removeActionListener(user1);
                        logon.removeActionListener(user1);
                        register.addActionListener(user2);
                        logon.addActionListener(user2);
                    }
                }
            }
        });

        Box ubox = Box.createHorizontalBox();
        ubox.add(username);
        ubox.add(Box.createHorizontalStrut(10));
        ubox.add(nametext);

        Box pbox = Box.createHorizontalBox();
        pbox.add(password);
        pbox.add(Box.createHorizontalStrut(10));
        pbox.add(passtext);

        text1.setFont(new Font("宋体",Font.BOLD,15));
        jPanelt.add(text1,BorderLayout.CENTER);

        Box box = Box.createVerticalBox();
        box.add(Box.createVerticalStrut(30));
        box.add(jPanelt);
        box.add(Box.createVerticalStrut(30));
        box.add(ubox);
        box.add(Box.createVerticalStrut(20));
        box.add(pbox);
        box.add(Box.createVerticalStrut(35));
        box.add(hbox);
        jPanel.setBackground(Color.pink);
        jPanel.add(box);

        add(jPanel);
        setTitle("银行卡使用");
        setBounds((screenSize.width-width)/2,(screenSize.height-height)/2,width,height);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setResizable(false);
        setVisible(true);


        utext=nametext;
        ptext=passtext;
        jf=this;
        
    }


    public static JFrame GetMainUI()
    {
        return jf;
    }

    public static JTextField getUtext()
    {
        return utext;
    }

    public static JTextField getPtext()
    {
        return ptext;
    }
}

DebitCardUI.java

import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableModel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

/**
 * 此处是针对于借记卡所言的
 */
public class DebitCardUI extends JFrame{
    public DebitCardUI(){
        JLabel a=new JLabel("存款");
        JLabel b=new JLabel("取款");
        JTextField ta=new JTextField(10);
        JTextField tb=new JTextField(10);
        JButton c=new JButton("查询余额");
        JButton d=new JButton("提交");
        

        DebitCard ac=new DebitCard();

        /**
         * 设置按钮响应,
         */
        d.addActionListener(new ActionListener(){

            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                double m=Double.parseDouble(ta.getText());double ct=Double.parseDouble(tb.getText());
                ac.deposit(m);
                ac.withdraw(ct);
            }
        });

        /**
         * 查询按钮并且打出提示框
         */
        c.addActionListener(new ActionListener(){

            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                String s=Double.toString(ac.balance);
                JOptionPane.showMessageDialog(null,
							s);
							
            }

        });

        JPanel ja=new JPanel();
        ja.add(a);ja.add(ta);
        ja.add(b);ja.add(tb);
        ja.add(c);
        ja.add(d);
        //ja.add(c);ja.add(tc);
        add(ja);
        setSize(500,300);
        setVisible(true);
    }
}

CreditCardUI.java

import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableModel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

/**
 * 此处是针对于信用卡所言的
 */
public class CreditCardUI extends JFrame{
    public CreditCardUI(){
        JLabel a=new JLabel("存款");
        JLabel b=new JLabel("透支");
        JTextField ta=new JTextField(10);
        JTextField tb=new JTextField(10);
        JButton c=new JButton("查询余额");
        JButton d=new JButton("提交");
        

        CreditCard ac=new CreditCard();

        /**
         * 设置按钮响应,
         */
        d.addActionListener(new ActionListener(){

            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                double m=Double.parseDouble(ta.getText());double ct=Double.parseDouble(tb.getText());
                ac.deposit(m);
                ac.setOverdraft(ct);
            }
        });

        /**
         * 查询按钮并且打出提示框
         */
        c.addActionListener(new ActionListener(){

            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                String s=Double.toString(ac.balance);
                JOptionPane.showMessageDialog(null,
							s);
							
            }

        });

        JPanel ja=new JPanel();
        ja.add(a);ja.add(ta);
        ja.add(b);ja.add(tb);
        ja.add(c);
        ja.add(d);
        //ja.add(c);ja.add(tc);
        add(ja);
        setSize(500,300);
        setVisible(true);
    }
}

调用ActionListener方法
CreditCardAction.java

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;

public class CreditAction implements ActionListener {

    @Override
    public void actionPerformed(ActionEvent actionEvent) {
        // TODO Auto-generated method stub
        if(actionEvent.getActionCommand()=="登录"){
            new CreditCardUI();
            //MainUI.GetMainUI().dispose();
            //return;
        }
    }
    
}

DebitAction.java

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


public class DebitAction implements ActionListener {
    @Override
    public void actionPerformed(ActionEvent actionEvent) {
        // TODO Auto-generated method 
        if(actionEvent.getActionCommand()=="登录"){
            new DebitCardUI();
            //MainUI.GetMainUI().dispose();
            //return;
        }
    }
}