伊莉討論區

標題: 飲料交易系統2 折扣功能問題(java) [打印本頁]

作者: h4674156    時間: 2015-12-30 10:56 PM     標題: 飲料交易系統2 折扣功能問題(java)

本帖最後由 h4674156 於 2015-12-31 12:47 AM 編輯

各位前輩們好
小弟目前的問題是如果輸入單項品項數量超過10杯 按下計算會顯示折扣後金額
但是如果多項品項數量如果相加也有超過10杯 也有選擇品項 但按下計算則還是原來單項價格加乘 仍還是原價該怎麼讓它有不同品項抓取數量 也有折扣呢?

以下為程式碼部分




package beverages;

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

public class Shop extends Frame {
        static JFrame jframe = new JFrame();
        static JButton button[] = new JButton[3];
        static JCheckBox jcheckbox[] = new JCheckBox[20];
        static Panel panel;
        static JLabel jlabel[] = new JLabel[100];
        static JTextField jtextfield[] = new JTextField[100];
        static int price[] = new int[20];
        static String titleGUI;

        public static void main(String[] args) {
                // TODO Auto-generated method stub
                Shop test = new Shop();

        }

        public Shop() {
                Container cp = jframe.getContentPane();
                cp.setLayout(null);

                jframe.setBackground(Color.PINK);
                jframe.setSize(760, 320);

                setTitle("飲料選購程式");

                jlabel[99] = new JLabel("勾選飲料種類,並在輸入框杯數,若是您的訂購不足1杯,將以1杯價格計算 金額為");
                jlabel[99].setBounds((jframe.getWidth() / 2) - (430 / 2) - 30, 10, 760, 12);
                cp.add(jlabel[99]);

                jcheckbox[0] = new JCheckBox();
                jtextfield[0] = new JTextField(20);
                price[0] = 25;
                jcheckbox[0].setText("原鄉四季/" + price[0] + "元");
                jtextfield[0].setText("0");
                jcheckbox[0].setFont(new Font("System", Font.BOLD, 18));
                jtextfield[0].setFont(new Font("System", Font.BOLD, 16));
                jcheckbox[0].setBounds(30, 40, 150, 26);
                jtextfield[0].setBounds(180, 40, 60, 26);
                cp.add(jcheckbox[0]);
                cp.add(jtextfield[0]);

                jcheckbox[1] = new JCheckBox();
                jtextfield[1] = new JTextField(20);
                price[1] = 20;
                jcheckbox[1].setText("翡翠綠茶/" + price[1] + "元");
                jtextfield[1].setText("0");
                jcheckbox[1].setFont(new Font("System", Font.BOLD, 18));
                jtextfield[1].setFont(new Font("System", Font.BOLD, 16));
                jcheckbox[1].setBounds(30, 70, 150, 26);
                jtextfield[1].setBounds(180, 70, 60, 26);
                cp.add(jcheckbox[1]);
                cp.add(jtextfield[1]);

                jcheckbox[2] = new JCheckBox();
                jtextfield[2] = new JTextField(20);
                price[2] = 20;
                jcheckbox[2].setText("嚴選高山茶/" + price[2] + "元");
                jtextfield[2].setText("0");
                jcheckbox[2].setFont(new Font("System", Font.BOLD, 16));
                jtextfield[2].setFont(new Font("System", Font.BOLD, 16));
                jcheckbox[2].setBounds(30, 100, 150, 26);
                jtextfield[2].setBounds(180, 100, 60, 26);
                cp.add(jcheckbox[2]);
                cp.add(jtextfield[2]);

                jcheckbox[3] = new JCheckBox();
                jtextfield[3] = new JTextField(20);
                price[3] = 45;
                jcheckbox[3].setText("紅茶拿鐵/" + price[3] + "元");
                jtextfield[3].setText("0");
                jcheckbox[3].setFont(new Font("System", Font.BOLD, 18));
                jtextfield[3].setFont(new Font("System", Font.BOLD, 16));
                jcheckbox[3].setBounds(30, 130, 150, 26);
                jtextfield[3].setBounds(180, 130, 60, 26);
                cp.add(jcheckbox[3]);
                cp.add(jtextfield[3]);

                jcheckbox[4] = new JCheckBox();
                jtextfield[4] = new JTextField(20);
                price[4] = 40;
                jcheckbox[4].setText("錫蘭奶茶/" + price[4] + "元");
                jtextfield[4].setText("0");
                jcheckbox[4].setFont(new Font("System", Font.BOLD, 18));
                jtextfield[4].setFont(new Font("System", Font.BOLD, 16));
                jcheckbox[4].setBounds(30, 160, 150, 26);
                jtextfield[4].setBounds(180, 160, 60, 26);
                cp.add(jcheckbox[4]);
                cp.add(jtextfield[4]);

                jcheckbox[5] = new JCheckBox();
                jtextfield[5] = new JTextField(20);
                price[5] = 40;
                jcheckbox[5].setText("珍珠紅茶/" + price[5] + "元");
                jtextfield[5].setText("0");
                jcheckbox[5].setFont(new Font("System", Font.BOLD, 18));
                jtextfield[5].setFont(new Font("System", Font.BOLD, 16));
                jcheckbox[5].setBounds(30, 190, 150, 26);
                jtextfield[5].setBounds(180, 190, 60, 26);
                cp.add(jcheckbox[5]);
                cp.add(jtextfield[5]);

                jcheckbox[6] = new JCheckBox();
                jtextfield[6] = new JTextField(20);
                price[6] = 40;
                jcheckbox[6].setText("椰果奶茶/" + price[6] + "元");
                jtextfield[6].setText("0");
                jcheckbox[6].setFont(new Font("System", Font.BOLD, 18));
                jtextfield[6].setFont(new Font("System", Font.BOLD, 16));
                jcheckbox[6].setBounds(30, 220, 150, 26);
                jtextfield[6].setBounds(180, 220, 60, 26);
                cp.add(jcheckbox[6]);
                cp.add(jtextfield[6]);

                jcheckbox[7] = new JCheckBox();
                jtextfield[7] = new JTextField(20);
                price[7] = 25;
                jcheckbox[7].setText("茉香綠茶/" + price[7] + "元");
                jtextfield[7].setText("0");
                jcheckbox[7].setFont(new Font("System", Font.BOLD, 18));
                jtextfield[7].setFont(new Font("System", Font.BOLD, 16));
                jcheckbox[7].setBounds(270, 40, 150, 26);
                jtextfield[7].setBounds(420, 40, 60, 26);
                cp.add(jcheckbox[7]);
                cp.add(jtextfield[7]);

                jcheckbox[8] = new JCheckBox();
                jtextfield[8] = new JTextField(20);
                price[8] = 25;
                jcheckbox[8].setText("極品菁茶/" + price[8] + "元");
                jtextfield[8].setText("0");
                jcheckbox[8].setFont(new Font("System", Font.BOLD, 18));
                jtextfield[8].setFont(new Font("System", Font.BOLD, 16));
                jcheckbox[8].setBounds(270, 70, 150, 26);
                jtextfield[8].setBounds(420, 70, 60, 26);
                cp.add(jcheckbox[8]);
                cp.add(jtextfield[8]);

                jcheckbox[9] = new JCheckBox();
                jtextfield[9] = new JTextField(20);
                price[9] = 20;
                jcheckbox[9].setText("特選苔洱/" + price[9] + "元");
                jtextfield[9].setText("0");
                jcheckbox[9].setFont(new Font("System", Font.BOLD, 18));
                jtextfield[9].setFont(new Font("System", Font.BOLD, 16));
                jcheckbox[9].setBounds(270, 100, 150, 26);
                jtextfield[9].setBounds(420, 100, 60, 26);
                cp.add(jcheckbox[9]);
                cp.add(jtextfield[9]);

                jcheckbox[10] = new JCheckBox();
                jtextfield[10] = new JTextField(20);
                price[10] = 45;
                jcheckbox[10].setText("優鮮冬瓜/" + price[10] + "元");
                jtextfield[10].setText("0");
                jcheckbox[10].setFont(new Font("System", Font.BOLD, 18));
                jtextfield[10].setFont(new Font("System", Font.BOLD, 16));
                jcheckbox[10].setBounds(270, 130, 150, 26);
                jtextfield[10].setBounds(420, 130, 60, 26);
                cp.add(jcheckbox[10]);
                cp.add(jtextfield[10]);

                jcheckbox[11] = new JCheckBox();
                jtextfield[11] = new JTextField(20);
                price[11] = 40;
                jcheckbox[11].setText("茉香奶綠/" + price[11] + "元");
                jtextfield[11].setText("0");
                jcheckbox[11].setFont(new Font("System", Font.BOLD, 18));
                jtextfield[11].setFont(new Font("System", Font.BOLD, 16));
                jcheckbox[11].setBounds(270, 160, 150, 26);
                jtextfield[11].setBounds(420, 160, 60, 26);
                cp.add(jcheckbox[11]);
                cp.add(jtextfield[11]);

                jcheckbox[12] = new JCheckBox();
                jtextfield[12] = new JTextField(20);
                price[12] = 40;
                jcheckbox[12].setText("粉圓奶茶/" + price[12] + "元");
                jtextfield[12].setText("0");
                jcheckbox[12].setFont(new Font("System", Font.BOLD, 18));
                jtextfield[12].setFont(new Font("System", Font.BOLD, 16));
                jcheckbox[12].setBounds(270, 190, 150, 26);
                jtextfield[12].setBounds(420, 190, 60, 26);
                cp.add(jcheckbox[12]);
                cp.add(jtextfield[12]);

                jcheckbox[13] = new JCheckBox();
                jtextfield[13] = new JTextField(20);
                price[13] = 50;
                jcheckbox[13].setText("蜜蜂奶茶/" + price[13] + "元");
                jtextfield[13].setText("0");
                jcheckbox[13].setFont(new Font("System", Font.BOLD, 18));
                jtextfield[13].setFont(new Font("System", Font.BOLD, 16));
                jcheckbox[13].setBounds(270, 220, 150, 26);
                jtextfield[13].setBounds(420, 220, 60, 26);
                cp.add(jcheckbox[13]);
                cp.add(jtextfield[13]);

                jcheckbox[14] = new JCheckBox();
                jtextfield[14] = new JTextField(20);
                price[14] = 20;
                jcheckbox[14].setText("烏龍綠茶/" + price[14] + "元");
                jtextfield[14].setText("0");
                jcheckbox[14].setFont(new Font("System", Font.BOLD, 18));
                jtextfield[14].setFont(new Font("System", Font.BOLD, 16));
                jcheckbox[14].setBounds(510, 40, 150, 26);
                jtextfield[14].setBounds(660, 40, 60, 26);
                cp.add(jcheckbox[14]);
                cp.add(jtextfield[14]);

                jcheckbox[15] = new JCheckBox();
                jtextfield[15] = new JTextField(20);
                price[15] = 20;
                jcheckbox[15].setText("錫蘭紅茶/" + price[15] + "元");
                jtextfield[15].setText("0");
                jcheckbox[15].setFont(new Font("System", Font.BOLD, 18));
                jtextfield[15].setFont(new Font("System", Font.BOLD, 16));
                jcheckbox[15].setBounds(510, 70, 150, 26);
                jtextfield[15].setBounds(660, 70, 60, 26);
                cp.add(jcheckbox[15]);
                cp.add(jtextfield[15]);

                jcheckbox[16] = new JCheckBox();
                jtextfield[16] = new JTextField(20);
                price[16] = 45;
                jcheckbox[16].setText("優鮮高山/" + price[16] + "元");
                jtextfield[16].setText("0");
                jcheckbox[16].setFont(new Font("System", Font.BOLD, 18));
                jtextfield[16].setFont(new Font("System", Font.BOLD, 16));
                jcheckbox[16].setBounds(510, 100, 150, 26);
                jtextfield[16].setBounds(660, 100, 60, 26);
                cp.add(jcheckbox[16]);
                cp.add(jtextfield[16]);

                jcheckbox[17] = new JCheckBox();
                jtextfield[17] = new JTextField(20);
                price[17] = 45;
                jcheckbox[17].setText("豆漿牛奶/" + price[17] + "元");
                jtextfield[17].setText("0");
                jcheckbox[17].setFont(new Font("System", Font.BOLD, 18));
                jtextfield[17].setFont(new Font("System", Font.BOLD, 16));
                jcheckbox[17].setBounds(510, 130, 150, 26);
                jtextfield[17].setBounds(660, 130, 60, 26);
                cp.add(jcheckbox[17]);
                cp.add(jtextfield[17]);

                jcheckbox[18] = new JCheckBox();
                jtextfield[18] = new JTextField(20);
                price[18] = 40;
                jcheckbox[18].setText("烏龍奶茶/" + price[18] + "元");
                jtextfield[18].setText("0");
                jcheckbox[18].setFont(new Font("System", Font.BOLD, 18));
                jtextfield[18].setFont(new Font("System", Font.BOLD, 16));
                jcheckbox[18].setBounds(510, 160, 150, 26);
                jtextfield[18].setBounds(660, 160, 60, 26);
                cp.add(jcheckbox[18]);
                cp.add(jtextfield[18]);

                jcheckbox[19] = new JCheckBox();
                jtextfield[19] = new JTextField(20);
                price[19] = 45;
                jcheckbox[19].setText("布丁奶茶/" + price[19] + "元");
                jtextfield[19].setText("0");
                jcheckbox[19].setFont(new Font("System", Font.BOLD, 18));
                jtextfield[19].setFont(new Font("System", Font.BOLD, 16));
                jcheckbox[19].setBounds(510, 190, 150, 26);
                jtextfield[19].setBounds(660, 190, 60, 26);
                cp.add(jcheckbox[19]);
                cp.add(jtextfield[19]);

                button[0] = new JButton("送出資料");
                button[1] = new JButton("計算");
                button[2] = new JButton("關閉程式");
                button[0].setFont(new Font("System", Font.BOLD, 14));
                button[1].setFont(new Font("System", Font.BOLD, 12));
                button[2].setFont(new Font("System", Font.BOLD, 14));
                button[0].setBounds(485 - 3, 220, 100, 26);
                button[1].setBounds(485 + 100 + 1, 220, 60, 26);
                button[2].setBounds(485 + 100 + 60 + 5, 220, 100, 26);
                cp.add(button[0]);
                cp.add(button[1]);
                cp.add(button[2]);

                button[0].addActionListener((ActionEvent e) -> {
                        boolean n = false;
                        for (int i = 0; i <= 19; i++)
                                if (jcheckbox.isSelected())
                                        n = true;

                        if (n == true)
                                JOptionPane.showMessageDialog(null, "資料已成功送出!", "Message", JOptionPane.PLAIN_MESSAGE);
                        else
                                JOptionPane.showMessageDialog(null, "確認是否有勾選一筆項目", titleGUI, JOptionPane.PLAIN_MESSAGE);

                });
                button[1].addActionListener((ActionEvent e) -> {
                        int s = 0;
                        boolean n = false;
                        for (int i = 0; i <= 19; i++) {
                                if (jcheckbox.isSelected())
                                        try {

                                                if ((Integer.parseInt(jtextfield.getText()) >= 10)) {
                                                        s += price * Integer.parseInt(jtextfield.getText()) * 0.5;
                                                        n = true;
                                                } else {
                                                        s += price * Integer.parseInt(jtextfield.getText());
                                                        n = true;
                                                }
                                        } catch (Exception e1) {
                                                JOptionPane.showMessageDialog(null, "輸入錯誤,請重新輸入數量 ", titleGUI, JOptionPane.PLAIN_MESSAGE);
                                                return;
                                        }
                        }
                        if (n == true)
                                jlabel[99].setText("勾選飲料種類,並在輸入框杯數,若是您的訂購不足1杯,將以1杯價格計算 金額為 " + s);
                        else

                                JOptionPane.showMessageDialog(null, "確認是否有勾選一筆項目", titleGUI, JOptionPane.PLAIN_MESSAGE);
                });
                button[2].addActionListener((ActionEvent e) -> {
                        System.exit(0);
                });
                java.util.Date current = new java.util.Date();
                java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
                String c = sdf.format(current);
                jlabel[98] = new JLabel(c);
                jtextfield[6].setFont(new Font("System", Font.BOLD, 16));
                jlabel[98].setBounds(10, 254, 150, 26);
                cp.add(jlabel[98]);

                jframe.setVisible(true);
                jframe.setResizable(false);
        }

