天天看點

肯德基點餐收銀系統(java GUI實作)

1.系統介紹

同學們應該都去麥當勞或肯德基吃過快餐吧?請同學們參考肯德基官網的資訊模拟肯德基快餐店的收銀系統,合理使用C++/python/Java,結合設計模式(2種以上)至少實作系統的以下功能:

1.正常餐品結算和找零。

2.基本套餐結算和找零。

3.使用優惠劵購買餐品結算和找零。

4.可在一定時間段參與店内活動(自行設計或參考官網資訊)。

5.模拟列印發票的功能(寫到檔案中)。

2.系統設計

1.界面設計

采用java的Gui實作簡單的界面布局,界面上主要是圖檔和資料的顯示.我大多采用的是BorderLayout布局的方式,然後設定每個方位的大小.界面就很快做出來了.

界面截圖:

肯德基點餐收銀系統(java GUI實作)

發票資訊截圖:

肯德基點餐收銀系統(java GUI實作)

2.背景設計

采用了抽象工廠模式和政策模式設計餐品的建立.

肯德基點餐收銀系統(java GUI實作)

3.主要源代碼

主界面:

package view;

import javax.swing.*;
import javax.swing.border.TitledBorder;
import java.awt.*;

public class MenuPanel extends JPanel {
    private JButton button1,button3,sure,canel,select;
    private JPanel panel01, panel02 ,panel03,panel04,panel05,panel;
    private JTable table;
    private JButton []btuIcon= new JButton[8];
    //充值區域
    private JLabel name,account,lastmoney,rechange;
    JTextField namef,accountf, passwordf,rechangef;
    private JMenuBar menuBar;
    private   JMenu menu1,menu2,menu3;
    public static int menuType=1;
    private Object a[][]=new Object[100][4];
    private Object th[]={"商品名稱","金額","數量","操作"};

    public MenuPanel(){
        init();
        layOut();
        add();
    }
    public void init(){

        panel02 =new JPanel();
        panel02.setBorder(new TitledBorder("結算"));
        panel01 =new JPanel();

        panel03=new JPanel();
        panel03.setBorder(new TitledBorder(""));

        panel04=new JPanel();
        panel04.setBorder(new TitledBorder(""));
        panel05=new JPanel();
        panel05.setBorder(new TitledBorder("充值"));
        panel=new JPanel();
        panel.setBorder(new TitledBorder(""));


        //結算區域
        table=new JTable(a,th);
        table.setFont(new Font("Dialog", 1, 20));
        table.setBounds(0,0,100,100);
        table.setRowHeight(30);

        button1=new JButton("結賬");
        button1.setSize(100,60);
        button1.addActionListener(new SettleCountsListener(table));
        button3=new JButton("删除");
        button3.setBounds(300,10,100,50);


//菜單欄
        menuBar=new JMenuBar();
        menu1=new JMenu("當季主打");
        menu1.setSelected(true);
        menu2=new JMenu("童書套餐");
        menu3=new JMenu("人氣明星餐");

        menu1.addMenuListener(new MenusListener(btuIcon,1));
        menu2.addMenuListener(new MenusListener(btuIcon,2));
        menu3.addMenuListener(new MenusListener(btuIcon,3));
        //套餐區域
        for(int i=0;i<8;i++) {
            btuIcon[i]=new JButton("套餐"+(i+1));
            //添加套餐按鈕事件
            if(menu1.isSelected()){
                btuIcon[i].addActionListener(new TaocanListener(i,table));
            }
            else if(menu2.isSelected()){
                btuIcon[i].addActionListener(new TaocanListener(i,table));
            }
            else if(menu3.isSelected()){
                btuIcon[i].addActionListener(new TaocanListener(i,table));
            }
            ImageIcon icon = new ImageIcon("src/images/d"+(i+1)+".png");
            btuIcon[i].setIcon(icon);
        }



        //充值區域
        name=new JLabel("姓名:");
        name.setFont(new Font("Dialog", 1, 20));
        name.setBounds(50,20,50,50);
        namef=new JTextField();
        namef.setBounds(120,30,200,35);
        account=new JLabel("賬号:");
        account.setFont(new Font("Dialog", 1, 20));
        account.setBounds(50,70,50,50);
        accountf=new JTextField();
        accountf.setBounds(120,80,200,35);
        lastmoney=new JLabel("密碼:");
        lastmoney.setFont(new Font("Dialog", 1, 20));
        lastmoney.setBounds(50,120,50,50);
        passwordf =new JTextField();
        passwordf.setBounds(120,130,200,35);
        rechange= new JLabel("充值:");
        rechange.setFont(new Font("Dialog", 1, 20));
        rechange.setBounds(50,170,50,50);
        rechangef=new JTextField("0.0");
        rechangef.setBounds(120,180,200,35);

        sure=new JButton("确定充值");
        sure.setBounds(40,235,100,40);
        canel=new JButton("取消充值");
        canel.setBounds(300,235,100,40);
        select=new JButton("查詢餘額");
        select.setBounds(400,150,100,40);
        sure.addActionListener(new RechangeListener(this,1));
        canel.addActionListener(new RechangeListener(this,2));
        select.addActionListener(new RechangeListener(this,3));



    }
    public void add(){
        //添加面闆
        this.add(panel,BorderLayout.CENTER);
        this.add(panel02,BorderLayout.WEST);
        //panel02添加元件, 添加table元件(滾動條方式添加),放在panel01的north方位
        panel02.setLayout(new GridLayout(2,1));


        //左側欄添加按鈕
        panel02.add(new JScrollPane(table));
        panel02.add(panel03);
        panel03.add(button3);
        panel03.add(button1);

        //
        panel.setLayout(new BorderLayout());
        menuBar.add(menu1);

        menuBar.add(menu2);
        menuBar.add(menu3);
        panel.add(menuBar,BorderLayout.NORTH);
        panel.add(panel01,BorderLayout.CENTER);
        panel01.setLayout(new BorderLayout());
        panel04.setPreferredSize(new Dimension(225,450));
        panel01.add(panel04,BorderLayout.NORTH);
        panel01.add(panel05,BorderLayout.CENTER);



        //選購區域
        panel04.setLayout(new GridLayout(2,4));
        for(int i=0;i<8;i++) {
            panel04.add(btuIcon[i]);
        }

        //充值區域
        panel05.setLayout(null);
        panel05.add(name);
        panel05.add(namef);
        panel05.add(account);
        panel05.add(accountf);
        panel05.add(lastmoney);
        panel05.add(passwordf);
        panel05.add(rechange);
        panel05.add(rechangef);
        panel05.add(sure);
        panel05.add(canel);
        panel05.add(select);

    }
    public void layOut(){
        this.setLayout(new BorderLayout());
    }
}

           

抽象工廠:

參考這個java抽象工廠實作kfc點餐連結,介紹的很詳細.