        public static void title(String format) {
                jframe.setFont(new Font("System", Font.PLAIN, 14));

                Font font = jframe.getFont();
                FontMetrics fontmetrics = jframe.getFontMetrics(font);

                int x = fontmetrics.stringWidth("|");
                int y = fontmetrics.stringWidth(" ");
                int z = jframe.getWidth() / 2 - (x / 2);
                int w = z / y;

                String title = "";
                title = String.format("%" + w + "s", title);
                titleGUI = format;
                jframe.setTitle(title + format);
        }
}



作者: www10240mb    時間: 2016-1-2 04:56 PM

有點亂,看不太懂。
是隨便選一項商品10個以上也有打折?Y/N
是隨便選10個以上都有打折?Y/N

假設
椰果奶茶 買 12杯
其他的都各買一杯
你的算法是怎樣的算呢?
作者: h4674156    時間: 2016-1-3 01:48 PM

本帖最後由 h4674156 於 2016-1-3 01:49 PM 編輯
www10240mb 發表於 2016-1-2 04:56 PM
有點亂,看不太懂。
是隨便選一項商品10個以上也有打折?Y/N
是隨便選10個以上都有打折?Y/N

就是假如椰果奶茶買11杯 會做折扣
或者 椰果奶茶買5杯 紅茶買6杯 兩種杯數相加也會有折扣
當然前提是要有選擇下(勾選)才有辦法折扣

作者: www10240mb    時間: 2016-1-3 03:01 PM

看看這個是不是你要的結果!
[attach]112437338[/attach]
[attach]112437339[/attach]
作者: h4674156    時間: 2016-1-6 08:44 PM

本帖最後由 h4674156 於 2016-1-6 11:06 PM 編輯
www10240mb 發表於 2016-1-3 03:01 PM
看看這個是不是你要的結果!

對 那可以再問您
就是怎麼讓它 假如沒有勾選品項 但是有輸入杯數 他會自動勾選checkbox呢?
例如:我想買2杯紅茶 只有在紅茶的杯數那打2 他所對應的checkbox會自動勾選

目前這樣[attach]112485501[/attach]

作者: www10240mb    時間: 2016-1-7 07:14 AM

我照樣拿我的版本修改,因為我之前的以簡單方式寫的,但程式碼會太長。
已有在縮減的原始碼內TEXT有對照你的"目前這樣(原始碼.rar)"進行文字修正了。
新增: 杯數 >= 1,自動勾選該項,若輸入數字以外的數字,顯示錯誤訊息。
修正: 杯數非數字,顯示錯誤訊息。
作者: h4674156    時間: 2016-1-8 01:43 AM

www10240mb 發表於 2016-1-7 07:14 AM
我照樣拿我的版本修改,因為我之前的以簡單方式寫的,但程式碼會太長。
已有在縮減的原始碼內TEXT有對照你 ...

[attach]112502292[/attach]
我使用我的方式 它可以成功執行 但是會跳錯誤...

作者: www10240mb    時間: 2016-1-8 06:54 AM

那是因為我第一開始幫妳寫的版本 我先用Array 長度都設為"99"的關係,二次縮減版本是以明確固定長度,所以你直接將我第二次修的一部分,套用至第一次的能執行,但是長度太多空的,空的沒有new 所以會有錯誤訊息的。
作者: www10240mb    時間: 2016-1-8 06:55 AM

若以上自有打錯請見諒,我打字時,一次打到底 都沒有檢查的。

作者: h4674156    時間: 2016-1-8 02:06 PM

www10240mb 發表於 2016-1-8 06:55 AM
若以上自有打錯請見諒,我打字時,一次打到底 都沒有檢查的。

好的 謝謝前輩
目前問題已經解決
作者: h4674156    時間: 2016-1-9 01:32 AM

www10240mb 發表於 2016-1-8 06:55 AM
若以上自有打錯請見諒,我打字時,一次打到底 都沒有檢查的。

如果再加上功能列 感覺就更像一個小型訂單程式了
作者: www10240mb    時間: 2016-1-9 06:08 AM

恩,但我也只是新手,懂的並不多要+功能表,我就要先學習學習。
作者: www10240mb    時間: 2016-1-9 06:56 AM

我簡單寫了一個 重置 和關閉的 功能表




歡迎光臨 伊莉討論區 (http://a401.file-static.com/) Powered by Discuz!